summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKen Werner <ken.werner@linaro.org>2011-04-01 18:41:16 +0200
committerArun Sharma <asharma@fb.com>2011-04-05 20:59:10 -0700
commitfd21d07fe422aacea422a8942ac2cc3f363f0fce (patch)
tree201dfa8a52215ea151ef1afb023cc597933226ff
parentd86155f72e0a2db73a6cf4b873d400536ed06486 (diff)
downloadlibunwind-fd21d07fe422aacea422a8942ac2cc3f363f0fce.tar.gz
Create a generic and local variant of the extbl parser.
In order to have the DWARF_* macros working properly a generic and a local variant of the ex_tables.c have been created. Signed-off-by: Ken Werner <ken.werner@linaro.org>
-rw-r--r--include/tdep-arm/ex_tables.h7
-rw-r--r--src/Makefile.am8
-rw-r--r--src/arm/Gex_tables.c (renamed from src/arm/ex_tables.c)6
-rw-r--r--src/arm/Gstep.c2
-rw-r--r--src/arm/Lex_tables.c5
5 files changed, 25 insertions, 3 deletions
diff --git a/include/tdep-arm/ex_tables.h b/include/tdep-arm/ex_tables.h
index 6376ea75..b6649957 100644
--- a/include/tdep-arm/ex_tables.h
+++ b/include/tdep-arm/ex_tables.h
@@ -57,6 +57,13 @@ struct arm_exbuf_data
uint32_t data;
};
+#define arm_exidx_init_local UNW_OBJ(arm_exidx_init_local)
+#define arm_exidx_table_add UNW_OBJ(arm_exidx_table_add)
+#define arm_exidx_table_find UNW_OBJ(arm_exidx_table_find)
+#define arm_exidx_table_lookup UNW_OBJ(arm_exidx_table_lookup)
+#define arm_exidx_extract UNW_OBJ(arm_exidx_extract)
+#define arm_exidx_decode UNW_OBJ(arm_exidx_decode)
+#define arm_exidx_apply_cmd UNW_OBJ(arm_exidx_apply_cmd)
int arm_exidx_init_local (void);
int arm_exidx_table_add (const char *name, struct arm_exidx_entry *start,
diff --git a/src/Makefile.am b/src/Makefile.am
index 9703724e..e889235b 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -138,7 +138,7 @@ libunwind_la_LIBADD += $(LIBUNWIND_ELF)
noinst_HEADERS += arm/init.h arm/offsets.h arm/unwind_i.h
libunwind_la_SOURCES_arm_common = $(libunwind_la_SOURCES_common) \
arm/is_fpreg.c arm/regname.c \
- arm/ex_tables.c arm/ex_tables.h
+ arm/ex_tables.h
# The list of files that go into libunwind:
libunwind_la_SOURCES_arm = $(libunwind_la_SOURCES_arm_common) \
@@ -146,13 +146,15 @@ libunwind_la_SOURCES_arm = $(libunwind_la_SOURCES_arm_common) \
arm/getcontext.S \
arm/Lcreate_addr_space.c arm/Lget_proc_info.c arm/Lget_save_loc.c \
arm/Lglobal.c arm/Linit.c arm/Linit_local.c arm/Linit_remote.c \
- arm/Lis_signal_frame.c arm/Lregs.c arm/Lresume.c arm/Lstep.c
+ arm/Lis_signal_frame.c arm/Lregs.c arm/Lresume.c arm/Lstep.c \
+ arm/Lex_tables.c
libunwind_arm_la_SOURCES_arm = $(libunwind_la_SOURCES_arm_common) \
$(libunwind_la_SOURCES_generic) \
arm/Gcreate_addr_space.c arm/Gget_proc_info.c arm/Gget_save_loc.c \
arm/Gglobal.c arm/Ginit.c arm/Ginit_local.c arm/Ginit_remote.c \
- arm/Gis_signal_frame.c arm/Gregs.c arm/Gresume.c arm/Gstep.c
+ arm/Gis_signal_frame.c arm/Gregs.c arm/Gresume.c arm/Gstep.c \
+ arm/Gex_tables.c
# The list of files that go both into libunwind and libunwind-ia64:
noinst_HEADERS += ia64/init.h ia64/offsets.h ia64/regs.h \
diff --git a/src/arm/ex_tables.c b/src/arm/Gex_tables.c
index 499febe6..035b24a6 100644
--- a/src/arm/ex_tables.c
+++ b/src/arm/Gex_tables.c
@@ -35,6 +35,12 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
#define ARM_EXIDX_TABLE_LIMIT 32
+#define arm_exidx_tables UNW_OBJ(arm_exidx_tables)
+#define arm_exidx_table_count UNW_OBJ(arm_exidx_table_count)
+#define arm_exidx_table_find UNW_OBJ(arm_exidx_table_find)
+#define arm_exidx_table_reset_all UNW_OBJ(arm_exidx_table_reset_all)
+#define arm_exidx_init_local_cb UNW_OBJ(arm_exidx_init_local_cb)
+
enum arm_exbuf_cmd_flags {
ARM_EXIDX_VFP_SHIFT_16 = 1 << 16,
ARM_EXIDX_VFP_DOUBLE = 1 << 17,
diff --git a/src/arm/Gstep.c b/src/arm/Gstep.c
index f0360939..9164d78e 100644
--- a/src/arm/Gstep.c
+++ b/src/arm/Gstep.c
@@ -27,6 +27,8 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
#include "offsets.h"
#include "ex_tables.h"
+#define arm_exidx_step UNW_OBJ(arm_exidx_step)
+
static inline int
arm_exidx_step (struct cursor *c)
{
diff --git a/src/arm/Lex_tables.c b/src/arm/Lex_tables.c
new file mode 100644
index 00000000..4a4f925c
--- /dev/null
+++ b/src/arm/Lex_tables.c
@@ -0,0 +1,5 @@
+#define UNW_LOCAL_ONLY
+#include <libunwind.h>
+#if defined(UNW_LOCAL_ONLY) && !defined(UNW_REMOTE_ONLY)
+#include "Gex_tables.c"
+#endif