summaryrefslogtreecommitdiff
path: root/libdw
diff options
context:
space:
mode:
authorMark Wielaard <mjw@redhat.com>2014-11-24 22:17:51 +0100
committerMark Wielaard <mjw@redhat.com>2014-11-26 18:00:52 +0100
commit9f8c08e68243561a54a09e38fd472b4fc2c17d5d (patch)
treee2e220df42cedb22850dc4f699a8e7766fe678b6 /libdw
parent03c033f8718dccb68c2a02dc0725aba24023e751 (diff)
downloadelfutils-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/ChangeLog11
-rw-r--r--libdw/dwarf.h4
-rw-r--r--libdw/dwarf_aggregate_size.c4
-rw-r--r--libdw/dwarf_getfuncs.c3
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),