summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Albert <danalbert@google.com>2015-08-26 23:36:07 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2015-08-26 23:36:07 +0000
commit749bc9b6ac3923021e7fb7b515bf2dfc32a10ffd (patch)
tree0ed8be1b59073c1387bcb75530668b456273df3a
parent6566b0f08c7e770fe929d8a7499f3448d456a631 (diff)
parent7e7767c4fa112705f6145568dc6808d5bac41e61 (diff)
downloadlibunwind_llvm-749bc9b6ac3923021e7fb7b515bf2dfc32a10ffd.tar.gz
Merge "Merge to upstream r245665."
-rw-r--r--src/DwarfInstructions.hpp2
-rw-r--r--src/Registers.hpp2
-rw-r--r--src/config.h3
-rw-r--r--src/libunwind.cpp4
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();