[llvm] 18b4b0b - [yaml2obj][test] - Merge strtab-implicit-sections-*.yaml into strtab-implicit-sections.yaml and improve testing of .shstrtab
Georgii Rymar via llvm-commits
llvm-commits at lists.llvm.org
Thu Oct 29 05:08:38 PDT 2020
Author: Georgii Rymar
Date: 2020-10-29T15:08:04+03:00
New Revision: 18b4b0b80deaf4f9da4fbe8e6279e28514595b11
URL: https://github.com/llvm/llvm-project/commit/18b4b0b80deaf4f9da4fbe8e6279e28514595b11
DIFF: https://github.com/llvm/llvm-project/commit/18b4b0b80deaf4f9da4fbe8e6279e28514595b11.diff
LOG: [yaml2obj][test] - Merge strtab-implicit-sections-*.yaml into strtab-implicit-sections.yaml and improve testing of .shstrtab
This creates `strtab-implicit-sections.yaml` and merges 2 `strtab-implicit-sections*` tests into it.
I've also added a few tests for `.shstrtab` section related to section flags.
With that we have a single place where we can test implicit string table sections and
the `.shstrtab` section in particular.
Differential revision: https://reviews.llvm.org/D90372
Added:
llvm/test/tools/yaml2obj/ELF/strtab-implicit-sections.yaml
Modified:
Removed:
llvm/test/tools/yaml2obj/ELF/strtab-implicit-sections-flags.yaml
llvm/test/tools/yaml2obj/ELF/strtab-implicit-sections-size-content.yaml
################################################################################
diff --git a/llvm/test/tools/yaml2obj/ELF/strtab-implicit-sections-flags.yaml b/llvm/test/tools/yaml2obj/ELF/strtab-implicit-sections-flags.yaml
deleted file mode 100644
index e6eb47ac8156..000000000000
--- a/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
diff erent 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
diff --git a/llvm/test/tools/yaml2obj/ELF/strtab-implicit-sections-size-content.yaml b/llvm/test/tools/yaml2obj/ELF/strtab-implicit-sections-size-content.yaml
deleted file mode 100644
index 21c206cd7321..000000000000
--- a/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
diff erent 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
diff --git a/llvm/test/tools/yaml2obj/ELF/strtab-implicit-sections.yaml b/llvm/test/tools/yaml2obj/ELF/strtab-implicit-sections.yaml
new file mode 100644
index 000000000000..b9fd494cefb5
--- /dev/null
+++ b/llvm/test/tools/yaml2obj/ELF/strtab-implicit-sections.yaml
@@ -0,0 +1,205 @@
+## 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
diff erent 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
+ Flags: [[STRTABFLAGS=<none>]]
+ - Name: .shstrtab
+ Type: SHT_STRTAB
+ Flags: [[SHSTRTABFLAGS=<none>]]
+ - Name: .dynstr
+ Type: SHT_STRTAB
+ Flags: [[DYNSTRFLAGS=<none>]]
+
+## Check we can set arbitrary flags for .strtab/.dynstr.
+
+# RUN: yaml2obj --docnum=1 \
+# RUN: -DSTRTABFLAGS="[ SHF_ALLOC, SHF_STRINGS ]" \
+# RUN: -DSHSTRTABFLAGS="[ SHF_ALLOC, SHF_WRITE ]" \
+# RUN: -DDYNSTRFLAGS="[ SHF_STRINGS ]" %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
+
+## Check no flags are set by default for implicit string table sections
+## when they are not described in the YAML.
+
+# RUN: yaml2obj --docnum=2 %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
diff erent cases.
+
+## When no `Size` or `Content` is specified for a string table section,
+## yaml2obj writes the default content.
+
+# RUN: yaml2obj --docnum=3 %s -o %t4
+# RUN: llvm-objdump %t4 -s | FileCheck %s --check-prefix=CASE4
+
+# CASE4: Contents of section .strtab:
+# CASE4-NEXT: 0000 00666f6f 00 .foo.
+# CASE4-NEXT: Contents of section .shstrtab:
+# CASE4-NEXT: 0000 002e6479 6e737472 002e6479 6e73796d ..dynstr..dynsym
+# CASE4-NEXT: 0010 002e7368 73747274 6162002e 73747274 ..shstrtab..strt
+# CASE4-NEXT: 0020 6162002e 73796d74 616200 ab..symtab.
+# CASE4-NEXT: Contents of section .dynstr:
+# CASE4-NEXT: 0030 00626172 00 .bar.
+
+--- !ELF
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_DYN
+Sections:
+ - Name: .strtab
+ Type: SHT_STRTAB
+ Size: [[STRTABSIZE=<none>]]
+ Content: [[STRTABCONTENT=<none>]]
+ - Name: .shstrtab
+ Type: SHT_STRTAB
+ Size: [[SHSTRTABSIZE=<none>]]
+ Content: [[SHSTRTABCONTENT=<none>]]
+ - Name: .dynstr
+ Type: SHT_STRTAB
+ Size: [[DYNSTRSIZE=<none>]]
+ Content: [[DYNSTRCONTENT=<none>]]
+## Used to trigger adding string `foo` to the string table section.
+Symbols:
+ - Name: foo
+DynamicSymbols:
+ - Name: bar
+
+## 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=3 -DSTRTABSIZE=2 -DSHSTRTABSIZE=0x30 -DDYNSTRSIZE=4 %s -o %t5
+# RUN: llvm-readobj --section-data -S %t5 | FileCheck %s --check-prefix=CASE5
+
+# CASE5: Index: 1
+# CASE5-NEXT: Name: (27)
+# CASE5-NEXT: Type: SHT_STRTAB
+# CASE5: SectionData (
+# CASE5-NEXT: 0000: 0000 |
+# CASE5-NEXT: )
+# CASE5: Index: 2
+# CASE5-NEXT: Name: (17)
+# CASE5-NEXT: Type: SHT_STRTAB (0x3)
+# CASE5: SectionData (
+# CASE5-NEXT: 0000: 00000000 00000000 00000000 00000000 |
+# CASE5-NEXT: 0010: 00000000 00000000 00000000 00000000 |
+# CASE5-NEXT: 0020: 00000000 00000000 00000000 00000000 |
+# CASE5-NEXT: )
+# CASE5: Index: 3
+# CASE5-NEXT: Name: (1)
+# CASE5-NEXT: Type: SHT_STRTAB (0x3)
+# CASE5: SectionData (
+# CASE5-NEXT: 0000: 00000000 |
+# CASE5-NEXT: )
+
+## For string table sections, `Content` can be used to override the
+## implicit string table data.
+
+# RUN: yaml2obj --docnum=3 %s \
+# RUN: -DSTRTABCONTENT="01020304" \
+# RUN: -DSHSTRTABCONTENT="6162636465666767696a6b6c6d6e6f707172737475767778797a61626364656667676900" \
+# RUN: -DDYNSTRCONTENT="eeddaabb" -o %t6
+# RUN: llvm-readobj --section-data -S %t6 | FileCheck %s --check-prefix=CASE6
+
+# CASE6: Index: 1
+# CASE6-NEXT: Name: bcdefggi (27)
+# CASE6: SectionData (
+# CASE6-NEXT: 0000: 01020304 |
+# CASE6-NEXT: )
+# CASE6: Index: 2
+# CASE6-NEXT: Name: rstuvwxyzabcdefggi (17)
+# CASE6: SectionData (
+# CASE6-NEXT: 0000: 61626364 65666767 696A6B6C 6D6E6F70 |
+# CASE6-NEXT: 0010: 71727374 75767778 797A6162 63646566 |
+# CASE6-NEXT: 0020: 67676900 |
+# CASE6-NEXT: )
+# CASE6: Index: 3
+# CASE6-NEXT: Name: bcdefggijklmnopqrstuvwxyzabcdefggi (1)
+# CASE6: SectionData (
+# CASE6-NEXT: 0000: EEDDAABB |
+# CASE6-NEXT: )
+
+## 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=3 %s \
+# RUN: -DSTRTABCONTENT="01020304" -DSTRTABSIZE=5 \
+# RUN: -DSHSTRTABCONTENT="6162636465666767696a6b6c6d6e6f707172737475767778797a61626364656667676900" -DSHSTRTABSIZE=0x26 \
+# RUN: -DDYNSTRCONTENT="eeddaabb" -DDYNSTRSIZE=7 -o %t7
+# RUN: llvm-readobj --section-data -S %t7 | FileCheck %s --check-prefix=CASE7
+
+# CASE7: Index: 1
+# CASE7-NEXT: Name: bcdefggi (27)
+# CASE7: SectionData (
+# CASE7-NEXT: 0000: 01020304 00 |
+# CASE7-NEXT: )
+# CASE7: Index: 2
+# CASE7-NEXT: Name: rstuvwxyzabcdefggi (17)
+# CASE7: SectionData (
+# CASE7-NEXT: 0000: 61626364 65666767 696A6B6C 6D6E6F70 |
+# CASE7-NEXT: 0010: 71727374 75767778 797A6162 63646566 |
+# CASE7-NEXT: 0020: 67676900 0000 |
+# CASE7-NEXT: )
+# CASE7: Index: 3
+# CASE7-NEXT: Name: bcdefggijklmnopqrstuvwxyzabcdefggi (1)
+# CASE7: SectionData (
+# CASE7-NEXT: 0000: EEDDAABB 000000 |
+# CASE7-NEXT: )
+
+## For string table sections, check we can specify both `Size` and `Content`
+## when size is equal to content size.
+
+# RUN: yaml2obj --docnum=3 %s \
+# RUN: -DSTRTABCONTENT="01020304" -DSTRTABSIZE=4 \
+# RUN: -DSHSTRTABCONTENT="6162636465666767696a6b6c6d6e6f707172737475767778797a61626364656667676900" -DSHSTRTABSIZE=0x24 \
+# RUN: -DDYNSTRCONTENT="eeddaabb" -DDYNSTRSIZE=4 -o %t8
+# RUN: llvm-readobj --section-data -S %t8 | FileCheck %s --check-prefix=CASE6
+
+## Check that we report an error when the the value of "Size" is less than the content size.
+
+# RUN: not yaml2obj --docnum=3 %s -DSTRTABCONTENT="01020304" -DSTRTABSIZE=3 2>&1 \
+# RUN: | FileCheck %s --check-prefix=CASE8
+# RUN: not yaml2obj --docnum=3 %s \
+# RUN: -DSHSTRTABCONTENT="6162636465666767696a6b6c6d6e6f707172737475767778797a61626364656667676900" -DSHSTRTABSIZE=0x23 2>&1 \
+# RUN: | FileCheck %s --check-prefix=CASE8
+# RUN: not yaml2obj --docnum=3 %s -DDYNSTRCONTENT="eeddaabb" -DDYNSTRSIZE=0x3 2>&1 \
+# RUN: | FileCheck %s --check-prefix=CASE8
+
+# CASE8: Section size must be greater than or equal to the content size
More information about the llvm-commits
mailing list