1bd3058e8SFangrui Song## Check that obj2yaml dumps SHT_STRTAB/SHT_SYMTAB/SHT_DYNSYM sections 2bd3058e8SFangrui Song## when they are allocatable. 3bd3058e8SFangrui Song 4bd3058e8SFangrui Song## In the following test we check the normal case: when .dynsym (SHT_DYNSYM) 5bd3058e8SFangrui Song## and .dynstr (SHT_STRTAB) are allocatable sections and .symtab (SHT_SYMTAB), 6bd3058e8SFangrui Song## .strtab (SHT_STRTAB) and .shstrtab (SHT_STRTAB) are not. 7bd3058e8SFangrui Song## Check we explicitly declare allocatable sections. 8bd3058e8SFangrui Song 9bd3058e8SFangrui Song# RUN: yaml2obj %s -o %t1.so -D FLAG1=SHF_ALLOC -D FLAG2="" 10bd3058e8SFangrui Song# RUN: llvm-readelf -S %t1.so | FileCheck %s --check-prefixes=RE,RE-1 11bd3058e8SFangrui Song# RUN: obj2yaml %t1.so | FileCheck %s --check-prefix=OUTPUT 12bd3058e8SFangrui Song 13bd3058e8SFangrui Song## Check the information about sections using an independent tool. 14bd3058e8SFangrui Song 15bd3058e8SFangrui Song# RE: Section Headers: 16bd3058e8SFangrui Song# RE-NEXT: [Nr] Name Type Address Off Size ES Flg Lk Inf Al 17bd3058e8SFangrui Song# RE-NEXT: [ 0] NULL 0000000000000000 000000 000000 00 0 0 0 18bd3058e8SFangrui Song# RE-NEXT: [ 1] .foo.1 PROGBITS 0000000000000000 000040 000000 00 0 0 0 19bd3058e8SFangrui Song# RE-1-NEXT: [ 2] .dynsym DYNSYM 0000000000001000 000040 000030 18 A 4 2 0 20bd3058e8SFangrui Song# RE-2-NEXT: [ 2] .dynsym DYNSYM 0000000000001000 000040 000030 18 4 2 0 21bd3058e8SFangrui Song# RE-NEXT: [ 3] .foo.2 PROGBITS 0000000000000000 000070 000000 00 0 0 0 22bd3058e8SFangrui Song# RE-1-NEXT: [ 4] .dynstr STRTAB 0000000000002000 000070 000005 00 A 0 0 0 23bd3058e8SFangrui Song# RE-2-NEXT: [ 4] .dynstr STRTAB 0000000000002000 000070 000005 00 0 0 0 24bd3058e8SFangrui Song# RE-NEXT: [ 5] .foo.3 PROGBITS 0000000000000000 000075 000000 00 0 0 0 25bd3058e8SFangrui Song# RE-1-NEXT: [ 6] .symtab SYMTAB 0000000000003000 000075 000030 18 8 2 0 26bd3058e8SFangrui Song# RE-2-NEXT: [ 6] .symtab SYMTAB 0000000000003000 000075 000030 18 A 8 2 0 27bd3058e8SFangrui Song# RE-NEXT: [ 7] .foo.4 PROGBITS 0000000000000000 0000a5 000000 00 0 0 0 28bd3058e8SFangrui Song# RE-1-NEXT: [ 8] .strtab STRTAB 0000000000004000 0000a5 000005 00 0 0 0 29bd3058e8SFangrui Song# RE-2-NEXT: [ 8] .strtab STRTAB 0000000000004000 0000a5 000005 00 A 0 0 0 30bd3058e8SFangrui Song# RE-NEXT: [ 9] .foo.5 PROGBITS 0000000000000000 0000aa 000000 00 0 0 0 31bd3058e8SFangrui Song# RE-1-NEXT: [10] .shstrtab STRTAB 0000000000005000 0000aa 000055 00 0 0 0 32bd3058e8SFangrui Song# RE-2-NEXT: [10] .shstrtab STRTAB 0000000000005000 0000aa 000055 00 A 0 0 0 33bd3058e8SFangrui Song# RE-NEXT: [11] .foo.6 PROGBITS 0000000000000000 0000ff 000000 00 0 0 0 34bd3058e8SFangrui Song 35bd3058e8SFangrui Song# OUTPUT: --- !ELF 36bd3058e8SFangrui Song# OUTPUT-NEXT: FileHeader: 37bd3058e8SFangrui Song# OUTPUT-NEXT: Class: ELFCLASS64 38bd3058e8SFangrui Song# OUTPUT-NEXT: Data: ELFDATA2LSB 39bd3058e8SFangrui Song# OUTPUT-NEXT: Type: ET_DYN 40bd3058e8SFangrui Song# OUTPUT-NEXT: Sections: 41bd3058e8SFangrui Song# OUTPUT-NEXT: - Name: .foo.1 42bd3058e8SFangrui Song# OUTPUT-NEXT: Type: SHT_PROGBITS 43bd3058e8SFangrui Song# OUTPUT-NEXT: - Name: .dynsym 44bd3058e8SFangrui Song# OUTPUT-NEXT: Type: SHT_DYNSYM 45bd3058e8SFangrui Song# OUTPUT-NEXT: Flags: [ SHF_ALLOC ] 46*9aa78982SGeorgii Rymar# OUTPUT-NEXT: Address: 0x1000 47bd3058e8SFangrui Song# OUTPUT-NEXT: Link: .dynstr 48bd3058e8SFangrui Song# OUTPUT-NEXT: - Name: .foo.2 49bd3058e8SFangrui Song# OUTPUT-NEXT: Type: SHT_PROGBITS 50bd3058e8SFangrui Song# OUTPUT-NEXT: - Name: .dynstr 51bd3058e8SFangrui Song# OUTPUT-NEXT: Type: SHT_STRTAB 52bd3058e8SFangrui Song# OUTPUT-NEXT: Flags: [ SHF_ALLOC ] 53*9aa78982SGeorgii Rymar# OUTPUT-NEXT: Address: 0x2000 54bd3058e8SFangrui Song# OUTPUT-NEXT: - Name: .foo.3 55bd3058e8SFangrui Song# OUTPUT-NEXT: Type: SHT_PROGBITS 56bd3058e8SFangrui Song# OUTPUT-NEXT: - Name: .foo.4 57bd3058e8SFangrui Song# OUTPUT-NEXT: Type: SHT_PROGBITS 58bd3058e8SFangrui Song# OUTPUT-NEXT: - Name: .foo.5 59bd3058e8SFangrui Song# OUTPUT-NEXT: Type: SHT_PROGBITS 60bd3058e8SFangrui Song# OUTPUT-NEXT: - Name: .foo.6 61bd3058e8SFangrui Song# OUTPUT-NEXT: Type: SHT_PROGBITS 62bd3058e8SFangrui Song# OUTPUT-NEXT: Symbols: 63bd3058e8SFangrui Song# OUTPUT-NEXT: - Name: foo 64bd3058e8SFangrui Song# OUTPUT-NEXT: DynamicSymbols: 65bd3058e8SFangrui Song# OUTPUT-NEXT: - Name: bar 66bd3058e8SFangrui Song# OUTPUT-NEXT: ... 67bd3058e8SFangrui Song 68bd3058e8SFangrui Song--- !ELF 69bd3058e8SFangrui SongFileHeader: 70bd3058e8SFangrui Song Class: ELFCLASS64 71bd3058e8SFangrui Song Data: ELFDATA2LSB 72bd3058e8SFangrui Song Type: ET_DYN 73bd3058e8SFangrui SongSections: 74bd3058e8SFangrui Song - Name: .foo.1 75bd3058e8SFangrui Song Type: SHT_PROGBITS 76bd3058e8SFangrui Song - Name: .dynsym 77bd3058e8SFangrui Song Type: SHT_DYNSYM 78bd3058e8SFangrui Song Address: 0x1000 79bd3058e8SFangrui Song Flags: [ [[FLAG1]] ] 80bd3058e8SFangrui Song - Name: .foo.2 81bd3058e8SFangrui Song Type: SHT_PROGBITS 82bd3058e8SFangrui Song - Name: .dynstr 83bd3058e8SFangrui Song Type: SHT_STRTAB 84bd3058e8SFangrui Song Address: 0x2000 85bd3058e8SFangrui Song Flags: [ [[FLAG1]] ] 86bd3058e8SFangrui Song - Name: .foo.3 87bd3058e8SFangrui Song Type: SHT_PROGBITS 88bd3058e8SFangrui Song - Name: .symtab 89bd3058e8SFangrui Song Type: SHT_SYMTAB 90bd3058e8SFangrui Song Address: 0x3000 91bd3058e8SFangrui Song Flags: [ [[FLAG2]] ] 92bd3058e8SFangrui Song - Name: .foo.4 93bd3058e8SFangrui Song Type: SHT_PROGBITS 94bd3058e8SFangrui Song - Name: .strtab 95bd3058e8SFangrui Song Type: SHT_STRTAB 96bd3058e8SFangrui Song Address: 0x4000 97bd3058e8SFangrui Song Flags: [ [[FLAG2]] ] 98bd3058e8SFangrui Song - Name: .foo.5 99bd3058e8SFangrui Song Type: SHT_PROGBITS 100bd3058e8SFangrui Song - Name: .shstrtab 101bd3058e8SFangrui Song Type: SHT_STRTAB 102bd3058e8SFangrui Song Address: 0x5000 103bd3058e8SFangrui Song Flags: [ [[FLAG2]] ] 104bd3058e8SFangrui Song - Name: .foo.6 105bd3058e8SFangrui Song Type: SHT_PROGBITS 106bd3058e8SFangrui SongSymbols: 107bd3058e8SFangrui Song - Name: foo 108bd3058e8SFangrui SongDynamicSymbols: 109bd3058e8SFangrui Song - Name: bar 110bd3058e8SFangrui Song 111bd3058e8SFangrui Song## Now test the abnormal case: when .symtab (SHT_SYMTAB), 112bd3058e8SFangrui Song## .strtab (SHT_STRTAB) and .shstrtab (SHT_STRTAB) are 113bd3058e8SFangrui Song## allocatable sections, but .dynsym (SHT_DYNSYM) and 114bd3058e8SFangrui Song## .dynstr (SHT_STRTAB) are not. 115bd3058e8SFangrui Song## Check that only allocatable versions are explicitly declared. 116bd3058e8SFangrui Song 117bd3058e8SFangrui Song# RUN: yaml2obj %s -o %t2.so -D FLAG1="" -D FLAG2=SHF_ALLOC 118bd3058e8SFangrui Song# RUN: llvm-readelf -S %t2.so | FileCheck %s --check-prefixes=RE,RE-2 119bd3058e8SFangrui Song# RUN: obj2yaml %t2.so | FileCheck %s --check-prefix=OUTPUT2 120bd3058e8SFangrui Song 121bd3058e8SFangrui Song## Check we explicitly declare only allocatable 122bd3058e8SFangrui Song## SHT_STRTAB/SHT_SYMTAB/SHT_DYNSYM sections. 123bd3058e8SFangrui Song# OUTPUT2: --- !ELF 124bd3058e8SFangrui Song# OUTPUT2-NEXT: FileHeader: 125bd3058e8SFangrui Song# OUTPUT2-NEXT: Class: ELFCLASS64 126bd3058e8SFangrui Song# OUTPUT2-NEXT: Data: ELFDATA2LSB 127bd3058e8SFangrui Song# OUTPUT2-NEXT: Type: ET_DYN 128bd3058e8SFangrui Song# OUTPUT2-NEXT: Sections: 129bd3058e8SFangrui Song# OUTPUT2-NEXT: - Name: .foo.1 130bd3058e8SFangrui Song# OUTPUT2-NEXT: Type: SHT_PROGBITS 131bd3058e8SFangrui Song# OUTPUT2-NEXT: - Name: .foo.2 132bd3058e8SFangrui Song# OUTPUT2-NEXT: Type: SHT_PROGBITS 133bd3058e8SFangrui Song# OUTPUT2-NEXT: - Name: .foo.3 134bd3058e8SFangrui Song# OUTPUT2-NEXT: Type: SHT_PROGBITS 135bd3058e8SFangrui Song# OUTPUT2-NEXT: - Name: .symtab 136bd3058e8SFangrui Song# OUTPUT2-NEXT: Type: SHT_SYMTAB 137bd3058e8SFangrui Song# OUTPUT2-NEXT: Flags: [ SHF_ALLOC ] 138*9aa78982SGeorgii Rymar# OUTPUT2-NEXT: Address: 0x3000 139bd3058e8SFangrui Song# OUTPUT2-NEXT: Link: .strtab 140bd3058e8SFangrui Song# OUTPUT2-NEXT: - Name: .foo.4 141bd3058e8SFangrui Song# OUTPUT2-NEXT: Type: SHT_PROGBITS 142bd3058e8SFangrui Song# OUTPUT2-NEXT: - Name: .strtab 143bd3058e8SFangrui Song# OUTPUT2-NEXT: Type: SHT_STRTAB 144bd3058e8SFangrui Song# OUTPUT2-NEXT: Flags: [ SHF_ALLOC ] 145*9aa78982SGeorgii Rymar# OUTPUT2-NEXT: Address: 0x4000 146bd3058e8SFangrui Song# OUTPUT2-NEXT: - Name: .foo.5 147bd3058e8SFangrui Song# OUTPUT2-NEXT: Type: SHT_PROGBITS 148bd3058e8SFangrui Song# OUTPUT2-NEXT: - Name: .shstrtab 149bd3058e8SFangrui Song# OUTPUT2-NEXT: Type: SHT_STRTAB 150bd3058e8SFangrui Song# OUTPUT2-NEXT: Flags: [ SHF_ALLOC ] 151*9aa78982SGeorgii Rymar# OUTPUT2-NEXT: Address: 0x5000 152bd3058e8SFangrui Song# OUTPUT2-NEXT: - Name: .foo.6 153bd3058e8SFangrui Song# OUTPUT2-NEXT: Type: SHT_PROGBITS 154bd3058e8SFangrui Song# OUTPUT2-NEXT: Symbols: 155bd3058e8SFangrui Song# OUTPUT2-NEXT: - Name: foo 156bd3058e8SFangrui Song# OUTPUT2-NEXT: DynamicSymbols: 157bd3058e8SFangrui Song# OUTPUT2-NEXT: - Name: bar 158bd3058e8SFangrui Song# OUTPUT2-NEXT: ... 159