summaryrefslogtreecommitdiffstats
path: root/lld/test
diff options
context:
space:
mode:
authorGeorge Rimar <grimar@accesssoftek.com>2015-11-13 16:28:53 +0000
committerGeorge Rimar <grimar@accesssoftek.com>2015-11-13 16:28:53 +0000
commit687138c7d1b14027e3fa7dbb69d3edffe57f21ec (patch)
tree161d25b45d8eca44d1ac7de58bbb1dcc04667a3a /lld/test
parent225d65f1e66d865076f57b31152357b4ad0e383f (diff)
downloadbcm5719-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.s14
-rw-r--r--lld/test/elf2/tls-got.s58
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
OpenPOWER on IntegriCloud