summaryrefslogtreecommitdiffstats
path: root/libdw
diff options
context:
space:
mode:
Diffstat (limited to 'libdw')
-rw-r--r--libdw/ChangeLog28
-rw-r--r--libdw/dwarf.h6
-rw-r--r--libdw/dwarf_getlocation.c4
-rw-r--r--libdw/dwarf_siblingof.c2
-rw-r--r--libdw/libdw.map11
5 files changed, 48 insertions, 3 deletions
diff --git a/libdw/ChangeLog b/libdw/ChangeLog
index aaa62960..bf1f4857 100644
--- a/libdw/ChangeLog
+++ b/libdw/ChangeLog
@@ -1,3 +1,31 @@
+2019-08-12 Mark Wielaard <[email protected]>
+
+ * libdw.map (ELFUTILS_0.177): Add new version of dwelf_elf_begin.
+
+2019-06-28 Mark Wielaard <[email protected]>
+
+ * libdw.map (ELFUTILS_0.177): New section. Add
+ dwelf_elf_e_machine_string.
+
+2019-05-16 Mark Wielaard <[email protected]>
+
+ * dwarf.h: Add DW_AT_GNU_numerator, DW_AT_GNU_denominator and
+ DW_AT_GNU_bias.
+
+2019-04-28 Mark Wielaard <[email protected]>
+
+ * dwarf_siblingof.c (dwarf_siblingof): Don't initialize addr.
+
+2019-04-28 Mark Wielaard <[email protected]>
+
+ * dwarf_getlocation.c (dwarf_getlocation_addr): Call
+ check_constant_offset with llbufs and listlens directly.
+
+2019-04-27 Mark Wielaard <[email protected]>
+
+ * dwarf_getlocation.c (store_implicit_value): Check dbg isn't
+ NULL.
+
2019-02-02 Mark Wielaard <[email protected]>
* dwarf_nextcu.c (__libdw_next_unit): Define bytes_end.
diff --git a/libdw/dwarf.h b/libdw/dwarf.h
index dc597335..71ca2baa 100644
--- a/libdw/dwarf.h
+++ b/libdw/dwarf.h
@@ -351,6 +351,12 @@ enum
DW_AT_GNU_pubnames = 0x2134,
DW_AT_GNU_pubtypes = 0x2135,
+ /* https://gcc.gnu.org/wiki/DW_AT_GNU_numerator_denominator */
+ DW_AT_GNU_numerator = 0x2303,
+ DW_AT_GNU_denominator = 0x2304,
+ /* https://gcc.gnu.org/wiki/DW_AT_GNU_bias */
+ DW_AT_GNU_bias = 0x2305,
+
DW_AT_hi_user = 0x3fff
};
diff --git a/libdw/dwarf_getlocation.c b/libdw/dwarf_getlocation.c
index fc59a2ab..6fb3ff3d 100644
--- a/libdw/dwarf_getlocation.c
+++ b/libdw/dwarf_getlocation.c
@@ -125,6 +125,8 @@ loc_compare (const void *p1, const void *p2)
static int
store_implicit_value (Dwarf *dbg, void **cache, Dwarf_Op *op)
{
+ if (dbg == NULL)
+ return -1;
struct loc_block_s *block = libdw_alloc (dbg, struct loc_block_s,
sizeof (struct loc_block_s), 1);
const unsigned char *data = (const unsigned char *) (uintptr_t) op->number2;
@@ -896,7 +898,7 @@ dwarf_getlocation_addr (Dwarf_Attribute *attr, Dwarf_Addr address,
}
}
- int result = check_constant_offset (attr, &llbufs[0], &listlens[0]);
+ int result = check_constant_offset (attr, llbufs, listlens);
if (result != 1)
return result ?: 1;
diff --git a/libdw/dwarf_siblingof.c b/libdw/dwarf_siblingof.c
index 613d2090..dbed9fa8 100644
--- a/libdw/dwarf_siblingof.c
+++ b/libdw/dwarf_siblingof.c
@@ -57,7 +57,7 @@ dwarf_siblingof (Dwarf_Die *die, Dwarf_Die *result)
/* Copy of the CU in the request. */
sibattr.cu = this_die.cu;
/* That's the address we start looking. */
- unsigned char *addr = this_die.addr;
+ unsigned char *addr;
/* Search for the beginning of the next die on this level. We
must not return the dies for children of the given die. */
diff --git a/libdw/libdw.map b/libdw/libdw.map
index 55482d58..decac05c 100644
--- a/libdw/libdw.map
+++ b/libdw/libdw.map
@@ -360,4 +360,13 @@ ELFUTILS_0.173 {
ELFUTILS_0.175 {
global:
dwelf_elf_begin;
-} ELFUTILS_0.173; \ No newline at end of file
+} ELFUTILS_0.173;
+
+ELFUTILS_0.177 {
+ global:
+ dwelf_elf_e_machine_string;
+ # Replaced ELFUTILS_0.175 versions. Both versions point to the
+ # same implementation, but users of the new symbol version can
+ # presume that NULL is only returned on error (otherwise ELF_K_NONE).
+ dwelf_elf_begin;
+} ELFUTILS_0.175;