291 lines · yaml
1## Check how yaml2obj produces .stack_sizes sections.2 3## Test the following cases when the .stack_sizes Content field is specified:4## 1) We can produce a .stack_sizes section from a description with5## a valid section content.6## 2) We can produce an incorrect .stack_sizes section from a description with7## a broken (truncated) section content.8## 3) We can produce an empty .stack_sizes section from a description with9## empty section content.10 11# RUN: yaml2obj --docnum=1 %s -o %t112# RUN: llvm-readobj --sections --section-data %t1 | FileCheck %s13 14## Case 1: valid content.15# CHECK: Section {16# CHECK: Index: 117# CHECK-NEXT: Name: .stack_sizes (1)18# CHECK-NEXT: Type: SHT_PROGBITS (0x1)19# CHECK-NEXT: Flags [ (0x0)20# CHECK-NEXT: ]21# CHECK-NEXT: Address: 0x022# CHECK-NEXT: Offset: 0x4023# CHECK-NEXT: Size: 924# CHECK-NEXT: Link: 025# CHECK-NEXT: Info: 026# CHECK-NEXT: AddressAlignment: 027# CHECK-NEXT: EntrySize: 028# CHECK-NEXT: SectionData (29# CHECK-NEXT: 0000: 10000000 00000000 2030# CHECK-NEXT: )31# CHECK-NEXT: }32 33## Case 2: truncated content.34# CHECK: Name: .stack_sizes35# CHECK: Size:36# CHECK-SAME: 837# CHECK: SectionData (38# CHECK-NEXT: 0000: 10000000 0000000039 40## Case 3: empty content.41# CHECK: Name: .stack_sizes42# CHECK: Size:43# CHECK-SAME: 044 45--- !ELF46FileHeader:47 Class: ELFCLASS6448 Data: ELFDATA2LSB49 Type: ET_EXEC50Sections:51## Valid.52 - Name: '.stack_sizes (1)'53 Type: SHT_PROGBITS54 Content: "100000000000000020"55## Truncated.56 - Name: '.stack_sizes (2)'57 Type: SHT_PROGBITS58 Content: "1000000000000000"59## Empty.60 - Name: '.stack_sizes (3)'61 Type: SHT_PROGBITS62 Content: ""63 64## Check we can describe .stack_sizes section using <address, size> pairs.65 66# RUN: yaml2obj --docnum=2 -D BITS=64 -D ENCODE=LSB %s -o %t2.le6467# RUN: llvm-readobj --sections --section-data %t2.le64 | FileCheck %s --check-prefix=ENTRIES-LE64-BOTH68# RUN: yaml2obj --docnum=2 -D BITS=64 -D ENCODE=MSB %s -o %t2.be6469# RUN: llvm-readobj --sections --section-data %t2.be64 | FileCheck %s --check-prefix=ENTRIES-BE64-BOTH70# RUN: yaml2obj --docnum=2 -D BITS=32 -D ENCODE=LSB %s -o %t2.le3271# RUN: llvm-readobj --sections --section-data %t2.le32 | FileCheck %s --check-prefix=ENTRIES-LE32-BOTH72# RUN: yaml2obj --docnum=2 -D BITS=32 -D ENCODE=MSB %s -o %t2.be3273# RUN: llvm-readobj --sections --section-data %t2.be32 | FileCheck %s --check-prefix=ENTRIES-BE32-BOTH74 75# ENTRIES-LE64-BOTH: Name: .stack_sizes76# ENTRIES-LE64-BOTH: SectionData (77# ENTRIES-LE64-BOTH-NEXT: 0000: 10000000 00000000 20300000 00000000 |78# ENTRIES-LE64-BOTH-NEXT: 0010: 0040 |79 80# ENTRIES-BE64-BOTH: Name: .stack_sizes81# ENTRIES-BE64-BOTH: SectionData (82# ENTRIES-BE64-BOTH-NEXT: 0000: 00000000 00000010 20000000 00000000 |83# ENTRIES-BE64-BOTH-NEXT: 0010: 304084 85# ENTRIES-LE32-BOTH: Name: .stack_sizes86# ENTRIES-LE32-BOTH: SectionData (87# ENTRIES-LE32-BOTH-NEXT: 0000: 10000000 20300000 0040 |88 89# ENTRIES-BE32-BOTH: Name: .stack_sizes90# ENTRIES-BE32-BOTH: SectionData (91# ENTRIES-BE32-BOTH-NEXT: 0000: 00000010 20000000 3040 |92 93--- !ELF94FileHeader:95 Class: ELFCLASS[[BITS]]96 Data: ELFDATA2[[ENCODE]]97 Type: ET_EXEC98Sections:99 - Name: .stack_sizes100 Type: SHT_PROGBITS101 Entries:102 - Address: 0x10103 Size: 0x20104 - Address: 0x30105 Size: 0x40106 107## Check we can omit the "Address" tag. In this case the address will be zero.108 109# RUN: yaml2obj --docnum=3 %s -o %t3110# RUN: llvm-readobj --sections --section-data %t3 | FileCheck %s --check-prefix=ENTRIES-NOADDR111 112# ENTRIES-NOADDR: Name: .stack_sizes113# ENTRIES-NOADDR: SectionData (114# ENTRIES-NOADDR-NEXT: 0000: 00000000 00000000 10000000 00000000 |115# ENTRIES-NOADDR-NEXT: 0010: 0020 |116 117--- !ELF118FileHeader:119 Class: ELFCLASS64120 Data: ELFDATA2LSB121 Type: ET_EXEC122Sections:123 - Name: .stack_sizes124 Type: SHT_PROGBITS125 Entries:126 - Size: 0x10127 - Size: 0x20128 129## Check that "Size" tag is mandatory when we describe .stack_sizes using "Entries".130 131# RUN: not yaml2obj --docnum=4 %s 2>&1 | FileCheck %s --check-prefix=ENTRIES-NOSIZE132 133# ENTRIES-NOSIZE: error: missing required key 'Size'134 135--- !ELF136FileHeader:137 Class: ELFCLASS64138 Data: ELFDATA2LSB139 Type: ET_EXEC140Sections:141 - Name: .stack_sizes142 Type: SHT_PROGBITS143 Entries:144 - Address: 0x10145 146## Check we can't use both "Content" and "Entries" tags at the same time.147 148# RUN: not yaml2obj --docnum=5 %s 2>&1 | FileCheck %s --check-prefix=ENTRIES-AND-CONTENT149 150# ENTRIES-AND-CONTENT: error: "Entries" cannot be used with "Content" or "Size"151 152--- !ELF153FileHeader:154 Class: ELFCLASS64155 Data: ELFDATA2LSB156 Type: ET_EXEC157Sections:158 - Name: .stack_sizes159 Type: SHT_PROGBITS160 Content: "00"161 Entries:162 - Address: 0x10163 Size: 0x20164 165## Check we emit an empty section if neither "Content", "Size" nor "Entries" were set.166 167# RUN: yaml2obj --docnum=6 %s -o %t6168# RUN: llvm-readelf --sections %t6 | FileCheck %s --check-prefix=NO-TAGS169 170# NO-TAGS: [Nr] Name Type Address Off Size171# NO-TAGS: [ 1] .stack_sizes PROGBITS 0000000000000000 000040 000000172 173--- !ELF174FileHeader:175 Class: ELFCLASS64176 Data: ELFDATA2LSB177 Type: ET_EXEC178Sections:179 - Name: .stack_sizes180 Type: SHT_PROGBITS181 182## Check we can't use both "Size" and "Entries" tags at the same time.183 184# RUN: not yaml2obj --docnum=7 %s 2>&1 | FileCheck %s --check-prefix=ENTRIES-AND-SIZE185 186# ENTRIES-AND-SIZE: error: "Entries" cannot be used with "Content" or "Size"187 188--- !ELF189FileHeader:190 Class: ELFCLASS64191 Data: ELFDATA2LSB192 Type: ET_EXEC193Sections:194 - Name: .stack_sizes195 Type: SHT_PROGBITS196 Size: 0x1197 Entries:198 - Address: 0x10199 Size: 0x20200 201## Check we can use only "Size" to create .stack_sizes section.202 203# RUN: yaml2obj --docnum=8 %s -o %t8204# RUN: llvm-readobj --sections --section-data %t8 | FileCheck %s --check-prefix=SIZE205 206# SIZE: Name: .stack_sizes207# SIZE: Size:208# SIZE-SAME: 17209# SIZE: SectionData (210# SIZE-NEXT: 0000: 00000000 00000000 00000000 00000000 |211# SIZE-NEXT: 0010: 00 |212# SIZE-NEXT: )213 214--- !ELF215FileHeader:216 Class: ELFCLASS64217 Data: ELFDATA2LSB218 Type: ET_EXEC219Sections:220 - Name: .stack_sizes221 Type: SHT_PROGBITS222 Size: 0x11223 224## Check we can use "Size" and "Content" together to create .stack_sizes section.225 226# RUN: yaml2obj --docnum=9 %s -o %t9227# RUN: llvm-readobj --sections --section-data %t9 | FileCheck %s --check-prefix=SIZE-CONTENT228 229# SIZE-CONTENT: Name: .stack_sizes230# SIZE-CONTENT: Size:231# SIZE-CONTENT-SAME: 5232# SIZE-CONTENT: SectionData (233# SIZE-CONTENT-NEXT: 0000: 11223300 00 |234# SIZE-CONTENT-NEXT: )235 236--- !ELF237FileHeader:238 Class: ELFCLASS64239 Data: ELFDATA2LSB240 Type: ET_EXEC241Sections:242 - Name: .stack_sizes243 Type: SHT_PROGBITS244 Size: 0x5245 Content: "112233"246 247# RUN: not yaml2obj --docnum=10 %s 2>&1 | FileCheck %s --check-prefix=SIZE-CONTENT-ERR248 249# SIZE-CONTENT-ERR: error: Section size must be greater than or equal to the content size250 251--- !ELF252FileHeader:253 Class: ELFCLASS64254 Data: ELFDATA2LSB255 Type: ET_EXEC256Sections:257 - Name: .stack_sizes258 Type: SHT_PROGBITS259 Size: 0x1260 Content: "1122"261 262## Check we can describe multiple .stack_sizes sections using unique suffixes.263 264# RUN: yaml2obj --docnum=11 %s -o %t11265# RUN: llvm-readobj --sections --section-data %t11 | FileCheck %s --check-prefix=UNIQUE266 267# UNIQUE: Name: .stack_sizes268# UNIQUE: SectionData (269# UNIQUE-NEXT: 0000: 10000000 00000000 20 |270 271# UNIQUE: Name: .stack_sizes272# UNIQUE: SectionData (273# UNIQUE-NEXT: 0000: 30000000 00000000 40 |274 275--- !ELF276FileHeader:277 Class: ELFCLASS64278 Data: ELFDATA2LSB279 Type: ET_EXEC280Sections:281 - Name: '.stack_sizes (1)'282 Type: SHT_PROGBITS283 Entries:284 - Address: 0x10285 Size: 0x20286 - Name: '.stack_sizes (2)'287 Type: SHT_PROGBITS288 Entries:289 - Address: 0x30290 Size: 0x40291