From: Gabriel Corona Date: Tue, 17 Mar 2015 14:12:13 +0000 (+0100) Subject: [mc] Check variable size in MC_process_read_variable() X-Git-Tag: v3_12~732^2~94 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/4e194aa6e85bdaafc9d69876bd7d2e79c74d5502 [mc] Check variable size in MC_process_read_variable() --- diff --git a/src/mc/mc_dwarf.c b/src/mc/mc_dwarf.c index a286459ea8..55de42ecb9 100644 --- a/src/mc/mc_dwarf.c +++ b/src/mc/mc_dwarf.c @@ -1373,18 +1373,27 @@ void MC_post_process_object_info(mc_process_t process, mc_object_info_t info) dw_type_t type = NULL; xbt_dict_foreach(info->types, cursor, key, type) { + dw_type_t subtype = type; + while (subtype->type == DW_TAG_typedef || subtype->type == DW_TAG_volatile_type + || subtype->type == DW_TAG_const_type) { + if (subtype->subtype) + subtype = subtype->subtype; + else + break; + } + // Resolve full_type: - if (type->name && type->byte_size == 0) { + if (subtype->name && subtype->byte_size == 0) { for (size_t i = 0; i != process->object_infos_size; ++i) { dw_type_t same_type = xbt_dict_get_or_null(process->object_infos[i]->full_types_by_name, - type->name); + subtype->name); if (same_type && same_type->name && same_type->byte_size) { type->full_type = same_type; break; } } - } + } else type->full_type = subtype; } } diff --git a/src/mc/mc_process.c b/src/mc/mc_process.c index ba3968cfbc..9c89adaa78 100644 --- a/src/mc/mc_process.c +++ b/src/mc/mc_process.c @@ -405,6 +405,11 @@ void MC_process_read_variable(mc_process_t process, const char* name, void* targ dw_variable_t var = MC_process_find_variable_by_name(process, name); if (!var->address) xbt_die("No simple location for this variable"); + if (!var->type->full_type) + xbt_die("Partial type for %s, cannot check size", name); + if (var->type->full_type->byte_size != size) + xbt_die("Unexpected size for %s (expected %zi, was %zi)", + name, size, (size_t) var->type->full_type->byte_size); MC_process_read(process, MC_PROCESS_NO_FLAG, target, var->address, size, MC_PROCESS_INDEX_ANY); }