From: Mark Wielaard Date: Wed, 5 Mar 2014 15:17:54 +0000 (+0100) Subject: readelf: Print DW_FORM_sdata values as signed numbers. X-Git-Tag: elfutils-0.159~32 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=b92075265572739b04ed1027a6764ff65750b108;p=thirdparty%2Felfutils.git readelf: Print DW_FORM_sdata values as signed numbers. Printing DW_FORM_sdata numbers as unsigned values is misleading. Signed-off-by: Mark Wielaard --- diff --git a/src/ChangeLog b/src/ChangeLog index 80be466a2..c16626710 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2014-03-05 Mark Wielaard + + * readelf.c (attr_callback): Print DW_FORM_sdata values as signed + numbers. + 2014-02-24 Mark Wielaard * readelf (print_phdr): Check there is a SHT_PROGBITS section at the diff --git a/src/readelf.c b/src/readelf.c index 63675c602..d2efbaebb 100644 --- a/src/readelf.c +++ b/src/readelf.c @@ -5732,14 +5732,34 @@ attr_callback (Dwarf_Attribute *attrp, void *arg) dwarf_form_name (form), (uintmax_t) num, a); free (a); } - else if (valuestr == NULL) - printf (" %*s%-20s (%s) %" PRIuMAX "\n", - (int) (level * 2), "", dwarf_attr_name (attr), - dwarf_form_name (form), (uintmax_t) num); else - printf (" %*s%-20s (%s) %s (%" PRIuMAX ")\n", - (int) (level * 2), "", dwarf_attr_name (attr), - dwarf_form_name (form), valuestr, (uintmax_t) num); + { + Dwarf_Sword snum = 0; + if (form == DW_FORM_sdata) + if (unlikely (dwarf_formsdata (attrp, &snum) != 0)) + goto attrval_out; + + if (valuestr == NULL) + { + printf (" %*s%-20s (%s)", + (int) (level * 2), "", dwarf_attr_name (attr), + dwarf_form_name (form)); + if (form == DW_FORM_sdata) + printf (" %" PRIdMAX "\n", (intmax_t) snum); + else + printf (" %" PRIuMAX "\n", (uintmax_t) num); + } + else + { + printf (" %*s%-20s (%s) %s", + (int) (level * 2), "", dwarf_attr_name (attr), + dwarf_form_name (form), valuestr); + if (form == DW_FORM_sdata) + printf (" (%" PRIdMAX ")\n", (intmax_t) snum); + else + printf (" (%" PRIuMAX ")\n", (uintmax_t) num); + } + } break; case DW_FORM_flag: