diff options
author | Ken Werner <ken.werner@linaro.org> | 2011-03-23 15:54:59 +0000 |
---|---|---|
committer | Arun Sharma <asharma@fb.com> | 2011-03-24 20:42:00 -0700 |
commit | cf8d5e41af582b9070576889dcc479397a19bf48 (patch) | |
tree | cedbe361b4d091838ba1fb9b8d845f118ee52a6f /include/tdep-arm | |
parent | 04fc88fa31ffac9e6189c4debd745c965473d1d4 (diff) | |
download | libunwind-cf8d5e41af582b9070576889dcc479397a19bf48.tar.gz |
Have the ARM extbtl-parser operate on the DWARF model directly.
This eliminates the arm_stackframe and therefore the need to synchronize the
two models. It also clears the way for unwinding call stacks with mixed
DWARF- and extbl-frames.
Signed-off-by: Ken Werner <ken.werner@linaro.org>
Diffstat (limited to 'include/tdep-arm')
-rw-r--r-- | include/tdep-arm/ex_tables.h | 35 | ||||
-rw-r--r-- | include/tdep-arm/libunwind_i.h | 1 |
2 files changed, 4 insertions, 32 deletions
diff --git a/include/tdep-arm/ex_tables.h b/include/tdep-arm/ex_tables.h index 3805c608..7369b35c 100644 --- a/include/tdep-arm/ex_tables.h +++ b/include/tdep-arm/ex_tables.h @@ -64,16 +64,12 @@ enum arm_exbuf_cmd_flags { #define ARM_EXBUF_COUNT(x) ((x) & 0x0f) #define ARM_EXBUF_END(x) (ARM_EXBUF_START(x) + ARM_EXBUF_COUNT(x)) -struct arm_exbuf_callback_data { - uint8_t ops[11]; - uint8_t n_ops; +struct arm_exbuf_data +{ arm_exbuf_cmd_t cmd; uint32_t data; - void *cb_data; }; -typedef int (*arm_exbuf_callback_t)(struct arm_exbuf_callback_data *aecb); - static inline void * prel31_to_addr (void *addr) { @@ -99,30 +95,7 @@ int arm_exidx_entry_extract (struct elf_image *ei, int arm_exidx_extract (struct arm_exidx_entry *entry, uint8_t *buf); int arm_exidx_decode (const uint8_t *buf, uint8_t len, - arm_exbuf_callback_t cb, void *cb_data); - -struct arm_stackframe { - void *fp; - void *sp; - void *lr; - void *pc; -}; - -struct arm_exidx_vrs { - uint32_t vrs[16]; -}; - -enum arm_exidx_vrs_regs { - FP_thumb = 7, - FP_arm = 11, - SP = 13, - LR = 14, - PC = 15, -}; - -void arm_exidx_frame_to_vrs(struct arm_stackframe *f, struct arm_exidx_vrs *s); -int arm_exidx_vrs_to_frame(struct arm_exidx_vrs *s, struct arm_stackframe *f); - -int arm_exidx_vrs_callback (struct arm_exbuf_callback_data *aecd); + struct dwarf_cursor *c); +int arm_exidx_apply_cmd (struct arm_exbuf_data *edata, struct dwarf_cursor *c); #endif // ARM_EX_TABLES_H diff --git a/include/tdep-arm/libunwind_i.h b/include/tdep-arm/libunwind_i.h index 839415cc..acaf6d71 100644 --- a/include/tdep-arm/libunwind_i.h +++ b/include/tdep-arm/libunwind_i.h @@ -55,7 +55,6 @@ struct unw_addr_space struct cursor { struct dwarf_cursor dwarf; /* must be first */ - struct arm_stackframe frame; unw_word_t sigcontext_addr; }; |