diff options
author | Dan Albert <danalbert@google.com> | 2015-08-26 16:31:12 -0700 |
---|---|---|
committer | Dan Albert <danalbert@google.com> | 2015-08-26 23:35:45 +0000 |
commit | 7e7767c4fa112705f6145568dc6808d5bac41e61 (patch) | |
tree | c18de87e7048f854aca5fe42c4dcccc601c01930 | |
parent | 09306e9178fdd1dae850cc6613917a3bb7132788 (diff) | |
parent | 7a61b66a65505b63781e5c538c3ea1253e1a717d (diff) | |
download | libunwind_llvm-7e7767c4fa112705f6145568dc6808d5bac41e61.tar.gz |
Merge to upstream r245665.
Change-Id: I9dfd89231b605362874fa3f390b05dcbb532583b
-rw-r--r-- | src/DwarfInstructions.hpp | 2 | ||||
-rw-r--r-- | src/Registers.hpp | 2 | ||||
-rw-r--r-- | src/config.h | 3 | ||||
-rw-r--r-- | src/libunwind.cpp | 4 |
4 files changed, 7 insertions, 4 deletions
diff --git a/src/DwarfInstructions.hpp b/src/DwarfInstructions.hpp index dfe45fb..ce90aa0 100644 --- a/src/DwarfInstructions.hpp +++ b/src/DwarfInstructions.hpp @@ -170,7 +170,7 @@ int DwarfInstructions<A, R>::stepWithDwarf(A &addressSpace, pint_t pc, const int lastReg = R::lastDwarfRegNum(); assert((int)CFI_Parser<A>::kMaxRegisterNumber > lastReg && "register range too large"); - assert(lastReg <= (int)cieInfo.returnAddressRegister && + assert(lastReg >= (int)cieInfo.returnAddressRegister && "register range does not contain return address register"); for (int i = 0; i <= lastReg; ++i) { if (prolog.savedRegisters[i].location != diff --git a/src/Registers.hpp b/src/Registers.hpp index 4a441b7..d01ebf0 100644 --- a/src/Registers.hpp +++ b/src/Registers.hpp @@ -1689,7 +1689,7 @@ inline void Registers_arm::setFloatRegister(int regNum, unw_fpreg_t value) { _saved_vfp_d16_d31 = true; saveVFPv3(_vfp_d16_d31); } - _vfp_d16_d31[regNum - UNW_ARM_D0] = value; + _vfp_d16_d31[regNum - UNW_ARM_D16] = value; } else if (regNum >= UNW_ARM_WR0 && regNum <= UNW_ARM_WR15) { if (!_saved_iwmmx) { _saved_iwmmx = true; diff --git a/src/config.h b/src/config.h index c9ec087..9b24634 100644 --- a/src/config.h +++ b/src/config.h @@ -72,7 +72,8 @@ #define _LIBUNWIND_BUILD_ZERO_COST_APIS (defined(__i386__) || \ defined(__x86_64__) || \ - defined(__arm__)) + defined(__arm__) || \ + defined(__aarch64__)) #define _LIBUNWIND_BUILD_SJLJ_APIS 0 #define _LIBUNWIND_SUPPORT_FRAME_APIS (defined(__i386__) || \ defined(__x86_64__)) diff --git a/src/libunwind.cpp b/src/libunwind.cpp index 9a16e48..c408e06 100644 --- a/src/libunwind.cpp +++ b/src/libunwind.cpp @@ -58,12 +58,14 @@ _LIBUNWIND_EXPORT int unw_init_local(unw_cursor_t *cursor, #elif defined(__ppc__) new ((void *)cursor) UnwindCursor<LocalAddressSpace, Registers_ppc>( context, LocalAddressSpace::sThisAddressSpace); -#elif defined(__arm64__) +#elif defined(__arm64__) || defined(__aarch64__) new ((void *)cursor) UnwindCursor<LocalAddressSpace, Registers_arm64>( context, LocalAddressSpace::sThisAddressSpace); #elif _LIBUNWIND_ARM_EHABI new ((void *)cursor) UnwindCursor<LocalAddressSpace, Registers_arm>( context, LocalAddressSpace::sThisAddressSpace); +#else +#error Architecture not supported #endif AbstractUnwindCursor *co = (AbstractUnwindCursor *)cursor; co->setInfoBasedOnIPRegister(); |