Follow up to d0858bffa11, add missing REQUIRES x86
[llvm-project.git] / llvm / test / tools / yaml2obj / ELF / note-section.yaml
blob80359c4ec018330241dea95674b8c42220351fae
1 ## Check how yaml2obj produces SHT_NOTE sections.
3 ## Check we can describe SHT_NOTE using the "Notes" tag. We can define
4 ## notes using names, descriptions and types.
5 ## Check we produce a valid name size and description size fields.
6 ## Check we produce valid paddings.
8 # RUN: yaml2obj --docnum=1 %s -o %t1
9 # RUN: llvm-readobj --sections --section-data %t1 | FileCheck %s --check-prefix=NOTE
11 # NOTE:      Section {
12 # NOTE:        Index: 1
13 # NOTE-NEXT:   Name: .note.foo (1)
14 # NOTE-NEXT:   Type: SHT_NOTE (0x7)
15 # NOTE-NEXT:   Flags [ (0x2)
16 # NOTE-NEXT:     SHF_ALLOC (0x2)
17 # NOTE-NEXT:   ]
18 # NOTE-NEXT:   Address:
19 # NOTE-NEXT:   Offset:
20 # NOTE-NEXT:   Size: 36
21 # NOTE-NEXT:   Link: 0
22 # NOTE-NEXT:   Info: 0
23 # NOTE-NEXT:   AddressAlignment: 0
24 # NOTE-NEXT:   EntrySize: 0
25 # NOTE-NEXT:   SectionData (
26 ## namesz == (0x03000000) == sizeof("AB") + NUL terminator.
27 ## descsz == (0x00000000) for an empty description.
28 ## Check we produce a valid 2 bytes zeroes padding after the Name.
29 # NOTE-NEXT:     0000: 03000000 00000000 FF000000 41420000  |............AB..|
30 ## namesz == (0x04000000) == sizeof("ABC") + NUL terminator.
31 ## descsz == (0x06000000) == sizeof("123456").
32 ## Check we produce a valid (zero align to 4) 1 byte padding after the Name.
33 ## Check we produce a valid (zero align to 4) 2 bytes padding after the Desc.
34 # NOTE-NEXT:     0010: 04000000 03000000 FE000000 41424300  |............ABC.|
35 # NOTE-NEXT:     0020: 12345600                             |.4V.|
36 # NOTE-NEXT:   )
38 --- !ELF
39 FileHeader:
40   Class: ELFCLASS64
41   Data:  ELFDATA2LSB
42   Type:  ET_REL
43 Sections:
44   - Name:  .note.foo
45     Type:  SHT_NOTE
46     Flags: [ SHF_ALLOC ]
47     Notes:
48       - Name: AB
49         Desc: ''
50         Type: 0xFF
51       - Name: ABC
52         Desc: '123456'
53         Type: 254
55 ## Check that for 32-bit little-endian case we produce the same section content.
57 # RUN: yaml2obj --docnum=2 %s -o %t2
58 # RUN: llvm-readobj --sections --section-data %t2 | FileCheck %s --check-prefix=NOTE
60 --- !ELF
61 FileHeader:
62   Class: ELFCLASS32
63   Data:  ELFDATA2LSB
64   Type:  ET_REL
65 Sections:
66   - Name:  .note.foo
67     Type:  SHT_NOTE
68     Flags: [ SHF_ALLOC ]
69     Notes:
70       - Name: AB
71         Desc: ''
72         Type: 0xFF
73       - Name: ABC
74         Desc: '123456'
75         Type: 254
77 ## Check big-endian 32/64 bit cases.
78 ## Check they produce the same content.
80 # RUN: yaml2obj --docnum=3 %s -o %t3
81 # RUN: llvm-readobj --sections --section-data %t3 | FileCheck %s --check-prefix=NOTE-BE
82 # RUN: yaml2obj --docnum=4 %s -o %t4
83 # RUN: llvm-readobj --sections --section-data %t4 | FileCheck %s --check-prefix=NOTE-BE
85 # NOTE-BE:      Name: .note.foo
86 # NOTE-BE:      SectionData (
87 # NOTE-BE-NEXT:   0000: 00000004 00000003 000000FE 41424300  |
88 # NOTE-BE-NEXT:   0010: 12345600                             |
89 # NOTE-BE-NEXT: )
91 --- !ELF
92 FileHeader:
93   Class: ELFCLASS32
94   Data:  ELFDATA2MSB
95   Type:  ET_REL
96 Sections:
97   - Name: .note.foo
98     Type: SHT_NOTE
99     Notes:
100       - Name: ABC
101         Desc: '123456'
102         Type: 254
104 --- !ELF
105 FileHeader:
106   Class: ELFCLASS64
107   Data:  ELFDATA2MSB
108   Type:  ET_REL
109 Sections:
110   - Name: .note.foo
111     Type: SHT_NOTE
112     Notes:
113       - Name: ABC
114         Desc: '123456'
115         Type: 254
117 ## Check that 'Type' field is mandatory. 
119 # RUN: not yaml2obj --docnum=5 %s 2>&1 | FileCheck %s --check-prefix=TYPE-REQ
120 # TYPE-REQ: error: missing required key 'Type'
122 --- !ELF
123 FileHeader:
124   Class: ELFCLASS64
125   Data:  ELFDATA2LSB
126   Type:  ET_REL
127 Sections:
128   - Name: .note.foo
129     Type: SHT_NOTE
130     Notes:
131       - Name: ''
132         Desc: ''
134 ## Check that neither `Name` nor `Desc` are mandatory fields.
136 # RUN: yaml2obj --docnum=6 %s -o %t6
137 # RUN: llvm-readobj --sections --section-data %t6 | FileCheck %s --check-prefix=NAME-DESC
139 # NAME-DESC:      Name: .note.foo
140 # NAME-DESC:      SectionData (
141 # NAME-DESC-NEXT:   0000: 00000000 00000000 FF000000 |
142 # NAME-DESC-NEXT: )
144 --- !ELF
145 FileHeader:
146   Class: ELFCLASS64
147   Data:  ELFDATA2LSB
148   Type:  ET_REL
149 Sections:
150   - Name: .note.foo
151     Type: SHT_NOTE
152     Notes:
153       - Type: 0xFF
155 ## Check we can use the "Content" tag to specify any data for SHT_NOTE sections.
157 # RUN: yaml2obj --docnum=7 %s -o %t7
158 # RUN: llvm-readobj --sections --section-data %t7 | FileCheck %s --check-prefix=CONTENT
160 # CONTENT:      Name: .note.foo
161 # CONTENT:      SectionData (
162 # CONTENT-NEXT:   0000: 11223344 55 |
163 # CONTENT-NEXT: )
165 --- !ELF
166 FileHeader:
167   Class: ELFCLASS64
168   Data:  ELFDATA2LSB
169   Type:  ET_DYN
170 Sections:
171   - Name:    .note.foo
172     Type:    SHT_NOTE
173     Content: "1122334455"
175 ## Check we emit an empty section if neither "Content", "Size" nor "Notes" were set.
177 # RUN: yaml2obj --docnum=8 %s -o %t8
178 # RUN: llvm-readelf --sections %t8 | FileCheck %s --check-prefix=NO-TAGS
180 # NO-TAGS: [Nr] Name      Type Address          Off    Size
181 # NO-TAGS: [ 1] .note.foo NOTE 0000000000000000 000040 000000
183 --- !ELF
184 FileHeader:
185   Class: ELFCLASS64
186   Data:  ELFDATA2LSB
187   Type:  ET_DYN
188 Sections:
189   - Name: .note.foo
190     Type: SHT_NOTE
192 ## "Content" and "Notes" cannot be used together to describe the SHT_NOTE section.
194 # RUN: not yaml2obj --docnum=9 %s 2>&1 | FileCheck %s --check-prefix=CONTENT-NOTES
196 # CONTENT-NOTES: error: "Notes" cannot be used with "Content" or "Size"
198 --- !ELF
199 FileHeader:
200   Class: ELFCLASS64
201   Data:  ELFDATA2LSB
202   Type:  ET_DYN
203 Sections:
204   - Name:    .note.foo
205     Type:    SHT_NOTE
206     Content: ""
207     Notes:   []
209 ## "Size" and "Notes" cannot be used together to describe the SHT_NOTE section.
211 # RUN: not yaml2obj --docnum=10 %s 2>&1 | FileCheck %s --check-prefix=CONTENT-NOTES
213 --- !ELF
214 FileHeader:
215   Class: ELFCLASS64
216   Data:  ELFDATA2LSB
217   Type:  ET_DYN
218 Sections:
219   - Name:  .note.foo
220     Type:  SHT_NOTE
221     Size:  1
222     Notes: []
224 ## Check we can use only "Size" to create a SHT_NOTE section.
226 # RUN: yaml2obj --docnum=11 %s -o %t11
227 # RUN: llvm-readobj --sections --section-data %t11 | FileCheck %s --check-prefix=SIZE
229 # SIZE:      Name: .note.foo
230 # SIZE:      SectionData (
231 # SIZE-NEXT:   0000: 00000000 00000000 00000000 00000000  |
232 # SIZE-NEXT:   0010: 00                                   |
233 # SIZE-NEXT: )
235 --- !ELF
236 FileHeader:
237   Class: ELFCLASS64
238   Data:  ELFDATA2LSB
239   Type:  ET_EXEC
240 Sections:
241   - Name: .note.foo
242     Type: SHT_NOTE
243     Size: 0x11
245 ## Check we can use "Size" and "Content" together to create a SHT_NOTE section.
247 # RUN: yaml2obj --docnum=12 %s -o %t12
248 # RUN: llvm-readobj --sections --section-data %t12 | FileCheck %s --check-prefix=SIZE-CONTENT
250 # SIZE-CONTENT:      Name: .note.sizegr
251 # SIZE-CONTENT:      SectionData (
252 # SIZE-CONTENT-NEXT:   0000: 11223300 00 |
253 # SIZE-CONTENT-NEXT: )
255 # SIZE-CONTENT:      Name: .note.sizeeq
256 # SIZE-CONTENT:      SectionData (
257 # SIZE-CONTENT-NEXT:   0000: 112233 |
258 # SIZE-CONTENT-NEXT: )
260 --- !ELF
261 FileHeader:
262   Class: ELFCLASS64
263   Data:  ELFDATA2LSB
264   Type:  ET_EXEC
265 Sections:
266   - Name:    .note.sizegr
267     Type:    SHT_NOTE
268     Size:    0x5
269     Content: "112233"
270   - Name:    .note.sizeeq
271     Type:    SHT_NOTE
272     Size:    0x3
273     Content: "112233"
275 ## Check that when "Size" and "Content" are used together, the size
276 ## must be greater than or equal to the content size.
278 # RUN: not yaml2obj --docnum=13 %s 2>&1 | FileCheck %s --check-prefix=SIZE-CONTENT-ERR
279 # SIZE-CONTENT-ERR: error: Section size must be greater than or equal to the content size
281 --- !ELF
282 FileHeader:
283   Class: ELFCLASS64
284   Data:  ELFDATA2LSB
285   Type:  ET_EXEC
286 Sections:
287   - Name:    .note
288     Type:    SHT_NOTE
289     Size:    0x1
290     Content: "1122"
292 ## Check we can't use "Size" and "Notes" tags together.
294 # RUN: not yaml2obj --docnum=14 %s 2>&1 | FileCheck %s --check-prefix=CONTENT-NOTES
296 --- !ELF
297 FileHeader:
298   Class: ELFCLASS64
299   Data:  ELFDATA2LSB
300   Type:  ET_EXEC
301 Sections:
302   - Name:  .note
303     Type:  SHT_NOTE
304     Size:  0x1
305     Notes: []
307 ## Check that we can use NT_* names for the note type.
309 # RUN: yaml2obj --docnum=15 %s -o %t15
310 # RUN: llvm-readobj --sections --section-data %t15 | FileCheck %s --check-prefix=TEXTUAL-TYPE
312 # TEXTUAL-TYPE:      Name: .note.foo
313 # TEXTUAL-TYPE:      SectionData (
314 # TEXTUAL-TYPE-NEXT:   0000: 03000000 00000000 03000000 41420000  |............AB..|
315 # TEXTUAL-TYPE-NEXT:   0010: 04000000 03000000 01000000 41424300  |............ABC.|
316 # TEXTUAL-TYPE-NEXT:   0020: 12345600                             |.4V.|
317 # TEXTUAL-TYPE-NEXT: )
320 --- !ELF
321 FileHeader:
322   Class: ELFCLASS64
323   Data:  ELFDATA2LSB
324   Type:  ET_EXEC
325 Sections:
326   - Name:  .note.foo
327     Type:  SHT_NOTE
328     Flags: [ SHF_ALLOC ]
329     Notes:
330       - Name: AB
331         Desc: ''
332         Type: NT_GNU_BUILD_ID
333       - Name: ABC
334         Desc: '123456'
335         Type: NT_VERSION