diff options
| author | Weiming Zhao <weimingz@codeaurora.org> | 2017-11-09 17:32:57 +0000 | 
|---|---|---|
| committer | Weiming Zhao <weimingz@codeaurora.org> | 2017-11-09 17:32:57 +0000 | 
| commit | e58bb5dc4e9aebf0ddc19b1c7b236250132887d6 (patch) | |
| tree | 10e77ca8ca062dbf3158d4702cd9507991014870 | |
| parent | 5d7edca316fd09377336e6ac0493ffb3e6629e7f (diff) | |
| download | bcm5719-llvm-e58bb5dc4e9aebf0ddc19b1c7b236250132887d6.tar.gz bcm5719-llvm-e58bb5dc4e9aebf0ddc19b1c7b236250132887d6.zip  | |
[Builtins] Do not use tailcall for Thumb1
Summary:
The `b` instruction in Thumb1 has limited range, which may cause link-time errors if the jump target is far away.
This patch guards the tailcalls for non-Thumb1
Reviewers: peter.smith, compnerd, rengolin, eli.friedman
Reviewed By: rengolin
Subscribers: joerg, dalias, javed.absar, llvm-commits
Differential Revision: https://reviews.llvm.org/D39700
llvm-svn: 317814
| -rw-r--r-- | compiler-rt/lib/builtins/arm/aeabi_memcmp.S | 6 | ||||
| -rw-r--r-- | compiler-rt/lib/builtins/arm/aeabi_memcpy.S | 6 | ||||
| -rw-r--r-- | compiler-rt/lib/builtins/arm/aeabi_memmove.S | 6 | ||||
| -rw-r--r-- | compiler-rt/lib/builtins/arm/aeabi_memset.S | 12 | 
4 files changed, 30 insertions, 0 deletions
diff --git a/compiler-rt/lib/builtins/arm/aeabi_memcmp.S b/compiler-rt/lib/builtins/arm/aeabi_memcmp.S index 33ea54848b2..e86d6113760 100644 --- a/compiler-rt/lib/builtins/arm/aeabi_memcmp.S +++ b/compiler-rt/lib/builtins/arm/aeabi_memcmp.S @@ -14,7 +14,13 @@          .syntax unified          .p2align 2  DEFINE_COMPILERRT_FUNCTION(__aeabi_memcmp) +#ifdef USE_THUMB_1 +        push    {r7, lr} +        bl      memcmp +        pop     {r7, pc} +#else          b       memcmp +#endif  END_COMPILERRT_FUNCTION(__aeabi_memcmp)  DEFINE_AEABI_FUNCTION_ALIAS(__aeabi_memcmp4, __aeabi_memcmp) diff --git a/compiler-rt/lib/builtins/arm/aeabi_memcpy.S b/compiler-rt/lib/builtins/arm/aeabi_memcpy.S index eabfa490494..e83c5fd4dbb 100644 --- a/compiler-rt/lib/builtins/arm/aeabi_memcpy.S +++ b/compiler-rt/lib/builtins/arm/aeabi_memcpy.S @@ -14,7 +14,13 @@          .syntax unified          .p2align 2  DEFINE_COMPILERRT_FUNCTION(__aeabi_memcpy) +#ifdef USE_THUMB_1 +        push    {r7, lr} +        bl      memcpy +        pop     {r7, pc} +#else          b       memcpy +#endif  END_COMPILERRT_FUNCTION(__aeabi_memcpy)  DEFINE_AEABI_FUNCTION_ALIAS(__aeabi_memcpy4, __aeabi_memcpy) diff --git a/compiler-rt/lib/builtins/arm/aeabi_memmove.S b/compiler-rt/lib/builtins/arm/aeabi_memmove.S index 1bf08c0d5b7..ee28300e46f 100644 --- a/compiler-rt/lib/builtins/arm/aeabi_memmove.S +++ b/compiler-rt/lib/builtins/arm/aeabi_memmove.S @@ -13,7 +13,13 @@          .p2align 2  DEFINE_COMPILERRT_FUNCTION(__aeabi_memmove) +#ifdef USE_THUMB_1 +        push    {r7, lr} +        bl      memmove +        pop     {r7, pc} +#else          b       memmove +#endif  END_COMPILERRT_FUNCTION(__aeabi_memmove)  DEFINE_AEABI_FUNCTION_ALIAS(__aeabi_memmove4, __aeabi_memmove) diff --git a/compiler-rt/lib/builtins/arm/aeabi_memset.S b/compiler-rt/lib/builtins/arm/aeabi_memset.S index b8022d9e6a4..0a678d7627e 100644 --- a/compiler-rt/lib/builtins/arm/aeabi_memset.S +++ b/compiler-rt/lib/builtins/arm/aeabi_memset.S @@ -18,7 +18,13 @@ DEFINE_COMPILERRT_FUNCTION(__aeabi_memset)          mov     r3, r1          mov     r1, r2          mov     r2, r3 +#ifdef USE_THUMB_1 +        push    {r7, lr} +        bl      memset +        pop     {r7, pc} +#else          b       memset +#endif  END_COMPILERRT_FUNCTION(__aeabi_memset)  DEFINE_AEABI_FUNCTION_ALIAS(__aeabi_memset4, __aeabi_memset) @@ -28,7 +34,13 @@ DEFINE_AEABI_FUNCTION_ALIAS(__aeabi_memset8, __aeabi_memset)  DEFINE_COMPILERRT_FUNCTION(__aeabi_memclr)          mov     r2, r1          movs    r1, #0 +#ifdef USE_THUMB_1 +        push    {r7, lr} +        bl      memset +        pop     {r7, pc} +#else          b       memset +#endif  END_COMPILERRT_FUNCTION(__aeabi_memclr)  DEFINE_AEABI_FUNCTION_ALIAS(__aeabi_memclr4, __aeabi_memclr)  | 

