|
| 1 | +// RUN: llvm-mc %s -o %t.o -filetype=obj -triple=armv7a-linux-gnueabi |
| 2 | +// RUN: ld.lld %t.o -o %t.so -shared |
| 3 | +// RUN: llvm-readobj -s -dyn-relocations %t.so | FileCheck --check-prefix=SEC %s |
| 4 | +// RUN: llvm-objdump -d -triple=armv7a-linux-gnueabi %t.so | FileCheck %s |
| 5 | +// REQUIRES: arm |
| 6 | + |
| 7 | +// Test the handling of the local-dynamic TLS model. Dynamic loader finds |
| 8 | +// module index R_ARM_TLS_DTPMOD32. The offset in the next GOT slot is 0 |
| 9 | +// The R_ARM_TLS_LDO is the offset of the variable within the TLS block. |
| 10 | + .global __tls_get_addr |
| 11 | + .text |
| 12 | + .p2align 2 |
| 13 | + .global _start |
| 14 | + .syntax unified |
| 15 | + .arm |
| 16 | + .type _start, %function |
| 17 | +_start: |
| 18 | +.L0: |
| 19 | + nop |
| 20 | + |
| 21 | + .word x(tlsldm) + (. - .L0 - 8) |
| 22 | + .word x(tlsldo) |
| 23 | + .word y(tlsldo) |
| 24 | + |
| 25 | + .section .tbss,"awT",%nobits |
| 26 | + .p2align 2 |
| 27 | + .type y, %object |
| 28 | +y: |
| 29 | + .space 4 |
| 30 | + .section .tdata,"awT",%progbits |
| 31 | + .p2align 2 |
| 32 | + .type x, %object |
| 33 | +x: |
| 34 | + .word 10 |
| 35 | + |
| 36 | +// SEC: Name: .tdata |
| 37 | +// SEC-NEXT: Type: SHT_PROGBITS |
| 38 | +// SEC-NEXT: Flags [ |
| 39 | +// SEC-NEXT: SHF_ALLOC |
| 40 | +// SEC-NEXT: SHF_TLS |
| 41 | +// SEC-NEXT: SHF_WRITE |
| 42 | +// SEC-NEXT: ] |
| 43 | +// SEC-NEXT: Address: 0x2000 |
| 44 | +// SEC: Size: 4 |
| 45 | +// SEC: Name: .tbss |
| 46 | +// SEC-NEXT: Type: SHT_NOBITS (0x8) |
| 47 | +// SEC-NEXT: Flags [ |
| 48 | +// SEC-NEXT: SHF_ALLOC |
| 49 | +// SEC-NEXT: SHF_TLS |
| 50 | +// SEC-NEXT: SHF_WRITE |
| 51 | +// SEC-NEXT: ] |
| 52 | +// SEC-NEXT: Address: 0x2004 |
| 53 | +// SEC: Size: 4 |
| 54 | + |
| 55 | +// SEC: Dynamic Relocations { |
| 56 | +// SEC-NEXT: 0x204C R_ARM_TLS_DTPMOD32 - 0x0 |
| 57 | + |
| 58 | +// CHECK: Disassembly of section .text: |
| 59 | +// CHECK-NEXT: _start: |
| 60 | +// CHECK-NEXT: 1000: 00 f0 20 e3 nop |
| 61 | + |
| 62 | +// (0x204c - 0x1004) + (0x1004 - 0x1000 - 8) = 0x1044 |
| 63 | +// CHECK: 1004: 44 10 00 00 |
| 64 | +// CHECK-NEXT: 1008: 00 00 00 00 |
| 65 | +// CHECK-NEXT: 100c: 04 00 00 00 |
| 66 | + |
| 67 | +// CHECK-EXE: Disassembly of section .text: |
| 68 | +// CHECK-NEXT-EXE: _start: |
| 69 | +// CHECK-NEXT-EXE: 11000: 00 f0 20 e3 nop |
| 70 | + |
| 71 | +// CHECK-EXE: 11004: fc 0f 00 00 |
| 72 | +// CHECK-EXE: 11008: 00 00 00 00 |
| 73 | +// CHECK-EXE: 1100c: 04 00 00 00 |
0 commit comments