1// REQUIRES: x86 2// RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t 3// RUN: ld.lld --hash-style=sysv -shared %t -o %tout 4// RUN: llvm-readobj --sections -r %tout | FileCheck %s 5// RUN: llvm-objdump -d %tout | FileCheck %s --check-prefix=DIS 6 7 leaq a@tlsld(%rip), %rdi 8 callq __tls_get_addr@PLT 9 leaq b@tlsld(%rip), %rdi 10 callq __tls_get_addr@PLT 11 leaq a@dtpoff(%rax), %rcx 12 leaq b@dtpoff(%rax), %rcx 13 .long b@dtpoff, 0 14 leaq c@tlsgd(%rip), %rdi 15 rex64 16 callq __tls_get_addr@PLT 17 leaq a@dtpoff(%rax), %rcx 18 // Initial Exec Model Code Sequence, II 19 movq c@gottpoff(%rip),%rax 20 movq %fs:(%rax),%rax 21 movabs $a@dtpoff, %rax 22 movabs $b@dtpoff, %rax 23 movabs $a@dtpoff, %rax 24 25 .global a 26 .hidden a 27 .section .tbss,"awT",@nobits 28 .align 4 29a: 30 .long 0 31 32 .section .tbss,"awT",@nobits 33 .align 4 34b: 35 .long 0 36 .global c 37 .section .tbss,"awT",@nobits 38 .align 4 39c: 40 .long 0 41 42// Get the address of the got, and check that it has 4 entries. 43 44// CHECK: Sections [ 45// CHECK: Name: .got ( 46// CHECK-NEXT: Type: SHT_PROGBITS 47// CHECK-NEXT: Flags [ 48// CHECK-NEXT: SHF_ALLOC 49// CHECK-NEXT: SHF_WRITE 50// CHECK-NEXT: ] 51// CHECK-NEXT: Address: 0x24A0 52// CHECK-NEXT: Offset: 53// CHECK-NEXT: Size: 40 54 55// CHECK: Relocations [ 56// CHECK: Section ({{.+}}) .rela.dyn { 57// CHECK-NEXT: 0x24A0 R_X86_64_DTPMOD64 - 0x0 58// CHECK-NEXT: 0x24B0 R_X86_64_DTPMOD64 c 0x0 59// CHECK-NEXT: 0x24B8 R_X86_64_DTPOFF64 c 0x0 60// CHECK-NEXT: 0x24C0 R_X86_64_TPOFF64 c 0x0 61// CHECK-NEXT: } 62 63// 4457 = (0x24A0 + -4) - (0x1330 + 3) // PC relative offset to got entry. 64// 4445 = (0x24B0 + -4) - (0x133c + 3) // PC relative offset to got entry. 65// 4427 = (0x24B8 + -4) - (0x135e + 3) // PC relative offset to got entry. 66// 4423 = (0x24C0 + -4) - (0x1372 + 3) // PC relative offset to got entry. 67 68// DIS: Disassembly of section .text: 69// DIS-EMPTY: 70// DIS-NEXT: <.text>: 71// DIS-NEXT: 1330: {{.+}} leaq 4457(%rip), %rdi 72// DIS-NEXT: {{.+}} callq 73// DIS-NEXT: 133c: {{.+}} leaq 4445(%rip), %rdi 74// DIS-NEXT: {{.+}} callq 75// DIS-NEXT: {{.+}} leaq (%rax), %rcx 76// DIS-NEXT: {{.+}} leaq 4(%rax), %rcx 77// DIS-NEXT: 04 00 78// DIS-NEXT: 00 00 79// DIS-NEXT: 00 00 80// DIS-NEXT: 00 00 81// DIS-NEXT: 135e: {{.+}} leaq 4427(%rip), %rdi 82// DIS-NEXT: {{.+}} callq 83// DIS-NEXT: {{.+}} leaq (%rax), %rcx 84// DIS-NEXT: 1372: {{.+}} movq 4423(%rip), %rax 85// DIS-NEXT: {{.+}} movq %fs:(%rax), %rax 86// DIS-NEXT: {{.+}} movabsq $0, %rax 87// DIS-NEXT: {{.+}} movabsq $4, %rax 88// DIS-NEXT: {{.+}} movabsq $0, %rax 89