From a87452694ee73de10e25b45b9e2489904836a8ee Mon Sep 17 00:00:00 2001 From: Gabriel Corona Date: Tue, 25 Feb 2014 10:51:50 +0100 Subject: [PATCH] [mc] Skip variables/members which are compile time constants The current code expect location for each variable/member and it is missing for constants. --- src/mc/mc_dwarf.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/mc/mc_dwarf.c b/src/mc/mc_dwarf.c index 07c8d8c1b5..696f1d04e8 100644 --- a/src/mc/mc_dwarf.c +++ b/src/mc/mc_dwarf.c @@ -622,6 +622,11 @@ static void MC_dwarf_add_members(mc_object_info_t info, Dwarf_Die* die, Dwarf_Di type->members = xbt_dynar_new(sizeof(dw_type_t), (void(*)(void*))dw_type_free); for (res=dwarf_child(die, &child); res==0; res=dwarf_siblingof(&child,&child)) { if (dwarf_tag(&child)==DW_TAG_member) { + + // Skip compile time constants: + if(dwarf_hasattr(&child, DW_AT_const_value)) + continue; + // TODO, we should use another type (because is is not a type but a member) dw_type_t member = xbt_new0(s_dw_type_t, 1); member->type = -1; @@ -898,10 +903,14 @@ static dw_location_t MC_dwarf_get_expression(Dwarf_Op* expr, size_t len) { static int mc_anonymous_variable_index = 0; static dw_variable_t MC_die_to_variable(mc_object_info_t info, Dwarf_Die* die, Dwarf_Die* unit, dw_frame_t frame, const char* namespace) { - // Drop declaration: + // Skip declarations: if (MC_dwarf_attr_flag(die, DW_AT_declaration, false)) return NULL; + // Skip compile time constants: + if(dwarf_hasattr(die, DW_AT_const_value)) + return NULL; + Dwarf_Attribute attr_location; if (dwarf_attr(die, DW_AT_location, &attr_location)==NULL) { // No location: do not add it ? -- 2.20.1