diff options
author | Ryan Prichard <rprichard@google.com> | 2019-10-18 15:56:34 -0700 |
---|---|---|
committer | android-build-merger <android-build-merger@google.com> | 2019-10-18 15:56:34 -0700 |
commit | 1d3fc5d822fbe5a9c2ed29220929d307f15782f0 (patch) | |
tree | de1d15ccb3346ef23ab1df635743a5a14a75ab44 | |
parent | 9252e73f810267659a5dc97247d4a9c5297aaf5d (diff) | |
parent | 249d6896be0c5179c6d6b4fd1e3d8f092a01582d (diff) | |
download | libunwind_llvm-1d3fc5d822fbe5a9c2ed29220929d307f15782f0.tar.gz |
[UPSTREAM][libunwind][Android] Fix findUnwindSections for ARM EHABI Bionic am: 2d1e9b81f0
am: 249d6896be
Change-Id: Iae5df17171caa5dac881a1b6b61ebc91fa94fed2
-rw-r--r-- | src/AddressSpace.hpp | 14 | ||||
-rw-r--r-- | src/UnwindCursor.hpp | 5 |
2 files changed, 11 insertions, 8 deletions
diff --git a/src/AddressSpace.hpp b/src/AddressSpace.hpp index fb370ad..18e7228 100644 --- a/src/AddressSpace.hpp +++ b/src/AddressSpace.hpp @@ -29,6 +29,13 @@ #include <dlfcn.h> #endif +#if defined(_LIBUNWIND_ARM_EHABI) +struct EHABIIndexEntry { + uint32_t functionOffset; + uint32_t data; +}; +#endif + #ifdef __APPLE__ #include <mach-o/getsect.h> namespace libunwind { @@ -459,12 +466,13 @@ inline bool LocalAddressSpace::findUnwindSections(pint_t targetAddr, (void)targetAddr; (void)info; return true; -#elif defined(_LIBUNWIND_ARM_EHABI) && defined(__BIONIC__) && \ - (__ANDROID_API__ < 21) +#elif defined(_LIBUNWIND_ARM_EHABI) && defined(__BIONIC__) + // For ARM EHABI, Bionic didn't implement dl_iterate_phdr until API 21. After + // API 21, dl_iterate_phdr exists, but dl_unwind_find_exidx is much faster. int length = 0; info.arm_section = (uintptr_t)dl_unwind_find_exidx((_Unwind_Ptr)targetAddr, &length); - info.arm_section_length = (uintptr_t)length; + info.arm_section_length = (uintptr_t)length * sizeof(EHABIIndexEntry); if (info.arm_section && info.arm_section_length) return true; #elif defined(_LIBUNWIND_ARM_EHABI) || defined(_LIBUNWIND_SUPPORT_DWARF_UNWIND) diff --git a/src/UnwindCursor.hpp b/src/UnwindCursor.hpp index 836de38..e2de6d5 100644 --- a/src/UnwindCursor.hpp +++ b/src/UnwindCursor.hpp @@ -1222,11 +1222,6 @@ template <typename A, typename R> bool UnwindCursor<A, R>::isSignalFrame() { #endif // defined(_LIBUNWIND_SUPPORT_SEH_UNWIND) #if defined(_LIBUNWIND_ARM_EHABI) -struct EHABIIndexEntry { - uint32_t functionOffset; - uint32_t data; -}; - template<typename A> struct EHABISectionIterator { typedef EHABISectionIterator _Self; |