]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - test/ELF/plt-aarch64.s
Vendor import of lld trunk r290819:
[FreeBSD/FreeBSD.git] / test / ELF / plt-aarch64.s
1 // RUN: llvm-mc -filetype=obj -triple=aarch64-pc-freebsd %s -o %t.o
2 // RUN: llvm-mc -filetype=obj -triple=aarch64-pc-freebsd %p/Inputs/plt-aarch64.s -o %t2.o
3 // RUN: ld.lld -shared %t2.o -o %t2.so
4 // RUN: ld.lld -shared %t.o %t2.so -o %t.so
5 // RUN: ld.lld %t.o %t2.so -o %t.exe
6 // RUN: llvm-readobj -s -r %t.so | FileCheck --check-prefix=CHECKDSO %s
7 // RUN: llvm-objdump -s -section=.got.plt %t.so | FileCheck --check-prefix=DUMPDSO %s
8 // RUN: llvm-objdump -d %t.so | FileCheck --check-prefix=DISASMDSO %s
9 // RUN: llvm-readobj -s -r %t.exe | FileCheck --check-prefix=CHECKEXE %s
10 // RUN: llvm-objdump -s -section=.got.plt %t.exe | FileCheck --check-prefix=DUMPEXE %s
11 // RUN: llvm-objdump -d %t.exe | FileCheck --check-prefix=DISASMEXE %s
12
13 // REQUIRES: aarch64
14
15 // CHECKDSO:     Name: .plt
16 // CHECKDSO-NEXT:     Type: SHT_PROGBITS
17 // CHECKDSO-NEXT:     Flags [
18 // CHECKDSO-NEXT:       SHF_ALLOC
19 // CHECKDSO-NEXT:       SHF_EXECINSTR
20 // CHECKDSO-NEXT:     ]
21 // CHECKDSO-NEXT:     Address: 0x10010
22 // CHECKDSO-NEXT:     Offset:
23 // CHECKDSO-NEXT:     Size: 80
24 // CHECKDSO-NEXT:     Link:
25 // CHECKDSO-NEXT:     Info:
26 // CHECKDSO-NEXT:     AddressAlignment: 16
27
28 // CHECKDSO:     Name: .got.plt
29 // CHECKDSO-NEXT:     Type: SHT_PROGBITS
30 // CHECKDSO-NEXT:     Flags [
31 // CHECKDSO-NEXT:       SHF_ALLOC
32 // CHECKDSO-NEXT:       SHF_WRITE
33 // CHECKDSO-NEXT:     ]
34 // CHECKDSO-NEXT:     Address: 0x30000
35 // CHECKDSO-NEXT:     Offset:
36 // CHECKDSO-NEXT:     Size: 48
37 // CHECKDSO-NEXT:     Link:
38 // CHECKDSO-NEXT:     Info:
39 // CHECKDSO-NEXT:     AddressAlignment: 8
40
41 // CHECKDSO: Relocations [
42 // CHECKDSO-NEXT:   Section ({{.*}}) .rela.plt {
43
44 // &(.got.plt[3]) = 0x30000 + 3 * 8 = 0x30018
45 // CHECKDSO-NEXT:     0x30018 R_AARCH64_JUMP_SLOT foo
46
47 // &(.got.plt[4]) = 0x30000 + 4 * 8 = 0x30020
48 // CHECKDSO-NEXT:     0x30020 R_AARCH64_JUMP_SLOT bar
49
50 // &(.got.plt[5]) = 0x30000 + 5 * 8 = 0x30028
51 // CHECKDSO-NEXT:     0x30028 R_AARCH64_JUMP_SLOT weak
52 // CHECKDSO-NEXT:   }
53 // CHECKDSO-NEXT: ]
54
55 // DUMPDSO: Contents of section .got.plt:
56 // .got.plt[0..2] = 0 (reserved)
57 // .got.plt[3..5] = .plt = 0x10010
58 // DUMPDSO-NEXT: 30000 00000000 00000000 00000000 00000000  ................
59 // DUMPDSO-NEXT: 30010 00000000 00000000 10000100 00000000  ................
60 // DUMPDSO-NEXT: 30020 10000100 00000000 10000100 00000000  ................
61
62 // DISASMDSO: _start:
63 // 0x10030 - 0x10000 = 0x30 = 48
64 // DISASMDSO-NEXT:     10000:   0c 00 00 14     b       #48
65 // 0x10040 - 0x10004 = 0x3c = 60
66 // DISASMDSO-NEXT:     10004:   0f 00 00 14     b       #60
67 // 0x10050 - 0x10008 = 0x48 = 72
68 // DISASMDSO-NEXT:     10008:   12 00 00 14     b       #72
69
70 // DISASMDSO: foo:
71 // DISASMDSO-NEXT:     1000c:   1f 20 03 d5     nop
72
73 // DISASMDSO: Disassembly of section .plt:
74 // DISASMDSO-NEXT: .plt:
75 // DISASMDSO-NEXT:     10010:   f0 7b bf a9     stp     x16, x30, [sp, #-16]!
76 // &(.got.plt[2]) = 0x3000 + 2 * 8 = 0x3010
77 // Page(0x30010) - Page(0x10014) = 0x30000 - 0x10000 = 0x20000 = 131072
78 // DISASMDSO-NEXT:     10014:   10 01 00 90     adrp    x16, #131072
79 // 0x3010 & 0xFFF = 0x10 = 16
80 // DISASMDSO-NEXT:     10018:   11 0a 40 f9 ldr x17, [x16, #16]
81 // DISASMDSO-NEXT:     1001c:   10 42 00 91     add     x16, x16, #16
82 // DISASMDSO-NEXT:     10020:   20 02 1f d6     br      x17
83 // DISASMDSO-NEXT:     10024:   1f 20 03 d5     nop
84 // DISASMDSO-NEXT:     10028:   1f 20 03 d5     nop
85 // DISASMDSO-NEXT:     1002c:   1f 20 03 d5     nop
86
87 // foo@plt
88 // Page(0x30018) - Page(0x10030) = 0x30000 - 0x10000 = 0x20000 = 131072
89 // DISASMDSO-NEXT:     10030:   10 01 00 90     adrp    x16, #131072
90 // 0x3018 & 0xFFF = 0x18 = 24
91 // DISASMDSO-NEXT:     10034:   11 0e 40 f9     ldr     x17, [x16, #24]
92 // DISASMDSO-NEXT:     10038:   10 62 00 91     add     x16, x16, #24
93 // DISASMDSO-NEXT:     1003c:   20 02 1f d6     br      x17
94
95 // bar@plt
96 // Page(0x30020) - Page(0x10040) = 0x30000 - 0x10000 = 0x20000 = 131072
97 // DISASMDSO-NEXT:     10040:   10 01 00 90     adrp    x16, #131072
98 // 0x3020 & 0xFFF = 0x20 = 32
99 // DISASMDSO-NEXT:     10044:   11 12 40 f9     ldr     x17, [x16, #32]
100 // DISASMDSO-NEXT:     10048:   10 82 00 91     add     x16, x16, #32
101 // DISASMDSO-NEXT:     1004c:   20 02 1f d6     br      x17
102
103 // weak@plt
104 // Page(0x30028) - Page(0x10050) = 0x30000 - 0x10000 = 0x20000 = 131072
105 // DISASMDSO-NEXT:     10050:   10 01 00 90     adrp    x16, #131072
106 // 0x3028 & 0xFFF = 0x28 = 40
107 // DISASMDSO-NEXT:     10054:   11 16 40 f9     ldr     x17, [x16, #40]
108 // DISASMDSO-NEXT:     10058:   10 a2 00 91     add     x16, x16, #40
109 // DISASMDSO-NEXT:     1005c:   20 02 1f d6     br      x17
110
111 // CHECKEXE:     Name: .plt
112 // CHECKEXE-NEXT:     Type: SHT_PROGBITS
113 // CHECKEXE-NEXT:     Flags [
114 // CHECKEXE-NEXT:       SHF_ALLOC
115 // CHECKEXE-NEXT:       SHF_EXECINSTR
116 // CHECKEXE-NEXT:     ]
117 // CHECKEXE-NEXT:     Address: 0x20010
118 // CHECKEXE-NEXT:     Offset:
119 // CHECKEXE-NEXT:     Size: 64
120 // CHECKEXE-NEXT:     Link:
121 // CHECKEXE-NEXT:     Info:
122 // CHECKEXE-NEXT:     AddressAlignment: 16
123
124 // CHECKEXE:     Name: .got.plt
125 // CHECKEXE-NEXT:     Type: SHT_PROGBITS
126 // CHECKEXE-NEXT:     Flags [
127 // CHECKEXE-NEXT:       SHF_ALLOC
128 // CHECKEXE-NEXT:       SHF_WRITE
129 // CHECKEXE-NEXT:     ]
130 // CHECKEXE-NEXT:     Address: 0x40000
131 // CHECKEXE-NEXT:     Offset:
132 // CHECKEXE-NEXT:     Size: 40
133 // CHECKEXE-NEXT:     Link:
134 // CHECKEXE-NEXT:     Info:
135 // CHECKEXE-NEXT:     AddressAlignment: 8
136
137 // CHECKEXE: Relocations [
138 // CHECKEXE-NEXT:   Section ({{.*}}) .rela.plt {
139
140 // &(.got.plt[3]) = 0x13000 + 3 * 8 = 0x13018
141 // CHECKEXE-NEXT:     0x40018 R_AARCH64_JUMP_SLOT bar 0x0
142
143 // &(.got.plt[4]) = 0x13000 + 4 * 8 = 0x13020
144 // CHECKEXE-NEXT:     0x40020 R_AARCH64_JUMP_SLOT weak 0x0
145 // CHECKEXE-NEXT:   }
146 // CHECKEXE-NEXT: ]
147
148 // DUMPEXE: Contents of section .got.plt:
149 // .got.plt[0..2] = 0 (reserved)
150 // .got.plt[3..4] = .plt = 0x40010
151 // DUMPEXE-NEXT:  40000 00000000 00000000 00000000 00000000  ................
152 // DUMPEXE-NEXT:  40010 00000000 00000000 10000200 00000000  ................
153 // DUMPEXE-NEXT:  40020 10000200 00000000                    ........
154
155 // DISASMEXE: _start:
156 // 0x2000c - 0x20000 = 0xc = 12
157 // DISASMEXE-NEXT:    20000:    03 00 00 14     b       #12
158 // 0x20030 - 0x20004 = 0x2c = 44
159 // DISASMEXE-NEXT:    20004:    0b 00 00 14     b       #44
160 // 0x20040 - 0x20008 = 0x38 = 56
161 // DISASMEXE-NEXT:    20008:    0e 00 00 14     b       #56
162
163 // DISASMEXE: foo:
164 // DISASMEXE-NEXT:    2000c:    1f 20 03 d5     nop
165
166 // DISASMEXE: Disassembly of section .plt:
167 // DISASMEXE-NEXT: .plt:
168 // DISASMEXE-NEXT:    20010:    f0 7b bf a9     stp     x16, x30, [sp, #-16]!
169 // &(.got.plt[2]) = 0x300B0 + 2 * 8 = 0x300C0
170 // Page(0x40010) - Page(0x20014) = 0x40000 - 0x20000 = 0x20000 = 131072
171 // DISASMEXE-NEXT:    20014:    10 01 00 90     adrp    x16, #131072
172 // 0x120c0 & 0xFFF = 0xC0 = 192
173 // DISASMEXE-NEXT:    20018:    11 0a 40 f9     ldr     x17, [x16, #16]
174 // DISASMEXE-NEXT:    2001c:    10 42 00 91     add     x16, x16, #16
175 // DISASMEXE-NEXT:    20020:    20 02 1f d6     br      x17
176 // DISASMEXE-NEXT:    20024:    1f 20 03 d5     nop
177 // DISASMEXE-NEXT:    20028:    1f 20 03 d5     nop
178 // DISASMEXE-NEXT:    2002c:    1f 20 03 d5     nop
179
180 // bar@plt
181 // Page(0x40018) - Page(0x20030) = 0x40000 - 0x20000 = 0x20000 = 131072
182 // DISASMEXE-NEXT:    20030:    10 01 00 90     adrp    x16, #131072
183 // DISASMEXE-NEXT:    20034:    11 0e 40 f9     ldr     x17, [x16, #24]
184 // DISASMEXE-NEXT:    20038:    10 62 00 91     add     x16, x16, #24
185 // DISASMEXE-NEXT:    2003c:    20 02 1f d6     br      x17
186
187 // weak@plt
188 // Page(0x40020) - Page(0x20040) = 0x40000 - 0x20000 = 0x20000 = 131072
189 // DISASMEXE-NEXT:    20040:    10 01 00 90     adrp    x16, #131072
190 // DISASMEXE-NEXT:    20044:    11 12 40 f9     ldr     x17, [x16, #32]
191 // DISASMEXE-NEXT:    20048:    10 82 00 91     add     x16, x16, #32
192 // DISASMEXE-NEXT:    2004c:    20 02 1f d6     br      x17
193
194 .global _start,foo,bar
195 .weak weak
196 _start:
197   b foo
198   b bar
199   b weak
200
201 .section .text2,"ax",@progbits
202 foo:
203   nop