summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSaleem Abdulrasool <compnerd@compnerd.org>2016-08-28 20:10:33 +0000
committerSaleem Abdulrasool <compnerd@compnerd.org>2016-08-28 20:10:33 +0000
commit9d5977b1993e1ee59e3c5dd93d1c66f46cfacf84 (patch)
treef66eb06e82d6118b46f6e4d4724c71f3f997a46b
parenta13a2056f68e97284e05c4cdf0967114de42147d (diff)
downloadbcm5719-llvm-9d5977b1993e1ee59e3c5dd93d1c66f46cfacf84.tar.gz
bcm5719-llvm-9d5977b1993e1ee59e3c5dd93d1c66f46cfacf84.zip
EHABI: fail on WMMX vops without WMMX support
When the unwinder is built without WMMX support, if we encounter a WMMX register virtual operation, early rather than attempting to continue as we would not have saved the register set anyways. This should never come down this path, but, just in case, help it abort more explicitly. llvm-svn: 279941
-rw-r--r--libunwind/src/Unwind-EHABI.cpp14
1 files changed, 10 insertions, 4 deletions
diff --git a/libunwind/src/Unwind-EHABI.cpp b/libunwind/src/Unwind-EHABI.cpp
index 0e9b03491b0..c6a66a33bde 100644
--- a/libunwind/src/Unwind-EHABI.cpp
+++ b/libunwind/src/Unwind-EHABI.cpp
@@ -893,8 +893,11 @@ _Unwind_VRS_Pop(_Unwind_Context *context, _Unwind_VRS_RegClass regclass,
static_cast<void *>(context), regclass, discriminator,
representation);
switch (regclass) {
- case _UVRSC_CORE:
- case _UVRSC_WMMXC: {
+ case _UVRSC_WMMXC:
+#if !defined(__ARM_WMMX)
+ break;
+#endif
+ case _UVRSC_CORE: {
if (representation != _UVRSD_UINT32)
return _UVRSR_FAILED;
// When popping SP from the stack, we don't want to override it from the
@@ -922,8 +925,11 @@ _Unwind_VRS_Pop(_Unwind_Context *context, _Unwind_VRS_RegClass regclass,
}
return _UVRSR_OK;
}
- case _UVRSC_VFP:
- case _UVRSC_WMMXD: {
+ case _UVRSC_WMMXD:
+#if !defined(__ARM_WMMX)
+ break;
+#endif
+ case _UVRSC_VFP: {
if (representation != _UVRSD_VFPX && representation != _UVRSD_DOUBLE)
return _UVRSR_FAILED;
uint32_t first = discriminator >> 16;
OpenPOWER on IntegriCloud