[llvm/test/Object] - Cleanup and move out the yaml2obj tests.
[llvm-complete.git] / test / tools / yaml2obj / section-size-content.yaml
blob1c9c00d2e50f6437056f66c24bd9684d0389de21
1 ## For regular sections, it is common to specify `Size` and/or `Content` fields in YAML.
2 ## Here we test the behavior in different cases.
4 ## In this case, we have both `Content` and `Size` fields specified and `Size`
5 ## is less than content size. Check we report an error.
7 # RUN: not yaml2obj --docnum=1 %s -o %t1 2>&1 | FileCheck %s --check-prefix=ERR
8 # ERR: error: Section size must be greater than or equal to the content size
10 --- !ELF
11 FileHeader:
12   Class:   ELFCLASS64
13   Data:    ELFDATA2LSB
14   Type:    ET_DYN
15   Machine: EM_X86_64
16 Sections:
17   - Name:    .foo
18     Type:    SHT_PROGBITS
19     Content: "FF"
20     Size:    0
22 ## In this case, we have both `Content` and `Size` fields specified and
23 ## `Size` is equal to the content size. We check that this is allowed and
24 ## that the output section has a correct size value.
26 # RUN: yaml2obj --docnum=2 %s -o %t2
27 # RUN: llvm-readobj --section-data -S %t2 | FileCheck %s --check-prefix=CASE2
29 # CASE2:      Name: .foo
30 # CASE2-NEXT: Type: SHT_PROGBITS
31 # CASE2-NEXT: Flags [
32 # CASE2-NEXT: ]
33 # CASE2-NEXT: Address: 0x0
34 # CASE2-NEXT: Offset: 0x180
35 # CASE2-NEXT: Size: 1
36 # CASE2-NEXT: Link: 0
37 # CASE2-NEXT: Info: 0
38 # CASE2-NEXT: AddressAlignment: 0
39 # CASE2-NEXT: EntrySize: 0
40 # CASE2-NEXT: SectionData (
41 # CASE2-NEXT:   0000: FF
42 # CASE2-NEXT: )
44 --- !ELF
45 FileHeader:
46   Class:   ELFCLASS64
47   Data:    ELFDATA2LSB
48   Type:    ET_DYN
49   Machine: EM_X86_64
50 Sections:
51   - Name:    .foo
52     Type:    SHT_PROGBITS
53     Content: "FF"
54     Size:    1
56 ## Check we can specify only `Content`.
58 # RUN: yaml2obj --docnum=3 %s -o %t3
59 # RUN: llvm-readobj --section-data -S %t3 | FileCheck %s --check-prefix=CASE2
61 --- !ELF
62 FileHeader:
63   Class:   ELFCLASS64
64   Data:    ELFDATA2LSB
65   Type:    ET_DYN
66   Machine: EM_X86_64
67 Sections:
68   - Name:    .foo
69     Type:    SHT_PROGBITS
70     Content: "FF"
72 ## Check we can specify only `Size`.
74 # RUN: yaml2obj --docnum=4 %s -o %t4
75 # RUN: llvm-readobj --section-data -S %t4 | FileCheck %s --check-prefix=CASE3
77 # CASE3:      Name: .foo
78 # CASE3-NEXT: Type: SHT_PROGBITS
79 # CASE3-NEXT: Flags [
80 # CASE3-NEXT: ]
81 # CASE3-NEXT: Address: 0x0
82 # CASE3-NEXT: Offset: 0x180
83 # CASE3-NEXT: Size: 1
84 # CASE3-NEXT: Link: 0
85 # CASE3-NEXT: Info: 0
86 # CASE3-NEXT: AddressAlignment: 0
87 # CASE3-NEXT: EntrySize: 0
88 # CASE3-NEXT: SectionData (
89 # CASE3-NEXT:   0000: 00
90 # CASE3-NEXT: )
92 --- !ELF
93 FileHeader:
94   Class:   ELFCLASS64
95   Data:    ELFDATA2LSB
96   Type:    ET_DYN
97   Machine: EM_X86_64
98 Sections:
99   - Name: .foo
100     Type: SHT_PROGBITS
101     Size: 1
103 ## Check we can specify both `Size` and `Content` when size is greater
104 ## than content size. In this case zeroes are added as padding
105 ## after the specified content.
107 # RUN: yaml2obj --docnum=5 %s -o %t5
108 # RUN: llvm-readobj --section-data -S %t5 | FileCheck %s --check-prefix=CASE4
110 # CASE4:      Name: .foo
111 # CASE4-NEXT: Type: SHT_PROGBITS
112 # CASE4-NEXT: Flags [
113 # CASE4-NEXT: ]
114 # CASE4-NEXT: Address: 0x0
115 # CASE4-NEXT: Offset: 0x180
116 # CASE4-NEXT: Size: 3
117 # CASE4-NEXT: Link: 0
118 # CASE4-NEXT: Info: 0
119 # CASE4-NEXT: AddressAlignment: 0
120 # CASE4-NEXT: EntrySize: 0
121 # CASE4-NEXT: SectionData (
122 # CASE4-NEXT:   0000: FF0000
123 # CASE4-NEXT: )
125 --- !ELF
126 FileHeader:
127   Class:   ELFCLASS64
128   Data:    ELFDATA2LSB
129   Type:    ET_DYN
130   Machine: EM_X86_64
131 Sections:
132   - Name:    .foo
133     Type:    SHT_PROGBITS
134     Content: "FF"
135     Size:    3
137 ## Check we emit an empty section if neither 'Content' nor 'Size' were set.
139 # RUN: yaml2obj --docnum=6 %s -o %t6
140 # RUN: llvm-readobj %t6 --sections | FileCheck %s --check-prefix=CASE5
142 # CASE5:      Name: .foo
143 # CASE5-NEXT: Type: SHT_PROGBITS
144 # CASE5-NEXT: Flags [
145 # CASE5-NEXT: ]
146 # CASE5-NEXT: Address: 0x0
147 # CASE5-NEXT: Offset: 0x180
148 # CASE5-NEXT: Size: 0
150 --- !ELF
151 FileHeader:
152   Class:   ELFCLASS64
153   Data:    ELFDATA2LSB
154   Type:    ET_DYN
155   Machine: EM_X86_64
156 Sections:
157   - Name: .foo
158     Type: SHT_PROGBITS
160 # RUN: not yaml2obj --docnum=7 %s 2>&1 | FileCheck %s --check-prefix=ERR2
162 --- !ELF
163 FileHeader:
164   Class: ELFCLASS64
165   Data: ELFDATA2LSB
166   Type: ET_REL
167   Machine: EM_X86_64
168 Sections:
169   - Name: .data
170     Type: SHT_PROGBITS
171     Flags: [ SHF_ALLOC ]
172     Content: 0000000000000000
173     Size: 2
175 # ERR2:      error: Section size must be greater than or equal to the content size
176 # ERR2-NEXT: - Name: .data
177 # ERR2-NEXT:   ^
178 # ERR2-NEXT: yaml2obj: Failed to parse YAML file!