Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[yaml2obj/obj2yaml] - Make RawContentSection::Content and RawContentS…
…ection::Size optional This is a follow-up for D62809. Content and Size fields should be optional as was discussed in comments of the D62809's thread. With that, we can describe a specific string table and symbol table sections in a more correct way and also show appropriate errors. The patch adds lots of test cases where the behavior is described in details. Differential revision: https://reviews.llvm.org/D62957 llvm-svn: 362931
- Loading branch information
George Rimar
committed
Jun 10, 2019
1 parent
1f73bbb
commit 1e41007
Showing
11 changed files
with
809 additions
and
53 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
222 changes: 222 additions & 0 deletions
222
llvm/test/tools/yaml2obj/dynsymtab-implicit-sections-size-content.yaml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,222 @@ | ||
## 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. | ||
# RUN: not yaml2obj --docnum=2 %s -o %t2 2>&1 | FileCheck %s --check-prefix=CASE2 | ||
|
||
# CASE2: 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 | ||
DynamicSymbols: | ||
- Name: foo | ||
Binding: STB_GLOBAL | ||
|
||
## Specifying both `Content` and symbols at the same time is not allowed. | ||
# RUN: not yaml2obj --docnum=3 %s -o %t3 2>&1 | FileCheck %s --check-prefix=CASE3 | ||
|
||
# CASE3: 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" | ||
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: 0x1C0 | ||
# CASE4-NEXT: Size: 2 | ||
# CASE4-NEXT: Link: 2 | ||
# CASE4-NEXT: Info: 0 | ||
# 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" | ||
## TODO: .dynstr here is needed to set a proper Link for .dynsym. | ||
## Without this, llvm-readobj reports an error. | ||
## See https://bugs.llvm.org/show_bug.cgi?id=42215. | ||
- Name: .dynstr | ||
Type: SHT_STRTAB | ||
Content: "00" | ||
|
||
## 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: 0x1C0 | ||
# CASE5-NEXT: Size: 5 | ||
# CASE5-NEXT: Link: 2 | ||
# CASE5-NEXT: Info: 0 | ||
# 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 | ||
## TODO: .dynstr here is needed to set a proper Link for .dynsym. | ||
## Without this, llvm-readobj reports an error. | ||
## See https://bugs.llvm.org/show_bug.cgi?id=42215. | ||
- Name: .dynstr | ||
Type: SHT_STRTAB | ||
Content: "00" | ||
|
||
## 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: 0x1C0 | ||
# CASE6-NEXT: Size: 4 | ||
# CASE6-NEXT: Link: 2 | ||
# CASE6-NEXT: Info: 0 | ||
# 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 | ||
## TODO: .dynstr here is needed to set a proper Link for .dynsym. | ||
## Without this, llvm-readobj reports an error. | ||
## See https://bugs.llvm.org/show_bug.cgi?id=42215. | ||
- Name: .dynstr | ||
Type: SHT_STRTAB | ||
Content: "00" | ||
|
||
## 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: 0x1C0 | ||
# CASE7-NEXT: Size: 2 | ||
# CASE7-NEXT: Link: 2 | ||
# CASE7-NEXT: Info: 0 | ||
# 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 | ||
## TODO: .dynstr here is needed to set a proper Link for .dynsym. | ||
## Without this, llvm-readobj reports an error. | ||
## See https://bugs.llvm.org/show_bug.cgi?id=42215. | ||
- Name: .dynstr | ||
Type: SHT_STRTAB | ||
Content: "00" |
Oops, something went wrong.