|
| 1 | +// RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t1.o |
| 2 | +// RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %p/Inputs/tls-got.s -o %t2.o |
| 3 | +// RUN: ld.lld2 -shared %t2.o -o %t2.so |
| 4 | +// RUN: ld.lld2 -e main %t1.o %t2.so -o %t3 |
| 5 | +// RUN: llvm-readobj -s -r %t3 | FileCheck %s |
| 6 | +// RUN: llvm-objdump -d %t3 | FileCheck --check-prefix=DISASM %s |
| 7 | + |
| 8 | +// CHECK: Section { |
| 9 | +// CHECK: Index: 8 |
| 10 | +// CHECK-NEXT: Name: .got |
| 11 | +// CHECK-NEXT: Type: SHT_PROGBITS |
| 12 | +// CHECK-NEXT: Flags [ |
| 13 | +// CHECK-NEXT: SHF_ALLOC |
| 14 | +// CHECK-NEXT: SHF_WRITE |
| 15 | +// CHECK-NEXT: ] |
| 16 | +// CHECK-NEXT: Address: [[ADDR:.*]] |
| 17 | +// CHECK-NEXT: Offset: 0x20A0 |
| 18 | +// CHECK-NEXT: Size: 16 |
| 19 | +// CHECK-NEXT: Link: 0 |
| 20 | +// CHECK-NEXT: Info: 0 |
| 21 | +// CHECK-NEXT: AddressAlignment: 8 |
| 22 | +// CHECK-NEXT: EntrySize: 0 |
| 23 | +// CHECK-NEXT: } |
| 24 | + |
| 25 | +// CHECK: Relocations [ |
| 26 | +// CHECK-NEXT: Section (4) .rela.dyn { |
| 27 | +// CHECK-NEXT: [[ADDR]] R_X86_64_TPOFF64 tls1 0x0 |
| 28 | +// CHECK-NEXT: 0x120A8 R_X86_64_TPOFF64 tls0 0x0 |
| 29 | +// CHECK-NEXT: } |
| 30 | +// CHECK-NEXT: ] |
| 31 | + |
| 32 | +//0x11000 + 4249 + 7 = 0x120A0 |
| 33 | +//0x1100A + 4247 + 7 = 0x120A8 |
| 34 | +//0x11014 + 4237 + 7 = 0x120A8 |
| 35 | +//DISASM: Disassembly of section .text: |
| 36 | +//DISASM-NEXT: main: |
| 37 | +//DISASM-NEXT: 11000: 48 8b 05 99 10 00 00 movq 4249(%rip), %rax |
| 38 | +//DISASM-NEXT: 11007: 64 8b 00 movl %fs:(%rax), %eax |
| 39 | +//DISASM-NEXT: 1100a: 48 8b 05 97 10 00 00 movq 4247(%rip), %rax |
| 40 | +//DISASM-NEXT: 11011: 64 8b 00 movl %fs:(%rax), %eax |
| 41 | +//DISASM-NEXT: 11014: 48 8b 05 8d 10 00 00 movq 4237(%rip), %rax |
| 42 | +//DISASM-NEXT: 1101b: 64 8b 00 movl %fs:(%rax), %eax |
| 43 | +//DISASM-NEXT: 1101e: c3 retq |
| 44 | + |
| 45 | +.section .tdata,"awT",@progbits |
| 46 | + |
| 47 | +.text |
| 48 | + .globl main |
| 49 | + .align 16, 0x90 |
| 50 | + .type main,@function |
| 51 | +main: |
| 52 | + movq tls1@GOTTPOFF(%rip), %rax |
| 53 | + movl %fs:0(%rax), %eax |
| 54 | + movq tls0@GOTTPOFF(%rip), %rax |
| 55 | + movl %fs:0(%rax), %eax |
| 56 | + movq tls0@GOTTPOFF(%rip), %rax |
| 57 | + movl %fs:0(%rax), %eax |
| 58 | + ret |
0 commit comments