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
Cr-Mirrored-From: sso://chromium.googlesource.com/_direct/external/github.com/llvm/llvm-project
Cr-Mirrored-Commit: 4dd1292c3e2009c0814b294eec591ab1e7cc53ef
diff --git a/src/AddressSpace.hpp b/src/AddressSpace.hpp
index 2229de5..b15eb5c 100644
--- a/src/AddressSpace.hpp
+++ b/src/AddressSpace.hpp
@@ -35,15 +35,11 @@
#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 @@
} 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;
}
}