Follow up to d0858bffa11, add missing REQUIRES x86
[llvm-project.git] / llvm / test / tools / yaml2obj / ELF / custom-null-section.yaml
blob73f08f97fc4fcdaffd6925a41f65641212e9fbd8
1 ## In this test we check that can redefine the null section in the YAML.
3 ## Test the default output first.
5 # RUN: yaml2obj --docnum=1 %s -o %t1
6 # RUN: llvm-readelf --sections %t1 | FileCheck %s --check-prefix=DEFAULT
8 # DEFAULT:      Section Headers:
9 # DEFAULT-NEXT:  [Nr] Name      Type   Address          Off    Size   ES Flg Lk Inf Al
10 # DEFAULT-NEXT:  [ 0]           NULL   0000000000000000 000000 000000 00 0   0  0
11 # DEFAULT-NEXT:  [ 1] .strtab   STRTAB 0000000000000000 000040 000001 00 0   0  1
12 # DEFAULT-NEXT:  [ 2] .shstrtab STRTAB 0000000000000000 000041 000013 00 0   0  1
14 --- !ELF
15 FileHeader:
16   Class: ELFCLASS64
17   Data:  ELFDATA2LSB
18   Type:  ET_REL
20 ## Now define a SHT_NULL section with fields all zeroed.
21 ## In this case it is equal to the section created by default.
23 # RUN: yaml2obj --docnum=2 %s -o %t2
24 # RUN: llvm-readelf --sections %t2 | FileCheck %s --check-prefix=DEFAULT
26 --- !ELF
27 FileHeader:
28   Class: ELFCLASS64
29   Data:  ELFDATA2LSB
30   Type:  ET_REL
31 Sections:
32   - Type:         SHT_NULL
33     Name:         ''
34     Flags:        [ ]
35     AddressAlign: 0x0
36     Size:         0x0
37     EntSize:      0x0
38     Link:         0
39     Info:         0
40     Address:      0x0
42 ## Check we can redefine fields of the first SHT_NULL section.
44 # RUN: yaml2obj --docnum=3 %s -o %t3
45 # RUN: llvm-readelf --sections %t3 | FileCheck %s --check-prefix=REDEF
47 # REDEF:      Section Headers:
48 # REDEF-NEXT:  [Nr] Name Type Address          Off    Size   ES Flg Lk Inf Al
49 # REDEF-NEXT:  [ 0] .foo NULL 0000000000000006 000000 000002 03   A 4   5  1
51 --- !ELF
52 FileHeader:
53   Class: ELFCLASS64
54   Data:  ELFDATA2LSB
55   Type:  ET_REL
56 Sections:
57   - Type:         SHT_NULL
58     Name:         .foo
59     Flags:        [ SHF_ALLOC ]
60     AddressAlign: 0x1
61     Size:         0x2
62     EntSize:      0x3
63     Link:         4
64     Info:         5
65     Address:      0x6
67 ## Check that file size does not change if we redefine the Size
68 ## of the first SHT_NULL section.
70 # RUN: yaml2obj --docnum=4 %s -o %t4
71 # RUN: wc -c < %t3 > %t.txt
72 # RUN: wc -c < %t4 >> %t.txt
73 # RUN: FileCheck %s --input-file=%t.txt --check-prefix=SIZE
75 # SIZE: [[FILESIZE:.*]]
76 # SIZE: [[FILESIZE]]
78 --- !ELF
79 FileHeader:
80   Class: ELFCLASS64
81   Data:  ELFDATA2LSB
82   Type:  ET_REL
83 Sections:
84   - Type:         SHT_NULL
85     Name:         .foo
86     Flags:        [ SHF_ALLOC ]
87     AddressAlign: 0x1
88     Size:         0xFFFF
89     EntSize:      0x3
90     Link:         4
91     Info:         5
92     Address:      0x6
94 ## Check we are still able to describe other sections too.
96 # RUN: yaml2obj --docnum=5 %s -o %t5
97 # RUN: llvm-readelf --sections %t5 | FileCheck %s --check-prefix=OTHER-SECTION
99 # OTHER-SECTION:      Section Headers:
100 # OTHER-SECTION-NEXT:   [Nr] Name      Type     Address          Off    Size   ES Flg Lk Inf Al
101 # OTHER-SECTION-NEXT:   [ 0]           NULL     0000000000000000 000000 000000 00 0   0  0
102 # OTHER-SECTION-NEXT:   [ 1] foo       PROGBITS 0000000000000000 000040 000000 00 0   0  0
103 # OTHER-SECTION-NEXT:   [ 2] .strtab   STRTAB   0000000000000000 000040 000001 00 0   0  1
104 # OTHER-SECTION-NEXT:   [ 3] .shstrtab STRTAB   0000000000000000 000041 000017 00 0   0  1
106 --- !ELF
107 FileHeader:
108   Class: ELFCLASS64
109   Data:  ELFDATA2LSB
110   Type:  ET_REL
111 Sections:
112   - Type:         SHT_NULL
113     Name:         ''
114     Flags:        [ ]
115     AddressAlign: 0x0
116     Size:         0x0
117     EntSize:      0x0
118     Link:         0
119   - Type: SHT_PROGBITS
120     Name: 'foo'
122 ## Check we report an error if null section sh_link field refers to an unknown section.
124 # RUN: not yaml2obj --docnum=6 %s -o %t6 2>&1 | FileCheck %s --check-prefix=CASE4
126 # CASE4:      error: unknown section referenced: '.foo' by YAML section '(index 0)'
127 # CASE4-NEXT: error: unknown section referenced: '.bar' by YAML section '(index 1)'
129 --- !ELF
130 FileHeader:
131   Class: ELFCLASS64
132   Data:  ELFDATA2LSB
133   Type:  ET_REL
134 Sections:
135   - Type: SHT_NULL
136     Link: .foo
137   - Type: SHT_NULL
138     Link: .bar
140 ## Check that null section fields are set to zero, if they are unspecified.
142 # RUN: yaml2obj --docnum=7 %s -o %t7
143 # RUN: llvm-readelf --sections %t7 | FileCheck %s --check-prefix=DEFAULT
145 --- !ELF
146 FileHeader:
147   Class: ELFCLASS64
148   Data:  ELFDATA2LSB
149   Type:  ET_REL
150 Sections:
151   - Type: SHT_NULL
153 ## Check we do not crash if we have more than one SHT_NULL section.
155 # RUN: yaml2obj --docnum=8 %s -o %t8
156 # RUN: llvm-readelf --sections %t8 | FileCheck %s --check-prefix=MULTIPLE
158 # MULTIPLE:      Section Headers:
159 # MULTIPLE-NEXT:  [Nr] Name Type Address          Off    Size   ES Flg Lk Inf Al
160 # MULTIPLE-NEXT:  [ 0]      NULL 0000000000000000 000000 000000 00 0   0  0
161 # MULTIPLE-NEXT:  [ 1] .foo NULL 0000000000000123 000040 000020 10 A   1  2   0
163 --- !ELF
164 FileHeader:
165   Class: ELFCLASS64
166   Data:  ELFDATA2LSB
167   Type:  ET_REL
168 Sections:
169   - Type: SHT_NULL
170   - Type:    SHT_NULL
171     Name:    .foo
172     Flags:   [ SHF_ALLOC ]
173     Size:    0x20
174     EntSize: 0x10
175     Link:    1
176     Info:    2
177     Address: 0x123
179 ## Check we can override the sh_offset/sh_size fields of the first SHT_NULL section if requested.
181 # RUN: yaml2obj --docnum=9 %s -o %t9
182 # RUN: llvm-readelf --sections %t9 | FileCheck %s --check-prefix=OVERRIDE
184 # OVERRIDE:      Section Headers:
185 # OVERRIDE-NEXT:  [Nr] Name Type Address          Off    Size   ES Flg Lk Inf Al
186 # OVERRIDE-NEXT:  [ 0]      NULL 0000000000000000 000007 000008 00   0 0  0
188 --- !ELF
189 FileHeader:
190   Class: ELFCLASS64
191   Data:  ELFDATA2LSB
192   Type:  ET_REL
193 Sections:
194   - Type:     SHT_NULL
195     Size:     0x2
196     ShOffset: 0x7
197     ShSize:   0x8
199 ## Check that we can set an offset for the SHT_NULL section explicitly using the "Offset" key.
200 ## Check it affects the section header table offset.
201 # RUN: yaml2obj --docnum=10 %s -DOFFSET=0x100 -o %t10
202 # RUN: llvm-readelf --headers --sections %t10 | FileCheck %s --check-prefix=EXPLICIT-OFFSET-A
203 # RUN: yaml2obj --docnum=10 %s -DOFFSET=0x200 -o %t11
204 # RUN: llvm-readelf --headers --sections %t11 | FileCheck %s --check-prefix=EXPLICIT-OFFSET-B
206 # EXPLICIT-OFFSET-A:      Start of section headers: 280 (bytes into file)
207 # EXPLICIT-OFFSET-A:      [Nr] Name  Type Address          Off
208 # EXPLICIT-OFFSET-A-NEXT: [ 0]       NULL 0000000000000000 000100
210 # EXPLICIT-OFFSET-B:      Start of section headers: 536 (bytes into file)
211 # EXPLICIT-OFFSET-B:      [Nr] Name  Type Address          Off
212 # EXPLICIT-OFFSET-B-NEXT: [ 0]       NULL 0000000000000000 000200
214 --- !ELF
215 FileHeader:
216   Class: ELFCLASS64
217   Data:  ELFDATA2LSB
218   Type:  ET_REL
219 Sections:
220   - Type:   SHT_NULL
221     Offset: [[OFFSET]]