Follow up to d0858bffa11, add missing REQUIRES x86
[llvm-project.git] / llvm / test / tools / yaml2obj / ELF / gnu-hash-section.yaml
blob607336a4cc849469da66cd0fcc8dfd45af4c60af
1 ## Check how yaml2obj produces SHT_GNU_HASH sections.
3 ## Check we can describe a SHT_GNU_HASH section using the "Content" tag.
4 ## Check we set sh_link to index of the .dynsym by default.
6 # RUN: yaml2obj --docnum=1 %s -o %t1
7 # RUN: llvm-readobj --sections --section-data %t1 | FileCheck %s --check-prefix=CONTENT
9 # CONTENT:      Name: .gnu.hash
10 # CONTENT-NEXT: Type: SHT_GNU_HASH
11 # CONTENT-NEXT: Flags [
12 # CONTENT-NEXT: ]
13 # CONTENT-NEXT: Address: 0x0
14 # CONTENT-NEXT: Offset: 0x40
15 # CONTENT-NEXT: Size: 3
16 # CONTENT-NEXT: Link: 2
17 # CONTENT-NEXT: Info: 0
18 # CONTENT-NEXT: AddressAlignment: 0
19 # CONTENT-NEXT: EntrySize: 0
20 # CONTENT-NEXT: SectionData (
21 # CONTENT-NEXT:   0000: 001122 |
22 # CONTENT-NEXT: )
23 # CONTENT:      Index: 2
24 # CONTENT-NEXT: Name: .dynsym (9)
26 --- !ELF
27 FileHeader:
28   Class: ELFCLASS64
29   Data:  ELFDATA2LSB
30   Type:  ET_DYN
31 Sections:
32   - Name:  .gnu.hash
33     Type:  SHT_GNU_HASH
34     Content: "001122"
35 ## Used to trigger .dynsym creation.
36 DynamicSymbols: []
38 ## Check we can use "Header", "BloomFilter", "HashBuckets" and "HashValues" keys to describe
39 ## the hash section. Check we can set sh_link to any arbitrary value. Check both ELFCLASS32 and 64 bit output.
41 # RUN: yaml2obj --docnum=2 %s -o %t2
42 # RUN: yaml2obj --docnum=3 %s -o %t3
43 # RUN: llvm-readobj --sections --section-data %t2 | FileCheck %s --check-prefix=CONTENT32
44 # RUN: llvm-readobj --sections --section-data %t3 | FileCheck %s --check-prefix=CONTENT64
46 # CONTENT32:      Name: .gnu.hash
47 # CONTENT32-NEXT: Type: SHT_GNU_HASH
48 # CONTENT32-NEXT: Flags [
49 # CONTENT32-NEXT:   SHF_ALLOC
50 # CONTENT32-NEXT: ]
51 # CONTENT32-NEXT: Address: 0x0
52 # CONTENT32-NEXT: Offset: 0x34
53 # CONTENT32-NEXT: Size: 52
54 # CONTENT32-NEXT: Link: 254
55 # CONTENT32-NEXT: Info: 0
56 # CONTENT32-NEXT: AddressAlignment: 0
57 # CONTENT32-NEXT: EntrySize: 0
58 # CONTENT32-NEXT: SectionData (
59 # CONTENT32-NEXT:   0000: 03000000 01000000 02000000 02000000 |
60 # CONTENT32-NEXT:   0010: 03000000 04000000 05000000 06000000 |
61 # CONTENT32-NEXT:   0020: 07000000 08000000 09000000 0A000000 |
62 # CONTENT32-NEXT:   0030: 0B000000                            |
63 # CONTENT32-NEXT: )
65 # CONTENT64:      Name: .gnu.hash
66 # CONTENT64-NEXT: Type: SHT_GNU_HASH
67 # CONTENT64-NEXT: Flags [
68 # CONTENT64-NEXT:   SHF_ALLOC
69 # CONTENT64-NEXT: ]
70 # CONTENT64-NEXT: Address: 0x0
71 # CONTENT64-NEXT: Offset: 0x40
72 # CONTENT64-NEXT: Size: 60
73 # CONTENT64-NEXT: Link: 254
74 # CONTENT64-NEXT: Info: 0
75 # CONTENT64-NEXT: AddressAlignment: 0
76 # CONTENT64-NEXT: EntrySize: 0
77 # CONTENT64-NEXT: SectionData (
78 # CONTENT64-NEXT:   0000: 03000000 01000000 02000000 02000000 |
79 # CONTENT64-NEXT:   0010: 03000000 00000000 04000000 00000000 |
80 # CONTENT64-NEXT:   0020: 05000000 06000000 07000000 08000000 |
81 # CONTENT64-NEXT:   0030: 09000000 0A000000 0B000000          |
82 # CONTENT64-NEXT: )
84 --- !ELF
85 FileHeader:
86   Class: ELFCLASS32
87   Data:  ELFDATA2LSB
88   Type:  ET_DYN
89 Sections:
90   - Name:  .gnu.hash
91     Type:  SHT_GNU_HASH
92     Flags: [ SHF_ALLOC ]
93     Header:
94       SymNdx: 0x1
95       Shift2: 0x2
96     BloomFilter: [0x3, 0x4]
97     HashBuckets: [0x5, 0x6, 0x7]
98     HashValues:  [0x8, 0x9, 0xA, 0xB]
99     Link: 0xFE
101 --- !ELF
102 FileHeader:
103   Class: ELFCLASS64
104   Data:  ELFDATA2LSB
105   Type:  ET_DYN
106 Sections:
107   - Name:  .gnu.hash
108     Type:  SHT_GNU_HASH
109     Flags: [ SHF_ALLOC ]
110     Header:
111       SymNdx: 0x1
112       Shift2: 0x2
113     BloomFilter: [0x3, 0x4]
114     HashBuckets: [0x5, 0x6, 0x7]
115     HashValues:  [0x8, 0x9, 0xA, 0xB]
116     Link: 0xFE
118 ## Check we only can use "Header", "BloomFilter", "HashBuckets" and "HashValues" together.
120 # RUN: not yaml2obj --docnum=4 %s -o %t4 2>&1 | FileCheck %s --check-prefix=ERR
121 # RUN: not yaml2obj --docnum=5 %s -o %t5 2>&1 | FileCheck %s --check-prefix=ERR
122 # RUN: not yaml2obj --docnum=6 %s -o %t6 2>&1 | FileCheck %s --check-prefix=ERR
123 # RUN: not yaml2obj --docnum=7 %s -o %t7 2>&1 | FileCheck %s --check-prefix=ERR
125 # ERR: error: "Header", "BloomFilter", "HashBuckets" and "HashValues" must be used together
127 --- !ELF
128 FileHeader:
129   Class: ELFCLASS64
130   Data:  ELFDATA2LSB
131   Type:  ET_DYN
132 Sections:
133   - Name:  .gnu.hash.no.header
134     Type:  SHT_GNU_HASH
135     BloomFilter: []
136     HashBuckets: []
137     HashValues: []
139 --- !ELF
140 FileHeader:
141   Class: ELFCLASS64
142   Data:  ELFDATA2LSB
143   Type:  ET_DYN
144 Sections:
145   - Name:  .gnu.hash.no.bloomfilter
146     Type:  SHT_GNU_HASH
147     Header:
148       SymNdx: 0x0
149       Shift2: 0x0
150     HashBuckets: []
151     HashValues: []
153 --- !ELF
154 FileHeader:
155   Class: ELFCLASS64
156   Data:  ELFDATA2LSB
157   Type:  ET_DYN
158 Sections:
159   - Name:  .gnu.hash.no.nobuckets
160     Type:  SHT_GNU_HASH
161     Header:
162       SymNdx: 0x0
163       Shift2: 0x0
164     BloomFilter: []
165     HashValues: []
167 --- !ELF
168 FileHeader:
169   Class: ELFCLASS64
170   Data:  ELFDATA2LSB
171   Type:  ET_DYN
172 Sections:
173   - Name:  .gnu.hash.no.novalues
174     Type:  SHT_GNU_HASH
175     Header:
176       SymNdx: 0x0
177       Shift2: 0x0
178     BloomFilter: []
179     HashBuckets: []
181 ## Check that "SymNdx" and "Shift2" fields are mandatory when we specify the "Header".
183 # RUN: not yaml2obj --docnum=8 %s -o %t8 2>&1 | FileCheck %s --check-prefix=ERR2
184 # ERR2: error: missing required key 'SymNdx'
186 # RUN: not yaml2obj --docnum=9 %s -o %t9 2>&1 | FileCheck %s --check-prefix=ERR3
187 # ERR3: error: missing required key 'Shift2'
189 --- !ELF
190 FileHeader:
191   Class: ELFCLASS64
192   Data:  ELFDATA2LSB
193   Type:  ET_DYN
194 Sections:
195   - Name:  .gnu.hash
196     Type:  SHT_GNU_HASH
197     Header:
198       Shift2: 0x0
200 --- !ELF
201 FileHeader:
202   Class: ELFCLASS64
203   Data:  ELFDATA2LSB
204   Type:  ET_DYN
205 Sections:
206   - Name:  .gnu.hash
207     Type:  SHT_GNU_HASH
208     Header:
209       SymNdx: 0x0
211 ## Check we emit an empty section if neither "Content", "Header",
212 ## "BloomFilter", "HashBuckets" nor "HashBuckets" were set.
214 # NOKEYS: Section Headers:
215 # NOKEYS:  [Nr] Name      Type     Address          Off    Size
216 # NOKEYS:  [ 1] .gnu.hash GNU_HASH 0000000000000000 000040 000000
218 # RUN: yaml2obj --docnum=10 %s -o %t10
219 # RUN: llvm-readelf --sections %t10 | FileCheck %s --check-prefix=NOKEYS
221 --- !ELF
222 FileHeader:
223   Class: ELFCLASS64
224   Data:  ELFDATA2LSB
225   Type:  ET_DYN
226 Sections:
227   - Name:  .gnu.hash
228     Type:  SHT_GNU_HASH
230 ## Test that "Header", "BloomFilter", "HashBuckets" and "HashValues" can't be used together with the "Content" or "Size"
232 # RUN: not yaml2obj --docnum=11 -DCONTENT="" %s 2>&1 | FileCheck %s --check-prefix=TOGETHER
233 # RUN: not yaml2obj --docnum=11 -DSIZE=0 %s 2>&1 | FileCheck %s --check-prefix=TOGETHER
234 # TOGETHER: error: "Header", "BloomFilter", "HashBuckets" and "HashValues" cannot be used with "Content" or "Size"
236 --- !ELF
237 FileHeader:
238   Class: ELFCLASS32
239   Data:  ELFDATA2LSB
240   Type:  ET_DYN
241 Sections:
242   - Name:    .gnu.hash
243     Type:    SHT_GNU_HASH
244     Content: [[CONTENT=<none>]]
245     Size:    [[SIZE=<none>]]
246     Header:
247       SymNdx: 0x0
248       Shift2: 0x0
249     BloomFilter: []
250     HashBuckets: []
251     HashValues:  []
253 ## Test we can override the number of buckets and the number of words in the Bloom filter
254 ## using the "NBuckets" and "Shift2" keys.
256 # RUN: yaml2obj --docnum=12 %s -o %t12
257 # RUN: llvm-readobj --sections --section-data %t12 | FileCheck %s --check-prefix=OVERRIDE-CONTENT
259 # OVERRIDE-CONTENT:      Name: .gnu.hash
260 # OVERRIDE-CONTENT:      SectionData (
261 # OVERRIDE-CONTENT-NEXT:   0000: 01000000 02000000 03000000 04000000  |
262 # OVERRIDE-CONTENT-NEXT: )
264 --- !ELF
265 FileHeader:
266   Class: ELFCLASS32
267   Data:  ELFDATA2LSB
268   Type:  ET_DYN
269 Sections:
270   - Name:  .gnu.hash
271     Type:  SHT_GNU_HASH
272     Header:
273       NBuckets:  0x1
274       SymNdx:    0x2
275       MaskWords: 0x3
276       Shift2:    0x4
277     BloomFilter: []
278     HashBuckets: []
279     HashValues:  []
281 ## Check we can use the "Content" key with the "Size" key when the size is greater
282 ## than or equal to the content size.
284 # RUN: not yaml2obj --docnum=13 -DSIZE=1 -DCONTENT="'0011'" %s 2>&1 | \
285 # RUN:   FileCheck %s --check-prefix=CONTENT-SIZE-ERR
287 # CONTENT-SIZE-ERR: error: Section size must be greater than or equal to the content size
289 --- !ELF
290 FileHeader:
291   Class: ELFCLASS64
292   Data:  ELFDATA2LSB
293   Type:  ET_DYN
294 Sections:
295   - Name:    .gnu.hash
296     Type:    SHT_GNU_HASH
297     Size:    [[SIZE=<none>]]
298     Content: [[CONTENT=<none>]]
300 # RUN: yaml2obj --docnum=13 -DSIZE=2 -DCONTENT="'0011'" %s -o %t.cont.size.eq.o
301 # RUN: llvm-readobj --sections --section-data %t.cont.size.eq.o | \
302 # RUN:   FileCheck %s --check-prefix=CHECK-CONTENT -DDATA="0011"
304 # RUN: yaml2obj --docnum=13 -DSIZE=3 -DCONTENT="'0011'" %s -o %t.cont.size.gr.o
305 # RUN: llvm-readobj --sections --section-data %t.cont.size.gr.o | \
306 # RUN:   FileCheck %s --check-prefix=CHECK-CONTENT -DDATA="001100"
308 # CHECK-CONTENT:      Name: .gnu.hash
309 # CHECK-CONTENT:      SectionData (
310 # CHECK-CONTENT-NEXT:   0000: [[DATA]] |
311 # CHECK-CONTENT-NEXT: )
313 ## Check we can use the "Size" key alone to create the section.
315 # RUN: yaml2obj --docnum=13 -DSIZE=3 %s -o %t.size.o
316 # RUN: llvm-readobj --sections --section-data %t.size.o | \
317 # RUN:   FileCheck %s --check-prefix=CHECK-CONTENT -DDATA="000000"
319 ## Check we can use the "Content" key alone to create the section.
321 # RUN: yaml2obj --docnum=13 -DCONTENT="'112233'" %s -o %t.content.o
322 # RUN: llvm-readobj --sections --section-data %t.content.o | \
323 # RUN:   FileCheck %s --check-prefix=CHECK-CONTENT -DDATA="112233"