diff options
author | Ed Schouten <ed@nuxi.nl> | 2017-03-07 15:21:57 +0000 |
---|---|---|
committer | Ed Schouten <ed@nuxi.nl> | 2017-03-07 15:21:57 +0000 |
commit | 4dd1292c3e2009c0814b294eec591ab1e7cc53ef (patch) | |
tree | 07b112633bfa1d55eb086801fe8f3f5070303446 | |
parent | 4743e2d9b94be8a43b6e940bae25245cc49a51a4 (diff) | |
download | bcm5719-llvm-4dd1292c3e2009c0814b294eec591ab1e7cc53ef.tar.gz bcm5719-llvm-4dd1292c3e2009c0814b294eec591ab1e7cc53ef.zip |
Let arm_section_length store the number of bytes.
Exception section data that we extract for DWARF gets stored as the
offset and the number of bytes. For ARM exception info, we seem to
deviate from this by storing the number of entries. Attempt to make this
more consistent.
By storing the number of bytes, we can get rid of the EHTEntry structure
declared in AddressSpace.hpp. In UnwindCursor.hpp we already have
another structure declared for the same purpose.
Reviewed by: Keith Walker
Differential Revision: https://reviews.llvm.org/D30681
llvm-svn: 297149
-rw-r--r-- | libunwind/src/AddressSpace.hpp | 11 | ||||
-rw-r--r-- | libunwind/src/UnwindCursor.hpp | 3 |
2 files changed, 5 insertions, 9 deletions
diff --git a/libunwind/src/AddressSpace.hpp b/libunwind/src/AddressSpace.hpp index 2229de503e1..b15eb5c60be 100644 --- a/libunwind/src/AddressSpace.hpp +++ b/libunwind/src/AddressSpace.hpp @@ -35,15 +35,11 @@ namespace libunwind { #include "Registers.hpp" #if _LIBUNWIND_ARM_EHABI -struct EHTEntry { - uint32_t functionOffset; - uint32_t unwindOpcodes; -}; #if defined(_LIBUNWIND_IS_BAREMETAL) // When statically linked on bare-metal, the symbols for the EH table are looked // up without going through the dynamic loader. -extern EHTEntry __exidx_start; -extern EHTEntry __exidx_end; +extern char __exidx_start; +extern char __exidx_end; #else #include <link.h> #endif // !defined(_LIBUNWIND_IS_BAREMETAL) @@ -437,8 +433,7 @@ inline bool LocalAddressSpace::findUnwindSections(pint_t targetAddr, } else if (phdr->p_type == PT_ARM_EXIDX) { uintptr_t exidx_start = pinfo->dlpi_addr + phdr->p_vaddr; cbdata->sects->arm_section = exidx_start; - cbdata->sects->arm_section_length = phdr->p_memsz / - sizeof(EHTEntry); + cbdata->sects->arm_section_length = phdr->p_memsz; found_hdr = true; } } diff --git a/libunwind/src/UnwindCursor.hpp b/libunwind/src/UnwindCursor.hpp index 4ed5a6ec069..7a4f0774783 100644 --- a/libunwind/src/UnwindCursor.hpp +++ b/libunwind/src/UnwindCursor.hpp @@ -693,7 +693,8 @@ struct EHABISectionIterator { return _Self(addressSpace, sects, 0); } static _Self end(A& addressSpace, const UnwindInfoSections& sects) { - return _Self(addressSpace, sects, sects.arm_section_length); + return _Self(addressSpace, sects, + sects.arm_section_length / sizeof(EHABIIndexEntry)); } EHABISectionIterator(A& addressSpace, const UnwindInfoSections& sects, size_t i) |