xref: /llvm-project/llvm/test/tools/yaml2obj/ELF/implicit-sections.yaml (revision a6436b0b3a7fd9f13d7a059a6a78544a7e0b702f)
163f0f54cSFangrui Song## Check the section header properties of ".dynsym",
263f0f54cSFangrui Song## ".dynstr", ".symtab", ".strtab", ".shstrtab".
363f0f54cSFangrui Song## These sections sections are usually added implicitly,
463f0f54cSFangrui Song## but here we add them explicitly in YAML and verify.
563f0f54cSFangrui Song## We check their order matches YAML and that file offset is
663f0f54cSFangrui Song## ascending. This is a natural default behavior.
763f0f54cSFangrui Song
863f0f54cSFangrui Song# RUN: yaml2obj --docnum=1 %s -o %t1
963f0f54cSFangrui Song# RUN: llvm-readelf -S %t1 | FileCheck %s
1063f0f54cSFangrui Song
1163f0f54cSFangrui Song# CHECK:      Section Headers:
1263f0f54cSFangrui Song# CHECK-NEXT:  [Nr] Name      Type     Address          Off    Size
1363f0f54cSFangrui Song# CHECK-NEXT:  [ 0]           NULL     0000000000000000 000000 000000
14*daff7b85SGeorgii Rymar# CHECK-NEXT:  [ 1] .dynstr   STRTAB   0000000000000100 000040 000001
15*daff7b85SGeorgii Rymar# CHECK-NEXT:  [ 2] .dynsym   DYNSYM   0000000000000150 000041 000018
16*daff7b85SGeorgii Rymar# CHECK-NEXT:  [ 3] .symtab   SYMTAB   0000000000000000 000059 000018
17*daff7b85SGeorgii Rymar# CHECK-NEXT:  [ 4] .strtab   STRTAB   0000000000000000 000071 000001
18*daff7b85SGeorgii Rymar# CHECK-NEXT:  [ 5] .shstrtab STRTAB   0000000000000000 000072 000035
19*daff7b85SGeorgii Rymar# CHECK-NEXT:  [ 6] .text.foo PROGBITS 0000000000000200 0000a7 000000
2063f0f54cSFangrui Song
2163f0f54cSFangrui Song--- !ELF
2263f0f54cSFangrui SongFileHeader:
2363f0f54cSFangrui Song  Class: ELFCLASS64
2463f0f54cSFangrui Song  Data:  ELFDATA2LSB
2563f0f54cSFangrui Song  Type:  ET_DYN
2663f0f54cSFangrui SongSections:
2763f0f54cSFangrui Song  - Name:    .dynstr
2863f0f54cSFangrui Song    Type:    SHT_STRTAB
2963f0f54cSFangrui Song    Address: 0x100
3063f0f54cSFangrui Song  - Name:    .dynsym
3163f0f54cSFangrui Song    Type:    SHT_DYNSYM
3263f0f54cSFangrui Song    Address: 0x150
3363f0f54cSFangrui Song  - Name:    .symtab
3463f0f54cSFangrui Song    Type:    SHT_SYMTAB
3563f0f54cSFangrui Song  - Name:    .strtab
3663f0f54cSFangrui Song    Type:    SHT_STRTAB
3763f0f54cSFangrui Song  - Name:    .shstrtab
3863f0f54cSFangrui Song    Type:    SHT_STRTAB
3963f0f54cSFangrui Song  - Name:    .text.foo
4063f0f54cSFangrui Song    Type:    SHT_PROGBITS
4163f0f54cSFangrui Song    Address: 0x200
4263f0f54cSFangrui Song
4363f0f54cSFangrui Song## Check that yaml2obj creates empty .dynstr and .dynsym sections for
4463f0f54cSFangrui Song## the case when no dynamic symbols were specified and Content wasn't set,
4563f0f54cSFangrui Song## but the sections were explicitly listed. Check their VAs are correct.
4663f0f54cSFangrui Song
4763f0f54cSFangrui Song# RUN: yaml2obj --docnum=2 %s -o %t2
4863f0f54cSFangrui Song# RUN: llvm-readelf -S %t2 | FileCheck %s --check-prefix=NODYNSYM
4963f0f54cSFangrui Song
5063f0f54cSFangrui Song# NODYNSYM:      Section Headers:
5163f0f54cSFangrui Song# NODYNSYM-NEXT: [Nr] Name      Type      Address          Off    Size
5263f0f54cSFangrui Song# NODYNSYM-NEXT: [ 0]           NULL      0000000000000000 000000 000000
5363f0f54cSFangrui Song# NODYNSYM-NEXT: [ 1] .dynstr   STRTAB    0000000000000100 000040 000001
5463f0f54cSFangrui Song# NODYNSYM-NEXT: [ 2] .dynsym   DYNSYM    0000000000000150 000041 000018
5563f0f54cSFangrui Song# NODYNSYM-NEXT: [ 3] .symtab   SYMTAB    0000000000000000 000059 000018
5663f0f54cSFangrui Song# NODYNSYM-NEXT: [ 4] .strtab   STRTAB    0000000000000000 000071 000001
5763f0f54cSFangrui Song# NODYNSYM-NEXT: [ 5] .shstrtab STRTAB    0000000000000000 000072 000035
5863f0f54cSFangrui Song# NODYNSYM-NEXT: [ 6] .text.foo PROGBITS  0000000000000200 0000a7 000000
5963f0f54cSFangrui Song
6063f0f54cSFangrui Song--- !ELF
6163f0f54cSFangrui SongFileHeader:
6263f0f54cSFangrui Song  Class: ELFCLASS64
6363f0f54cSFangrui Song  Data:  ELFDATA2LSB
6463f0f54cSFangrui Song  Type:  ET_DYN
6563f0f54cSFangrui SongSections:
6663f0f54cSFangrui Song  - Name:    .dynstr
6763f0f54cSFangrui Song    Type:    SHT_STRTAB
6863f0f54cSFangrui Song    Address: 0x100
6963f0f54cSFangrui Song  - Name:    .dynsym
7063f0f54cSFangrui Song    Type:    SHT_DYNSYM
7163f0f54cSFangrui Song    Address: 0x150
7263f0f54cSFangrui Song  - Name:    .symtab
7363f0f54cSFangrui Song    Type:    SHT_SYMTAB
7463f0f54cSFangrui Song  - Name:    .strtab
7563f0f54cSFangrui Song    Type:    SHT_STRTAB
7663f0f54cSFangrui Song  - Name:    .shstrtab
7763f0f54cSFangrui Song    Type:    SHT_STRTAB
7863f0f54cSFangrui Song  - Name:    .text.foo
7963f0f54cSFangrui Song    Type:    SHT_PROGBITS
8063f0f54cSFangrui Song    Address: 0x200
8163f0f54cSFangrui Song
8263f0f54cSFangrui Song## Check we don't add a symbol table when no "Symbols" key is specified.
8363f0f54cSFangrui Song
8463f0f54cSFangrui Song# RUN: yaml2obj --docnum=3 %s -o %t3
8563f0f54cSFangrui Song# RUN: llvm-readelf -S %t3 | FileCheck /dev/null --implicit-check-not=.symtab
8663f0f54cSFangrui Song
8763f0f54cSFangrui Song--- !ELF
8863f0f54cSFangrui SongFileHeader:
8963f0f54cSFangrui Song  Class: ELFCLASS64
9063f0f54cSFangrui Song  Data:  ELFDATA2LSB
9163f0f54cSFangrui Song  Type:  ET_DYN
9263f0f54cSFangrui Song
9363f0f54cSFangrui Song## Check we add a symbol table when "Symbols" key is specified.
9463f0f54cSFangrui Song
9563f0f54cSFangrui Song# RUN: yaml2obj --docnum=4 %s -o %t4
9663f0f54cSFangrui Song# RUN: llvm-readelf -S %t4 | FileCheck %s --check-prefix=SYMTAB
9763f0f54cSFangrui Song
9863f0f54cSFangrui Song# SYMTAB: .symtab
9963f0f54cSFangrui Song
10063f0f54cSFangrui Song--- !ELF
10163f0f54cSFangrui SongFileHeader:
10263f0f54cSFangrui Song  Class: ELFCLASS64
10363f0f54cSFangrui Song  Data:  ELFDATA2LSB
10463f0f54cSFangrui Song  Type:  ET_DYN
10563f0f54cSFangrui SongSymbols: []
106