Files
archived-llvm/test/tools/yaml2obj/implicit-sections.test
George Rimar 38d4353156 [yaml2obj][obj2yaml] - Do not create a symbol table by default.
This patch tries to resolve problems faced in D68943
and uses some of the code written by Konrad Wilhelm Kleine
in that patch.

Previously, yaml2obj tool always created a .symtab section.
This patch changes that. With it we only create it when
have a "Symbols:" tag in the YAML document or when
we need to create it because it is used by another section(s).

obj2yaml follows the new behavior and does not print "Symbols:"
anymore when there is no symbol table.

Differential revision: https://reviews.llvm.org/D69041

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@375361 91177308-0d34-0410-b5e6-96231b3b80d8
2019-10-20 14:47:17 +00:00

114 lines
3.5 KiB
Plaintext

## Check the section header properties of ".dynsym",
## ".dynstr", ".symtab", ".strtab", ".shstrtab".
## These sections sections are usually added implicitly,
## but here we add them explicitly in YAML and verify.
## We check their order matches YAML and that file offset is
## ascending. This is a natural default behavior.
# RUN: yaml2obj --docnum=1 %s -o %t1
# RUN: llvm-readelf -S %t1 | FileCheck %s
# CHECK: Section Headers:
# CHECK-NEXT: [Nr] Name Type Address Off Size
# CHECK-NEXT: [ 0] NULL 0000000000000000 000000 000000
# CHECK-NEXT: [ 1] .dynstr STRTAB 0000000000000100 000040 000009
# CHECK-NEXT: [ 2] .dynsym DYNSYM 0000000000000150 000049 000030
# CHECK-NEXT: [ 3] .symtab SYMTAB 0000000000000000 000079 000018
# CHECK-NEXT: [ 4] .strtab STRTAB 0000000000000000 000091 000001
# CHECK-NEXT: [ 5] .shstrtab STRTAB 0000000000000000 000092 000035
# CHECK-NEXT: [ 6] .text.foo PROGBITS 0000000000000200 0000c7 000000
--- !ELF
FileHeader:
Class: ELFCLASS64
Data: ELFDATA2LSB
Type: ET_DYN
Machine: EM_X86_64
Sections:
- Name: .dynstr
Type: SHT_STRTAB
Address: 0x100
- Name: .dynsym
Type: SHT_DYNSYM
Address: 0x150
- Name: .symtab
Type: SHT_SYMTAB
- Name: .strtab
Type: SHT_STRTAB
- Name: .shstrtab
Type: SHT_STRTAB
- Name: .text.foo
Type: SHT_PROGBITS
Address: 0x200
## Symbol is required for the .dynsym to be generated.
DynamicSymbols:
- Name: _Z3fooi
Binding: STB_GLOBAL
## Check that yaml2obj creates empty .dynstr and .dynsym sections for
## the case when no dynamic symbols were specified and Content wasn't set,
## but the sections were explicitly listed. Check their VAs are correct.
# RUN: yaml2obj --docnum=2 %s -o %t2
# RUN: llvm-readelf -S %t2 | FileCheck %s --check-prefix=NODYNSYM
# NODYNSYM: Section Headers:
# NODYNSYM-NEXT: [Nr] Name Type Address Off Size
# NODYNSYM-NEXT: [ 0] NULL 0000000000000000 000000 000000
# NODYNSYM-NEXT: [ 1] .dynstr STRTAB 0000000000000100 000040 000001
# NODYNSYM-NEXT: [ 2] .dynsym DYNSYM 0000000000000150 000041 000018
# NODYNSYM-NEXT: [ 3] .symtab SYMTAB 0000000000000000 000059 000018
# NODYNSYM-NEXT: [ 4] .strtab STRTAB 0000000000000000 000071 000001
# NODYNSYM-NEXT: [ 5] .shstrtab STRTAB 0000000000000000 000072 000035
# NODYNSYM-NEXT: [ 6] .text.foo PROGBITS 0000000000000200 0000a7 000000
--- !ELF
FileHeader:
Class: ELFCLASS64
Data: ELFDATA2LSB
Type: ET_DYN
Machine: EM_X86_64
Sections:
- Name: .dynstr
Type: SHT_STRTAB
Address: 0x100
- Name: .dynsym
Type: SHT_DYNSYM
Address: 0x150
- Name: .symtab
Type: SHT_SYMTAB
- Name: .strtab
Type: SHT_STRTAB
- Name: .shstrtab
Type: SHT_STRTAB
- Name: .text.foo
Type: SHT_PROGBITS
Address: 0x200
## Check we don't add a symbol table when no "Symbols" key is specified.
# RUN: yaml2obj --docnum=3 %s -o %t3
# RUN: llvm-readelf -S %t3 | FileCheck /dev/null --implicit-check-not=.symtab
--- !ELF
FileHeader:
Class: ELFCLASS64
Data: ELFDATA2LSB
Type: ET_DYN
Machine: EM_X86_64
## Check we add a symbol table when "Symbols" key is specified.
# RUN: yaml2obj --docnum=4 %s -o %t4
# RUN: llvm-readelf -S %t4 | FileCheck %s --check-prefix=SYMTAB
# SYMTAB: .symtab
--- !ELF
FileHeader:
Class: ELFCLASS64
Data: ELFDATA2LSB
Type: ET_DYN
Machine: EM_X86_64
Symbols: []