Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
[mc] Fix bug when trying to handle DW_OP_regN in MC_dwarf_resolve_location
authorGabriel Corona <gabriel.corona@loria.fr>
Thu, 6 Mar 2014 12:25:38 +0000 (13:25 +0100)
committerGabriel Corona <gabriel.corona@loria.fr>
Thu, 6 Mar 2014 12:25:38 +0000 (13:25 +0100)
MC_dwarf_resolve_location is supposed to return the *address* of a
given variable. However, the DW_OP_regN returned the value of the
register and not an address address of a variable with its content.

It should be possible to get such an addresse (the registers are saved
on the stack) but the feature does not seem to be implemented in
libunwind.

src/mc/mc_dwarf.c

index 618ed29..4f86800 100644 (file)
@@ -468,9 +468,6 @@ Dwarf_Off MC_dwarf_resolve_location(unw_cursor_t* c, dw_location_t location, voi
     }
     dw_location_t location_entry = xbt_dynar_get_as(location->location.compose, 0, dw_location_t);
     switch (location_entry->type){
     }
     dw_location_t location_entry = xbt_dynar_get_as(location->location.compose, 0, dw_location_t);
     switch (location_entry->type){
-    case e_dw_register:
-      unw_get_reg(c, location_entry->location.reg, &res);
-      return res;
     case e_dw_bregister_op:
       unw_get_reg(c, location_entry->location.breg_op.reg, &res);
       return (Dwarf_Off) ((long)res + location_entry->location.breg_op.offset);
     case e_dw_bregister_op:
       unw_get_reg(c, location_entry->location.breg_op.reg, &res);
       return (Dwarf_Off) ((long)res + location_entry->location.breg_op.offset);