summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog4
-rw-r--r--NEWS1
-rw-r--r--libdw/ChangeLog6
-rw-r--r--libdw/dwarf_peel_type.c7
-rw-r--r--libdw/libdw.h28
5 files changed, 34 insertions, 12 deletions
diff --git a/ChangeLog b/ChangeLog
index b4722db6..b7efc847 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,9 @@
2017-07-26 Mark Wielaard <[email protected]>
+ * NEWS: Mention dwarf_peel_type DWARF5 tags improvement.
+
+2017-07-26 Mark Wielaard <[email protected]>
+
* NEWS: Mention new DWARF5 calling conventions and defaulted member
function.
diff --git a/NEWS b/NEWS
index 5f85fc26..054ac95a 100644
--- a/NEWS
+++ b/NEWS
@@ -3,6 +3,7 @@ Version 0.170
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.
+ dwarf_peel_type now handles DWARF5 immutable, packed and shared tags.
strip: Add -R, --remove-section=SECTION and --keep-section=SECTION.
diff --git a/libdw/ChangeLog b/libdw/ChangeLog
index a74733c2..d0b3f4ca 100644
--- a/libdw/ChangeLog
+++ b/libdw/ChangeLog
@@ -1,5 +1,11 @@
2017-07-26 Mark Wielaard <[email protected]>
+ * dwarf_peel_type.c (dwarf_peel_type): Handle DW_TAG_immutable_type,
+ DW_TAG_packed_type and DW_TAG_shared_type.
+ * libdw.h (dwarf_peel_type): Extend documentation.
+
+2017-07-26 Mark Wielaard <[email protected]>
+
* dwarf.h: Add DW_DEFAULTED_no, DW_DEFAULTED_in_class and
DW_DEFAULTED_out_of_class.
diff --git a/libdw/dwarf_peel_type.c b/libdw/dwarf_peel_type.c
index 97356944..6bbfd424 100644
--- a/libdw/dwarf_peel_type.c
+++ b/libdw/dwarf_peel_type.c
@@ -1,5 +1,5 @@
/* Peel type aliases and qualifier tags from a type DIE.
- Copyright (C) 2014, 2015 Red Hat, Inc.
+ Copyright (C) 2014, 2015, 2016 Red Hat, Inc.
This file is part of elfutils.
This file is free software; you can redistribute it and/or modify
@@ -50,7 +50,10 @@ dwarf_peel_type (Dwarf_Die *die, Dwarf_Die *result)
|| tag == DW_TAG_const_type
|| tag == DW_TAG_volatile_type
|| tag == DW_TAG_restrict_type
- || tag == DW_TAG_atomic_type)
+ || tag == DW_TAG_atomic_type
+ || tag == DW_TAG_immutable_type
+ || tag == DW_TAG_packed_type
+ || tag == DW_TAG_shared_type)
{
Dwarf_Attribute attr_mem;
Dwarf_Attribute *attr = INTUSE (dwarf_attr_integrate) (result, DW_AT_type,
diff --git a/libdw/libdw.h b/libdw/libdw.h
index 49c4ebb9..63a38ff9 100644
--- a/libdw/libdw.h
+++ b/libdw/libdw.h
@@ -1,5 +1,5 @@
/* Interfaces for libdw.
- Copyright (C) 2002-2010, 2013, 2014 Red Hat, Inc.
+ Copyright (C) 2002-2010, 2013, 2014, 2016 Red Hat, Inc.
This file is part of elfutils.
This file is free software; you can redistribute it and/or modify
@@ -378,8 +378,11 @@ extern int dwarf_child (Dwarf_Die *die, Dwarf_Die *result)
extern int dwarf_siblingof (Dwarf_Die *die, Dwarf_Die *result)
__nonnull_attribute__ (2);
-/* For type aliases and qualifier type DIEs follow the DW_AT_type
- attribute (recursively) and return the underlying type Dwarf_Die.
+/* For type aliases and qualifier type DIEs, which don't modify or
+ change the structural layout of the underlying type, follow the
+ DW_AT_type attribute (recursively) and return the underlying type
+ Dwarf_Die.
+
Returns 0 when RESULT contains a Dwarf_Die (possibly equal to the
given DIE) that isn't a type alias or qualifier type. Returns 1
when RESULT contains a type alias or qualifier Dwarf_Die that
@@ -387,13 +390,18 @@ extern int dwarf_siblingof (Dwarf_Die *die, Dwarf_Die *result)
attribute). Returns -1 when an error occured.
The current DWARF specification defines one type alias tag
- (DW_TAG_typedef) and three qualifier type tags (DW_TAG_const_type,
- DW_TAG_volatile_type, DW_TAG_restrict_type). DWARF5 defines one
- other qualifier type tag (DW_TAG_atomic_type). A future version of
- this function might peel other alias or qualifier type tags if a
- future DWARF version or GNU extension defines other type aliases or
- qualifier type tags that don't modify or change the structural
- layout of the underlying type. */
+ (DW_TAG_typedef) and seven modifier/qualifier type tags
+ (DW_TAG_const_type, DW_TAG_volatile_type, DW_TAG_restrict_type,
+ DW_TAG_atomic_type, DW_TAG_immutable_type, DW_TAG_packed_type and
+ DW_TAG_shared_type). This function won't peel modifier type
+ tags that change the way the underlying type is accessed such
+ as the pointer or reference type tags (DW_TAG_pointer_type,
+ DW_TAG_reference_type or DW_TAG_rvalue_reference_type).
+
+ A future version of this function might peel other alias or
+ qualifier type tags if a future DWARF version or GNU extension
+ defines other type aliases or qualifier type tags that don't modify,
+ change the structural layout or the way to access the underlying type. */
extern int dwarf_peel_type (Dwarf_Die *die, Dwarf_Die *result)
__nonnull_attribute__ (2);