summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMark Wielaard <[email protected]>2009-07-08 19:18:53 +0200
committerMark Wielaard <[email protected]>2009-07-08 19:18:53 +0200
commitf735db16b52665f2324eff101f0e5cad861bfea2 (patch)
tree1c08f5323a56945bd8aadbf6ad4cb2994b80c9ce /src
parent70c442caa8296a698b395b8969b9a04d5491d47b (diff)
Handle DW_Form constants for DW_AT_data_member_location in readelf.
Diffstat (limited to 'src')
-rw-r--r--src/ChangeLog5
-rw-r--r--src/readelf.c13
2 files changed, 17 insertions, 1 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index e2749424..51b3dd80 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,8 @@
+2009-07-08 Mark Wielaard <[email protected]>
+
+ * readelf.c (attr_callback): Handle DW_Form constants for
+ DW_AT_data_member_location.
+
2009-07-06 Roland McGrath <[email protected]>
* readelf.c (register_info): New function. Handle unknown register #s.
diff --git a/src/readelf.c b/src/readelf.c
index c8bb2f08..bc67c31b 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: