159 lines · yaml
1## Check that obj2yaml dumps SHT_STRTAB/SHT_SYMTAB/SHT_DYNSYM sections2## 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-111# RUN: obj2yaml %t1.so | FileCheck %s --check-prefix=OUTPUT12 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 Al17# RE-NEXT: [ 0] NULL 0000000000000000 000000 000000 00 0 0 018# RE-NEXT: [ 1] .foo.1 PROGBITS 0000000000000000 000040 000000 00 0 0 019# RE-1-NEXT: [ 2] .dynsym DYNSYM 0000000000001000 000040 000030 18 A 4 2 020# RE-2-NEXT: [ 2] .dynsym DYNSYM 0000000000001000 000040 000030 18 4 2 021# RE-NEXT: [ 3] .foo.2 PROGBITS 0000000000000000 000070 000000 00 0 0 022# RE-1-NEXT: [ 4] .dynstr STRTAB 0000000000002000 000070 000005 00 A 0 0 023# RE-2-NEXT: [ 4] .dynstr STRTAB 0000000000002000 000070 000005 00 0 0 024# RE-NEXT: [ 5] .foo.3 PROGBITS 0000000000000000 000075 000000 00 0 0 025# RE-1-NEXT: [ 6] .symtab SYMTAB 0000000000003000 000075 000030 18 8 2 026# RE-2-NEXT: [ 6] .symtab SYMTAB 0000000000003000 000075 000030 18 A 8 2 027# RE-NEXT: [ 7] .foo.4 PROGBITS 0000000000000000 0000a5 000000 00 0 0 028# RE-1-NEXT: [ 8] .strtab STRTAB 0000000000004000 0000a5 000005 00 0 0 029# RE-2-NEXT: [ 8] .strtab STRTAB 0000000000004000 0000a5 000005 00 A 0 0 030# RE-NEXT: [ 9] .foo.5 PROGBITS 0000000000000000 0000aa 000000 00 0 0 031# RE-1-NEXT: [10] .shstrtab STRTAB 0000000000005000 0000aa 000055 00 0 0 032# RE-2-NEXT: [10] .shstrtab STRTAB 0000000000005000 0000aa 000055 00 A 0 0 033# RE-NEXT: [11] .foo.6 PROGBITS 0000000000000000 0000ff 000000 00 0 0 034 35# OUTPUT: --- !ELF36# OUTPUT-NEXT: FileHeader:37# OUTPUT-NEXT: Class: ELFCLASS6438# OUTPUT-NEXT: Data: ELFDATA2LSB39# OUTPUT-NEXT: Type: ET_DYN40# OUTPUT-NEXT: Sections:41# OUTPUT-NEXT: - Name: .foo.142# OUTPUT-NEXT: Type: SHT_PROGBITS43# OUTPUT-NEXT: - Name: .dynsym44# OUTPUT-NEXT: Type: SHT_DYNSYM45# OUTPUT-NEXT: Flags: [ SHF_ALLOC ]46# OUTPUT-NEXT: Address: 0x100047# OUTPUT-NEXT: Link: .dynstr48# OUTPUT-NEXT: - Name: .foo.249# OUTPUT-NEXT: Type: SHT_PROGBITS50# OUTPUT-NEXT: - Name: .dynstr51# OUTPUT-NEXT: Type: SHT_STRTAB52# OUTPUT-NEXT: Flags: [ SHF_ALLOC ]53# OUTPUT-NEXT: Address: 0x200054# OUTPUT-NEXT: - Name: .foo.355# OUTPUT-NEXT: Type: SHT_PROGBITS56# OUTPUT-NEXT: - Name: .foo.457# OUTPUT-NEXT: Type: SHT_PROGBITS58# OUTPUT-NEXT: - Name: .foo.559# OUTPUT-NEXT: Type: SHT_PROGBITS60# OUTPUT-NEXT: - Name: .foo.661# OUTPUT-NEXT: Type: SHT_PROGBITS62# OUTPUT-NEXT: Symbols:63# OUTPUT-NEXT: - Name: foo64# OUTPUT-NEXT: DynamicSymbols:65# OUTPUT-NEXT: - Name: bar66# OUTPUT-NEXT: ...67 68--- !ELF69FileHeader:70 Class: ELFCLASS6471 Data: ELFDATA2LSB72 Type: ET_DYN73Sections:74 - Name: .foo.175 Type: SHT_PROGBITS76 - Name: .dynsym77 Type: SHT_DYNSYM78 Address: 0x100079 Flags: [ [[FLAG1]] ]80 - Name: .foo.281 Type: SHT_PROGBITS82 - Name: .dynstr83 Type: SHT_STRTAB84 Address: 0x200085 Flags: [ [[FLAG1]] ]86 - Name: .foo.387 Type: SHT_PROGBITS88 - Name: .symtab89 Type: SHT_SYMTAB90 Address: 0x300091 Flags: [ [[FLAG2]] ]92 - Name: .foo.493 Type: SHT_PROGBITS94 - Name: .strtab95 Type: SHT_STRTAB96 Address: 0x400097 Flags: [ [[FLAG2]] ]98 - Name: .foo.599 Type: SHT_PROGBITS100 - Name: .shstrtab101 Type: SHT_STRTAB102 Address: 0x5000103 Flags: [ [[FLAG2]] ]104 - Name: .foo.6105 Type: SHT_PROGBITS106Symbols:107 - Name: foo108DynamicSymbols:109 - Name: bar110 111## Now test the abnormal case: when .symtab (SHT_SYMTAB),112## .strtab (SHT_STRTAB) and .shstrtab (SHT_STRTAB) are113## allocatable sections, but .dynsym (SHT_DYNSYM) and114## .dynstr (SHT_STRTAB) are not.115## Check that only allocatable versions are explicitly declared.116 117# RUN: yaml2obj %s -o %t2.so -D FLAG1="" -D FLAG2=SHF_ALLOC118# RUN: llvm-readelf -S %t2.so | FileCheck %s --check-prefixes=RE,RE-2119# RUN: obj2yaml %t2.so | FileCheck %s --check-prefix=OUTPUT2120 121## Check we explicitly declare only allocatable122## SHT_STRTAB/SHT_SYMTAB/SHT_DYNSYM sections.123# OUTPUT2: --- !ELF124# OUTPUT2-NEXT: FileHeader:125# OUTPUT2-NEXT: Class: ELFCLASS64126# OUTPUT2-NEXT: Data: ELFDATA2LSB127# OUTPUT2-NEXT: Type: ET_DYN128# OUTPUT2-NEXT: Sections:129# OUTPUT2-NEXT: - Name: .foo.1130# OUTPUT2-NEXT: Type: SHT_PROGBITS131# OUTPUT2-NEXT: - Name: .foo.2132# OUTPUT2-NEXT: Type: SHT_PROGBITS133# OUTPUT2-NEXT: - Name: .foo.3134# OUTPUT2-NEXT: Type: SHT_PROGBITS135# OUTPUT2-NEXT: - Name: .symtab136# OUTPUT2-NEXT: Type: SHT_SYMTAB137# OUTPUT2-NEXT: Flags: [ SHF_ALLOC ]138# OUTPUT2-NEXT: Address: 0x3000139# OUTPUT2-NEXT: Link: .strtab140# OUTPUT2-NEXT: - Name: .foo.4141# OUTPUT2-NEXT: Type: SHT_PROGBITS142# OUTPUT2-NEXT: - Name: .strtab143# OUTPUT2-NEXT: Type: SHT_STRTAB144# OUTPUT2-NEXT: Flags: [ SHF_ALLOC ]145# OUTPUT2-NEXT: Address: 0x4000146# OUTPUT2-NEXT: - Name: .foo.5147# OUTPUT2-NEXT: Type: SHT_PROGBITS148# OUTPUT2-NEXT: - Name: .shstrtab149# OUTPUT2-NEXT: Type: SHT_STRTAB150# OUTPUT2-NEXT: Flags: [ SHF_ALLOC ]151# OUTPUT2-NEXT: Address: 0x5000152# OUTPUT2-NEXT: - Name: .foo.6153# OUTPUT2-NEXT: Type: SHT_PROGBITS154# OUTPUT2-NEXT: Symbols:155# OUTPUT2-NEXT: - Name: foo156# OUTPUT2-NEXT: DynamicSymbols:157# OUTPUT2-NEXT: - Name: bar158# OUTPUT2-NEXT: ...159