Files
clang-p2996/llvm/test/tools/yaml2obj/strtab-implicit-sections-size-content.yaml
Fangrui Song c3bc697974 [yaml2obj] Write the section header table after section contents
Linkers (ld.bfd/gold/lld) place the section header table at the very
end. This allows tools to strip it, which is optional in executable/shared objects.
In addition, if we add or section, the size of the section header table
will change. Placing the section header table in the end keeps section
offsets unchanged.

yaml2obj currently places the section header table immediately after the
program header. Follow what linkers do to make offset updating easier.

Reviewed By: grimar

Differential Revision: https://reviews.llvm.org/D67221

llvm-svn: 371074
2019-09-05 14:25:57 +00:00

168 lines
4.2 KiB
YAML

## For implicit string 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 string table section,
## yaml2obj writes the default content.
# RUN: yaml2obj --docnum=1 %s -o %t1
# RUN: llvm-objdump %t1 -s | FileCheck %s --check-prefix=CASE1
# CASE1: Contents of section .strtab:
# CASE1-NEXT: 0000 00666f6f 00 .foo.
--- !ELF
FileHeader:
Class: ELFCLASS64
Data: ELFDATA2LSB
Type: ET_DYN
Machine: EM_X86_64
Sections:
- Name: .strtab
Type: SHT_STRTAB
## Used to trigger adding string `foo` to the string table section.
Symbols:
- Name: foo
## For string table sections, `Size` can be used to override the
## implicit string table data. The content is filled with zeroes in this case.
# RUN: yaml2obj --docnum=2 %s -o %t2
# RUN: llvm-readobj --section-data -S %t2 | FileCheck %s --check-prefix=CASE2
# CASE2: Name: .strtab
# CASE2-NEXT: Type: SHT_STRTAB
# CASE2-NEXT: Flags [
# CASE2-NEXT: ]
# CASE2-NEXT: Address: 0x0
# CASE2-NEXT: Offset: 0x40
# CASE2-NEXT: Size: 2
# CASE2-NEXT: Link: 0
# CASE2-NEXT: Info: 0
# CASE2-NEXT: AddressAlignment: 0
# CASE2-NEXT: EntrySize: 0
# CASE2-NEXT: SectionData (
# CASE2-NEXT: 0000: 0000
# CASE2-NEXT: )
--- !ELF
FileHeader:
Class: ELFCLASS64
Data: ELFDATA2LSB
Type: ET_DYN
Machine: EM_X86_64
Sections:
- Name: .strtab
Type: SHT_STRTAB
Size: 2
## Used to trigger adding string `foo` to the string table section.
Symbols:
- Name: foo
## For string table sections, `Content` can be used to override the
## implicit string table data.
# RUN: yaml2obj --docnum=3 %s -o %t3
# RUN: llvm-readobj --section-data -S %t3 | FileCheck %s --check-prefix=CASE3
# CASE3: Name: .strtab
# CASE3-NEXT: Type: SHT_STRTAB
# CASE3-NEXT: Flags [
# CASE3-NEXT: ]
# CASE3-NEXT: Address: 0x0
# CASE3-NEXT: Offset: 0x40
# CASE3-NEXT: Size: 2
# CASE3-NEXT: Link: 0
# CASE3-NEXT: Info: 0
# CASE3-NEXT: AddressAlignment: 0
# CASE3-NEXT: EntrySize: 0
# CASE3-NEXT: SectionData (
# CASE3-NEXT: 0000: 0102
# CASE3-NEXT: )
--- !ELF
FileHeader:
Class: ELFCLASS64
Data: ELFDATA2LSB
Type: ET_DYN
Machine: EM_X86_64
Sections:
- Name: .strtab
Type: SHT_STRTAB
Content: "0102"
## Used to trigger adding string `foo` to the string table section.
Symbols:
- Name: foo
## For string table sections, 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=4 %s -o %t4
# RUN: llvm-readobj --section-data -S %t4 | FileCheck %s --check-prefix=CASE4
# CASE4: Name: .strtab
# CASE4-NEXT: Type: SHT_STRTAB
# 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: 010200
# CASE4-NEXT: )
--- !ELF
FileHeader:
Class: ELFCLASS64
Data: ELFDATA2LSB
Type: ET_DYN
Machine: EM_X86_64
Sections:
- Name: .strtab
Type: SHT_STRTAB
Content: "0102"
Size: 3
## Used to trigger adding string `foo` to the string table section.
Symbols:
- Name: foo
## For string table sections, check we can specify both `Size` and `Content`
## when size is equal to content size.
# RUN: yaml2obj --docnum=5 %s -o %t5
# RUN: llvm-readobj --section-data -S %t5 | FileCheck %s --check-prefix=CASE5
# CASE5: Name: .strtab
# CASE5-NEXT: Type: SHT_STRTAB
# CASE5-NEXT: Flags [ (0x0)
# CASE5-NEXT: ]
# CASE5-NEXT: Address: 0x0
# CASE5-NEXT: Offset: 0x40
# CASE5-NEXT: Size: 2
# CASE5-NEXT: Link: 0
# CASE5-NEXT: Info: 0
# CASE5-NEXT: AddressAlignment: 0
# CASE5-NEXT: EntrySize: 0
# CASE5-NEXT: SectionData (
# CASE5-NEXT: 0000: 0102
# CASE5-NEXT: )
--- !ELF
FileHeader:
Class: ELFCLASS64
Data: ELFDATA2LSB
Type: ET_DYN
Machine: EM_X86_64
Sections:
- Name: .strtab
Type: SHT_STRTAB
Content: "0102"
Size: 2
## Used to trigger adding string `foo` to the string table section.
Symbols:
- Name: foo