Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
[mc] Replace frame->frame (frame *name*) by frame->subprogram (dw_type_t)
authorGabriel Corona <gabriel.corona@loria.fr>
Mon, 24 Mar 2014 11:37:33 +0000 (12:37 +0100)
committerGabriel Corona <gabriel.corona@loria.fr>
Mon, 24 Mar 2014 11:37:33 +0000 (12:37 +0100)
src/mc/mc_checkpoint.c
src/mc/mc_compare.c
src/mc/mc_private.h

index dab4199..c57a4f5 100644 (file)
@@ -43,7 +43,6 @@ static void MC_snapshot_stack_free_voidp(void *s){
 }
 
 static void local_variable_free(local_variable_t v){
 }
 
 static void local_variable_free(local_variable_t v){
-  xbt_free(v->frame);
   xbt_free(v->name);
   xbt_free(v);
 }
   xbt_free(v->name);
   xbt_free(v);
 }
@@ -273,7 +272,7 @@ static void mc_fill_local_variables_values(mc_stack_frame_t stack_frame, dw_fram
       region_type = 2;
 
     local_variable_t new_var = xbt_new0(s_local_variable_t, 1);
       region_type = 2;
 
     local_variable_t new_var = xbt_new0(s_local_variable_t, 1);
-    new_var->frame = xbt_strdup(stack_frame->frame_name);
+    new_var->subprogram = stack_frame->frame;
     new_var->ip = stack_frame->ip;
     new_var->name = xbt_strdup(current_variable->name);
     new_var->type = current_variable->type;
     new_var->ip = stack_frame->ip;
     new_var->name = xbt_strdup(current_variable->name);
     new_var->type = current_variable->type;
index 8e51c81..5a6eb58 100644 (file)
@@ -305,14 +305,16 @@ static int compare_local_variables(mc_snapshot_t snapshot1, mc_snapshot_t snapsh
     while(cursor < xbt_dynar_length(stack1->local_variables)){
       current_var1 = (local_variable_t)xbt_dynar_get_as(stack1->local_variables, cursor, local_variable_t);
       current_var2 = (local_variable_t)xbt_dynar_get_as(stack2->local_variables, cursor, local_variable_t);
     while(cursor < xbt_dynar_length(stack1->local_variables)){
       current_var1 = (local_variable_t)xbt_dynar_get_as(stack1->local_variables, cursor, local_variable_t);
       current_var2 = (local_variable_t)xbt_dynar_get_as(stack2->local_variables, cursor, local_variable_t);
-      if(strcmp(current_var1->name, current_var2->name) != 0 || strcmp(current_var1->frame, current_var2->frame) != 0 || current_var1->ip != current_var2->ip){
+      if(strcmp(current_var1->name, current_var2->name) != 0 || current_var1->subprogram != current_var1->subprogram || current_var1->ip != current_var2->ip){
         xbt_dynar_free(&compared_pointers);
         xbt_dynar_free(&compared_pointers);
-        XBT_VERB("Different name of variable (%s - %s) or frame (%s - %s) or ip (%lu - %lu)", current_var1->name, current_var2->name, current_var1->frame, current_var2->frame, current_var1->ip, current_var2->ip);
+        // TODO, fix current_varX->subprogram->name to include name if DW_TAG_inlined_subprogram
+        XBT_VERB("Different name of variable (%s - %s) or frame (%s - %s) or ip (%lu - %lu)", current_var1->name, current_var2->name, current_var1->subprogram->name, current_var2->subprogram->name, current_var1->ip, current_var2->ip);
         return 1;
       }
       offset1 = (char *)current_var1->address - (char *)std_heap;
       offset2 = (char *)current_var2->address - (char *)std_heap;
         return 1;
       }
       offset1 = (char *)current_var1->address - (char *)std_heap;
       offset2 = (char *)current_var2->address - (char *)std_heap;
-      XBT_DEBUG("Compare local variable %s of frame %s", current_var1->name, current_var1->frame);
+      // TODO, fix current_varX->subprogram->name to include name if DW_TAG_inlined_subprogram
+      XBT_DEBUG("Compare local variable %s of frame %s", current_var1->subprogram->name, current_var1->subprogram->name);
 
 
       if(current_var1->region == 1) {
 
 
       if(current_var1->region == 1) {
@@ -323,7 +325,8 @@ static int compare_local_variables(mc_snapshot_t snapshot1, mc_snapshot_t snapsh
         res = compare_areas_with_type( (char *)heap1 + offset1, (char *)heap2 + offset2, snapshot1, snapshot2, subtype, 0, 2, start_data_binary, 0);
       }
       if(res == 1){
         res = compare_areas_with_type( (char *)heap1 + offset1, (char *)heap2 + offset2, snapshot1, snapshot2, subtype, 0, 2, start_data_binary, 0);
       }
       if(res == 1){
-        XBT_VERB("Local variable %s (%p - %p) in frame %s  is different between snapshots", current_var1->name,(char *)heap1 + offset1, (char *)heap2 + offset2, current_var1->frame);
+        // TODO, fix current_varX->subprogram->name to include name if DW_TAG_inlined_subprogram
+        XBT_VERB("Local variable %s (%p - %p) in frame %s  is different between snapshots", current_var1->name,(char *)heap1 + offset1, (char *)heap2 + offset2, current_var1->subprogram->name);
         xbt_dynar_free(&compared_pointers);
         compared_pointers = NULL;
         return res;
         xbt_dynar_free(&compared_pointers);
         compared_pointers = NULL;
         return res;
index 3e24dcf..cbf1f35 100644 (file)
@@ -520,7 +520,7 @@ void* mc_find_frame_base(dw_frame_t frame, unw_cursor_t* unw_cursor);
 /********************************** Miscellaneous **********************************/
 
 typedef struct s_local_variable{
 /********************************** Miscellaneous **********************************/
 
 typedef struct s_local_variable{
-  char *frame;
+  dw_frame_t subprogram;
   unsigned long ip;
   char *name;
   dw_type_t type;
   unsigned long ip;
   char *name;
   dw_type_t type;