diff options
author | Mark Wielaard <mjw@redhat.com> | 2014-11-24 22:17:51 +0100 |
---|---|---|
committer | Mark Wielaard <mjw@redhat.com> | 2014-11-26 18:00:52 +0100 |
commit | 9f8c08e68243561a54a09e38fd472b4fc2c17d5d (patch) | |
tree | e2e220df42cedb22850dc4f699a8e7766fe678b6 /libdw | |
parent | 03c033f8718dccb68c2a02dc0725aba24023e751 (diff) | |
download | elfutils-9f8c08e68243561a54a09e38fd472b4fc2c17d5d.tar.gz |
dwarf.h: Add DW_LANG_C11, DW_LANG_C_plus_plus_11 and DW_LANG_C_plus_plus_14.
The following patch is needed to recognize the new DW_LANG constants
that GCC 5 might emit as implemented by this GCC patch:
https://gcc.gnu.org/ml/gcc-patches/2014-11/msg02852.html
Also added to https://fedorahosted.org/elfutils/wiki/DwarfExtensions
GCC 5 can emit these new DWARFv5 draft language constants. Handle them in
dwarf_aggregate_size and dwarf_getfuncs. Also handle DW_LANG_Go in
dwarf_aggregate_size (lower bound for array is zero for Go).
Signed-off-by: Mark Wielaard <mjw@redhat.com>
Diffstat (limited to 'libdw')
-rw-r--r-- | libdw/ChangeLog | 11 | ||||
-rw-r--r-- | libdw/dwarf.h | 4 | ||||
-rw-r--r-- | libdw/dwarf_aggregate_size.c | 4 | ||||
-rw-r--r-- | libdw/dwarf_getfuncs.c | 3 |
4 files changed, 21 insertions, 1 deletions
diff --git a/libdw/ChangeLog b/libdw/ChangeLog index 7e46e1a8..9ceb5272 100644 --- a/libdw/ChangeLog +++ b/libdw/ChangeLog @@ -1,3 +1,14 @@ +2014-11-24 Mark Wielaard <mjw@redhat.com> + + * dwarf.h (DW_LANG_C_plus_plus_11): Added. + (DW_LANG_C11): Likewise. + (DW_LANG_C_plus_plus_14): Likewise. + * dwarf_aggregate_size.c (array_size): Handle DW_LANG_C11, + DW_LANG_C_plus_plus_11, DW_LANG_C_plus_plus_14 and DW_LANG_Go + lower bound. + * dwarf_getfuncs.c (dwarf_getfuncs): Set c_cu to true for + DW_LANG_C11. + 2014-11-26 Mark Wielaard <mjw@redhat.com> * dwarf.h (DW_AT_noreturn): Added. diff --git a/libdw/dwarf.h b/libdw/dwarf.h index d47260e4..da8cf3a6 100644 --- a/libdw/dwarf.h +++ b/libdw/dwarf.h @@ -586,6 +586,10 @@ enum DW_LANG_D = 0x0013, /* D */ DW_LANG_Python = 0x0014, /* Python */ DW_LANG_Go = 0x0016, /* Go */ + DW_LANG_C_plus_plus_11 = 0x001a, /* ISO C++:2011 */ + DW_LANG_C11 = 0x001d, /* ISO C:2011 */ + DW_LANG_C_plus_plus_14 = 0x0021, /* ISO C++:2014 */ + DW_LANG_lo_user = 0x8000, DW_LANG_Mips_Assembler = 0x8001, /* Assembler */ diff --git a/libdw/dwarf_aggregate_size.c b/libdw/dwarf_aggregate_size.c index 1666e240..667c2743 100644 --- a/libdw/dwarf_aggregate_size.c +++ b/libdw/dwarf_aggregate_size.c @@ -103,12 +103,16 @@ array_size (Dwarf_Die *die, Dwarf_Word *size, case DW_LANG_C: case DW_LANG_C89: case DW_LANG_C99: + case DW_LANG_C11: case DW_LANG_C_plus_plus: + case DW_LANG_C_plus_plus_11: + case DW_LANG_C_plus_plus_14: case DW_LANG_ObjC: case DW_LANG_ObjC_plus_plus: case DW_LANG_Java: case DW_LANG_D: case DW_LANG_UPC: + case DW_LANG_Go: lower = 0; break; diff --git a/libdw/dwarf_getfuncs.c b/libdw/dwarf_getfuncs.c index 82894c98..f79b0a79 100644 --- a/libdw/dwarf_getfuncs.c +++ b/libdw/dwarf_getfuncs.c @@ -103,7 +103,8 @@ dwarf_getfuncs (Dwarf_Die *cudie, int (*callback) (Dwarf_Die *, void *), int lang = INTUSE(dwarf_srclang) (cudie); bool c_cu = (lang == DW_LANG_C89 || lang == DW_LANG_C - || lang == DW_LANG_C99); + || lang == DW_LANG_C99 + || lang == DW_LANG_C11); struct visitor_info v = { callback, arg, (void *) offset, NULL, c_cu }; struct Dwarf_Die_Chain chain = { .die = CUDIE (cudie->cu), |