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:
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;
}
XBT_DEBUG("Hash local variable %s without type", variable->name);
continue;
}
- if(variable->location == NULL) {
+ if(variable->locations.size == 0) {
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, unw_cursor, frame_pointer, NULL);
dw_type_t type = variable->type;
if(type==NULL) {