[clangd] Re-land "support outgoing calls in call hierarchy" (#117673)
[llvm-project.git] / llvm / test / tools / yaml2obj / ELF / strtab-implicit-sections.yaml
blobf37529d05d37c8a24fa22580d6aab905c7afa417
1 ## Check how we produce implicit SHT_STRTAB sections.
3 ## For implicit string table sections, the `Flags` field can also
4 ## be specified in YAML. Here we test the behavior in different cases.
6 ## When flags are not explicitly specified, yaml2obj assigns no flags
7 ## for .strtab/.shstrtab and the SHF_ALLOC flag for .dynstr by default.
9 # RUN: yaml2obj --docnum=1 %s -o %t1
10 # RUN: llvm-readelf %t1 --sections | FileCheck %s --check-prefix=CASE1
12 #      CASE1: [Nr] Name      Type   {{.*}} Flg Lk
13 #      CASE1: [ 1] .strtab   STRTAB {{.*}}     0
14 # CASE1-NEXT: [ 2] .shstrtab STRTAB {{.*}}     0
15 # CASE1-NEXT: [ 3] .dynstr   STRTAB {{.*}}   A 0
17 --- !ELF
18 FileHeader:
19   Class: ELFCLASS64
20   Data:  ELFDATA2LSB
21   Type:  ET_DYN
22 Sections:
23   - Name: .strtab
24     Type: SHT_STRTAB
25     Flags: [[STRTABFLAGS=<none>]]
26     Offset: [[STRTABOFFSET=<none>]]
27   - Name: .shstrtab
28     Type: SHT_STRTAB
29     Flags: [[SHSTRTABFLAGS=<none>]]
30     Offset: [[SHSTRTABOFFSET=<none>]]
31   - Name: .dynstr
32     Type: SHT_STRTAB
33     Flags: [[DYNSTRFLAGS=<none>]]
34     Offset: [[DYNSTROFFSET=<none>]]
36 ## Check we can set arbitrary flags and offsets for
37 ## implicit string table sections.
39 # RUN: yaml2obj --docnum=1 \
40 # RUN:   -DSTRTABFLAGS="[ SHF_ALLOC, SHF_STRINGS ]" -DSTRTABOFFSET=0x100 \
41 # RUN:     -DSHSTRTABFLAGS="[ SHF_ALLOC, SHF_WRITE ]" -DSHSTRTABOFFSET=0x200 \
42 # RUN:       -DDYNSTRFLAGS="[ SHF_STRINGS ]" -DDYNSTROFFSET=0x300 %s -o %t2
43 # RUN: llvm-readelf %t2 --sections | FileCheck %s --check-prefix=CASE2
45 #      CASE2: [Nr] Name      Type   Address          Off    {{.*}} Flg Lk
46 #      CASE2: [ 1] .strtab   STRTAB 0000000000000000 000100 {{.*}}  AS 0
47 # CASE2-NEXT: [ 2] .shstrtab STRTAB 0000000000000001 000200 {{.*}}  WA 0
48 # CASE2-NEXT: [ 3] .dynstr   STRTAB 0000000000000000 000300 {{.*}}   S 0
50 ## Check no flags are set by default for implicit string table sections
51 ## when they are not described in the YAML.
53 # RUN: yaml2obj --docnum=2 %s -o %t3
54 # RUN: llvm-readelf %t3 --sections | FileCheck %s --check-prefix=CASE3
56 #      CASE3:   [Nr] Name      Type   {{.*}} ES Flg Lk
57 #      CASE3:   [ 1] .strtab   STRTAB {{.*}} 00      0
58 # CASE3-NEXT:   [ 2] .shstrtab STRTAB {{.*}} 00      0
60 --- !ELF
61 FileHeader:
62   Class: ELFCLASS64
63   Data:  ELFDATA2LSB
64   Type:  ET_DYN
66 ## For implicit string table sections, `Size` and/or `Content` fields can also
67 ## be specified in YAML. Here we test the behavior in different cases.
69 ## When no `Size` or `Content` is specified for a string table section,
70 ## yaml2obj writes the default content.
72 # RUN: yaml2obj --docnum=3 %s -o %t4
73 # RUN: llvm-objdump %t4 -s | FileCheck %s --check-prefix=CASE4
75 # CASE4:      Contents of section .strtab:
76 # CASE4-NEXT:  0000 00666f6f 00                          .foo.
77 # CASE4-NEXT: Contents of section .shstrtab:
78 # CASE4-NEXT:  0000 002e6479 6e737472 002e6479 6e73796d  ..dynstr..dynsym
79 # CASE4-NEXT:  0010 002e7368 73747274 6162002e 73747274  ..shstrtab..strt
80 # CASE4-NEXT:  0020 6162002e 73796d74 616200             ab..symtab.
81 # CASE4-NEXT: Contents of section .dynstr:
82 # CASE4-NEXT:  0030 00626172 00                          .bar.
84 --- !ELF
85 FileHeader:
86   Class: ELFCLASS64
87   Data:  ELFDATA2LSB
88   Type:  ET_DYN
89 Sections:
90   - Name:    .strtab
91     Type:    SHT_STRTAB
92     Size:    [[STRTABSIZE=<none>]]
93     Content: [[STRTABCONTENT=<none>]]
94   - Name:    .shstrtab
95     Type:    SHT_STRTAB
96     Size:    [[SHSTRTABSIZE=<none>]]
97     Content: [[SHSTRTABCONTENT=<none>]]
98   - Name:    .dynstr
99     Type:    SHT_STRTAB
100     Size:    [[DYNSTRSIZE=<none>]]
101     Content: [[DYNSTRCONTENT=<none>]]
102 ## Used to trigger adding string `foo` to the string table section.
103 Symbols:
104   - Name: foo
105 DynamicSymbols:
106   - Name: bar
108 ## For string table sections, `Size` can be used to override the
109 ## implicit string table data. The content is filled with zeroes in this case.
111 # RUN: yaml2obj --docnum=3 -DSTRTABSIZE=2 -DSHSTRTABSIZE=0x30 -DDYNSTRSIZE=4 %s -o %t5
112 # RUN: llvm-readobj --section-data -S %t5 | FileCheck %s --check-prefix=CASE5
114 #      CASE5: Index: 1
115 # CASE5-NEXT: Name: (27)
116 # CASE5-NEXT: Type: SHT_STRTAB
117 #      CASE5: SectionData (
118 # CASE5-NEXT:   0000: 0000 |
119 # CASE5-NEXT: )
120 #      CASE5: Index: 2
121 # CASE5-NEXT: Name: (17)
122 # CASE5-NEXT: Type: SHT_STRTAB (0x3)
123 #      CASE5: SectionData (
124 # CASE5-NEXT:   0000: 00000000 00000000 00000000 00000000  |
125 # CASE5-NEXT:   0010: 00000000 00000000 00000000 00000000  |
126 # CASE5-NEXT:   0020: 00000000 00000000 00000000 00000000  |
127 # CASE5-NEXT: )
128 #      CASE5: Index: 3
129 # CASE5-NEXT: Name: (1)
130 # CASE5-NEXT: Type: SHT_STRTAB (0x3)
131 #      CASE5: SectionData (
132 # CASE5-NEXT:   0000: 00000000 |
133 # CASE5-NEXT: )
135 ## For string table sections, `Content` can be used to override the
136 ## implicit string table data.
138 # RUN: yaml2obj --docnum=3 %s \
139 # RUN:   -DSTRTABCONTENT="01020304" \
140 # RUN:     -DSHSTRTABCONTENT="6162636465666767696a6b6c6d6e6f707172737475767778797a61626364656667676900" \
141 # RUN:       -DDYNSTRCONTENT="eeddaabb" -o %t6
142 # RUN: llvm-readobj --section-data -S %t6 | FileCheck %s --check-prefix=CASE6
144 # CASE6:      Index: 1
145 # CASE6-NEXT: Name: bcdefggi (27)
146 #      CASE6: SectionData (
147 # CASE6-NEXT:   0000: 01020304 |
148 # CASE6-NEXT: )
149 # CASE6:      Index: 2
150 # CASE6-NEXT: Name: rstuvwxyzabcdefggi (17)
151 #      CASE6: SectionData (
152 # CASE6-NEXT:   0000: 61626364 65666767 696A6B6C 6D6E6F70  |
153 # CASE6-NEXT:   0010: 71727374 75767778 797A6162 63646566  |
154 # CASE6-NEXT:   0020: 67676900 |
155 # CASE6-NEXT: )
156 # CASE6:      Index: 3
157 # CASE6-NEXT: Name: bcdefggijklmnopqrstuvwxyzabcdefggi (1)
158 #      CASE6: SectionData (
159 # CASE6-NEXT:   0000: EEDDAABB |
160 # CASE6-NEXT: )
162 ## For string table sections, check we can specify both `Size` and `Content`
163 ## when size is greater than content size. In this case zeroes are
164 ## added as padding after the specified content.
166 # RUN: yaml2obj --docnum=3 %s \
167 # RUN:   -DSTRTABCONTENT="01020304" -DSTRTABSIZE=5 \
168 # RUN:     -DSHSTRTABCONTENT="6162636465666767696a6b6c6d6e6f707172737475767778797a61626364656667676900" -DSHSTRTABSIZE=0x26 \
169 # RUN:       -DDYNSTRCONTENT="eeddaabb" -DDYNSTRSIZE=7 -o %t7
170 # RUN: llvm-readobj --section-data -S %t7 | FileCheck %s --check-prefix=CASE7
172 # CASE7:      Index: 1
173 # CASE7-NEXT: Name: bcdefggi (27)
174 #      CASE7: SectionData (
175 # CASE7-NEXT:   0000: 01020304 00 |
176 # CASE7-NEXT: )
177 # CASE7:      Index: 2
178 # CASE7-NEXT: Name: rstuvwxyzabcdefggi (17)
179 #      CASE7: SectionData (
180 # CASE7-NEXT:   0000: 61626364 65666767 696A6B6C 6D6E6F70  |
181 # CASE7-NEXT:   0010: 71727374 75767778 797A6162 63646566  |
182 # CASE7-NEXT:   0020: 67676900 0000                        |
183 # CASE7-NEXT: )
184 # CASE7:      Index: 3
185 # CASE7-NEXT: Name: bcdefggijklmnopqrstuvwxyzabcdefggi (1)
186 #      CASE7: SectionData (
187 # CASE7-NEXT:   0000: EEDDAABB 000000 |
188 # CASE7-NEXT: )
190 ## For string table sections, check we can specify both `Size` and `Content`
191 ## when size is equal to content size.
193 # RUN: yaml2obj --docnum=3 %s \
194 # RUN:   -DSTRTABCONTENT="01020304" -DSTRTABSIZE=4 \
195 # RUN:     -DSHSTRTABCONTENT="6162636465666767696a6b6c6d6e6f707172737475767778797a61626364656667676900" -DSHSTRTABSIZE=0x24 \
196 # RUN:       -DDYNSTRCONTENT="eeddaabb" -DDYNSTRSIZE=4 -o %t8
197 # RUN: llvm-readobj --section-data -S %t8 | FileCheck %s --check-prefix=CASE6
199 ## Check that we report an error when the the value of "Size" is less than the content size.
201 # RUN: not yaml2obj --docnum=3 %s -DSTRTABCONTENT="01020304" -DSTRTABSIZE=3 2>&1 \
202 # RUN:   | FileCheck %s --check-prefix=CASE8
203 # RUN: not yaml2obj --docnum=3 %s \
204 # RUN:   -DSHSTRTABCONTENT="6162636465666767696a6b6c6d6e6f707172737475767778797a61626364656667676900" -DSHSTRTABSIZE=0x23 2>&1 \
205 # RUN:   | FileCheck %s --check-prefix=CASE8
206 # RUN: not yaml2obj --docnum=3 %s -DDYNSTRCONTENT="eeddaabb" -DDYNSTRSIZE=0x3 2>&1 \
207 # RUN:   | FileCheck %s --check-prefix=CASE8
209 # CASE8: Section size must be greater than or equal to the content size