Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Merge branch 'mc' into mc-perf
authorGabriel Corona <gabriel.corona@loria.fr>
Mon, 10 Feb 2014 10:15:29 +0000 (11:15 +0100)
committerGabriel Corona <gabriel.corona@loria.fr>
Mon, 10 Feb 2014 10:15:29 +0000 (11:15 +0100)
src/mc/mc_checkpoint.c
src/mc/mc_compare.c
src/mc/mc_dwarf.c

index 968f5ad..dc16dac 100644 (file)
@@ -348,7 +348,7 @@ static xbt_dynar_t MC_get_local_variables_values(void *stack_context){
     xbt_abort();
   }
 
-  unw_word_t ip, sp, off;
+  unw_word_t ip, off;
   dw_frame_t frame;
 
   unsigned int cursor = 0;
@@ -363,7 +363,6 @@ static xbt_dynar_t MC_get_local_variables_values(void *stack_context){
   while(ret >= 0 && !stop){
 
     unw_get_reg(&c, UNW_REG_IP, &ip);
-    unw_get_reg(&c, UNW_REG_SP, &sp);
 
     unw_get_proc_name(&c, frame_name, sizeof (frame_name), &off);
 
index 6918459..40dd903 100644 (file)
@@ -209,14 +209,14 @@ static int compare_areas_with_type(void *area1, void *area2, mc_object_info_t in
       // The pointers are both in the heap:
       if(addr_pointed1 > std_heap && (char *)addr_pointed1 < (char*) std_heap + STD_HEAP_SIZE){
         if(!(addr_pointed2 > std_heap && (char *)addr_pointed2 < (char*) std_heap + STD_HEAP_SIZE))
-          xbt_die("Die");
+          return 1;
         return compare_heap_area(addr_pointed1, addr_pointed2, NULL, info, other_info, type->dw_type_id, pointer_level);
       }
 
       // The pointers are both in the current object R/W segment:
       else if(addr_pointed1 > start_data && (char*)addr_pointed1 <= (char *)start_data + region_size){
         if(!(addr_pointed2 > start_data && (char*)addr_pointed2 <= (char *)start_data + region_size))
-          xbt_die("Die");
+          return 1;
         if(type->dw_type_id == NULL)
           return  (addr_pointed1 != addr_pointed2);
         else
index 3ff5e98..57b348c 100644 (file)
@@ -798,6 +798,8 @@ static dw_location_t MC_dwarf_get_expression(Dwarf_Op* expr,  size_t len) {
   return loc;
 }
 
+static int mc_anonymous_variable_index = 0;
+
 static dw_variable_t MC_die_to_variable(mc_object_info_t info, Dwarf_Die* die, Dwarf_Die* unit, dw_frame_t frame) {
   // Drop declaration:
   if (MC_dwarf_attr_flag(die, DW_AT_declaration, false))
@@ -851,6 +853,12 @@ static dw_variable_t MC_die_to_variable(mc_object_info_t info, Dwarf_Die* die, D
       klass, klass, (void*) variable->dwarf_offset, variable->name);
   }
 
+  // The current code needs a variable name,
+  // generate a fake one:
+  if(!variable->name) {
+    variable->name = bprintf("@anonymous#%i", mc_anonymous_variable_index++);
+  }
+
   return variable;
 }