| ## Check that obj2yaml dumps SHT_STRTAB/SHT_SYMTAB/SHT_DYNSYM sections |
| ## when they are allocatable. |
| |
| ## In the following test we check the normal case: when .dynsym (SHT_DYNSYM) |
| ## and .dynstr (SHT_STRTAB) are allocatable sections and .symtab (SHT_SYMTAB), |
| ## .strtab (SHT_STRTAB) and .shstrtab (SHT_STRTAB) are not. |
| ## Check we explicitly declare allocatable sections. |
| |
| # RUN: yaml2obj %s -o %t1.so -D FLAG1=SHF_ALLOC -D FLAG2="" |
| # RUN: llvm-readelf -S %t1.so | FileCheck %s --check-prefixes=RE,RE-1 |
| # RUN: obj2yaml %t1.so | FileCheck %s --check-prefix=OUTPUT |
| |
| ## Check the information about sections using an independent tool. |
| |
| # RE: Section Headers: |
| # RE-NEXT: [Nr] Name Type Address Off Size ES Flg Lk Inf Al |
| # RE-NEXT: [ 0] NULL 0000000000000000 000000 000000 00 0 0 0 |
| # RE-NEXT: [ 1] .foo.1 PROGBITS 0000000000000000 000040 000000 00 0 0 0 |
| # RE-1-NEXT: [ 2] .dynsym DYNSYM 0000000000001000 000040 000030 18 A 4 2 0 |
| # RE-2-NEXT: [ 2] .dynsym DYNSYM 0000000000001000 000040 000030 18 4 2 0 |
| # RE-NEXT: [ 3] .foo.2 PROGBITS 0000000000000000 000070 000000 00 0 0 0 |
| # RE-1-NEXT: [ 4] .dynstr STRTAB 0000000000002000 000070 000005 00 A 0 0 0 |
| # RE-2-NEXT: [ 4] .dynstr STRTAB 0000000000002000 000070 000005 00 0 0 0 |
| # RE-NEXT: [ 5] .foo.3 PROGBITS 0000000000000000 000075 000000 00 0 0 0 |
| # RE-1-NEXT: [ 6] .symtab SYMTAB 0000000000003000 000075 000030 18 8 2 0 |
| # RE-2-NEXT: [ 6] .symtab SYMTAB 0000000000003000 000075 000030 18 A 8 2 0 |
| # RE-NEXT: [ 7] .foo.4 PROGBITS 0000000000000000 0000a5 000000 00 0 0 0 |
| # RE-1-NEXT: [ 8] .strtab STRTAB 0000000000004000 0000a5 000005 00 0 0 0 |
| # RE-2-NEXT: [ 8] .strtab STRTAB 0000000000004000 0000a5 000005 00 A 0 0 0 |
| # RE-NEXT: [ 9] .foo.5 PROGBITS 0000000000000000 0000aa 000000 00 0 0 0 |
| # RE-1-NEXT: [10] .shstrtab STRTAB 0000000000005000 0000aa 000055 00 0 0 0 |
| # RE-2-NEXT: [10] .shstrtab STRTAB 0000000000005000 0000aa 000055 00 A 0 0 0 |
| # RE-NEXT: [11] .foo.6 PROGBITS 0000000000000000 0000ff 000000 00 0 0 0 |
| |
| # OUTPUT: --- !ELF |
| # OUTPUT-NEXT: FileHeader: |
| # OUTPUT-NEXT: Class: ELFCLASS64 |
| # OUTPUT-NEXT: Data: ELFDATA2LSB |
| # OUTPUT-NEXT: Type: ET_DYN |
| # OUTPUT-NEXT: Sections: |
| # OUTPUT-NEXT: - Name: .foo.1 |
| # OUTPUT-NEXT: Type: SHT_PROGBITS |
| # OUTPUT-NEXT: - Name: .dynsym |
| # OUTPUT-NEXT: Type: SHT_DYNSYM |
| # OUTPUT-NEXT: Flags: [ SHF_ALLOC ] |
| # OUTPUT-NEXT: Address: 0x1000 |
| # OUTPUT-NEXT: Link: .dynstr |
| # OUTPUT-NEXT: - Name: .foo.2 |
| # OUTPUT-NEXT: Type: SHT_PROGBITS |
| # OUTPUT-NEXT: - Name: .dynstr |
| # OUTPUT-NEXT: Type: SHT_STRTAB |
| # OUTPUT-NEXT: Flags: [ SHF_ALLOC ] |
| # OUTPUT-NEXT: Address: 0x2000 |
| # OUTPUT-NEXT: - Name: .foo.3 |
| # OUTPUT-NEXT: Type: SHT_PROGBITS |
| # OUTPUT-NEXT: - Name: .foo.4 |
| # OUTPUT-NEXT: Type: SHT_PROGBITS |
| # OUTPUT-NEXT: - Name: .foo.5 |
| # OUTPUT-NEXT: Type: SHT_PROGBITS |
| # OUTPUT-NEXT: - Name: .foo.6 |
| # OUTPUT-NEXT: Type: SHT_PROGBITS |
| # OUTPUT-NEXT: Symbols: |
| # OUTPUT-NEXT: - Name: foo |
| # OUTPUT-NEXT: DynamicSymbols: |
| # OUTPUT-NEXT: - Name: bar |
| # OUTPUT-NEXT: ... |
| |
| --- !ELF |
| FileHeader: |
| Class: ELFCLASS64 |
| Data: ELFDATA2LSB |
| Type: ET_DYN |
| Sections: |
| - Name: .foo.1 |
| Type: SHT_PROGBITS |
| - Name: .dynsym |
| Type: SHT_DYNSYM |
| Address: 0x1000 |
| Flags: [ [[FLAG1]] ] |
| - Name: .foo.2 |
| Type: SHT_PROGBITS |
| - Name: .dynstr |
| Type: SHT_STRTAB |
| Address: 0x2000 |
| Flags: [ [[FLAG1]] ] |
| - Name: .foo.3 |
| Type: SHT_PROGBITS |
| - Name: .symtab |
| Type: SHT_SYMTAB |
| Address: 0x3000 |
| Flags: [ [[FLAG2]] ] |
| - Name: .foo.4 |
| Type: SHT_PROGBITS |
| - Name: .strtab |
| Type: SHT_STRTAB |
| Address: 0x4000 |
| Flags: [ [[FLAG2]] ] |
| - Name: .foo.5 |
| Type: SHT_PROGBITS |
| - Name: .shstrtab |
| Type: SHT_STRTAB |
| Address: 0x5000 |
| Flags: [ [[FLAG2]] ] |
| - Name: .foo.6 |
| Type: SHT_PROGBITS |
| Symbols: |
| - Name: foo |
| DynamicSymbols: |
| - Name: bar |
| |
| ## Now test the abnormal case: when .symtab (SHT_SYMTAB), |
| ## .strtab (SHT_STRTAB) and .shstrtab (SHT_STRTAB) are |
| ## allocatable sections, but .dynsym (SHT_DYNSYM) and |
| ## .dynstr (SHT_STRTAB) are not. |
| ## Check that only allocatable versions are explicitly declared. |
| |
| # RUN: yaml2obj %s -o %t2.so -D FLAG1="" -D FLAG2=SHF_ALLOC |
| # RUN: llvm-readelf -S %t2.so | FileCheck %s --check-prefixes=RE,RE-2 |
| # RUN: obj2yaml %t2.so | FileCheck %s --check-prefix=OUTPUT2 |
| |
| ## Check we explicitly declare only allocatable |
| ## SHT_STRTAB/SHT_SYMTAB/SHT_DYNSYM sections. |
| # OUTPUT2: --- !ELF |
| # OUTPUT2-NEXT: FileHeader: |
| # OUTPUT2-NEXT: Class: ELFCLASS64 |
| # OUTPUT2-NEXT: Data: ELFDATA2LSB |
| # OUTPUT2-NEXT: Type: ET_DYN |
| # OUTPUT2-NEXT: Sections: |
| # OUTPUT2-NEXT: - Name: .foo.1 |
| # OUTPUT2-NEXT: Type: SHT_PROGBITS |
| # OUTPUT2-NEXT: - Name: .foo.2 |
| # OUTPUT2-NEXT: Type: SHT_PROGBITS |
| # OUTPUT2-NEXT: - Name: .foo.3 |
| # OUTPUT2-NEXT: Type: SHT_PROGBITS |
| # OUTPUT2-NEXT: - Name: .symtab |
| # OUTPUT2-NEXT: Type: SHT_SYMTAB |
| # OUTPUT2-NEXT: Flags: [ SHF_ALLOC ] |
| # OUTPUT2-NEXT: Address: 0x3000 |
| # OUTPUT2-NEXT: Link: .strtab |
| # OUTPUT2-NEXT: - Name: .foo.4 |
| # OUTPUT2-NEXT: Type: SHT_PROGBITS |
| # OUTPUT2-NEXT: - Name: .strtab |
| # OUTPUT2-NEXT: Type: SHT_STRTAB |
| # OUTPUT2-NEXT: Flags: [ SHF_ALLOC ] |
| # OUTPUT2-NEXT: Address: 0x4000 |
| # OUTPUT2-NEXT: - Name: .foo.5 |
| # OUTPUT2-NEXT: Type: SHT_PROGBITS |
| # OUTPUT2-NEXT: - Name: .shstrtab |
| # OUTPUT2-NEXT: Type: SHT_STRTAB |
| # OUTPUT2-NEXT: Flags: [ SHF_ALLOC ] |
| # OUTPUT2-NEXT: Address: 0x5000 |
| # OUTPUT2-NEXT: - Name: .foo.6 |
| # OUTPUT2-NEXT: Type: SHT_PROGBITS |
| # OUTPUT2-NEXT: Symbols: |
| # OUTPUT2-NEXT: - Name: foo |
| # OUTPUT2-NEXT: DynamicSymbols: |
| # OUTPUT2-NEXT: - Name: bar |
| # OUTPUT2-NEXT: ... |