2 // RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t.o
3 // RUN: ld.lld -static %t.o -o %tout
4 // RUN: llvm-objdump -d %tout | FileCheck %s --check-prefix=DISASM
5 // RUN: llvm-readobj -r -symbols -sections %tout | FileCheck %s
10 // CHECK-NEXT: Name: .rela.plt
11 // CHECK-NEXT: Type: SHT_RELA
12 // CHECK-NEXT: Flags [
13 // CHECK-NEXT: SHF_ALLOC
15 // CHECK-NEXT: Address: [[RELA:.*]]
16 // CHECK-NEXT: Offset: 0x158
17 // CHECK-NEXT: Size: 48
18 // CHECK-NEXT: Link: 0
19 // CHECK-NEXT: Info: 0
20 // CHECK-NEXT: AddressAlignment: 8
21 // CHECK-NEXT: EntrySize: 24
23 // CHECK: Relocations [
24 // CHECK-NEXT: Section ({{.*}}) .rela.plt {
25 // CHECK-NEXT: 0x202000 R_X86_64_IRELATIVE
26 // CHECK-NEXT: 0x202008 R_X86_64_IRELATIVE
30 // CHECK-NEXT: Symbol {
32 // CHECK-NEXT: Value: 0x0
33 // CHECK-NEXT: Size: 0
34 // CHECK-NEXT: Binding: Local
35 // CHECK-NEXT: Type: None
36 // CHECK-NEXT: Other: 0
37 // CHECK-NEXT: Section: Undefined
39 // CHECK-NEXT: Symbol {
40 // CHECK-NEXT: Name: __rela_iplt_end
41 // CHECK-NEXT: Value: 0x200188
42 // CHECK-NEXT: Size: 0
43 // CHECK-NEXT: Binding: Local
44 // CHECK-NEXT: Type: None
45 // CHECK-NEXT: Other [
46 // CHECK-NEXT: STV_HIDDEN
48 // CHECK-NEXT: Section: .rela.plt
50 // CHECK-NEXT: Symbol {
51 // CHECK-NEXT: Name: __rela_iplt_start
52 // CHECK-NEXT: Value: [[RELA]]
53 // CHECK-NEXT: Size: 0
54 // CHECK-NEXT: Binding: Local
55 // CHECK-NEXT: Type: None
56 // CHECK-NEXT: Other [
57 // CHECK-NEXT: STV_HIDDEN
59 // CHECK-NEXT: Section: .rela.plt
61 // CHECK-NEXT: Symbol {
62 // CHECK-NEXT: Name: _start
63 // CHECK-NEXT: Value: 0x201002
64 // CHECK-NEXT: Size: 0
65 // CHECK-NEXT: Binding: Global
66 // CHECK-NEXT: Type: None
67 // CHECK-NEXT: Other: 0
68 // CHECK-NEXT: Section: .text
70 // CHECK-NEXT: Symbol {
71 // CHECK-NEXT: Name: bar
72 // CHECK-NEXT: Value: 0x201001
73 // CHECK-NEXT: Size: 0
74 // CHECK-NEXT: Binding: Global
75 // CHECK-NEXT: Type: GNU_IFunc
76 // CHECK-NEXT: Other: 0
77 // CHECK-NEXT: Section: .text
79 // CHECK-NEXT: Symbol {
80 // CHECK-NEXT: Name: foo
81 // CHECK-NEXT: Value: 0x201000
82 // CHECK-NEXT: Size: 0
83 // CHECK-NEXT: Binding: Global
84 // CHECK-NEXT: Type: GNU_IFunc
85 // CHECK-NEXT: Other: 0
86 // CHECK-NEXT: Section: .text
90 // DISASM: Disassembly of section .text:
92 // DISASM-NEXT: 201000: {{.*}} retq
94 // DISASM-NEXT: 201001: {{.*}} retq
96 // DISASM-NEXT: 201002: {{.*}} callq 25
97 // DISASM-NEXT: 201007: {{.*}} callq 36
98 // DISASM-NEXT: 20100c: {{.*}} movl $2097496, %edx
99 // DISASM-NEXT: 201011: {{.*}} movl $2097544, %edx
100 // DISASM-NEXT: 201016: {{.*}} movl $2097545, %edx
101 // DISASM-NEXT: Disassembly of section .plt:
102 // DISASM-NEXT: .plt:
103 // DISASM-NEXT: 201020: {{.*}} jmpq *4058(%rip)
104 // DISASM-NEXT: 201026: {{.*}} pushq $0
105 // DISASM-NEXT: 20102b: {{.*}} jmp -32 <_start+0xe>
106 // DISASM-NEXT: 201030: {{.*}} jmpq *4050(%rip)
107 // DISASM-NEXT: 201036: {{.*}} pushq $1
108 // DISASM-NEXT: 20103b: {{.*}} jmp -48 <_start+0xe>
111 .type foo STT_GNU_IFUNC
116 .type bar STT_GNU_IFUNC
125 movl $__rela_iplt_start,%edx
126 movl $__rela_iplt_end,%edx
127 movl $__rela_iplt_end + 1,%edx