[clangd] Re-land "support outgoing calls in call hierarchy" (#117673)
[llvm-project.git] / llvm / test / tools / yaml2obj / ELF / section-headers-exclude.yaml
blob016af7e031a52cd63996ccfa93a73ee89be84753
1 ## Check how we can use the "Excluded" key of the "SectionHeaderTable" tag to exclude
2 ## entries from the section header table.
4 ## Check we can use the "Excluded" key to omit a section from the section header table.
5 ## Check we do not include the name of the excluded section in the string table.
6 # RUN: yaml2obj %s -DINCLUDED=.foo -DEXCLUDED=.bar --docnum=1 -o %t1
7 # RUN: llvm-readelf --section-headers -p .shstrtab %t1 | \
8 # RUN:   FileCheck %s -DSEC=.foo --check-prefixes=INCLUDE-SEC,INCLUDE-FOO
9 # RUN: yaml2obj %s -DINCLUDED=.bar -DEXCLUDED=.foo --docnum=1 -o %t2
10 # RUN: llvm-readelf --section-headers -p .shstrtab %t2 | \
11 # RUN:   FileCheck %s -DSEC=.bar --check-prefixes=INCLUDE-SEC,INCLUDE-BAR
13 # INCLUDE-SEC:      [Nr] Name
14 # INCLUDE-SEC:      [ 1] [[SEC]]
15 # INCLUDE-SEC-NEXT: [ 2] .strtab
16 # INCLUDE-SEC-NEXT: [ 3] .shstrtab
18 # INCLUDE-SEC:      String dump of section '.shstrtab':
19 # INCLUDE-FOO-NEXT: [     1] .foo
20 # INCLUDE-BAR-NEXT: [     1] .bar
21 # INCLUDE-SEC-NEXT: [     6] .shstrtab
22 # INCLUDE-SEC-NEXT: [    10] .strtab
23 # INCLUDE-SEC-NOT:  {{.}}
25 --- !ELF
26 FileHeader:
27   Class: ELFCLASS64
28   Data:  ELFDATA2LSB
29   Type:  ET_REL
30 Sections:
31   - Name: .foo
32     Type: SHT_PROGBITS
33   - Name: .bar
34     Type: SHT_PROGBITS
35   - Type: SectionHeaderTable
36     Sections:
37       - Name: [[INCLUDED]]
38       - Name: .strtab
39       - Name: .shstrtab
40     Excluded:
41       - Name: [[EXCLUDED]]
43 ## Check we report an error when a section is in both the "Sections" and "Excluded" lists at the same time.
44 ## Also check that we report an error if a section is missing from the lists.
45 # RUN: not yaml2obj %s -DINCLUDED=.bar -DEXCLUDED=.strtab --docnum=1 -o /dev/null 2>&1 | \
46 # RUN:   FileCheck %s --check-prefix=EXCLUDE-INCLUDED
48 # EXCLUDE-INCLUDED: error: repeated section name: '.strtab' in the section header description
49 # EXCLUDE-INCLUDED: error: section '.foo' should be present in the 'Sections' or 'Excluded' lists
51 ## Check we report an error when the `Excluded` key mentions an unknown section.
52 # RUN: not yaml2obj %s -DINCLUDED=.bar -DEXCLUDED=.unknown --docnum=1 -o /dev/null 2>&1 | \
53 # RUN:   FileCheck %s --check-prefix=EXCLUDE-UNKNOWN
55 # EXCLUDE-UNKNOWN: error: section '.foo' should be present in the 'Sections' or 'Excluded' lists
56 # EXCLUDE-UNKNOWN: error: section header contains undefined section '.unknown'
58 ## Check we report an error when the `Excluded` key mentions a section more than once.
59 # RUN: not yaml2obj %s --docnum=2 -o /dev/null 2>&1 | FileCheck %s --check-prefix=EXCLUDE-TWICE
61 # EXCLUDE-TWICE: error: repeated section name: '.strtab' in the section header description
62 # EXCLUDE-TWICE: error: repeated section name: '.strtab' in the section header description
64 --- !ELF
65 FileHeader:
66   Class: ELFCLASS64
67   Data:  ELFDATA2LSB
68   Type:  ET_REL
69 Sections:
70   - Type: SectionHeaderTable
71     Sections:
72       - Name: .strtab
73       - Name: .shstrtab
74     Excluded:
75       - Name: .strtab
76       - Name: .strtab
78 ## Check that we are able to exclude all sections, except the implicit
79 ## null section, with the use of the "Excluded" key.
81 ## Case A: the "Sections" key is present, but empty.
82 # RUN: yaml2obj %s --docnum=3 -o %t3
83 # RUN: llvm-readelf --section-headers %t3 | FileCheck %s --check-prefix=NO-SECTIONS
85 # NO-SECTIONS:      There are 1 section headers, starting at offset 0x48:
86 # NO-SECTIONS:      Section Headers:
87 # NO-SECTIONS-NEXT:  [Nr] Name         Type Address          Off    Size   ES Flg Lk Inf Al
88 # NO-SECTIONS-NEXT:  [ 0] <no-strings> NULL 0000000000000000 000000 000000 00      0   0  0
90 --- !ELF
91 FileHeader:
92   Class: ELFCLASS64
93   Data:  ELFDATA2LSB
94   Type:  ET_REL
95 Sections:
96   - Type: SectionHeaderTable
97     Sections: []
98     Excluded:
99       - Name: .strtab
100       - Name: .shstrtab
102 ## Case B: the "Sections" key is not present.
103 # RUN: yaml2obj %s --docnum=4 -o %t4
104 # RUN: llvm-readelf --section-headers %t4 | FileCheck %s --check-prefix=NO-SECTIONS
106 --- !ELF
107 FileHeader:
108   Class: ELFCLASS64
109   Data:  ELFDATA2LSB
110   Type:  ET_REL
111 Sections:
112   - Type: SectionHeaderTable
113     Excluded:
114       - Name: .strtab
115       - Name: .shstrtab
117 ## Check how we handle cases when a section is excluded, but its section index is needed.
118 ## The general rule is: when a section is explicitly linked with another section, which is
119 ## excluded, then we report an error. In the case when it is linked implicitly with an excluded
120 ## section, we use 0 as index value.
122 ## Case A: check we report an error when a regular section has a Link field which
123 ##         points to an excluded section.
124 # RUN: not yaml2obj %s --docnum=5 -o /dev/null 2>&1 | \
125 # RUN:   FileCheck %s --check-prefix=LINK -DSEC=.foo -DTARGET=.bar
127 # LINK: error: unable to link '[[SEC]]' to excluded section '[[TARGET]]'
129 --- !ELF
130 FileHeader:
131   Class: ELFCLASS64
132   Data:  ELFDATA2LSB
133   Type:  ET_REL
134 Sections:
135   - Name: .foo
136     Type: SHT_PROGBITS
137     Link: .bar
138   - Name: .bar
139     Type: SHT_PROGBITS
140   - Type: SectionHeaderTable
141     Sections:
142       - Name: .foo
143       - Name: .strtab
144       - Name: .shstrtab
145     Excluded:
146       - Name: .bar
148 ## Case B.1: check we report an error when a symbol table section has a Link field which
149 ##           points to an excluded section.
150 # RUN: not yaml2obj %s --docnum=6 -DNAME=.symtab -DTYPE=SHT_SYMTAB -o /dev/null 2>&1 | \
151 # RUN:   FileCheck %s --check-prefix=LINK -DSEC=.symtab -DTARGET=.foo
152 # RUN: not yaml2obj %s --docnum=6 -DNAME=.dynsym -DTYPE=SHT_DYNSYM -o /dev/null 2>&1 | \
153 # RUN:   FileCheck %s --check-prefix=LINK -DSEC=.dynsym -DTARGET=.foo
155 --- !ELF
156 FileHeader:
157   Class: ELFCLASS64
158   Data:  ELFDATA2LSB
159   Type:  ET_DYN
160 Sections:
161   - Name:  [[NAME]]
162     Type:  [[TYPE]]
163     Link:  .foo
164   - Name:  .foo
165     Type:  SHT_PROGBITS
166   - Type: SectionHeaderTable
167     Sections:
168       - Name: [[NAME]]
169       - Name: .strtab
170       - Name: .shstrtab
171     Excluded:
172       - Name: .foo
174 ## Case B.2: check we do not link .dynsym with .dynstr implicitly when the latter is excluded.
175 # RUN: yaml2obj %s --docnum=7 -o %t5
176 # RUN: llvm-readelf %t5 --section-headers | FileCheck %s --check-prefix=LINK-DYNSYM
178 # LINK-DYNSYM: [Nr] Name    Type   Address          Off    Size   ES Flg Lk
179 # LINK-DYNSYM: [ 1] .dynsym DYNSYM 0000000000000000 000040 000018 18   A  0
181 --- !ELF
182 FileHeader:
183   Class: ELFCLASS64
184   Data:  ELFDATA2LSB
185   Type:  ET_DYN
186 Sections:
187   - Name:  .dynsym
188     Type:  SHT_DYNSYM
189   - Name:  .dynstr
190     Type:  SHT_PROGBITS
191   - Type: SectionHeaderTable
192     Sections:
193       - Name: .dynsym
194       - Name: .strtab
195       - Name: .shstrtab
196     Excluded:
197       - Name: .dynstr
199 ## Case B.3: check we do not link .symtab with .strtab implicitly when the latter is excluded.
200 # RUN: yaml2obj %s --docnum=8 -o %t6
201 # RUN: llvm-readelf %t6 --section-headers | FileCheck %s --check-prefix=LINK-SYMTAB
203 # LINK-SYMTAB: [Nr] Name    Type   Address          Off    Size   ES Flg Lk Inf Al
204 # LINK-SYMTAB: [ 1] .symtab SYMTAB 0000000000000000 000040 000018 18      0   1  0
206 --- !ELF
207 FileHeader:
208   Class: ELFCLASS64
209   Data:  ELFDATA2LSB
210   Type:  ET_DYN
211 Sections:
212   - Name:  .symtab
213     Type:  SHT_SYMTAB
214   - Name:  .strtab
215     Type:  SHT_PROGBITS
216   - Type: SectionHeaderTable
217     Sections:
218       - Name: .symtab
219       - Name: .shstrtab
220     Excluded:
221       - Name: .strtab
223 ## Case C: check we report an error when a debug section has a Link field which
224 ##         points to an excluded section.
225 # RUN: not yaml2obj %s --docnum=9 -o /dev/null 2>&1 | \
226 # RUN:   FileCheck %s --check-prefix=LINK -DSEC=.debug_unknown -DTARGET=.strtab
228 --- !ELF
229 FileHeader:
230   Class: ELFCLASS64
231   Data:  ELFDATA2LSB
232   Type:  ET_EXEC
233 Sections:
234   - Name:  .debug_unknown
235     Type:  SHT_PROGBITS
236     Link:  .strtab
237   - Type: SectionHeaderTable
238     Sections:
239       - Name: .debug_unknown
240       - Name: .shstrtab
241     Excluded:
242       - Name: .strtab
244 ## Case D.1: check we report an error when a relocatable section has an Info field which
245 ##           points to an excluded section.
246 # RUN: not yaml2obj %s --docnum=10 -o /dev/null 2>&1 | \
247 # RUN:   FileCheck %s --check-prefix=LINK -DSEC=.rela -DTARGET=.strtab
249 --- !ELF
250 FileHeader:
251   Class: ELFCLASS64
252   Data:  ELFDATA2LSB
253   Type:  ET_DYN
254 Sections:
255   - Name: .rela
256     Type: SHT_RELA
257     Info: .strtab
258     Relocations: []
259   - Type: SectionHeaderTable
260     Sections:
261       - Name: .rela
262       - Name: .shstrtab
263     Excluded:
264       - Name: .strtab
266 ## Case D.2: check we report an error when the SHT_REL[A] section is linked
267 ##           with an excluded section explicitly.
268 # RUN: not yaml2obj %s --docnum=11 -o /dev/null 2>&1 | \
269 # RUN:   FileCheck %s --check-prefix=LINK -DSEC=.rela -DTARGET=.symtab
271 --- !ELF
272 FileHeader:
273   Class: ELFCLASS64
274   Data:  ELFDATA2LSB
275   Type:  ET_DYN
276 Sections:
277   - Name: .rela
278     Type: SHT_RELA
279     Link: .symtab
280     Relocations: []
281   - Name: .symtab
282     Type: SHT_PROGBITS
283   - Type: SectionHeaderTable
284     Sections:
285       - Name: .rela
286       - Name: .strtab
287       - Name: .shstrtab
288     Excluded:
289       - Name: .symtab
291 ## Case E: check we report an error when a symbol references an excluded section.
292 # RUN: not yaml2obj %s --docnum=12 -o /dev/null 2>&1 | \
293 # RUN:   FileCheck %s --check-prefix=SYMBOL-SECTION
295 # SYMBOL-SECTION: error: excluded section referenced: '.foo' by symbol 'foo'
297 --- !ELF
298 FileHeader:
299   Class: ELFCLASS64
300   Data:  ELFDATA2LSB
301   Type:  ET_DYN
302 Sections:
303   - Name: .foo
304     Type: SHT_PROGBITS
305   - Type: SectionHeaderTable
306     Sections:
307       - Name: .symtab
308       - Name: .strtab
309       - Name: .shstrtab
310     Excluded:
311       - Name: .foo
312 Symbols:
313   - Name:    foo
314     Type:    STT_OBJECT
315     Section: .foo
317 ## Case F.1: check we report an error when a group section
318 ##           contains an excluded section member.
319 # RUN: not yaml2obj %s --docnum=13 -o /dev/null 2>&1 | \
320 # RUN:   FileCheck %s --check-prefix=LINK -DSEC=.group -DTARGET=.strtab
322 --- !ELF
323 FileHeader:
324   Class: ELFCLASS64
325   Data:  ELFDATA2LSB
326   Type:  ET_REL
327 Sections:
328   - Name: .group
329     Type: SHT_GROUP
330     Members:
331       - SectionOrType: .strtab
332   - Type: SectionHeaderTable
333     Sections:
334       - Name: .group
335       - Name: .shstrtab
336     Excluded:
337       - Name: .strtab
339 ## Case F.2: check we report an error when the group section is linked
340 ##           to an excluded section explicitly.
341 # RUN: not yaml2obj %s --docnum=14 -o /dev/null 2>&1 | \
342 # RUN:   FileCheck %s --check-prefix=LINK -DSEC=.group -DTARGET=.symtab
344 --- !ELF
345 FileHeader:
346   Class: ELFCLASS64
347   Data:  ELFDATA2LSB
348   Type:  ET_REL
349 Sections:
350   - Name: .group
351     Type: SHT_GROUP
352     Link: .symtab
353     Members: []
354   - Name: .symtab
355     Type: SHT_SYMTAB
356   - Type: SectionHeaderTable
357     Sections:
358       - Name: .group
359       - Name: .strtab
360       - Name: .shstrtab
361     Excluded:
362       - Name: .symtab
364 ## Case G: check we do not link SHT_LLVM_CALL_GRAPH_PROFILE/SHT_LLVM_ADDRSIG/SHT_GROUP/SHT_REL[A] sections
365 ##         with .symtab implicitly when the latter is excluded.
366 # RUN: yaml2obj %s --docnum=15 -o %t7
367 # RUN: llvm-readelf %t7 --section-headers | FileCheck %s --check-prefix=LINK-IMPLICIT
369 # LINK-IMPLICIT:      [Nr] Name          Type                    Address          Off    Size   ES Flg Lk Inf Al
370 # LINK-IMPLICIT:      [ 1] .cgp          LLVM_CALL_GRAPH_PROFILE 0000000000000000 000040 000000 08      0   0  0
371 # LINK-IMPLICIT-NEXT: [ 2] .llvm_addrsig LLVM_ADDRSIG            0000000000000000 000040 000000 00      0   0  0
372 # LINK-IMPLICIT-NEXT: [ 3] .group        GROUP                   0000000000000000 000040 000000 04      0   0  0
373 # LINK-IMPLICIT-NEXT: [ 4] .rela         RELA                    0000000000000000 000040 000000 18      0   0  0
375 --- !ELF
376 FileHeader:
377   Class: ELFCLASS64
378   Data:  ELFDATA2LSB
379   Type:  ET_DYN
380 Sections:
381   - Name:    .cgp
382     Type:    SHT_LLVM_CALL_GRAPH_PROFILE
383     Content: ""
384   - Name:    .llvm_addrsig
385     Type:    SHT_LLVM_ADDRSIG
386     Content: ""
387   - Name: .group
388     Type: SHT_GROUP
389     Members: []
390   - Name: .rela
391     Type: SHT_RELA
392     Relocations: []
393   - Name: .symtab
394     Type: SHT_SYMTAB
395   - Type: SectionHeaderTable
396     Sections:
397       - Name: .cgp
398       - Name: .llvm_addrsig
399       - Name: .group
400       - Name: .rela
401       - Name: .strtab
402       - Name: .shstrtab
403     Excluded:
404       - Name: .symtab
406 ## Case H: check we do not link SHT_HASH/SHT_GNU_HASH sections with .dynsym
407 ##         implicitly when the latter is excluded.
408 # RUN: yaml2obj %s --docnum=16 -o %t8
409 # RUN: llvm-readelf %t8 --section-headers | FileCheck %s --check-prefix=LINK-HASH
411 # LINK-HASH:      [Nr] Name      Type     Address          Off    Size   ES Flg Lk Inf Al
412 # LINK-HASH:      [ 1] .hash     HASH     0000000000000000 000040 000000 04      0   0  0
413 # LINK-HASH-NEXT: [ 2] .gnu_hash GNU_HASH 0000000000000000 000040 000000 00      0   0  0
415 --- !ELF
416 FileHeader:
417   Class: ELFCLASS64
418   Data:  ELFDATA2LSB
419   Type:  ET_DYN
420 Sections:
421   - Name:    .hash
422     Type:    SHT_HASH
423     Content: ""
424   - Name:    .gnu_hash
425     Type:    SHT_GNU_HASH
426     Content: ""
427   - Name: .dynsym
428     Type: SHT_DYNSYM
429   - Type: SectionHeaderTable
430     Sections:
431       - Name: .hash
432       - Name: .gnu_hash
433       - Name: .strtab
434       - Name: .shstrtab
435     Excluded:
436       - Name: .dynsym
438 ## Case I: document the case when an excluded section is explicitly linked to another excluded section.
439 ##         We report an error in this case, because:
440 ##         1) It is a reasonable behavior, as it is perhaps usually a result of a mistake
441 ##            in a YAML description.
442 ##         2) Helps to keep the code simpler.
443 # RUN: not yaml2obj %s --docnum=17 -o /dev/null 2>&1 | FileCheck %s --check-prefix=CROSS-LINK
445 # CROSS-LINK:      error: unable to link '.foo' to excluded section '.bar'
446 # CROSS-LINK-NEXT: error: unable to link '.bar' to excluded section '.foo'
448 --- !ELF
449 FileHeader:
450   Class: ELFCLASS64
451   Data:  ELFDATA2LSB
452   Type:  ET_REL
453 Sections:
454   - Name: .foo
455     Type: SHT_PROGBITS
456     Link: .bar
457   - Name: .bar
458     Type: SHT_PROGBITS
459     Link: .foo
460   - Type: SectionHeaderTable
461     Sections:
462       - Name: .strtab
463       - Name: .shstrtab
464     Excluded:
465       - Name: .foo
466       - Name: .bar
468 ## Check we set e_shstrndx field to 0 when the section header string table is excluded.
469 ## Check that the e_shnum field is adjusted properly when a section is removed.
470 # RUN: yaml2obj --docnum=18 %s -o %t9
471 # RUN: llvm-readelf --file-headers %t9 | FileCheck %s --check-prefix=SHSTRTAB
473 # SHSTRTAB: Number of section headers:         2
474 # SHSTRTAB: Section header string table index: 0
476 --- !ELF
477 FileHeader:
478   Class: ELFCLASS64
479   Data:  ELFDATA2LSB
480   Type:  ET_REL
481 Sections:
482   - Type: SectionHeaderTable
483     Sections:
484       - Name: .strtab
485     Excluded:
486       - Name: .shstrtab
488 ## Check we do not allow using "Excluded" together with "NoHeaders".
489 # RUN: not yaml2obj %s --docnum=19 -DNOHEADERS=true -o /dev/null 2>&1 | FileCheck %s --check-prefix=NOHEADERS
490 # RUN: not yaml2obj %s --docnum=19 -DNOHEADERS=false -o /dev/null 2>&1 | FileCheck %s --check-prefix=NOHEADERS
491 # NOHEADERS: NoHeaders can't be used together with Offset/Sections/Excluded
493 --- !ELF
494 FileHeader:
495   Class: ELFCLASS64
496   Data:  ELFDATA2LSB
497   Type:  ET_REL
498 Sections:
499   - Type: SectionHeaderTable
500     NoHeaders: [[NOHEADERS]]
501     Excluded:  []