2 // RUN: llvm-mc -filetype=obj -triple=aarch64-none-linux-gnu %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: 0x30000 R_AARCH64_IRELATIVE
26 // CHECK-NEXT: 0x30008 R_AARCH64_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: $x.0
41 // CHECK-NEXT: Value: 0x20000
42 // CHECK-NEXT: Size: 0
43 // CHECK-NEXT: Binding: Local
44 // CHECK-NEXT: Type: None
45 // CHECK-NEXT: Other: 0
46 // CHECK-NEXT: Section: .text
48 // CHECK-NEXT: Symbol {
49 // CHECK-NEXT: Name: __rela_iplt_end
50 // CHECK-NEXT: Value: 0x10188
51 // CHECK-NEXT: Size: 0
52 // CHECK-NEXT: Binding: Local
53 // CHECK-NEXT: Type: None
54 // CHECK-NEXT: Other [
55 // CHECK-NEXT: STV_HIDDEN
57 // CHECK-NEXT: Section: .rela.plt
59 // CHECK-NEXT: Symbol {
60 // CHECK-NEXT: Name: __rela_iplt_start
61 // CHECK-NEXT: Value: 0x10158
62 // CHECK-NEXT: Size: 0
63 // CHECK-NEXT: Binding: Local
64 // CHECK-NEXT: Type: None
65 // CHECK-NEXT: Other [
66 // CHECK-NEXT: STV_HIDDEN
68 // CHECK-NEXT: Section: .rela.plt
70 // CHECK-NEXT: Symbol {
71 // CHECK-NEXT: Name: _start
72 // CHECK-NEXT: Value: 0x20008
73 // CHECK-NEXT: Size: 0
74 // CHECK-NEXT: Binding: Global
75 // CHECK-NEXT: Type: None
76 // CHECK-NEXT: Other: 0
77 // CHECK-NEXT: Section: .text
79 // CHECK-NEXT: Symbol {
80 // CHECK-NEXT: Name: bar
81 // CHECK-NEXT: Value: 0x20004
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
88 // CHECK-NEXT: Symbol {
89 // CHECK-NEXT: Name: foo
90 // CHECK-NEXT: Value: 0x20000
91 // CHECK-NEXT: Size: 0
92 // CHECK-NEXT: Binding: Global
93 // CHECK-NEXT: Type: GNU_IFunc
94 // CHECK-NEXT: Other: 0
95 // CHECK-NEXT: Section: .text
102 // DISASM: Disassembly of section .text:
104 // DISASM-NEXT: 20000: c0 03 5f d6 ret
106 // DISASM-NEXT: 20004: c0 03 5f d6 ret
108 // DISASM-NEXT: 20008: 06 00 00 94 bl #24
109 // DISASM-NEXT: 2000c: 09 00 00 94 bl #36
110 // DISASM-NEXT: 20010: 42 60 05 91 add x2, x2, #344
111 // DISASM-NEXT: 20014: 42 20 06 91 add x2, x2, #392
112 // DISASM-NEXT: Disassembly of section .plt:
113 // DISASM-NEXT: .plt:
114 // DISASM-NEXT: 20020: 90 00 00 90 adrp x16, #65536
115 // DISASM-NEXT: 20024: 11 02 40 f9 ldr x17, [x16]
116 // DISASM-NEXT: 20028: 10 02 00 91 add x16, x16, #0
117 // DISASM-NEXT: 2002c: 20 02 1f d6 br x17
118 // DISASM-NEXT: 20030: 90 00 00 90 adrp x16, #65536
119 // DISASM-NEXT: 20034: 11 06 40 f9 ldr x17, [x16, #8]
120 // DISASM-NEXT: 20038: 10 22 00 91 add x16, x16, #8
121 // DISASM-NEXT: 2003c: 20 02 1f d6 br x17
124 .type foo STT_GNU_IFUNC
129 .type bar STT_GNU_IFUNC
138 add x2, x2, :lo12:__rela_iplt_start
139 add x2, x2, :lo12:__rela_iplt_end