From f735db16b52665f2324eff101f0e5cad861bfea2 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Wed, 8 Jul 2009 19:18:53 +0200 Subject: [PATCH] Handle DW_Form constants for DW_AT_data_member_location in readelf. --- src/ChangeLog | 5 +++++ src/readelf.c | 13 ++++++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/ChangeLog b/src/ChangeLog index e27494245..51b3dd800 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2009-07-08 Mark Wielaard + + * readelf.c (attr_callback): Handle DW_Form constants for + DW_AT_data_member_location. + 2009-07-06 Roland McGrath * readelf.c (register_info): New function. Handle unknown register #s. diff --git a/src/readelf.c b/src/readelf.c index c8bb2f08e..bc67c31b2 100644 --- a/src/readelf.c +++ b/src/readelf.c @@ -5135,9 +5135,20 @@ attr_callback (Dwarf_Attribute *attrp, void *arg) const char *valuestr = NULL; switch (attr) { + /* This case can take either a constant or a loclistptr. */ + case DW_AT_data_member_location: + if (form != DW_FORM_data4 && form != DW_FORM_data8) + { + printf (" %*s%-20s %" PRIxMAX "\n", + (int) (level * 2), "", dwarf_attr_string (attr), + (uintmax_t) num); + return DWARF_CB_OK; + } + /* else fallthrough */ + + /* These cases always take a loclistptr and no constant. */ case DW_AT_location: case DW_AT_data_location: - case DW_AT_data_member_location: case DW_AT_vtable_elem_location: case DW_AT_string_length: case DW_AT_use_location: -- 2.47.2