X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/b40c2e9bf3cf6e8b2fad15594852ce186bf99574..42d8a4dc6763b3a784a72cb6842dfd1f5115d2a0:/src/mc/mc_dwarf.c diff --git a/src/mc/mc_dwarf.c b/src/mc/mc_dwarf.c index c1fd44722d..a5b02e7939 100644 --- a/src/mc/mc_dwarf.c +++ b/src/mc/mc_dwarf.c @@ -1259,6 +1259,51 @@ static void MC_post_process_functions(mc_object_info_t info) } } + +/** \brief Fill/lookup the "subtype" field. + */ +static void MC_resolve_subtype(mc_object_info_t info, dw_type_t type) +{ + + if (type->dw_type_id == NULL) + return; + type->subtype = xbt_dict_get_or_null(info->types, type->dw_type_id); + if (type->subtype == NULL) + return; + if (type->subtype->byte_size != 0) + return; + if (type->subtype->name == NULL) + return; + // Try to find a more complete description of the type: + // We need to fix in order to support C++. + + dw_type_t subtype = + xbt_dict_get_or_null(info->full_types_by_name, type->subtype->name); + if (subtype != NULL) { + type->subtype = subtype; + } + +} + +static void MC_post_process_types(mc_object_info_t info) +{ + xbt_dict_cursor_t cursor = NULL; + char *origin; + dw_type_t type; + + // Lookup "subtype" field: + xbt_dict_foreach(info->types, cursor, origin, type) { + MC_resolve_subtype(info, type); + + dw_type_t member; + unsigned int i = 0; + if (type->members != NULL) + xbt_dynar_foreach(type->members, i, member) { + MC_resolve_subtype(info, member); + } + } +} + /** \brief Finds informations about a given shared object/executable */ mc_object_info_t MC_find_object_info(memory_map_t maps, char *name, int executable)