From: Mark Wielaard Date: Wed, 26 Jul 2017 16:32:27 +0000 (+0200) Subject: Handle DWARF5 defaulted member function encodings. X-Git-Tag: elfutils-0.170~4 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=02e3093731b698547d30aaa3c1a0f66485a88ebd;p=thirdparty%2Felfutils.git Handle DWARF5 defaulted member function encodings. Add DW_DEFAULTED_no, DW_DEFAULTED_in_class and DW_DEFAULTED_out_of_class to dwarf.h. Print value (no, in_class or out_of_class) of DW_AT_defaulted in readelf. Signed-off-by: Mark Wielaard --- diff --git a/ChangeLog b/ChangeLog index 7748f139e..b4722db63 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,6 +1,7 @@ 2017-07-26 Mark Wielaard - * NEWS: Mention new DWARF5 calling conventions. + * NEWS: Mention new DWARF5 calling conventions and defaulted member + function. 2017-07-26 Mark Wielaard diff --git a/NEWS b/NEWS index 409805e70..5f85fc26e 100644 --- a/NEWS +++ b/NEWS @@ -1,7 +1,7 @@ Version 0.170 -libdw: Added new DWARF5 attribute, tag, character encoding, language code - and calling convention constants to dwarf.h. +libdw: Added new DWARF5 attribute, tag, character encoding, language code, + calling convention and defaulted member function constants to dwarf.h. New function dwarf_default_lower_bound. strip: Add -R, --remove-section=SECTION and --keep-section=SECTION. diff --git a/libdw/ChangeLog b/libdw/ChangeLog index 1c4eb3668..a74733c29 100644 --- a/libdw/ChangeLog +++ b/libdw/ChangeLog @@ -1,3 +1,8 @@ +2017-07-26 Mark Wielaard + + * dwarf.h: Add DW_DEFAULTED_no, DW_DEFAULTED_in_class and + DW_DEFAULTED_out_of_class. + 2017-07-26 Mark Wielaard * dwarf.h: Add DW_CC_pass_by_reference and DW_CC_pass_by_reference. diff --git a/libdw/dwarf.h b/libdw/dwarf.h index de8f7e5a7..82a68f26c 100644 --- a/libdw/dwarf.h +++ b/libdw/dwarf.h @@ -729,6 +729,14 @@ enum DW_DSC_range = 1 }; +/* DWARF defaulted member function encodings. */ +enum + { + DW_DEFAULTED_no = 0, + DW_DEFAULTED_in_class = 1, + DW_DEFAULTED_out_of_class = 2 + }; + /* DWARF standard opcode encodings. */ enum diff --git a/src/ChangeLog b/src/ChangeLog index f92f10d73..3ebc70448 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,10 @@ +2017-07-26 Mark Wielaard + + * readelf.c (dwarf_defaulted_string): New function. + (dwarf_defaulted_name): Likewise. + (attr_callback): Use dwarf_defaulted_name to get value of + DW_AT_defaulted. + 2017-07-20 Mark Wielaard * strip.c (handle_elf): Deal with data marker symbols pointing to diff --git a/src/readelf.c b/src/readelf.c index 40d49139d..5e1685df1 100644 --- a/src/readelf.c +++ b/src/readelf.c @@ -3796,6 +3796,23 @@ dwarf_access_string (unsigned int code) } +static const char * +dwarf_defaulted_string (unsigned int code) +{ + static const char *const known[] = + { +#define DWARF_ONE_KNOWN_DW_DEFAULTED(NAME, CODE) [CODE] = #NAME, + DWARF_ALL_KNOWN_DW_DEFAULTED +#undef DWARF_ONE_KNOWN_DW_DEFAULTED + }; + + if (likely (code < sizeof (known) / sizeof (known[0]))) + return known[code]; + + return NULL; +} + + static const char * dwarf_visibility_string (unsigned int code) { @@ -4001,6 +4018,14 @@ dwarf_access_name (unsigned int code) } +static const char * +dwarf_defaulted_name (unsigned int code) +{ + const char *ret = dwarf_defaulted_string (code); + return string_or_unknown (ret, code, 0, 0, false); +} + + static const char * dwarf_visibility_name (unsigned int code) { @@ -6053,6 +6078,9 @@ attr_callback (Dwarf_Attribute *attrp, void *arg) case DW_AT_accessibility: valuestr = dwarf_access_name (num); break; + case DW_AT_defaulted: + valuestr = dwarf_defaulted_name (num); + break; case DW_AT_visibility: valuestr = dwarf_visibility_name (num); break;