summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRoland McGrath <[email protected]>2008-12-16 16:21:40 -0800
committerRoland McGrath <[email protected]>2008-12-16 16:21:40 -0800
commit45d7b29b1bf7b53ab1164ea3b58529c39d32b4b2 (patch)
tree095b752acff43edb0d14d254301c44feec1b950a
parentd7b31801f873559e5c9ac677eafbf7e6f71171dc (diff)
Bug compatibility wrapper for ELFUTILS_0.130 dwfl_module_build_id behavior.
-rw-r--r--libdw/libdw.map9
-rw-r--r--libdwfl/ChangeLog7
-rw-r--r--libdwfl/dwfl_module_build_id.c21
3 files changed, 34 insertions, 3 deletions
diff --git a/libdw/libdw.map b/libdw/libdw.map
index 8e2f6441..eb3abc28 100644
--- a/libdw/libdw.map
+++ b/libdw/libdw.map
@@ -185,3 +185,12 @@ ELFUTILS_0.136 {
local:
*;
} ELFUTILS_0.130;
+
+ELFUTILS_0.138 {
+ global:
+ # Replaced ELFUTILS_0.130 version, which has bug-compatibility wrapper.
+ dwfl_module_build_id;
+
+ local:
+ *;
+} ELFUTILS_0.136;
diff --git a/libdwfl/ChangeLog b/libdwfl/ChangeLog
index 9d86f52b..1ec9cf67 100644
--- a/libdwfl/ChangeLog
+++ b/libdwfl/ChangeLog
@@ -1,3 +1,10 @@
+2008-12-16 Roland McGrath <[email protected]>
+
+ * dwfl_module_build_id.c (dwfl_module_build_id): Define with alias and
+ symver magic to bind to ELFUTILS_0.138.
+ (_BUG_COMPAT_dwfl_module_build_id): New function, bug compatible
+ wrapper for ELFUTILS_0.130 version set.
+
2008-12-15 Roland McGrath <[email protected]>
* derelocate.c (dwfl_module_relocate_address): Apply main.bias, not
diff --git a/libdwfl/dwfl_module_build_id.c b/libdwfl/dwfl_module_build_id.c
index 8725afbc..d1e0eb05 100644
--- a/libdwfl/dwfl_module_build_id.c
+++ b/libdwfl/dwfl_module_build_id.c
@@ -140,8 +140,8 @@ __libdwfl_find_build_id (Dwfl_Module *mod, bool set, Elf *elf)
}
int
-dwfl_module_build_id (Dwfl_Module *mod,
- const unsigned char **bits, GElf_Addr *vaddr)
+__dwfl_module_build_id (Dwfl_Module *mod,
+ const unsigned char **bits, GElf_Addr *vaddr)
{
if (mod == NULL)
return -1;
@@ -164,4 +164,19 @@ dwfl_module_build_id (Dwfl_Module *mod,
*vaddr = mod->build_id_vaddr;
return mod->build_id_len;
}
-INTDEF (dwfl_module_build_id)
+extern __typeof__ (dwfl_module_build_id) INTUSE(dwfl_module_build_id)
+ __attribute__ ((alias ("__dwfl_module_build_id")));
+asm (".symver "
+ "__dwfl_module_build_id, dwfl_module_build_id@@ELFUTILS_0.138");
+
+int
+_BUG_COMPAT_dwfl_module_build_id (Dwfl_Module *mod,
+ const unsigned char **bits, GElf_Addr *vaddr)
+{
+ int result = INTUSE(dwfl_module_build_id) (mod, bits, vaddr);
+ if (result > 0)
+ *vaddr += (result + 3) & -4;
+ return result;
+}
+asm (".symver "
+ "_BUG_COMPAT_dwfl_module_build_id, dwfl_module_build_id@ELFUTILS_0.130");