Recommit "rL366894: [yaml2obj] - Allow custom fields for the SHT_UNDEF sections."
[llvm-complete.git] / test / tools / yaml2obj / section-size-content.yaml
blob8a94cb4d6a899244fb6627185fea39044779787c
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