summaryrefslogtreecommitdiffstats
path: root/llvm/test/tools/yaml2obj/ELF/section-size-content.yaml
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/test/tools/yaml2obj/ELF/section-size-content.yaml')
-rw-r--r--llvm/test/tools/yaml2obj/ELF/section-size-content.yaml178
1 files changed, 178 insertions, 0 deletions
diff --git a/llvm/test/tools/yaml2obj/ELF/section-size-content.yaml b/llvm/test/tools/yaml2obj/ELF/section-size-content.yaml
new file mode 100644
index 00000000000..16b4b37dd42
--- /dev/null
+++ b/llvm/test/tools/yaml2obj/ELF/section-size-content.yaml
@@ -0,0 +1,178 @@
+## For regular sections, it is common to specify `Size` and/or `Content` fields in YAML.
+## Here we test the behavior in different cases.
+
+## In this case, we have both `Content` and `Size` fields specified and `Size`
+## is less than content size. Check we report an error.
+
+# RUN: not yaml2obj --docnum=1 %s -o %t1 2>&1 | FileCheck %s --check-prefix=ERR
+# ERR: error: Section size must be greater than or equal to the content size
+
+--- !ELF
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_DYN
+ Machine: EM_X86_64
+Sections:
+ - Name: .foo
+ Type: SHT_PROGBITS
+ Content: "FF"
+ Size: 0
+
+## In this case, we have both `Content` and `Size` fields specified and
+## `Size` is equal to the content size. We check that this is allowed and
+## that the output section has a correct size value.
+
+# RUN: yaml2obj --docnum=2 %s -o %t2
+# RUN: llvm-readobj --section-data -S %t2 | FileCheck %s --check-prefix=CASE2
+
+# CASE2: Name: .foo
+# CASE2-NEXT: Type: SHT_PROGBITS
+# CASE2-NEXT: Flags [
+# CASE2-NEXT: ]
+# CASE2-NEXT: Address: 0x0
+# CASE2-NEXT: Offset: 0x40
+# CASE2-NEXT: Size: 1
+# CASE2-NEXT: Link: 0
+# CASE2-NEXT: Info: 0
+# CASE2-NEXT: AddressAlignment: 0
+# CASE2-NEXT: EntrySize: 0
+# CASE2-NEXT: SectionData (
+# CASE2-NEXT: 0000: FF
+# CASE2-NEXT: )
+
+--- !ELF
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_DYN
+ Machine: EM_X86_64
+Sections:
+ - Name: .foo
+ Type: SHT_PROGBITS
+ Content: "FF"
+ Size: 1
+
+## Check we can specify only `Content`.
+
+# RUN: yaml2obj --docnum=3 %s -o %t3
+# RUN: llvm-readobj --section-data -S %t3 | FileCheck %s --check-prefix=CASE2
+
+--- !ELF
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_DYN
+ Machine: EM_X86_64
+Sections:
+ - Name: .foo
+ Type: SHT_PROGBITS
+ Content: "FF"
+
+## Check we can specify only `Size`.
+
+# RUN: yaml2obj --docnum=4 %s -o %t4
+# RUN: llvm-readobj --section-data -S %t4 | FileCheck %s --check-prefix=CASE3
+
+# CASE3: Name: .foo
+# CASE3-NEXT: Type: SHT_PROGBITS
+# CASE3-NEXT: Flags [
+# CASE3-NEXT: ]
+# CASE3-NEXT: Address: 0x0
+# CASE3-NEXT: Offset: 0x40
+# CASE3-NEXT: Size: 1
+# CASE3-NEXT: Link: 0
+# CASE3-NEXT: Info: 0
+# CASE3-NEXT: AddressAlignment: 0
+# CASE3-NEXT: EntrySize: 0
+# CASE3-NEXT: SectionData (
+# CASE3-NEXT: 0000: 00
+# CASE3-NEXT: )
+
+--- !ELF
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_DYN
+ Machine: EM_X86_64
+Sections:
+ - Name: .foo
+ Type: SHT_PROGBITS
+ Size: 1
+
+## 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=5 %s -o %t5
+# RUN: llvm-readobj --section-data -S %t5 | FileCheck %s --check-prefix=CASE4
+
+# CASE4: Name: .foo
+# CASE4-NEXT: Type: SHT_PROGBITS
+# 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: FF0000
+# CASE4-NEXT: )
+
+--- !ELF
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_DYN
+ Machine: EM_X86_64
+Sections:
+ - Name: .foo
+ Type: SHT_PROGBITS
+ Content: "FF"
+ Size: 3
+
+## Check we emit an empty section if neither 'Content' nor 'Size' were set.
+
+# RUN: yaml2obj --docnum=6 %s -o %t6
+# RUN: llvm-readobj %t6 --sections | FileCheck %s --check-prefix=CASE5
+
+# CASE5: Name: .foo
+# CASE5-NEXT: Type: SHT_PROGBITS
+# CASE5-NEXT: Flags [
+# CASE5-NEXT: ]
+# CASE5-NEXT: Address: 0x0
+# CASE5-NEXT: Offset: 0x40
+# CASE5-NEXT: Size: 0
+
+--- !ELF
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_DYN
+ Machine: EM_X86_64
+Sections:
+ - Name: .foo
+ Type: SHT_PROGBITS
+
+# RUN: not yaml2obj --docnum=7 %s 2>&1 | FileCheck %s --check-prefix=ERR2
+
+--- !ELF
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_X86_64
+Sections:
+ - Name: .data
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC ]
+ Content: 0000000000000000
+ Size: 2
+
+# ERR2: error: Section size must be greater than or equal to the content size
+# ERR2-NEXT: - Name: .data
+# ERR2-NEXT: ^
+# ERR2-NEXT: error: failed to parse YAML input
OpenPOWER on IntegriCloud