[llvm] Do not replace dead constant references in metadata with undef
[llvm-project.git] / lld / test / ELF / shared.s
blob800570e63b9533067f31db26d8bc9b1eb6b24a18
1 // REQUIRES: x86
2 // RUN: llvm-mc -filetype=obj -triple=i686-unknown-linux %s -o %t.o
3 // RUN: llvm-mc -filetype=obj -triple=i686-unknown-linux %p/Inputs/shared.s -o %t2.o
4 // RUN: ld.lld --hash-style=sysv -shared %t2.o -soname=t2.so -o %t2.so
5 // RUN: llvm-readobj -S %t2.so | FileCheck --check-prefix=SO %s
6 // RUN: ld.lld --hash-style=sysv -dynamic-linker /lib64/ld-linux-x86-64.so.2 -rpath foo -rpath bar --export-dynamic %t.o %t2.so -o %t
7 // RUN: llvm-readobj -S -l --dynamic-table --symbols --dyn-syms --section-data --hash-table %t | FileCheck %s
8 // RUN: ld.lld --hash-style=sysv %t.o %t2.so %t2.so -o %t2
9 // RUN: llvm-readobj --dyn-syms %t2 | FileCheck --check-prefix=DONT_EXPORT %s
11 // Make sure .symtab is properly aligned.
12 // SO: Name: .symtab
13 // SO-NEXT: Type: SHT_SYMTAB
14 // SO-NEXT: Flags [
15 // SO-NEXT: ]
16 // SO-NEXT: Address:
17 // SO-NEXT: Offset: 0x1D0
18 // SO-NEXT: Size:
19 // SO-NEXT: Link:
20 // SO-NEXT: Info:
21 // SO-NEXT: AddressAlignment: 4
23 // CHECK: Name: .interp
24 // CHECK-NEXT: Type: SHT_PROGBITS
25 // CHECK-NEXT: Flags [
26 // CHECK-NEXT: SHF_ALLOC
27 // CHECK-NEXT: ]
28 // CHECK-NEXT: Address: [[INTERPADDR:.*]]
29 // CHECK-NEXT: Offset: [[INTERPOFFSET:.*]]
30 // CHECK-NEXT: Size: [[INTERPSIZE:.*]]
31 // CHECK-NEXT: Link: 0
32 // CHECK-NEXT: Info: 0
33 // CHECK-NEXT: AddressAlignment: 1
34 // CHECK-NEXT: EntrySize: 0
35 // CHECK-NEXT: SectionData (
36 // CHECK-NEXT: 0000: 2F6C6962 36342F6C 642D6C69 6E75782D |/lib64/ld-linux-|
37 // CHECK-NEXT: 0010: 7838362D 36342E73 6F2E3200 |x86-64.so.2.|
38 // CHECK-NEXT: )
39 // CHECK-NEXT: }
41 // test that .hash is linked to .dynsym
42 // CHECK: Index: 2
43 // CHECK-NEXT: Name: .dynsym
44 // CHECK-NEXT: Type: SHT_DYNSYM
45 // CHECK-NEXT: Flags [
46 // CHECK-NEXT: SHF_ALLOC
47 // CHECK-NEXT: ]
48 // CHECK-NEXT: Address: [[DYNSYMADDR:.*]]
49 // CHECK-NEXT: Offset: 0x170
50 // CHECK-NEXT: Size:
51 // CHECK-NEXT: Link: [[DYNSTR:.*]]
52 // CHECK-NEXT: Info: 1
53 // CHECK-NEXT: AddressAlignment: 4
54 // CHECK-NEXT: EntrySize: 16
55 // CHECK-NEXT: SectionData (
56 // CHECK-NEXT: 0000:
57 // CHECK-NEXT: 0010:
58 // CHECK-NEXT: 0020:
59 // CHECK-NEXT: 0030:
60 // CHECK-NEXT: )
61 // CHECK-NEXT: }
62 // CHECK-NEXT: Section {
63 // CHECK-NEXT: Index: 3
64 // CHECK-NEXT: Name: .hash
65 // CHECK-NEXT: Type: SHT_HASH
66 // CHECK-NEXT: Flags [
67 // CHECK-NEXT: SHF_ALLOC
68 // CHECK-NEXT: ]
69 // CHECK-NEXT: Address: [[HASHADDR:.*]]
70 // CHECK-NEXT: Offset:
71 // CHECK-NEXT: Size:
72 // CHECK-NEXT: Link: 2
73 // CHECK-NEXT: Info: 0
74 // CHECK-NEXT: AddressAlignment: 4
75 // CHECK-NEXT: EntrySize: 4
76 // CHECK: Section {
77 // CHECK-NEXT: Index: [[DYNSTR]]
78 // CHECK-NEXT: Name: .dynstr
79 // CHECK-NEXT: Type: SHT_STRTAB
80 // CHECK-NEXT: Flags [
81 // CHECK-NEXT: SHF_ALLOC
82 // CHECK-NEXT: ]
83 // CHECK-NEXT: Address: [[DYNSTRADDR:.*]]
84 // CHECK-NEXT: Offset:
85 // CHECK-NEXT: Size:
86 // CHECK-NEXT: Link: 0
87 // CHECK-NEXT: Info: 0
88 // CHECK-NEXT: AddressAlignment: 1
89 // CHECK-NEXT: EntrySize: 0
91 // CHECK: Name: .rel.dyn
92 // CHECK-NEXT: Type: SHT_REL
93 // CHECK-NEXT: Flags [
94 // CHECK-NEXT: SHF_ALLOC
95 // CHECK-NEXT: ]
96 // CHECK-NEXT: Address: [[RELADDR:.*]]
97 // CHECK-NEXT: Offset:
98 // CHECK-NEXT: Size: [[RELSIZE:.*]]
99 // CHECK-NEXT: Link:
100 // CHECK-NEXT: Info:
101 // CHECK-NEXT: AddressAlignment:
102 // CHECK-NEXT: EntrySize: [[RELENT:.*]]
104 // CHECK: Name: .dynamic
105 // CHECK-NEXT: Type: SHT_DYNAMIC
106 // CHECK-NEXT: Flags [
107 // CHECK-NEXT: SHF_ALLOC
108 // CHECK-NEXT: SHF_WRITE
109 // CHECK-NEXT: ]
110 // CHECK-NEXT: Address: [[ADDR:.*]]
111 // CHECK-NEXT: Offset: [[OFFSET:.*]]
112 // CHECK-NEXT: Size: [[SIZE:.*]]
113 // CHECK-NEXT: Link: [[DYNSTR]]
114 // CHECK-NEXT: Info: 0
115 // CHECK-NEXT: AddressAlignment: [[ALIGN:.*]]
116 // CHECK-NEXT: EntrySize: 8
117 // CHECK-NEXT: SectionData (
118 // CHECK: )
120 // CHECK: Name: .symtab
121 // CHECK-NEXT: Type: SHT_SYMTAB
122 // CHECK-NEXT: Flags [
123 // CHECK-NEXT: ]
124 // CHECK-NEXT: Address:
125 // CHECK-NEXT: Offset:
126 // CHECK-NEXT: Size:
127 // CHECK-NEXT: Link:
128 // CHECK-NEXT: Info:
129 // CHECK-NEXT: AddressAlignment:
130 // CHECK-NEXT: EntrySize: [[SYMENT:.*]]
132 // CHECK: ProgramHeaders [
133 // CHECK: Type: PT_INTERP
134 // CHECK-NEXT: Offset: [[INTERPOFFSET]]
135 // CHECK-NEXT: VirtualAddress: [[INTERPADDR]]
136 // CHECK-NEXT: PhysicalAddress: [[INTERPADDR]]
137 // CHECK-NEXT: FileSize: [[INTERPSIZE]]
138 // CHECK-NEXT: MemSize: [[INTERPSIZE]]
139 // CHECK-NEXT: Flags [
140 // CHECK-NEXT: PF_R
141 // CHECK-NEXT: ]
142 // CHECK-NEXT: Alignment: 1
143 // CHECK-NEXT: }
144 // CHECK: Type: PT_DYNAMIC
145 // CHECK-NEXT: Offset: [[OFFSET]]
146 // CHECK-NEXT: VirtualAddress: [[ADDR]]
147 // CHECK-NEXT: PhysicalAddress: [[ADDR]]
148 // CHECK-NEXT: FileSize: [[SIZE]]
149 // CHECK-NEXT: MemSize: [[SIZE]]
150 // CHECK-NEXT: Flags [
151 // CHECK-NEXT: PF_R
152 // CHECK-NEXT: PF_W
153 // CHECK-NEXT: ]
154 // CHECK-NEXT: Alignment: [[ALIGN]]
155 // CHECK-NEXT: }
157 // CHECK: DynamicSection [
158 // CHECK-NEXT: Tag Type Name/Value
159 // CHECK-NEXT: 0x0000001D RUNPATH Library runpath: [foo:bar]
160 // CHECK-NEXT: 0x00000001 NEEDED Shared library: [{{.*}}2.so]
161 // CHECK-NEXT: 0x00000015 DEBUG 0x0
162 // CHECK-NEXT: 0x00000011 REL [[RELADDR]]
163 // CHECK-NEXT: 0x00000012 RELSZ [[RELSIZE]] (bytes)
164 // CHECK-NEXT: 0x00000013 RELENT [[RELENT]] (bytes)
165 // CHECK-NEXT: 0x00000006 SYMTAB [[DYNSYMADDR]]
166 // CHECK-NEXT: 0x0000000B SYMENT [[SYMENT]] (bytes)
167 // CHECK-NEXT: 0x00000005 STRTAB [[DYNSTRADDR]]
168 // CHECK-NEXT: 0x0000000A STRSZ
169 // CHECK-NEXT: 0x00000004 HASH [[HASHADDR]]
170 // CHECK-NEXT: 0x00000000 NULL 0x0
171 // CHECK-NEXT: ]
173 // CHECK: Symbols [
174 // CHECK-NEXT: Symbol {
175 // CHECK-NEXT: Name:
176 // CHECK-NEXT: Value: 0x0
177 // CHECK-NEXT: Size: 0
178 // CHECK-NEXT: Binding: Local
179 // CHECK-NEXT: Type: None
180 // CHECK-NEXT: Other: 0
181 // CHECK-NEXT: Section: Undefined
182 // CHECK-NEXT: }
183 // CHECK-NEXT: Symbol {
184 // CHECK-NEXT: Name: _DYNAMIC
185 // CHECK-NEXT: Value: 0x402210
186 // CHECK-NEXT: Size: 0
187 // CHECK-NEXT: Binding: Local
188 // CHECK-NEXT: Type: None
189 // CHECK-NEXT: Other [ (0x2)
190 // CHECK-NEXT: STV_HIDDEN
191 // CHECK-NEXT: ]
192 // CHECK-NEXT: Section: .dynamic
193 // CHECK-NEXT: }
194 // CHECK-NEXT: Symbol {
195 // CHECK-NEXT: Name: _start
196 // CHECK-NEXT: Value: 0x401208
197 // CHECK-NEXT: Size: 0
198 // CHECK-NEXT: Binding: Global
199 // CHECK-NEXT: Type: None
200 // CHECK-NEXT: Other: 0
201 // CHECK-NEXT: Section: .text
202 // CHECK-NEXT: }
203 // CHECK-NEXT: Symbol {
204 // CHECK-NEXT: Name: bar
205 // CHECK-NEXT: Value: 0x0
206 // CHECK-NEXT: Size: 0
207 // CHECK-NEXT: Binding: Global
208 // CHECK-NEXT: Type: Function
209 // CHECK-NEXT: Other: 0
210 // CHECK-NEXT: Section: Undefined
211 // CHECK-NEXT: }
212 // CHECK-NEXT: Symbol {
213 // CHECK-NEXT: Name: zed
214 // CHECK-NEXT: Value: 0x0
215 // CHECK-NEXT: Size: 0
216 // CHECK-NEXT: Binding: Global (0x1)
217 // CHECK-NEXT: Type: None (0x0)
218 // CHECK-NEXT: Other: 0
219 // CHECK-NEXT: Section: Undefined (0x0)
220 // CHECK-NEXT: }
221 // CHECK-NEXT: ]
223 // CHECK: DynamicSymbols [
224 // CHECK-NEXT: Symbol {
225 // CHECK-NEXT: Name:
226 // CHECK-NEXT: Value: 0x0
227 // CHECK-NEXT: Size: 0
228 // CHECK-NEXT: Binding: Local
229 // CHECK-NEXT: Type: None
230 // CHECK-NEXT: Other: 0
231 // CHECK-NEXT: Section: Undefined
232 // CHECK-NEXT: }
233 // CHECK-NEXT: Symbol {
234 // CHECK-NEXT: Name: _start
235 // CHECK-NEXT: Value: 0x401208
236 // CHECK-NEXT: Size: 0
237 // CHECK-NEXT: Binding: Global
238 // CHECK-NEXT: Type: Non
239 // CHECK-NEXT: Other: 0
240 // CHECK-NEXT: Section: .text
241 // CHECK-NEXT: }
242 // CHECK-NEXT: Symbol {
243 // CHECK-NEXT: Name: bar
244 // CHECK-NEXT: Value: 0x0
245 // CHECK-NEXT: Size: 0
246 // CHECK-NEXT: Binding: Global
247 // CHECK-NEXT: Type: Function
248 // CHECK-NEXT: Other: 0
249 // CHECK-NEXT: Section: Undefined
250 // CHECK-NEXT: }
251 // CHECK-NEXT: Symbol {
252 // CHECK-NEXT: Name: zed
253 // CHECK-NEXT: Value: 0x0
254 // CHECK-NEXT: Size: 0
255 // CHECK-NEXT: Binding: Global
256 // CHECK-NEXT: Type: None
257 // CHECK-NEXT: Other: 0
258 // CHECK-NEXT: Section: Undefined
259 // CHECK-NEXT: }
260 // CHECK-NEXT: ]
262 // DONT_EXPORT: DynamicSymbols [
263 // DONT_EXPORT-NEXT: Symbol {
264 // DONT_EXPORT-NEXT: Name:
265 // DONT_EXPORT-NEXT: Value: 0x0
266 // DONT_EXPORT-NEXT: Size: 0
267 // DONT_EXPORT-NEXT: Binding: Local (0x0)
268 // DONT_EXPORT-NEXT: Type: None (0x0)
269 // DONT_EXPORT-NEXT: Other: 0
270 // DONT_EXPORT-NEXT: Section: Undefined (0x0)
271 // DONT_EXPORT-NEXT: }
272 // DONT_EXPORT-NEXT: Symbol {
273 // DONT_EXPORT-NEXT: Name: bar
274 // DONT_EXPORT-NEXT: Value: 0x0
275 // DONT_EXPORT-NEXT: Size: 0
276 // DONT_EXPORT-NEXT: Binding: Global
277 // DONT_EXPORT-NEXT: Type: Function
278 // DONT_EXPORT-NEXT: Other: 0
279 // DONT_EXPORT-NEXT: Section: Undefined
280 // DONT_EXPORT-NEXT: }
281 // DONT_EXPORT-NEXT: Symbol {
282 // DONT_EXPORT-NEXT: Name: zed
283 // DONT_EXPORT-NEXT: Value: 0x0
284 // DONT_EXPORT-NEXT: Size: 0
285 // DONT_EXPORT-NEXT: Binding: Global
286 // DONT_EXPORT-NEXT: Type: None
287 // DONT_EXPORT-NEXT: Other: 0
288 // DONT_EXPORT-NEXT: Section: Undefined
289 // DONT_EXPORT-NEXT: }
290 // DONT_EXPORT-NEXT: ]
292 // CHECK: HashTable {
293 // CHECK-NEXT: Num Buckets: 4
294 // CHECK-NEXT: Num Chains: 4
295 // CHECK-NEXT: Buckets: [3, 0, 2, 0]
296 // CHECK-NEXT: Chains: [0, 0, 0, 1]
297 // CHECK-NEXT: }
299 .global _start
300 _start:
301 .long bar@GOT
302 .long zed@GOT