summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDave Watson <davejwatson@fb.com>2017-12-28 09:31:11 -0800
committerDave Watson <davejwatson@fb.com>2018-01-03 10:23:17 -0800
commitc73a0f4d4e0f1ea9288f9b7bc56d904d5dc25843 (patch)
tree4a952b712dd167d38926158df0f02991861c9312
parente5fc8e77fca1e9d6a5dace39f74f945ce8c56e02 (diff)
downloadlibunwind-c73a0f4d4e0f1ea9288f9b7bc56d904d5dc25843.tar.gz
ALIAS dwarf symbols
-rw-r--r--include/compiler.h3
-rw-r--r--include/dwarf.h1
-rw-r--r--src/dwarf/Gfind_proc_info-lsb.c16
3 files changed, 14 insertions, 6 deletions
diff --git a/include/compiler.h b/include/compiler.h
index 6c5ce8ce..2fa59eff 100644
--- a/include/compiler.h
+++ b/include/compiler.h
@@ -36,7 +36,8 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
# define UNUSED __attribute__((unused))
# define NOINLINE __attribute__((noinline))
# define NORETURN __attribute__((noreturn))
-# define ALIAS(name) __attribute__((alias (#name)))
+# define ALIAS2(name) #name
+# define ALIAS(name) __attribute__((alias (ALIAS2(name))))
# if (__GNUC__ > 3) || (__GNUC__ == 3 && __GNUC_MINOR__ > 2)
# define ALWAYS_INLINE inline __attribute__((always_inline))
# define HIDDEN __attribute__((visibility ("hidden")))
diff --git a/include/dwarf.h b/include/dwarf.h
index 48831e30..fab93c61 100644
--- a/include/dwarf.h
+++ b/include/dwarf.h
@@ -413,6 +413,7 @@ extern int dwarf_search_unwind_table (unw_addr_space_t as,
unw_dyn_info_t *di,
unw_proc_info_t *pi,
int need_unwind_info, void *arg);
+
extern int dwarf_find_unwind_table (struct elf_dyn_info *edi, unw_addr_space_t as,
char *path, unw_word_t segbase, unw_word_t mapoff,
unw_word_t ip);
diff --git a/src/dwarf/Gfind_proc_info-lsb.c b/src/dwarf/Gfind_proc_info-lsb.c
index 7a7245a1..b5548db1 100644
--- a/src/dwarf/Gfind_proc_info-lsb.c
+++ b/src/dwarf/Gfind_proc_info-lsb.c
@@ -46,6 +46,12 @@ struct table_entry
#include "os-linux.h"
#endif
+static ALIAS(dwarf_search_unwind_table) int
+dwarf_search_unwind_table_int (unw_addr_space_t as,
+ unw_word_t ip,
+ unw_dyn_info_t *di,
+ unw_proc_info_t *pi,
+ int need_unwind_info, void *arg);
static int
linear_search (unw_addr_space_t as, unw_word_t ip,
unw_word_t eh_frame_start, unw_word_t eh_frame_end,
@@ -265,7 +271,7 @@ debug_frame_tab_compare (const void *a, const void *b)
return 0;
}
-int
+HIDDEN int
dwarf_find_debug_frame (int found, unw_dyn_info_t *di_debug, unw_word_t ip,
unw_word_t segbase, const char* obj_name,
unw_word_t start, unw_word_t end)
@@ -706,14 +712,14 @@ dwarf_find_proc_info (unw_addr_space_t as, unw_word_t ip,
/* search the table: */
if (cb_data.di.format != -1)
- ret = dwarf_search_unwind_table (as, ip, &cb_data.di,
- pi, need_unwind_info, arg);
+ ret = dwarf_search_unwind_table_int (as, ip, &cb_data.di,
+ pi, need_unwind_info, arg);
else
ret = -UNW_ENOINFO;
if (ret == -UNW_ENOINFO && cb_data.di_debug.format != -1)
- ret = dwarf_search_unwind_table (as, ip, &cb_data.di_debug, pi,
- need_unwind_info, arg);
+ ret = dwarf_search_unwind_table_int (as, ip, &cb_data.di_debug, pi,
+ need_unwind_info, arg);
}
else
ret = -UNW_ENOINFO;