172 lines
4.0 KiB
YAML
172 lines
4.0 KiB
YAML
## For regular sections, it is common to specify `Size` and/or `Content` fields in YAML.
|
|
## Here we test the behavior in different cases.
|
|
|
|
## In this case, we have both `Content` and `Size` fields specified and `Size`
|
|
## is less than content size. Check we report an error.
|
|
|
|
# RUN: not yaml2obj --docnum=1 %s -o %t1 2>&1 | FileCheck %s --check-prefix=ERR
|
|
# ERR: error: Section size must be greater than or equal to the content size
|
|
|
|
--- !ELF
|
|
FileHeader:
|
|
Class: ELFCLASS64
|
|
Data: ELFDATA2LSB
|
|
Type: ET_DYN
|
|
Sections:
|
|
- Name: .foo
|
|
Type: SHT_PROGBITS
|
|
Content: "FF"
|
|
Size: 0
|
|
|
|
## In this case, we have both `Content` and `Size` fields specified and
|
|
## `Size` is equal to the content size. We check that this is allowed and
|
|
## that the output section has a correct size value.
|
|
|
|
# RUN: yaml2obj --docnum=2 %s -o %t2
|
|
# RUN: llvm-readobj --section-data -S %t2 | FileCheck %s --check-prefix=CASE2
|
|
|
|
# CASE2: Name: .foo
|
|
# CASE2-NEXT: Type: SHT_PROGBITS
|
|
# CASE2-NEXT: Flags [
|
|
# CASE2-NEXT: ]
|
|
# CASE2-NEXT: Address: 0x0
|
|
# CASE2-NEXT: Offset: 0x40
|
|
# CASE2-NEXT: Size: 1
|
|
# CASE2-NEXT: Link: 0
|
|
# CASE2-NEXT: Info: 0
|
|
# CASE2-NEXT: AddressAlignment: 0
|
|
# CASE2-NEXT: EntrySize: 0
|
|
# CASE2-NEXT: SectionData (
|
|
# CASE2-NEXT: 0000: FF
|
|
# CASE2-NEXT: )
|
|
|
|
--- !ELF
|
|
FileHeader:
|
|
Class: ELFCLASS64
|
|
Data: ELFDATA2LSB
|
|
Type: ET_DYN
|
|
Sections:
|
|
- Name: .foo
|
|
Type: SHT_PROGBITS
|
|
Content: "FF"
|
|
Size: 1
|
|
|
|
## Check we can specify only `Content`.
|
|
|
|
# RUN: yaml2obj --docnum=3 %s -o %t3
|
|
# RUN: llvm-readobj --section-data -S %t3 | FileCheck %s --check-prefix=CASE2
|
|
|
|
--- !ELF
|
|
FileHeader:
|
|
Class: ELFCLASS64
|
|
Data: ELFDATA2LSB
|
|
Type: ET_DYN
|
|
Sections:
|
|
- Name: .foo
|
|
Type: SHT_PROGBITS
|
|
Content: "FF"
|
|
|
|
## Check we can specify only `Size`.
|
|
|
|
# RUN: yaml2obj --docnum=4 %s -o %t4
|
|
# RUN: llvm-readobj --section-data -S %t4 | FileCheck %s --check-prefix=CASE3
|
|
|
|
# CASE3: Name: .foo
|
|
# CASE3-NEXT: Type: SHT_PROGBITS
|
|
# CASE3-NEXT: Flags [
|
|
# CASE3-NEXT: ]
|
|
# CASE3-NEXT: Address: 0x0
|
|
# CASE3-NEXT: Offset: 0x40
|
|
# CASE3-NEXT: Size: 1
|
|
# CASE3-NEXT: Link: 0
|
|
# CASE3-NEXT: Info: 0
|
|
# CASE3-NEXT: AddressAlignment: 0
|
|
# CASE3-NEXT: EntrySize: 0
|
|
# CASE3-NEXT: SectionData (
|
|
# CASE3-NEXT: 0000: 00
|
|
# CASE3-NEXT: )
|
|
|
|
--- !ELF
|
|
FileHeader:
|
|
Class: ELFCLASS64
|
|
Data: ELFDATA2LSB
|
|
Type: ET_DYN
|
|
Sections:
|
|
- Name: .foo
|
|
Type: SHT_PROGBITS
|
|
Size: 1
|
|
|
|
## Check we can specify both `Size` and `Content` when size is greater
|
|
## than content size. In this case zeroes are added as padding
|
|
## after the specified content.
|
|
|
|
# RUN: yaml2obj --docnum=5 %s -o %t5
|
|
# RUN: llvm-readobj --section-data -S %t5 | FileCheck %s --check-prefix=CASE4
|
|
|
|
# CASE4: Name: .foo
|
|
# CASE4-NEXT: Type: SHT_PROGBITS
|
|
# CASE4-NEXT: Flags [
|
|
# CASE4-NEXT: ]
|
|
# CASE4-NEXT: Address: 0x0
|
|
# CASE4-NEXT: Offset: 0x40
|
|
# CASE4-NEXT: Size: 3
|
|
# CASE4-NEXT: Link: 0
|
|
# CASE4-NEXT: Info: 0
|
|
# CASE4-NEXT: AddressAlignment: 0
|
|
# CASE4-NEXT: EntrySize: 0
|
|
# CASE4-NEXT: SectionData (
|
|
# CASE4-NEXT: 0000: FF0000
|
|
# CASE4-NEXT: )
|
|
|
|
--- !ELF
|
|
FileHeader:
|
|
Class: ELFCLASS64
|
|
Data: ELFDATA2LSB
|
|
Type: ET_DYN
|
|
Sections:
|
|
- Name: .foo
|
|
Type: SHT_PROGBITS
|
|
Content: "FF"
|
|
Size: 3
|
|
|
|
## Check we emit an empty section if neither 'Content' nor 'Size' were set.
|
|
|
|
# RUN: yaml2obj --docnum=6 %s -o %t6
|
|
# RUN: llvm-readobj %t6 --sections | FileCheck %s --check-prefix=CASE5
|
|
|
|
# CASE5: Name: .foo
|
|
# CASE5-NEXT: Type: SHT_PROGBITS
|
|
# CASE5-NEXT: Flags [
|
|
# CASE5-NEXT: ]
|
|
# CASE5-NEXT: Address: 0x0
|
|
# CASE5-NEXT: Offset: 0x40
|
|
# CASE5-NEXT: Size: 0
|
|
|
|
--- !ELF
|
|
FileHeader:
|
|
Class: ELFCLASS64
|
|
Data: ELFDATA2LSB
|
|
Type: ET_DYN
|
|
Sections:
|
|
- Name: .foo
|
|
Type: SHT_PROGBITS
|
|
|
|
# RUN: not yaml2obj --docnum=7 %s 2>&1 | FileCheck %s --check-prefix=ERR2
|
|
|
|
--- !ELF
|
|
FileHeader:
|
|
Class: ELFCLASS64
|
|
Data: ELFDATA2LSB
|
|
Type: ET_REL
|
|
Sections:
|
|
- Name: .data
|
|
Type: SHT_PROGBITS
|
|
Flags: [ SHF_ALLOC ]
|
|
Content: 0000000000000000
|
|
Size: 2
|
|
|
|
# ERR2: error: Section size must be greater than or equal to the content size
|
|
# ERR2-NEXT: - Name: .data
|
|
# ERR2-NEXT: ^
|
|
# ERR2-NEXT: error: failed to parse YAML input
|