summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEd Schouten <ed@nuxi.nl>2017-03-07 15:21:57 +0000
committerEd Schouten <ed@nuxi.nl>2017-03-07 15:21:57 +0000
commit4dd1292c3e2009c0814b294eec591ab1e7cc53ef (patch)
tree07b112633bfa1d55eb086801fe8f3f5070303446
parent4743e2d9b94be8a43b6e940bae25245cc49a51a4 (diff)
downloadbcm5719-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.hpp11
-rw-r--r--libunwind/src/UnwindCursor.hpp3
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)
OpenPOWER on IntegriCloud