mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-10-21 03:53:04 +02:00
676775660f
This is a continuation of the YAML library error reporting refactoring/improvement and the idea by itself was mentioned in the following thread: https://reviews.llvm.org/D67182?id=218714#inline-603404 This performs a cleanup of all object emitters in the library. It allows using the custom one provided by the caller. One of the nice things is that each tool can now print its tool name, e.g: "yaml2obj: error: <text>" Also, the code became a bit simpler. Differential revision: https://reviews.llvm.org/D67445 llvm-svn: 371865
179 lines
4.2 KiB
YAML
179 lines
4.2 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
|
|
Machine: EM_X86_64
|
|
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
|
|
Machine: EM_X86_64
|
|
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
|
|
Machine: EM_X86_64
|
|
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
|
|
Machine: EM_X86_64
|
|
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
|
|
Machine: EM_X86_64
|
|
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
|
|
Machine: EM_X86_64
|
|
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
|
|
Machine: EM_X86_64
|
|
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
|