static void print_local_variables_values(xbt_dynar_t all_variables);
static void *get_stack_pointer(void *stack_context, void *heap);
+static void snapshot_stack_free(mc_snapshot_stack_t s);
+
static mc_mem_region_t MC_region_new(int type, void *start_addr, size_t size)
{
mc_mem_region_t new_reg = xbt_new0(s_mc_mem_region_t, 1);
for(i=0; i < snapshot->num_reg; i++)
MC_region_destroy(snapshot->regions[i]);
+ xbt_dynar_free(&(snapshot->stacks));
xbt_free(snapshot);
}
int ret;
//char *stack_name;
- char buf[512], frame_name[256];
+ char frame_name[256];
ret = unw_init_local(&c, (unw_context_t *)stack_context);
if(ret < 0){
unw_get_reg(&c, UNW_REG_IP, &ip);
unw_get_reg(&c, UNW_REG_SP, &sp);
- buf[0] = '\0';
- if (unw_get_proc_name (&c, frame_name, sizeof (frame_name), &off) == 0){
- if (off)
- snprintf (buf, sizeof (buf), "<%s+0x%lx>", frame_name, (long) off);
- else
- snprintf (buf, sizeof (buf), "<%s>", frame_name);
-
- }
+ unw_get_proc_name (&c, frame_name, sizeof (frame_name), &off);
- xbt_strbuff_append(variables, bprintf("ip=%-32s\n", buf));
+ xbt_strbuff_append(variables, bprintf("ip=%s\n", frame_name));
frame = xbt_dict_get_or_null(mc_local_variables, frame_name);
}
}
+
+static void snapshot_stack_free(mc_snapshot_stack_t s){
+ if(s){
+ xbt_free(s->local_variables->data);
+ xbt_free(s->local_variables);
+ xbt_free(s);
+ }
+}
+
+void snapshot_stack_free_voidp(void *s){
+ snapshot_stack_free((mc_snapshot_stack_t) * (void **) s);
+}