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