summaryrefslogtreecommitdiffstats
path: root/llvm/test/tools/yaml2obj/ELF/hash-section.yaml
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/test/tools/yaml2obj/ELF/hash-section.yaml')
-rw-r--r--llvm/test/tools/yaml2obj/ELF/hash-section.yaml278
1 files changed, 278 insertions, 0 deletions
diff --git a/llvm/test/tools/yaml2obj/ELF/hash-section.yaml b/llvm/test/tools/yaml2obj/ELF/hash-section.yaml
new file mode 100644
index 00000000000..4aad9c11fd5
--- /dev/null
+++ b/llvm/test/tools/yaml2obj/ELF/hash-section.yaml
@@ -0,0 +1,278 @@
+## Check how yaml2obj produces SHT_HASH sections.
+
+## Check we can describe a SHT_HASH section using the "Content" tag.
+
+# RUN: yaml2obj --docnum=1 %s -o %t1
+# RUN: llvm-readobj --sections --section-data %t1 | FileCheck %s --check-prefix=CONTENT
+
+# CONTENT: Name: .hash
+# CONTENT-NEXT: Type: SHT_HASH
+# CONTENT-NEXT: Flags [
+# CONTENT-NEXT: ]
+# CONTENT-NEXT: Address: 0x0
+# CONTENT-NEXT: Offset: 0x44
+# CONTENT-NEXT: Size: 20
+# CONTENT-NEXT: Link: 1
+# CONTENT-NEXT: Info: 0
+# CONTENT-NEXT: AddressAlignment: 0
+# CONTENT-NEXT: EntrySize: 0
+# CONTENT-NEXT: SectionData (
+# CONTENT-NEXT: 0000: 01000000 02000000 03000000 04000000
+# CONTENT-NEXT: 0010: 05000000
+# CONTENT-NEXT: )
+
+--- !ELF
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_DYN
+ Machine: EM_386
+Sections:
+## SHT_HASH is linked to dynamic symbol table by default.
+ - Name: .dynsym
+ Type: SHT_DYNSYM
+ - Name: .hash
+ Type: SHT_HASH
+ Content: '0100000002000000030000000400000005000000'
+
+## Check we can describe a SHT_HASH section using "Bucket" and "Chain" tags.
+
+# RUN: yaml2obj --docnum=2 %s -o %t2
+# RUN: llvm-readobj --sections --section-data %t2 | FileCheck %s --check-prefix=BUCKET-CHAIN
+
+# BUCKET-CHAIN: Name: .hash
+# BUCKET-CHAIN: Size:
+# BUCKET-CHAIN-SAME: 28
+# BUCKET-CHAIN: Link:
+# BUCKET-CHAIN-SAME: 0
+# BUCKET-CHAIN: SectionData (
+# BUCKET-CHAIN-NEXT: 0000: 02000000 03000000 01000000 02000000 |
+# BUCKET-CHAIN-NEXT: 0010: 03000000 04000000 05000000 |
+# BUCKET-CHAIN-NEXT: )
+
+--- !ELF
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_DYN
+ Machine: EM_386
+Sections:
+ - Name: .hash
+ Type: SHT_HASH
+ Bucket: [ 1, 2 ]
+ Chain: [ 3, 4, 5 ]
+
+## Check we can't use "Content" and "Bucket" tags together.
+
+# RUN: not yaml2obj --docnum=3 %s 2>&1 | FileCheck %s --check-prefix=CONTENT-BUCKET
+
+# CONTENT-BUCKET: "Bucket" cannot be used with "Content" or "Size"
+
+--- !ELF
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_DYN
+ Machine: EM_386
+Sections:
+ - Name: .hash
+ Type: SHT_HASH
+ Bucket: [ 1 ]
+ Content: '00'
+
+## Check we can't use "Content" and "Chain" tags together.
+
+# RUN: not yaml2obj --docnum=4 %s 2>&1 | FileCheck %s --check-prefix=CONTENT-CHAIN
+
+# CONTENT-CHAIN: "Chain" cannot be used with "Content" or "Size"
+
+--- !ELF
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_DYN
+ Machine: EM_386
+Sections:
+ - Name: .hash
+ Type: SHT_HASH
+ Chain: [ 1 ]
+ Content: '00'
+
+## Check we can't use "Bucket" without "Chain".
+
+# RUN: not yaml2obj --docnum=5 %s 2>&1 | FileCheck %s --check-prefix=NO-BUCKET-OR-CHAIN
+
+# NO-BUCKET-OR-CHAIN: error: "Bucket" and "Chain" must be used together
+
+--- !ELF
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_DYN
+ Machine: EM_386
+Sections:
+ - Name: .hash
+ Type: SHT_HASH
+ Bucket: [ 1 ]
+
+## Check we can't use "Chain" without "Bucket".
+
+# RUN: not yaml2obj --docnum=6 %s 2>&1 | FileCheck %s --check-prefix=NO-BUCKET-OR-CHAIN
+
+--- !ELF
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_DYN
+ Machine: EM_386
+Sections:
+ - Name: .hash
+ Type: SHT_HASH
+ Chain: [ 1 ]
+
+## Check we report an error if neither "Bucket", "Chain" nor "Content" were set.
+
+# RUN: not yaml2obj --docnum=7 %s 2>&1 | FileCheck %s --check-prefix=NO-TAGS
+
+# NO-TAGS: error: one of "Content", "Size", "Bucket" or "Chain" must be specified
+
+--- !ELF
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_DYN
+ Machine: EM_386
+Sections:
+ - Name: .hash
+ Type: SHT_HASH
+
+## Check we can set any sh_link value with use of the "Link" tag.
+
+# RUN: yaml2obj --docnum=8 %s -o %t8
+# RUN: llvm-readobj --sections %t8 | FileCheck %s --check-prefix=LINK
+
+# LINK: Name: .hash1
+# LINK: Link:
+# LINK-SAME: 123
+
+# LINK: Name: .hash2
+# LINK: Link:
+# LINK-SAME: 1
+
+--- !ELF
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_DYN
+ Machine: EM_386
+Sections:
+ - Name: .hash1
+ Type: SHT_HASH
+ Content: ""
+ Link: 123
+ - Name: .hash2
+ Type: SHT_HASH
+ Content: ""
+ Link: .hash1
+## SHT_HASH is linked to dynamic symbol table by default if it exists.
+ - Name: .dynsym
+ Type: SHT_DYNSYM
+
+## Check we can use only "Size" to create a SHT_HASH section.
+
+# RUN: yaml2obj --docnum=9 %s -o %t9
+# RUN: llvm-readobj --sections --section-data %t9 | FileCheck %s --check-prefix=SIZE
+
+# SIZE: Name: .hash
+# SIZE: Size:
+# SIZE-SAME: 17
+# SIZE: SectionData (
+# SIZE-NEXT: 0000: 00000000 00000000 00000000 00000000 |
+# SIZE-NEXT: 0010: 00 |
+# SIZE-NEXT: )
+
+--- !ELF
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_EXEC
+ Machine: EM_X86_64
+Sections:
+ - Name: .hash
+ Type: SHT_HASH
+ Size: 0x11
+
+## Check we can use "Size" and "Content" together to create a SHT_HASH section.
+
+# RUN: yaml2obj --docnum=10 %s -o %t10
+# RUN: llvm-readobj --sections --section-data %t10 | FileCheck %s --check-prefix=SIZE-CONTENT
+
+# SIZE-CONTENT: Name: .hash
+# SIZE-CONTENT: Size:
+# SIZE-CONTENT-SAME: 5
+# SIZE-CONTENT: SectionData (
+# SIZE-CONTENT-NEXT: 0000: 11223300 00 |
+# SIZE-CONTENT-NEXT: )
+
+--- !ELF
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_EXEC
+ Machine: EM_X86_64
+Sections:
+ - Name: .hash
+ Type: SHT_HASH
+ Size: 0x5
+ Content: "112233"
+
+## Check that when "Size" and "Content" are used together, the size
+## must be greater than or equal to the content size.
+
+# RUN: not yaml2obj --docnum=11 %s 2>&1 | FileCheck %s --check-prefix=SIZE-CONTENT-ERR
+
+# SIZE-CONTENT-ERR: error: "Size" must be greater than or equal to the content size
+
+--- !ELF
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_EXEC
+ Machine: EM_X86_64
+Sections:
+ - Name: .hash
+ Type: SHT_HASH
+ Size: 0x1
+ Content: "1122"
+
+## Check we can't use "Size" and "Bucket" tags together.
+
+# RUN: not yaml2obj --docnum=12 %s 2>&1 | FileCheck %s --check-prefix=CONTENT-BUCKET
+
+--- !ELF
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_EXEC
+ Machine: EM_X86_64
+Sections:
+ - Name: .hash
+ Type: SHT_HASH
+ Size: 0x1
+ Bucket: [ 1 ]
+
+## Check we can't use "Size" and "Chain" tags together.
+
+# RUN: not yaml2obj --docnum=13 %s 2>&1 | FileCheck %s --check-prefix=CONTENT-CHAIN
+
+--- !ELF
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_EXEC
+ Machine: EM_X86_64
+Sections:
+ - Name: .hash
+ Type: SHT_HASH
+ Size: 0x1
+ Chain: [ 1 ]
OpenPOWER on IntegriCloud