From bcae57f780b5ef3c5a5a05c31ff35886927fe0c9 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Sat, 11 Aug 2012 14:50:38 +0200 Subject: Add dwarf_endianity_string and dwarf_decimal_sign_string. dwarf_endianity_string for DW_END codes used with DW_AT_endianity. dwarf_decimal_sign_string for DW_DS codes used with DW_AT_decimal_sign. Signed-off-by: Mark Wielaard --- src/ChangeLog | 7 +++++++ src/readelf.c | 30 ++++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+) (limited to 'src') diff --git a/src/ChangeLog b/src/ChangeLog index 7acf9d92..adeaa243 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,10 @@ +2012-08-11 Mark Wielaard + + * readelf.c (dwarf_endianity_name): New function. + (dwarf_decimal_sign_string): Likewise. + (attr_callback): Use dwarf_endianity_name for DW_AT_endianity + and use dwarf_decimal_sign_string for DW_AT_decimal_sign. + 2012-07-27 Mark Wielaard * readelf.c (dwarf_tag_string): Removed. diff --git a/src/readelf.c b/src/readelf.c index 2711006d..c649c84c 100644 --- a/src/readelf.c +++ b/src/readelf.c @@ -3352,6 +3352,30 @@ dwarf_discr_list_name (unsigned int code) return result; } +static const char * +dwarf_endianity_name (unsigned int code) +{ + const char *result = dwarf_endianity_string (code); + if (unlikely (result == NULL)) + { + if (code >= DW_END_lo_user && code <= DW_END_hi_user) + snprintf (unknown_buf, sizeof unknown_buf, "lo_user+%#x", + code - DW_END_lo_user); + else + return "???"; /* Numeric value is always already printed. */ + result = unknown_buf; + } + return result; +} + +static const char * +dwarf_decimal_sign_name (unsigned int code) +{ + const char *result = dwarf_decimal_sign_string (code); + if (unlikely (result == NULL)) + result = "???"; /* Numeric value is always already printed. */ + return result; +} static void print_block (size_t n, const void *block) @@ -5025,6 +5049,12 @@ attr_callback (Dwarf_Attribute *attrp, void *arg) case DW_AT_discr_list: valuestr = dwarf_discr_list_name (num); break; + case DW_AT_endianity: + valuestr = dwarf_endianity_name (num); + break; + case DW_AT_decimal_sign: + valuestr = dwarf_decimal_sign_name (num); + break; default: /* Nothing. */ break; -- cgit v1.2.1