[libcxx-commits] [libcxxabi] 3255578 - [libcxxabi][ARM] Make CXX_end_cleanup compatible with Armv6-M

Daniel Kiss via libcxx-commits libcxx-commits at lists.llvm.org
Thu Nov 4 08:29:45 PDT 2021


Author: Daniel Kiss
Date: 2021-11-04T16:29:39+01:00
New Revision: 3255578ee1dbb5561025ac89cd33ba08e8f26efb

URL: https://github.com/llvm/llvm-project/commit/3255578ee1dbb5561025ac89cd33ba08e8f26efb
DIFF: https://github.com/llvm/llvm-project/commit/3255578ee1dbb5561025ac89cd33ba08e8f26efb.diff

LOG: [libcxxabi][ARM] Make CXX_end_cleanup compatible with Armv6-M

On Armv6-M the branch may not able to reach the _Unwind_Resume function because it's relocation(R_ARM_THM_JUMP11) is in -2048, 2047 range only.

Reviewed By: chill, stuij, lenary

Differential Revision: https://reviews.llvm.org/D113181

Added: 
    

Modified: 
    libcxxabi/src/cxa_exception.cpp

Removed: 
    


################################################################################
diff  --git a/libcxxabi/src/cxa_exception.cpp b/libcxxabi/src/cxa_exception.cpp
index 7044cb9a43f3a..c8779a0a804be 100644
--- a/libcxxabi/src/cxa_exception.cpp
+++ b/libcxxabi/src/cxa_exception.cpp
@@ -382,7 +382,8 @@ asm("	.pushsection	.text.__cxa_end_cleanup,\"ax\",%progbits\n"
     "	bl	__cxa_end_cleanup_impl\n"
     "	pop	{r1, r2, r3, r4}\n"
     "	mov	lr, r4\n"
-    "	b	_Unwind_Resume\n"
+    "	ldr r4,	=_Unwind_Resume\n"
+    "	bx	r4\n"
     "	.popsection");
 #endif // defined(_LIBCXXABI_ARM_EHABI)
 


        


More information about the libcxx-commits mailing list