## 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 000001 # CHECK-NEXT: [ 2] .dynsym DYNSYM 0000000000000150 000041 000018 # CHECK-NEXT: [ 3] .symtab SYMTAB 0000000000000000 000059 000018 # CHECK-NEXT: [ 4] .strtab STRTAB 0000000000000000 000071 000001 # CHECK-NEXT: [ 5] .shstrtab STRTAB 0000000000000000 000072 000035 # CHECK-NEXT: [ 6] .text.foo PROGBITS 0000000000000200 0000a7 000000 --- !ELF FileHeader: Class: ELFCLASS64 Data: ELFDATA2LSB Type: ET_DYN 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 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 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 ## 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 Symbols: []