diff options
Diffstat (limited to 'llvm/test/tools')
| -rw-r--r-- | llvm/test/tools/llvm-readobj/stack-sizes.test | 7 | ||||
| -rw-r--r-- | llvm/test/tools/obj2yaml/elf-stack-sizes.yaml | 88 | ||||
| -rw-r--r-- | llvm/test/tools/yaml2obj/elf-stack-sizes.yaml | 229 |
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 |

