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
207 lines
5.1 KiB
YAML
207 lines
5.1 KiB
YAML
## For implicit dynamic symbol table sections, `Size` and/or `Content`
|
|
## fields can also be specified in YAML. Here we test the behavior in
|
|
## different cases.
|
|
|
|
## When no `Size` or `Content` is specified for a dynamic symbol table section,
|
|
## yaml2obj writes the default content.
|
|
|
|
# RUN: yaml2obj --docnum=1 %s -o %t1
|
|
# RUN: llvm-readelf %t1 --dyn-symbols | FileCheck %s --check-prefix=CASE1
|
|
|
|
# CASE1: Symbol table '.dynsym' contains 2 entries:
|
|
# CASE1-NEXT: Num: Value Size Type Bind Vis Ndx Name
|
|
# CASE1-NEXT: 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND
|
|
# CASE1-NEXT: 1: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND foo
|
|
# CASE1-EMPTY:
|
|
|
|
--- !ELF
|
|
FileHeader:
|
|
Class: ELFCLASS64
|
|
Data: ELFDATA2LSB
|
|
Type: ET_DYN
|
|
Machine: EM_X86_64
|
|
Sections:
|
|
- Name: .dynsym
|
|
Type: SHT_DYNSYM
|
|
DynamicSymbols:
|
|
- Name: foo
|
|
Binding: STB_GLOBAL
|
|
|
|
## Specifying both `Size` and symbols at the same time is not allowed for .dynsym.
|
|
|
|
# RUN: not yaml2obj --docnum=2 %s 2>&1 | FileCheck %s --implicit-check-not=error --check-prefix=CASE2
|
|
|
|
# CASE2: yaml2obj: error: cannot specify both `Size` and `DynamicSymbols` for symbol table section '.dynsym'
|
|
|
|
--- !ELF
|
|
FileHeader:
|
|
Class: ELFCLASS64
|
|
Data: ELFDATA2LSB
|
|
Type: ET_DYN
|
|
Machine: EM_X86_64
|
|
Sections:
|
|
- Name: .dynsym
|
|
Type: SHT_DYNSYM
|
|
Size: 0x100
|
|
- Name: .dynsym2
|
|
Type: SHT_DYNSYM
|
|
Size: 0x100
|
|
DynamicSymbols:
|
|
- Name: foo
|
|
Binding: STB_GLOBAL
|
|
|
|
## Specifying both `Content` and symbols at the same time is not allowed for .dynsym.
|
|
|
|
# RUN: not yaml2obj --docnum=3 %s 2>&1 | FileCheck %s --implicit-check-not=error --check-prefix=CASE3
|
|
|
|
# CASE3: yaml2obj: error: cannot specify both `Content` and `DynamicSymbols` for symbol table section '.dynsym'
|
|
|
|
--- !ELF
|
|
FileHeader:
|
|
Class: ELFCLASS64
|
|
Data: ELFDATA2LSB
|
|
Type: ET_DYN
|
|
Machine: EM_X86_64
|
|
Sections:
|
|
- Name: .dynsym
|
|
Type: SHT_DYNSYM
|
|
Content: "00"
|
|
- Name: .dynsym2
|
|
Type: SHT_DYNSYM
|
|
Content: "00"
|
|
DynamicSymbols:
|
|
- Name: foo
|
|
Binding: STB_GLOBAL
|
|
|
|
## Check we can use just `Content` to emit custom data in the symbol table section.
|
|
# RUN: yaml2obj --docnum=4 %s -o %t4
|
|
# RUN: llvm-readobj --section-data -S %t4 | FileCheck %s --check-prefix=CASE4
|
|
|
|
# CASE4: Name: .dynsym
|
|
# CASE4-NEXT: Type: SHT_DYNSYM
|
|
# CASE4-NEXT: Flags [
|
|
# CASE4-NEXT: SHF_ALLOC
|
|
# CASE4-NEXT: ]
|
|
# CASE4-NEXT: Address: 0x0
|
|
# CASE4-NEXT: Offset: 0x40
|
|
# CASE4-NEXT: Size: 2
|
|
# CASE4-NEXT: Link: 0
|
|
# CASE4-NEXT: Info: 1
|
|
# CASE4-NEXT: AddressAlignment: 0
|
|
# CASE4-NEXT: EntrySize: 24
|
|
# CASE4-NEXT: SectionData (
|
|
# CASE4-NEXT: 0000: 0123
|
|
# CASE4-NEXT: )
|
|
|
|
--- !ELF
|
|
FileHeader:
|
|
Class: ELFCLASS64
|
|
Data: ELFDATA2LSB
|
|
Type: ET_DYN
|
|
Machine: EM_X86_64
|
|
Sections:
|
|
- Name: .dynsym
|
|
Type: SHT_DYNSYM
|
|
Content: "0123"
|
|
|
|
## Check we can use just `Size` to emit custom data filled with zeroes
|
|
## in the symbol table section.
|
|
# RUN: yaml2obj --docnum=5 %s -o %t5
|
|
# RUN: llvm-readobj --section-data -S %t5 | FileCheck %s --check-prefix=CASE5
|
|
|
|
# CASE5: Name: .dynsym
|
|
# CASE5-NEXT: Type: SHT_DYNSYM
|
|
# CASE5-NEXT: Flags [
|
|
# CASE5-NEXT: SHF_ALLOC
|
|
# CASE5-NEXT: ]
|
|
# CASE5-NEXT: Address: 0x0
|
|
# CASE5-NEXT: Offset: 0x40
|
|
# CASE5-NEXT: Size: 5
|
|
# CASE5-NEXT: Link: 0
|
|
# CASE5-NEXT: Info: 1
|
|
# CASE5-NEXT: AddressAlignment: 0
|
|
# CASE5-NEXT: EntrySize: 24
|
|
# CASE5-NEXT: SectionData (
|
|
# CASE5-NEXT: 0000: 00000000 00
|
|
# CASE5-NEXT: )
|
|
|
|
--- !ELF
|
|
FileHeader:
|
|
Class: ELFCLASS64
|
|
Data: ELFDATA2LSB
|
|
Type: ET_DYN
|
|
Machine: EM_X86_64
|
|
Sections:
|
|
- Name: .dynsym
|
|
Type: SHT_DYNSYM
|
|
Size: 5
|
|
|
|
## Check we can specify both `Size` and `Content` when size is greater
|
|
## than content size. In this case zeroes are added as padding
|
|
## after after the specified content.
|
|
|
|
# RUN: yaml2obj --docnum=6 %s -o %t6
|
|
# RUN: llvm-readobj %t6 --section-data -S | FileCheck %s --check-prefix=CASE6
|
|
|
|
# CASE6: Name: .dynsym
|
|
# CASE6-NEXT: Type: SHT_DYNSYM
|
|
# CASE6-NEXT: Flags [
|
|
# CASE6-NEXT: SHF_ALLOC
|
|
# CASE6-NEXT: ]
|
|
# CASE6-NEXT: Address: 0x0
|
|
# CASE6-NEXT: Offset: 0x40
|
|
# CASE6-NEXT: Size: 4
|
|
# CASE6-NEXT: Link: 0
|
|
# CASE6-NEXT: Info: 1
|
|
# CASE6-NEXT: AddressAlignment: 0
|
|
# CASE6-NEXT: EntrySize: 24
|
|
# CASE6-NEXT: SectionData (
|
|
# CASE6-NEXT: 0000: 01230000
|
|
# CASE6-NEXT: )
|
|
|
|
--- !ELF
|
|
FileHeader:
|
|
Class: ELFCLASS64
|
|
Data: ELFDATA2LSB
|
|
Type: ET_DYN
|
|
Machine: EM_X86_64
|
|
Sections:
|
|
- Name: .dynsym
|
|
Type: SHT_DYNSYM
|
|
Content: "0123"
|
|
Size: 4
|
|
|
|
## Check we can specify both `Size` and `Content` when size is
|
|
## equal to content size.
|
|
|
|
# RUN: yaml2obj --docnum=7 %s -o %t7
|
|
# RUN: llvm-readobj --section-data -S %t7 | FileCheck %s --check-prefix=CASE7
|
|
|
|
# CASE7: Name: .dynsym
|
|
# CASE7-NEXT: Type: SHT_DYNSYM
|
|
# CASE7-NEXT: Flags [
|
|
# CASE7-NEXT: SHF_ALLOC
|
|
# CASE7-NEXT: ]
|
|
# CASE7-NEXT: Address: 0x0
|
|
# CASE7-NEXT: Offset: 0x40
|
|
# CASE7-NEXT: Size: 2
|
|
# CASE7-NEXT: Link: 0
|
|
# CASE7-NEXT: Info: 1
|
|
# CASE7-NEXT: AddressAlignment: 0
|
|
# CASE7-NEXT: EntrySize: 24
|
|
# CASE7-NEXT: SectionData (
|
|
# CASE7-NEXT: 0000: 0123
|
|
# CASE7-NEXT: )
|
|
|
|
--- !ELF
|
|
FileHeader:
|
|
Class: ELFCLASS64
|
|
Data: ELFDATA2LSB
|
|
Type: ET_DYN
|
|
Machine: EM_X86_64
|
|
Sections:
|
|
- Name: .dynsym
|
|
Type: SHT_DYNSYM
|
|
Content: "0123"
|
|
Size: 2
|