diff options
| author | Roland McGrath <[email protected]> | 2008-12-16 16:21:40 -0800 |
|---|---|---|
| committer | Roland McGrath <[email protected]> | 2008-12-16 16:21:40 -0800 |
| commit | 45d7b29b1bf7b53ab1164ea3b58529c39d32b4b2 (patch) | |
| tree | 095b752acff43edb0d14d254301c44feec1b950a | |
| parent | d7b31801f873559e5c9ac677eafbf7e6f71171dc (diff) | |
Bug compatibility wrapper for ELFUTILS_0.130 dwfl_module_build_id behavior.
| -rw-r--r-- | libdw/libdw.map | 9 | ||||
| -rw-r--r-- | libdwfl/ChangeLog | 7 | ||||
| -rw-r--r-- | libdwfl/dwfl_module_build_id.c | 21 |
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"); |
