summaryrefslogtreecommitdiffstats
path: root/libebl/libebl.h
diff options
context:
space:
mode:
authorMark Wielaard <mjw@redhat.com>2013-12-18 11:05:54 +0100
committerMark Wielaard <mjw@redhat.com>2013-12-20 10:09:49 +0100
commit159ac52b061c60947a943c102298cd692223274f (patch)
treed3d3a07d249704f95424072064e160df4ae4c156 /libebl/libebl.h
parent565149d564cfe9da3b5cd94c9387ee0473d0704a (diff)
downloadandroid_external_elfutils-159ac52b061c60947a943c102298cd692223274f.tar.gz
android_external_elfutils-159ac52b061c60947a943c102298cd692223274f.tar.bz2
android_external_elfutils-159ac52b061c60947a943c102298cd692223274f.zip
libdwfl: Introduce dwfl_module_getsym_info and dwfl_module_addrinfo.
Some arches like ppc64 use function descriptor values instead of function addresses causing matching of names and addresses to fail when using dwfl_module_getsym or dwfl_module_addrsym. Add ebl hook to resolve any function descriptor values found in non-ET_REL modules. The new function dwfl_module_getsym_info doesn't adjust the symbol value in any way, but returns the adjusted and/or resolved address associated with the symbol separately. The new function dwfl_module_addrinfo resolves against both the address associated with the symbol (which could be the function entry address) value and the adjusted st_value. So that it is easy to resolve and match either function descriptors and/or function entry addresses. Since these new functions also return more information they replace the dwfl_module_getsym_elf and dwfl_module_addrsym_elf functions that never made it into a released elfutils version. addr2line and readelf now use the new functions when looking up functions names. addr2line will now also display the section the address was found in when given -x. Extra testcases were added for both addr2line and the dwflsyms testscase. Signed-off-by: Mark Wielaard <mjw@redhat.com>
Diffstat (limited to 'libebl/libebl.h')
-rw-r--r--libebl/libebl.h6
1 files changed, 6 insertions, 0 deletions
diff --git a/libebl/libebl.h b/libebl/libebl.h
index 84c2f4cd..50d6baab 100644
--- a/libebl/libebl.h
+++ b/libebl/libebl.h
@@ -439,6 +439,12 @@ extern bool ebl_unwind (Ebl *ebl, Dwarf_Addr pc, ebl_tid_registers_t *setfunc,
bool *signal_framep)
__nonnull_attribute__ (1, 3, 4, 5, 7);
+/* Returns true if the value can be resolved to an address in an
+ allocated section, which will be returned in *ADDR
+ (e.g. function descriptor resolving) */
+extern bool ebl_resolve_sym_value (Ebl *ebl, GElf_Addr *addr)
+ __nonnull_attribute__ (2);
+
#ifdef __cplusplus
}
#endif