summaryrefslogtreecommitdiffstats
path: root/llvm/test/tools
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/test/tools')
-rw-r--r--llvm/test/tools/llvm-readobj/stack-sizes.test7
-rw-r--r--llvm/test/tools/obj2yaml/elf-stack-sizes.yaml88
-rw-r--r--llvm/test/tools/yaml2obj/elf-stack-sizes.yaml229
3 files changed, 321 insertions, 3 deletions
diff --git a/llvm/test/tools/llvm-readobj/stack-sizes.test b/llvm/test/tools/llvm-readobj/stack-sizes.test
index 17ba092aafd..a3d5f929412 100644
--- a/llvm/test/tools/llvm-readobj/stack-sizes.test
+++ b/llvm/test/tools/llvm-readobj/stack-sizes.test
@@ -163,7 +163,7 @@ Sections:
Size: 16
- Name: .stack_sizes
Type: SHT_PROGBITS
- Size: 1
+ Content: "00"
Link: .text
- Name: .rela.stack_sizes
Type: SHT_RELA
@@ -468,7 +468,8 @@ Sections:
Size: 16
- Name: .stack_sizes
Type: SHT_PROGBITS
- Size: 9
+ Entries:
+ - Size: 0
Link: .text
- Name: .rela.stack_sizes
Type: SHT_RELA
@@ -504,8 +505,8 @@ Sections:
Size: 8
- Name: .stack_sizes
Type: SHT_PROGBITS
- Size: 16
Link: .text
+ Entries: []
- Name: .rela.stack_sizes
Type: SHT_RELA
Info: .stack_sizes
diff --git a/llvm/test/tools/obj2yaml/elf-stack-sizes.yaml b/llvm/test/tools/obj2yaml/elf-stack-sizes.yaml
new file mode 100644
index 00000000000..56a05739d10
--- /dev/null
+++ b/llvm/test/tools/obj2yaml/elf-stack-sizes.yaml
@@ -0,0 +1,88 @@
+## Check how obj2yaml produces YAML .stack_sizes descriptions.
+
+## Check that obj2yaml uses the "Entries" tag to describe a .stack_sizes section
+## when it can extract <address, size> pairs.
+
+# RUN: yaml2obj --docnum=1 %s -o %t1
+# RUN: obj2yaml %t1 | FileCheck %s --check-prefix=VALID
+
+# VALID: --- !ELF
+# VALID-NEXT: FileHeader:
+# VALID-NEXT: Class: ELFCLASS64
+# VALID-NEXT: Data: ELFDATA2LSB
+# VALID-NEXT: Type: ET_EXEC
+# VALID-NEXT: Machine: EM_X86_64
+# VALID-NEXT: Sections:
+# VALID-NEXT: - Name: .stack_sizes
+# VALID-NEXT: Type: SHT_PROGBITS
+# VALID-NEXT: Entries:
+# VALID-NEXT: - Address: 0x0000000000000010
+# VALID-NEXT: Size: 0x0000000000000020
+# VALID-NEXT: - Address: 0x0000000000000030
+# VALID-NEXT: Size: 0x0000000000000040
+
+--- !ELF
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_EXEC
+ Machine: EM_X86_64
+Sections:
+ - Name: .stack_sizes
+ Type: SHT_PROGBITS
+ Content: "100000000000000020300000000000000040"
+
+## Check that obj2yaml uses the "Content" tag to describe a .stack_sizes section
+## when it can't extract the entries, for example, when section data is truncated.
+
+# RUN: yaml2obj --docnum=2 %s -o %t2
+# RUN: obj2yaml %t2 | FileCheck %s --check-prefix=INVALID
+
+# INVALID: --- !ELF
+# INVALID-NEXT: FileHeader:
+# INVALID-NEXT: Class: ELFCLASS64
+# INVALID-NEXT: Data: ELFDATA2LSB
+# INVALID-NEXT: Type: ET_EXEC
+# INVALID-NEXT: Machine: EM_X86_64
+# INVALID-NEXT: Sections:
+# INVALID-NEXT: - Name: .stack_sizes
+# INVALID-NEXT: Type: SHT_PROGBITS
+# INVALID-NEXT: Content: '1000000000000000203000000000000000'
+
+--- !ELF
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_EXEC
+ Machine: EM_X86_64
+Sections:
+ - Name: .stack_sizes
+ Type: SHT_PROGBITS
+ Content: "1000000000000000203000000000000000"
+
+## Check obj2yaml can dump empty .stack_sizes.
+
+# RUN: yaml2obj --docnum=3 %s -o %t3
+# RUN: obj2yaml %t3 | FileCheck %s --check-prefix=EMPTY
+
+# EMPTY: --- !ELF
+# EMPTY-NEXT: FileHeader:
+# EMPTY-NEXT: Class: ELFCLASS64
+# EMPTY-NEXT: Data: ELFDATA2LSB
+# EMPTY-NEXT: Type: ET_EXEC
+# EMPTY-NEXT: Machine: EM_X86_64
+# EMPTY-NEXT: Sections:
+# EMPTY-NEXT: - Name: .stack_sizes
+# EMPTY-NEXT: Type: SHT_PROGBITS
+# EMPTY-NEXT: Content: ''
+
+--- !ELF
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_EXEC
+ Machine: EM_X86_64
+Sections:
+ - Name: .stack_sizes
+ Type: SHT_PROGBITS
+ Content: ""
diff --git a/llvm/test/tools/yaml2obj/elf-stack-sizes.yaml b/llvm/test/tools/yaml2obj/elf-stack-sizes.yaml
new file mode 100644
index 00000000000..f050477b2e2
--- /dev/null
+++ b/llvm/test/tools/yaml2obj/elf-stack-sizes.yaml
@@ -0,0 +1,229 @@
+## Check how yaml2obj produces .stack_sizes sections.
+
+## Test the following cases when the .stack_sizes Content field is specified:
+## 1) We can produce a .stack_sizes section from a description with
+## a valid section content.
+## 2) We can produce an incorrect .stack_sizes section from a description with
+## a broken (truncated) section content.
+## 3) We can produce an empty .stack_sizes section from a description with
+## empty section content.
+
+# RUN: yaml2obj --docnum=1 %s -o %t1
+# RUN: llvm-readobj --sections --section-data %t1 | FileCheck %s
+
+## Case 1: valid content.
+# CHECK: Section {
+# CHECK: Index: 1
+# CHECK-NEXT: Name: .stack_sizes (1)
+# CHECK-NEXT: Type: SHT_PROGBITS (0x1)
+# CHECK-NEXT: Flags [ (0x0)
+# CHECK-NEXT: ]
+# CHECK-NEXT: Address: 0x0
+# CHECK-NEXT: Offset: 0x40
+# CHECK-NEXT: Size: 9
+# CHECK-NEXT: Link: 0
+# CHECK-NEXT: Info: 0
+# CHECK-NEXT: AddressAlignment: 0
+# CHECK-NEXT: EntrySize: 0
+# CHECK-NEXT: SectionData (
+# CHECK-NEXT: 0000: 10000000 00000000 20
+# CHECK-NEXT: )
+# CHECK-NEXT: }
+
+## Case 2: truncated content.
+# CHECK: Name: .stack_sizes
+# CHECK: Size:
+# CHECK-SAME: 8
+# CHECK: SectionData (
+# CHECK-NEXT: 0000: 10000000 00000000
+
+## Case 3: empty content.
+# CHECK: Name: .stack_sizes
+# CHECK: Size:
+# CHECK-SAME: 0
+
+--- !ELF
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_EXEC
+ Machine: EM_X86_64
+Sections:
+## Valid.
+ - Name: '.stack_sizes [1]'
+ Type: SHT_PROGBITS
+ Content: "100000000000000020"
+## Truncated.
+ - Name: '.stack_sizes [2]'
+ Type: SHT_PROGBITS
+ Content: "1000000000000000"
+## Empty.
+ - Name: '.stack_sizes [3]'
+ Type: SHT_PROGBITS
+ Content: ""
+
+## Check we can describe .stack_sizes section using <address, size> pairs.
+
+# RUN: yaml2obj --docnum=2 %s -o %t2
+# RUN: llvm-readobj --sections --section-data %t2 | FileCheck %s --check-prefix=ENTRIES-LE64-BOTH
+# RUN: yaml2obj --docnum=3 %s -o %t3
+# RUN: llvm-readobj --sections --section-data %t3 | FileCheck %s --check-prefix=ENTRIES-BE64-BOTH
+# RUN: yaml2obj --docnum=4 %s -o %t4
+# RUN: llvm-readobj --sections --section-data %t4 | FileCheck %s --check-prefix=ENTRIES-LE32-BOTH
+# RUN: yaml2obj --docnum=5 %s -o %t5
+# RUN: llvm-readobj --sections --section-data %t5 | FileCheck %s --check-prefix=ENTRIES-BE32-BOTH
+
+# ENTRIES-LE64-BOTH: Name: .stack_sizes
+# ENTRIES-LE64-BOTH: SectionData (
+# ENTRIES-LE64-BOTH-NEXT: 0000: 10000000 00000000 20300000 00000000 |
+# ENTRIES-LE64-BOTH-NEXT: 0010: 0040 |
+
+# ENTRIES-BE64-BOTH: Name: .stack_sizes
+# ENTRIES-BE64-BOTH: SectionData (
+# ENTRIES-BE64-BOTH-NEXT: 0000: 00000000 00000010 20000000 00000000 |
+# ENTRIES-BE64-BOTH-NEXT: 0010: 3040
+
+# ENTRIES-LE32-BOTH: Name: .stack_sizes
+# ENTRIES-LE32-BOTH: SectionData (
+# ENTRIES-LE32-BOTH-NEXT: 0000: 10000000 20300000 0040 |
+
+# ENTRIES-BE32-BOTH: Name: .stack_sizes
+# ENTRIES-BE32-BOTH: SectionData (
+# ENTRIES-BE32-BOTH-NEXT: 0000: 00000010 20000000 3040 |
+
+--- !ELF
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_EXEC
+ Machine: EM_X86_64
+Sections:
+ - Name: .stack_sizes
+ Type: SHT_PROGBITS
+ Entries:
+ - Address: 0x10
+ Size: 0x20
+ - Address: 0x30
+ Size: 0x40
+
+--- !ELF
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2MSB
+ Type: ET_EXEC
+ Machine: EM_X86_64
+Sections:
+ - Name: .stack_sizes
+ Type: SHT_PROGBITS
+ Entries:
+ - Address: 0x10
+ Size: 0x20
+ - Address: 0x30
+ Size: 0x40
+
+--- !ELF
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_EXEC
+ Machine: EM_386
+Sections:
+ - Name: .stack_sizes
+ Type: SHT_PROGBITS
+ Entries:
+ - Address: 0x10
+ Size: 0x20
+ - Address: 0x30
+ Size: 0x40
+
+--- !ELF
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2MSB
+ Type: ET_EXEC
+ Machine: EM_386
+Sections:
+ - Name: .stack_sizes
+ Type: SHT_PROGBITS
+ Entries:
+ - Address: 0x10
+ Size: 0x20
+ - Address: 0x30
+ Size: 0x40
+
+## Check we can omit the "Address" tag. In this case the address will be zero.
+
+# RUN: yaml2obj --docnum=6 %s -o %t6
+# RUN: llvm-readobj --sections --section-data %t6 | FileCheck %s --check-prefix=ENTRIES-NOADDR
+
+# ENTRIES-NOADDR: Name: .stack_sizes
+# ENTRIES-NOADDR: SectionData (
+# ENTRIES-NOADDR-NEXT: 0000: 00000000 00000000 10000000 00000000 |
+# ENTRIES-NOADDR-NEXT: 0010: 0020 |
+
+--- !ELF
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_EXEC
+ Machine: EM_X86_64
+Sections:
+ - Name: .stack_sizes
+ Type: SHT_PROGBITS
+ Entries:
+ - Size: 0x10
+ - Size: 0x20
+
+## Check that "Size" tag is mandatory when we describe .stack_sizes using "Entries".
+
+# RUN: not yaml2obj --docnum=7 %s 2>&1 | FileCheck %s --check-prefix=ENTRIES-NOSIZE
+
+# ENTRIES-NOSIZE: error: missing required key 'Size'
+
+--- !ELF
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_EXEC
+ Machine: EM_X86_64
+Sections:
+ - Name: .stack_sizes
+ Type: SHT_PROGBITS
+ Entries:
+ - Address: 0x10
+
+## Check we can't use both "Content" and "Entries" tags at the same time.
+
+# RUN: not yaml2obj --docnum=8 %s 2>&1 | FileCheck %s --check-prefix=ENTRIES-AND-CONTENT
+
+# ENTRIES-AND-CONTENT: error: .stack_sizes: Content and Entries cannot be used together
+
+--- !ELF
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_EXEC
+ Machine: EM_X86_64
+Sections:
+ - Name: .stack_sizes
+ Type: SHT_PROGBITS
+ Content: "00"
+ Entries:
+ - Address: 0x10
+ Size: 0x20
+
+## Check we must specify either "Content" or "Entries" tag when describing .stack_sizes.
+
+# RUN: not yaml2obj --docnum=9 %s 2>&1 | FileCheck %s --check-prefix=NO-TAGS
+
+# NO-TAGS: error: .stack_sizes: either Content or Entries tag must be specified
+
+--- !ELF
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_EXEC
+ Machine: EM_X86_64
+Sections:
+ - Name: .stack_sizes
+ Type: SHT_PROGBITS
OpenPOWER on IntegriCloud