A
lgorithmique
N
umérique
D
istribuée
Public GIT Repository
projects
/
simgrid.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
[mc] Compute a single hash (64 bits) of the current state
[simgrid.git]
/
src
/
mc
/
mc_dwarf.c
diff --git
a/src/mc/mc_dwarf.c
b/src/mc/mc_dwarf.c
index
c95f51e
..
025f310
100644
(file)
--- 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);
}
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):
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));
}
} 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) {
}
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?
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);
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;
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) {
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;
MC_dwarf_handle_die(info, &die, &die, NULL);
}
offset = next_offset;