diff options
| author | George Rimar <grimar@accesssoftek.com> | 2015-11-13 16:28:53 +0000 |
|---|---|---|
| committer | George Rimar <grimar@accesssoftek.com> | 2015-11-13 16:28:53 +0000 |
| commit | 687138c7d1b14027e3fa7dbb69d3edffe57f21ec (patch) | |
| tree | 161d25b45d8eca44d1ac7de58bbb1dcc04667a3a /lld/test | |
| parent | 225d65f1e66d865076f57b31152357b4ad0e383f (diff) | |
| download | bcm5719-llvm-687138c7d1b14027e3fa7dbb69d3edffe57f21ec.tar.gz bcm5719-llvm-687138c7d1b14027e3fa7dbb69d3edffe57f21ec.zip | |
[ELF2] - Implemented R_X86_64_GOTTPOFF relocation
Generates single GOT entry, R_X86_64_TPOFF64 is added to RelaDyn.
Differential revision: http://reviews.llvm.org/D14621
llvm-svn: 253049
Diffstat (limited to 'lld/test')
| -rw-r--r-- | lld/test/elf2/Inputs/tls-got.s | 14 | ||||
| -rw-r--r-- | lld/test/elf2/tls-got.s | 58 |
2 files changed, 72 insertions, 0 deletions
diff --git a/lld/test/elf2/Inputs/tls-got.s b/lld/test/elf2/Inputs/tls-got.s new file mode 100644 index 00000000000..5681d001fd9 --- /dev/null +++ b/lld/test/elf2/Inputs/tls-got.s @@ -0,0 +1,14 @@ +.type tls0,@object +.section .tbss,"awT",@nobits +.globl tls0 +.align 4 +tls0: + .long 0 + .size tls0, 4 + +.type tls1,@object +.globl tls1 +.align 4 +tls1: + .long 0 + .size tls1, 4 diff --git a/lld/test/elf2/tls-got.s b/lld/test/elf2/tls-got.s new file mode 100644 index 00000000000..ed228fcee3c --- /dev/null +++ b/lld/test/elf2/tls-got.s @@ -0,0 +1,58 @@ +// RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t1.o +// RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %p/Inputs/tls-got.s -o %t2.o +// RUN: ld.lld2 -shared %t2.o -o %t2.so +// RUN: ld.lld2 -e main %t1.o %t2.so -o %t3 +// RUN: llvm-readobj -s -r %t3 | FileCheck %s +// RUN: llvm-objdump -d %t3 | FileCheck --check-prefix=DISASM %s + +// CHECK: Section { +// CHECK: Index: 8 +// CHECK-NEXT: Name: .got +// CHECK-NEXT: Type: SHT_PROGBITS +// CHECK-NEXT: Flags [ +// CHECK-NEXT: SHF_ALLOC +// CHECK-NEXT: SHF_WRITE +// CHECK-NEXT: ] +// CHECK-NEXT: Address: [[ADDR:.*]] +// CHECK-NEXT: Offset: 0x20A0 +// CHECK-NEXT: Size: 16 +// CHECK-NEXT: Link: 0 +// CHECK-NEXT: Info: 0 +// CHECK-NEXT: AddressAlignment: 8 +// CHECK-NEXT: EntrySize: 0 +// CHECK-NEXT: } + +// CHECK: Relocations [ +// CHECK-NEXT: Section (4) .rela.dyn { +// CHECK-NEXT: [[ADDR]] R_X86_64_TPOFF64 tls1 0x0 +// CHECK-NEXT: 0x120A8 R_X86_64_TPOFF64 tls0 0x0 +// CHECK-NEXT: } +// CHECK-NEXT: ] + +//0x11000 + 4249 + 7 = 0x120A0 +//0x1100A + 4247 + 7 = 0x120A8 +//0x11014 + 4237 + 7 = 0x120A8 +//DISASM: Disassembly of section .text: +//DISASM-NEXT: main: +//DISASM-NEXT: 11000: 48 8b 05 99 10 00 00 movq 4249(%rip), %rax +//DISASM-NEXT: 11007: 64 8b 00 movl %fs:(%rax), %eax +//DISASM-NEXT: 1100a: 48 8b 05 97 10 00 00 movq 4247(%rip), %rax +//DISASM-NEXT: 11011: 64 8b 00 movl %fs:(%rax), %eax +//DISASM-NEXT: 11014: 48 8b 05 8d 10 00 00 movq 4237(%rip), %rax +//DISASM-NEXT: 1101b: 64 8b 00 movl %fs:(%rax), %eax +//DISASM-NEXT: 1101e: c3 retq + +.section .tdata,"awT",@progbits + +.text + .globl main + .align 16, 0x90 + .type main,@function +main: + movq tls1@GOTTPOFF(%rip), %rax + movl %fs:0(%rax), %eax + movq tls0@GOTTPOFF(%rip), %rax + movl %fs:0(%rax), %eax + movq tls0@GOTTPOFF(%rip), %rax + movl %fs:0(%rax), %eax + ret |

