Index: llvm/test/tools/yaml2obj/ELF/strtab-implicit-sections-flags.yaml =================================================================== --- llvm/test/tools/yaml2obj/ELF/strtab-implicit-sections-flags.yaml +++ /dev/null @@ -1,76 +0,0 @@ -## For implicit string table sections, the `Flags` field can also -## be specified in YAML. Here we test the behavior in different cases. - -## When flags are not explicitly specified, yaml2obj assigns no flags -## for .strtab and the SHF_ALLOC flag for .dynstr by default. - -# RUN: yaml2obj --docnum=1 %s -o %t1 -# RUN: llvm-readobj %t1 -S | FileCheck %s --check-prefix=CASE1 - -# CASE1: Name: .strtab -# CASE1-NEXT: Type: SHT_STRTAB -# CASE1-NEXT: Flags [ -# CASE1-NEXT: ] -# CASE1: Name: .dynstr -# CASE1-NEXT: Type: SHT_STRTAB -# CASE1-NEXT: Flags [ -# CASE1-NEXT: SHF_ALLOC -# CASE1-NEXT: ] - ---- !ELF -FileHeader: - Class: ELFCLASS64 - Data: ELFDATA2LSB - Type: ET_DYN -Sections: - - Name: .strtab - Type: SHT_STRTAB - - Name: .dynstr - Type: SHT_STRTAB - -## Check we can set arbitrary flags for .strtab/.dynstr. - -# RUN: yaml2obj --docnum=2 %s -o %t2 -# RUN: llvm-readobj %t2 -S | FileCheck %s --check-prefix=CASE2 - -# CASE2: Name: .strtab -# CASE2-NEXT: Type: SHT_STRTAB -# CASE2-NEXT: Flags [ -# CASE2-NEXT: SHF_ALLOC -# CASE2-NEXT: SHF_STRINGS -# CASE2-NEXT: ] -# CASE2: Name: .dynstr -# CASE2-NEXT: Type: SHT_STRTAB -# CASE2-NEXT: Flags [ -# CASE2-NEXT: SHF_STRINGS -# CASE2-NEXT: ] - ---- !ELF -FileHeader: - Class: ELFCLASS64 - Data: ELFDATA2LSB - Type: ET_DYN -Sections: - - Name: .strtab - Type: SHT_STRTAB - Flags: [ SHF_ALLOC, SHF_STRINGS ] - - Name: .dynstr - Type: SHT_STRTAB - Flags: [ SHF_STRINGS ] - -## Check no flags are set by default for .strtab when it is not -## described in the YAML. - -# RUN: yaml2obj --docnum=3 %s -o %t3 -# RUN: llvm-readobj %t3 -S | FileCheck %s --check-prefix=CASE3 - -# CASE3: Name: .strtab -# CASE3-NEXT: Type: SHT_STRTAB -# CASE3-NEXT: Flags [ -# CASE3-NEXT: ] - ---- !ELF -FileHeader: - Class: ELFCLASS64 - Data: ELFDATA2LSB - Type: ET_DYN Index: llvm/test/tools/yaml2obj/ELF/strtab-implicit-sections-size-content.yaml =================================================================== --- llvm/test/tools/yaml2obj/ELF/strtab-implicit-sections-size-content.yaml +++ /dev/null @@ -1,162 +0,0 @@ -## For implicit string table sections, `Size` and/or `Content` fields can also -## be specified in YAML. Here we test the behavior in different cases. - -## When no `Size` or `Content` is specified for a string table section, -## yaml2obj writes the default content. - -# RUN: yaml2obj --docnum=1 %s -o %t1 -# RUN: llvm-objdump %t1 -s | FileCheck %s --check-prefix=CASE1 - -# CASE1: Contents of section .strtab: -# CASE1-NEXT: 0000 00666f6f 00 .foo. - ---- !ELF -FileHeader: - Class: ELFCLASS64 - Data: ELFDATA2LSB - Type: ET_DYN -Sections: - - Name: .strtab - Type: SHT_STRTAB -## Used to trigger adding string `foo` to the string table section. -Symbols: - - Name: foo - -## For string table sections, `Size` can be used to override the -## implicit string table data. The content is filled with zeroes in this case. - -# RUN: yaml2obj --docnum=2 %s -o %t2 -# RUN: llvm-readobj --section-data -S %t2 | FileCheck %s --check-prefix=CASE2 - -# CASE2: Name: .strtab -# CASE2-NEXT: Type: SHT_STRTAB -# CASE2-NEXT: Flags [ -# CASE2-NEXT: ] -# CASE2-NEXT: Address: 0x0 -# CASE2-NEXT: Offset: 0x40 -# CASE2-NEXT: Size: 2 -# CASE2-NEXT: Link: 0 -# CASE2-NEXT: Info: 0 -# CASE2-NEXT: AddressAlignment: 0 -# CASE2-NEXT: EntrySize: 0 -# CASE2-NEXT: SectionData ( -# CASE2-NEXT: 0000: 0000 -# CASE2-NEXT: ) - ---- !ELF -FileHeader: - Class: ELFCLASS64 - Data: ELFDATA2LSB - Type: ET_DYN -Sections: - - Name: .strtab - Type: SHT_STRTAB - Size: 2 -## Used to trigger adding string `foo` to the string table section. -Symbols: - - Name: foo - -## For string table sections, `Content` can be used to override the -## implicit string table data. - -# RUN: yaml2obj --docnum=3 %s -o %t3 -# RUN: llvm-readobj --section-data -S %t3 | FileCheck %s --check-prefix=CASE3 - -# CASE3: Name: .strtab -# CASE3-NEXT: Type: SHT_STRTAB -# CASE3-NEXT: Flags [ -# CASE3-NEXT: ] -# CASE3-NEXT: Address: 0x0 -# CASE3-NEXT: Offset: 0x40 -# CASE3-NEXT: Size: 2 -# CASE3-NEXT: Link: 0 -# CASE3-NEXT: Info: 0 -# CASE3-NEXT: AddressAlignment: 0 -# CASE3-NEXT: EntrySize: 0 -# CASE3-NEXT: SectionData ( -# CASE3-NEXT: 0000: 0102 -# CASE3-NEXT: ) - ---- !ELF -FileHeader: - Class: ELFCLASS64 - Data: ELFDATA2LSB - Type: ET_DYN -Sections: - - Name: .strtab - Type: SHT_STRTAB - Content: "0102" -## Used to trigger adding string `foo` to the string table section. -Symbols: - - Name: foo - -## For string table sections, check we can specify both `Size` and `Content` -## when size is greater than content size. In this case zeroes are -## added as padding after the specified content. - -# RUN: yaml2obj --docnum=4 %s -o %t4 -# RUN: llvm-readobj --section-data -S %t4 | FileCheck %s --check-prefix=CASE4 - -# CASE4: Name: .strtab -# CASE4-NEXT: Type: SHT_STRTAB -# CASE4-NEXT: Flags [ -# CASE4-NEXT: ] -# CASE4-NEXT: Address: 0x0 -# CASE4-NEXT: Offset: 0x40 -# CASE4-NEXT: Size: 3 -# CASE4-NEXT: Link: 0 -# CASE4-NEXT: Info: 0 -# CASE4-NEXT: AddressAlignment: 0 -# CASE4-NEXT: EntrySize: 0 -# CASE4-NEXT: SectionData ( -# CASE4-NEXT: 0000: 010200 -# CASE4-NEXT: ) - ---- !ELF -FileHeader: - Class: ELFCLASS64 - Data: ELFDATA2LSB - Type: ET_DYN -Sections: - - Name: .strtab - Type: SHT_STRTAB - Content: "0102" - Size: 3 -## Used to trigger adding string `foo` to the string table section. -Symbols: - - Name: foo - -## For string table sections, check we can specify both `Size` and `Content` -## when size is equal to content size. - -# RUN: yaml2obj --docnum=5 %s -o %t5 -# RUN: llvm-readobj --section-data -S %t5 | FileCheck %s --check-prefix=CASE5 - -# CASE5: Name: .strtab -# CASE5-NEXT: Type: SHT_STRTAB -# CASE5-NEXT: Flags [ (0x0) -# CASE5-NEXT: ] -# CASE5-NEXT: Address: 0x0 -# CASE5-NEXT: Offset: 0x40 -# CASE5-NEXT: Size: 2 -# CASE5-NEXT: Link: 0 -# CASE5-NEXT: Info: 0 -# CASE5-NEXT: AddressAlignment: 0 -# CASE5-NEXT: EntrySize: 0 -# CASE5-NEXT: SectionData ( -# CASE5-NEXT: 0000: 0102 -# CASE5-NEXT: ) - ---- !ELF -FileHeader: - Class: ELFCLASS64 - Data: ELFDATA2LSB - Type: ET_DYN -Sections: - - Name: .strtab - Type: SHT_STRTAB - Content: "0102" - Size: 2 -## Used to trigger adding string `foo` to the string table section. -Symbols: - - Name: foo Index: llvm/test/tools/yaml2obj/ELF/strtab-implicit-sections.yaml =================================================================== --- /dev/null +++ llvm/test/tools/yaml2obj/ELF/strtab-implicit-sections.yaml @@ -0,0 +1,233 @@ +## Check how we produce implicit SHT_STRTAB sections. + +## For implicit string table sections, the `Flags` field can also +## be specified in YAML. Here we test the behavior in different cases. + +## When flags are not explicitly specified, yaml2obj assigns no flags +## for .strtab/.shstrtab and the SHF_ALLOC flag for .dynstr by default. + +# RUN: yaml2obj --docnum=1 %s -o %t1 +# RUN: llvm-readelf %t1 --sections | FileCheck %s --check-prefix=CASE1 + +# CASE1: [Nr] Name Type {{.*}} Flg Lk +# CASE1: [ 1] .strtab STRTAB {{.*}} 0 +# CASE1-NEXT: [ 2] .shstrtab STRTAB {{.*}} 0 +# CASE1-NEXT: [ 3] .dynstr STRTAB {{.*}} A 0 + +--- !ELF +FileHeader: + Class: ELFCLASS64 + Data: ELFDATA2LSB + Type: ET_DYN +Sections: + - Name: .strtab + Type: SHT_STRTAB + - Name: .shstrtab + Type: SHT_STRTAB + - Name: .dynstr + Type: SHT_STRTAB + +## Check we can set arbitrary flags for .strtab/.dynstr. + +# RUN: yaml2obj --docnum=2 %s -o %t2 +# RUN: llvm-readelf %t2 --sections | FileCheck %s --check-prefix=CASE2 + +# CASE2: [Nr] Name Type {{.*}} Flg Lk +# CASE2: [ 1] .strtab STRTAB {{.*}} AS 0 +# CASE2-NEXT: [ 2] .shstrtab STRTAB {{.*}} WA 0 +# CASE2-NEXT: [ 3] .dynstr STRTAB {{.*}} S 0 + +--- !ELF +FileHeader: + Class: ELFCLASS64 + Data: ELFDATA2LSB + Type: ET_DYN +Sections: + - Name: .strtab + Type: SHT_STRTAB + Flags: [ SHF_ALLOC, SHF_STRINGS ] + - Name: .shstrtab + Type: SHT_STRTAB + Flags: [ SHF_ALLOC, SHF_WRITE ] + - Name: .dynstr + Type: SHT_STRTAB + Flags: [ SHF_STRINGS ] + +## Check no flags are set by default for .strtab/.shstrtab when +## they are not described in the YAML. + +# RUN: yaml2obj --docnum=3 %s -o %t3 +# RUN: llvm-readelf %t3 --sections | FileCheck %s --check-prefix=CASE3 + +# CASE3: [Nr] Name Type {{.*}} ES Flg Lk +# CASE3: [ 1] .strtab STRTAB {{.*}} 00 0 +# CASE3-NEXT: [ 2] .shstrtab STRTAB {{.*}} 00 0 + +--- !ELF +FileHeader: + Class: ELFCLASS64 + Data: ELFDATA2LSB + Type: ET_DYN + +## For implicit string table sections, `Size` and/or `Content` fields can also +## be specified in YAML. Here we test the behavior in different cases. + +## When no `Size` or `Content` is specified for a string table section, +## yaml2obj writes the default content. + +# RUN: yaml2obj --docnum=4 %s -o %t4 +# RUN: llvm-objdump %t4 -s | FileCheck %s --check-prefix=CASE4 + +# CASE4: Contents of section .strtab: +# CASE4-NEXT: 0000 00666f6f 00 .foo. + +--- !ELF +FileHeader: + Class: ELFCLASS64 + Data: ELFDATA2LSB + Type: ET_DYN +Sections: + - Name: .strtab + Type: SHT_STRTAB +## Used to trigger adding string `foo` to the string table section. +Symbols: + - Name: foo + +## For string table sections, `Size` can be used to override the +## implicit string table data. The content is filled with zeroes in this case. + +# RUN: yaml2obj --docnum=5 %s -o %t5 +# RUN: llvm-readobj --section-data -S %t5 | FileCheck %s --check-prefix=CASE5 + +# CASE5: Name: .strtab +# CASE5-NEXT: Type: SHT_STRTAB +# CASE5-NEXT: Flags [ +# CASE5-NEXT: ] +# CASE5-NEXT: Address: 0x0 +# CASE5-NEXT: Offset: 0x40 +# CASE5-NEXT: Size: 2 +# CASE5-NEXT: Link: 0 +# CASE5-NEXT: Info: 0 +# CASE5-NEXT: AddressAlignment: 0 +# CASE5-NEXT: EntrySize: 0 +# CASE5-NEXT: SectionData ( +# CASE5-NEXT: 0000: 0000 +# CASE5-NEXT: ) + +--- !ELF +FileHeader: + Class: ELFCLASS64 + Data: ELFDATA2LSB + Type: ET_DYN +Sections: + - Name: .strtab + Type: SHT_STRTAB + Size: 2 +## Used to trigger adding string `foo` to the string table section. +Symbols: + - Name: foo + +## For string table sections, `Content` can be used to override the +## implicit string table data. + +# RUN: yaml2obj --docnum=6 %s -o %t6 +# RUN: llvm-readobj --section-data -S %t6 | FileCheck %s --check-prefix=CASE6 + +# CASE6: Name: .strtab +# CASE6-NEXT: Type: SHT_STRTAB +# CASE6-NEXT: Flags [ +# CASE6-NEXT: ] +# CASE6-NEXT: Address: 0x0 +# CASE6-NEXT: Offset: 0x40 +# CASE6-NEXT: Size: 2 +# CASE6-NEXT: Link: 0 +# CASE6-NEXT: Info: 0 +# CASE6-NEXT: AddressAlignment: 0 +# CASE6-NEXT: EntrySize: 0 +# CASE6-NEXT: SectionData ( +# CASE6-NEXT: 0000: 0102 +# CASE6-NEXT: ) + +--- !ELF +FileHeader: + Class: ELFCLASS64 + Data: ELFDATA2LSB + Type: ET_DYN +Sections: + - Name: .strtab + Type: SHT_STRTAB + Content: "0102" +## Used to trigger adding string `foo` to the string table section. +Symbols: + - Name: foo + +## For string table sections, check we can specify both `Size` and `Content` +## when size is greater than content size. In this case zeroes are +## added as padding after the specified content. + +# RUN: yaml2obj --docnum=7 %s -o %t7 +# RUN: llvm-readobj --section-data -S %t7 | FileCheck %s --check-prefix=CASE7 + +# CASE7: Name: .strtab +# CASE7-NEXT: Type: SHT_STRTAB +# CASE7-NEXT: Flags [ +# CASE7-NEXT: ] +# CASE7-NEXT: Address: 0x0 +# CASE7-NEXT: Offset: 0x40 +# CASE7-NEXT: Size: 3 +# CASE7-NEXT: Link: 0 +# CASE7-NEXT: Info: 0 +# CASE7-NEXT: AddressAlignment: 0 +# CASE7-NEXT: EntrySize: 0 +# CASE7-NEXT: SectionData ( +# CASE7-NEXT: 0000: 010200 +# CASE7-NEXT: ) + +--- !ELF +FileHeader: + Class: ELFCLASS64 + Data: ELFDATA2LSB + Type: ET_DYN +Sections: + - Name: .strtab + Type: SHT_STRTAB + Content: "0102" + Size: 3 +## Used to trigger adding string `foo` to the string table section. +Symbols: + - Name: foo + +## For string table sections, check we can specify both `Size` and `Content` +## when size is equal to content size. + +# RUN: yaml2obj --docnum=8 %s -o %t8 +# RUN: llvm-readobj --section-data -S %t8 | FileCheck %s --check-prefix=CASE8 + +# CASE8: Name: .strtab +# CASE8-NEXT: Type: SHT_STRTAB +# CASE8-NEXT: Flags [ (0x0) +# CASE8-NEXT: ] +# CASE8-NEXT: Address: 0x0 +# CASE8-NEXT: Offset: 0x40 +# CASE8-NEXT: Size: 2 +# CASE8-NEXT: Link: 0 +# CASE8-NEXT: Info: 0 +# CASE8-NEXT: AddressAlignment: 0 +# CASE8-NEXT: EntrySize: 0 +# CASE8-NEXT: SectionData ( +# CASE8-NEXT: 0000: 0102 +# CASE8-NEXT: ) + +--- !ELF +FileHeader: + Class: ELFCLASS64 + Data: ELFDATA2LSB + Type: ET_DYN +Sections: + - Name: .strtab + Type: SHT_STRTAB + Content: "0102" + Size: 2 +## Used to trigger adding string `foo` to the string table section. +Symbols: + - Name: foo