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] Fix DW_OP_addr to translate address into virtual address space
[simgrid.git]
/
src
/
mc
/
mc_hash.c
diff --git
a/src/mc/mc_hash.c
b/src/mc/mc_hash.c
index
533548b
..
c4ba6c6
100644
(file)
--- a/
src/mc/mc_hash.c
+++ b/
src/mc/mc_hash.c
@@
-77,6
+77,11
@@
static void mc_hash_value(mc_hash_t* hash, mc_hashing_state* state, mc_object_in
top:
switch(type->type){
top:
switch(type->type){
+
+ // Not relevant, do nothing:
+ case DW_TAG_unspecified_type:
+ return;
+
// Simple case, hash this has binary:
case DW_TAG_base_type:
case DW_TAG_enumeration_type:
// Simple case, hash this has binary:
case DW_TAG_base_type:
case DW_TAG_enumeration_type:
@@
-132,7
+137,8
@@
static void mc_hash_value(mc_hash_t* hash, mc_hashing_state* state, mc_object_in
XBT_DEBUG("Hash struct member %s", member->name);
if(type->subtype==NULL)
return;
XBT_DEBUG("Hash struct member %s", member->name);
if(type->subtype==NULL)
return;
- mc_hash_value(hash, state, info, ((char*)address) + member->offset, type->subtype);
+ void* member_variable = mc_member_resolve(address, type, member, NULL);
+ mc_hash_value(hash, state, info, member_variable, type->subtype);
}
return;
}
}
return;
}
@@
-228,14
+234,15
@@
static void mc_hash_stack_frame(
XBT_DEBUG("Hash local variable %s without type", variable->name);
continue;
}
XBT_DEBUG("Hash local variable %s without type", variable->name);
continue;
}
- if(variable->location
== NULL
) {
+ if(variable->location
s.size == 0
) {
XBT_DEBUG("Hash local variable %s without location", variable->name);
continue;
}
XBT_DEBUG("Hash local variable %s", variable->name);
XBT_DEBUG("Hash local variable %s without location", variable->name);
continue;
}
XBT_DEBUG("Hash local variable %s", variable->name);
- void* variable_address = (void*) MC_dwarf_resolve_location(unw_cursor, variable->location, frame_pointer);
+ void* variable_address = (void*) mc_dwarf_resolve_locations(
+ &variable->locations, variable->object_info, unw_cursor, frame_pointer, NULL);
dw_type_t type = variable->type;
if(type==NULL) {
dw_type_t type = variable->type;
if(type==NULL) {
@@
-245,6
+252,8
@@
static void mc_hash_stack_frame(
mc_hash_value(hash, state, info, variable_address, type);
}
mc_hash_value(hash, state, info, variable_address, type);
}
+
+ // TODO, handle nested scopes
}
static void mc_hash_stack(mc_hash_t *hash, mc_snapshot_stack_t stack, mc_hashing_state* state) {
}
static void mc_hash_stack(mc_hash_t *hash, mc_snapshot_stack_t stack, mc_hashing_state* state) {