X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/68e8eda949e1e2a5463a5044dfc96a290d332c0e..c90b9efe8fd4c47f5d4f90b6232bd006f13e8e5c:/src/mc/mc_dwarf.c?ds=sidebyside diff --git a/src/mc/mc_dwarf.c b/src/mc/mc_dwarf.c index c95f51ebcf..025f31058d 100644 --- a/src/mc/mc_dwarf.c +++ b/src/mc/mc_dwarf.c @@ -395,7 +395,7 @@ static uint64_t MC_dwarf_subrange_element_count(Dwarf_Die* die, Dwarf_Die* unit) return MC_dwarf_attr_uint(die, DW_AT_count, 0); } - // Otherwise compute DW_TAG_upper_bound-DW_TAG_lower_bound: + // Otherwise compute DW_TAG_upper_bound-DW_TAG_lower_bound + 1: if (!dwarf_hasattr_integrate(die, DW_AT_upper_bound)) { // This is not really 0, but the code expects this (we do not know): @@ -409,7 +409,7 @@ static uint64_t MC_dwarf_subrange_element_count(Dwarf_Die* die, Dwarf_Die* unit) } else { lower_bound = MC_dwarf_default_lower_bound(dwarf_srclang(unit)); } - return upper_bound - lower_bound; + return upper_bound - lower_bound + 1; } static uint64_t MC_dwarf_array_element_count(Dwarf_Die* die, Dwarf_Die* unit) { @@ -831,7 +831,7 @@ static dw_variable_t MC_die_to_variable(mc_object_info_t info, Dwarf_Die* die, D variable->global = 1; Dwarf_Off offset = expr[0].number; // TODO, Why is this different base on the object? - Dwarf_Off base = strcmp(info->file_name, xbt_binary_name) !=0 ? (Dwarf_Off) info->start_text : 0; + Dwarf_Off base = strcmp(info->file_name, xbt_binary_name) !=0 ? (Dwarf_Off) info->start_exec : 0; variable->address.address = (void*) (base + offset); } else { variable->address.location = MC_dwarf_get_expression(expr, len); @@ -948,7 +948,16 @@ void MC_dwarf_get_variables(mc_object_info_t info) { size_t length; while (dwarf_nextcu (dwarf, offset, &next_offset, &length, NULL, NULL, NULL) == 0) { Dwarf_Die die; + if(dwarf_offdie(dwarf, offset+length, &die)!=NULL) { + + // Skip C++ for now (we will add support for it soon): + int lang = dwarf_srclang(&die); + if((lang==DW_LANG_C_plus_plus) || (lang==DW_LANG_ObjC_plus_plus)) { + offset = next_offset; + continue; + } + MC_dwarf_handle_die(info, &die, &die, NULL); } offset = next_offset;