diff options
Diffstat (limited to 'test/ELF/arm-tls-norelax-gd-ie.s')
-rw-r--r-- | test/ELF/arm-tls-norelax-gd-ie.s | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/test/ELF/arm-tls-norelax-gd-ie.s b/test/ELF/arm-tls-norelax-gd-ie.s new file mode 100644 index 0000000000000..3bd3db08ccf49 --- /dev/null +++ b/test/ELF/arm-tls-norelax-gd-ie.s @@ -0,0 +1,30 @@ +// RUN: llvm-mc -filetype=obj -triple=armv7a-none-linux-gnueabi %p/Inputs/arm-tls-get-addr.s -o %t1 +// RUN: ld.lld %t1 --shared -o %t1.so +// RUN: llvm-mc %s -o %t.o -filetype=obj -triple=armv7a-linux-gnueabi +// RUN: ld.lld %t1.so %t.o -o %t +// RUN: llvm-readobj -s -dyn-relocations %t | FileCheck %s +// REQUIRES: arm + +// This tls global-dynamic sequence is with respect to a preemptible symbol but +// is in an application so a relaxation to Initial Exec would normally be +// possible. This would result in an assertion failure on ARM as the +// relaxation functions can't be implemented on ARM. Check that the sequence +// is handled as global dynamic + + .text + .syntax unified + .globl func + .p2align 2 + .type func,%function +func: +.L0: + .globl __tls_get_addr + bl __tls_get_addr + bx lr + .p2align 2 + .Lt0: .word y(TLSGD) + (. - .L0 - 8) + +// CHECK: Dynamic Relocations { +// CHECK-NEXT: 0x12078 R_ARM_TLS_DTPMOD32 y +// CHECK-NEXT: 0x1207C R_ARM_TLS_DTPOFF32 y +// CHECK-NEXT: 0x1300C R_ARM_JUMP_SLOT __tls_get_addr |