264 lines
6.7 KiB
YAML
264 lines
6.7 KiB
YAML
## Check how yaml2obj produces SHT_LLVM_ADDRSIG sections.
|
|
|
|
## Check we can describe SHT_LLVM_ADDRSIG using the "Symbols" tag. We can define
|
|
## symbols either using names or indexes.
|
|
|
|
# RUN: yaml2obj --docnum=1 %s -o %t1
|
|
# RUN: llvm-readobj --sections --section-data %t1 | FileCheck %s --check-prefix=SYMBOLS
|
|
|
|
# SYMBOLS: Section {
|
|
# SYMBOLS: Index: 1
|
|
# SYMBOLS-NEXT: Name: .llvm_addrsig
|
|
# SYMBOLS-NEXT: Type: SHT_LLVM_ADDRSIG
|
|
# SYMBOLS-NEXT: Flags [
|
|
# SYMBOLS-NEXT: ]
|
|
# SYMBOLS-NEXT: Address: 0x0
|
|
# SYMBOLS-NEXT: Offset: 0x40
|
|
# SYMBOLS-NEXT: Size: 4
|
|
# SYMBOLS-NEXT: Link: 2
|
|
# SYMBOLS-NEXT: Info: 0
|
|
# SYMBOLS-NEXT: AddressAlignment: 0
|
|
# SYMBOLS-NEXT: EntrySize: 0
|
|
# SYMBOLS-NEXT: SectionData (
|
|
# SYMBOLS-NEXT: 0000: 01020102
|
|
# SYMBOLS-NEXT: )
|
|
# SYMBOLS-NEXT: }
|
|
|
|
--- !ELF
|
|
FileHeader:
|
|
Class: ELFCLASS64
|
|
Data: ELFDATA2LSB
|
|
Type: ET_DYN
|
|
Sections:
|
|
- Name: .llvm_addrsig
|
|
Type: SHT_LLVM_ADDRSIG
|
|
Symbols: [ foo, bar, 1, 2 ]
|
|
Symbols:
|
|
- Name: foo
|
|
Type: STT_FUNC
|
|
Binding: STB_GLOBAL
|
|
- Name: bar
|
|
Type: STT_FUNC
|
|
Binding: STB_GLOBAL
|
|
|
|
## Check we report an error if an unknown symbol is referenced in the
|
|
## SHT_LLVM_ADDRSIG section description.
|
|
|
|
# RUN: not yaml2obj --docnum=2 %s 2>&1 | FileCheck %s --check-prefix=SYMBOL-UNKNOWN
|
|
|
|
# SYMBOL-UNKNOWN: error: unknown symbol referenced: 'foo' by YAML section '.llvm_addrsig'
|
|
# SYMBOL-UNKNOWN: error: unknown symbol referenced: 'bar' by YAML section '.llvm_addrsig'
|
|
|
|
--- !ELF
|
|
FileHeader:
|
|
Class: ELFCLASS64
|
|
Data: ELFDATA2LSB
|
|
Type: ET_DYN
|
|
Sections:
|
|
- Name: .llvm_addrsig
|
|
Type: SHT_LLVM_ADDRSIG
|
|
Symbols: [ foo, bar ]
|
|
|
|
## Check we can specify any arbitrary symbol indices.
|
|
|
|
# RUN: yaml2obj --docnum=3 %s -o %t3
|
|
# RUN: llvm-readobj --sections --section-data %t3 | FileCheck %s --check-prefix=SYMBOL-INDEX
|
|
|
|
# SYMBOL-INDEX: Type: SHT_LLVM_ADDRSIG
|
|
# SYMBOL-INDEX: SectionData (
|
|
# SYMBOL-INDEX-NEXT: 0000: 00FF01C4 E6888901 FFFFFFFF 0F
|
|
# SYMBOL-INDEX-NEXT: )
|
|
|
|
--- !ELF
|
|
FileHeader:
|
|
Class: ELFCLASS64
|
|
Data: ELFDATA2LSB
|
|
Type: ET_DYN
|
|
Sections:
|
|
- Name: .llvm_addrsig
|
|
Type: SHT_LLVM_ADDRSIG
|
|
## 0xFFFFFFFF is a maximum allowed index value.
|
|
Symbols: [ 0, 255, 0x11223344, 0xFFFFFFFF ]
|
|
|
|
## Check that the maximum symbol index size is 32 bits.
|
|
|
|
# RUN: not yaml2obj --docnum=4 %s 2>&1 | FileCheck %s --check-prefix=SYMBOL-INDEX-OVERFLOW
|
|
|
|
# SYMBOL-INDEX-OVERFLOW: error: unknown symbol referenced: '0x1122334455' by YAML section '.llvm_addrsig'
|
|
|
|
--- !ELF
|
|
FileHeader:
|
|
Class: ELFCLASS64
|
|
Data: ELFDATA2LSB
|
|
Type: ET_DYN
|
|
Sections:
|
|
- Name: .llvm_addrsig
|
|
Type: SHT_LLVM_ADDRSIG
|
|
Symbols: [ 0x1122334455 ]
|
|
|
|
## Check we can use the "Content" tag to specify any data for SHT_LLVM_ADDRSIG sections.
|
|
|
|
# RUN: yaml2obj --docnum=5 %s -o %t5
|
|
# RUN: llvm-readobj --sections --section-data %t5 | FileCheck %s --check-prefix=CONTENT
|
|
|
|
# CONTENT: Type: SHT_LLVM_ADDRSIG
|
|
# CONTENT: Size:
|
|
# CONTENT-SAME: 5
|
|
# CONTENT: SectionData (
|
|
# CONTENT-NEXT: 0000: 11223344 55
|
|
# CONTENT-NEXT: )
|
|
|
|
--- !ELF
|
|
FileHeader:
|
|
Class: ELFCLASS64
|
|
Data: ELFDATA2LSB
|
|
Type: ET_DYN
|
|
Sections:
|
|
- Name: .llvm_addrsig
|
|
Type: SHT_LLVM_ADDRSIG
|
|
Content: "1122334455"
|
|
|
|
## Check we emit an empty section if neither "Content", "Size" nor "Symbols" were set.
|
|
|
|
# RUN: yaml2obj --docnum=6 %s -o %t6
|
|
# RUN: llvm-readelf --sections %t6 | FileCheck %s --check-prefix=NO-TAGS
|
|
|
|
# NO-TAGS: [Nr] Name Type Address Off Size
|
|
# NO-TAGS: [ 1] .llvm_addrsig LLVM_ADDRSIG 0000000000000000 000040 000000
|
|
|
|
--- !ELF
|
|
FileHeader:
|
|
Class: ELFCLASS64
|
|
Data: ELFDATA2LSB
|
|
Type: ET_DYN
|
|
Sections:
|
|
- Name: .llvm_addrsig
|
|
Type: SHT_LLVM_ADDRSIG
|
|
|
|
## "Content" and "Symbols" cannot be used together to describe the SHT_LLVM_ADDRSIG section.
|
|
|
|
# RUN: not yaml2obj --docnum=7 %s 2>&1 | FileCheck %s --check-prefix=CONTENT-SYMBOLS
|
|
|
|
# CONTENT-SYMBOLS: "Symbols" cannot be used with "Content" or "Size"
|
|
|
|
--- !ELF
|
|
FileHeader:
|
|
Class: ELFCLASS64
|
|
Data: ELFDATA2LSB
|
|
Type: ET_DYN
|
|
Sections:
|
|
- Name: .llvm_addrsig
|
|
Type: SHT_LLVM_ADDRSIG
|
|
Content: ""
|
|
Symbols:
|
|
|
|
## Check we can set an arbitrary sh_link value for SHT_LLVM_ADDRSIG sections.
|
|
|
|
# RUN: yaml2obj --docnum=8 %s -o %t8
|
|
# RUN: llvm-readobj --sections %t8 | FileCheck %s --check-prefix=LINK
|
|
|
|
# LINK: Name: .llvm_addrsig
|
|
# LINK: Link:
|
|
# LINK-SAME: 123{{$}}
|
|
|
|
--- !ELF
|
|
FileHeader:
|
|
Class: ELFCLASS64
|
|
Data: ELFDATA2LSB
|
|
Type: ET_DYN
|
|
Sections:
|
|
- Name: .llvm_addrsig
|
|
Type: SHT_LLVM_ADDRSIG
|
|
Link: 123
|
|
Content: ""
|
|
|
|
## Check we can use only "Size" to create a SHT_LLVM_ADDRSIG section.
|
|
|
|
# RUN: yaml2obj --docnum=9 %s -o %t9
|
|
# RUN: llvm-readobj --sections --section-data %t9 | FileCheck %s --check-prefix=SIZE
|
|
|
|
# SIZE: Name: .llvm_addrsig
|
|
# 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
|
|
Sections:
|
|
- Name: .llvm_addrsig
|
|
Type: SHT_LLVM_ADDRSIG
|
|
Size: 0x11
|
|
|
|
## Check we can use "Size" and "Content" together to create a SHT_LLVM_ADDRSIG section.
|
|
|
|
# RUN: yaml2obj --docnum=10 %s -o %t10
|
|
# RUN: llvm-readobj --sections --section-data %t10 | FileCheck %s --check-prefix=SIZE-CONTENT
|
|
|
|
# SIZE-CONTENT: Name: .llvm_addrsig_sizegr
|
|
# SIZE-CONTENT: Size:
|
|
# SIZE-CONTENT-SAME: 5
|
|
# SIZE-CONTENT: SectionData (
|
|
# SIZE-CONTENT-NEXT: 0000: 11223300 00 |
|
|
# SIZE-CONTENT-NEXT: )
|
|
|
|
# SIZE-CONTENT: Name: .llvm_addrsig_sizeeq
|
|
# SIZE-CONTENT: Size:
|
|
# SIZE-CONTENT-SAME: 3
|
|
# SIZE-CONTENT: SectionData (
|
|
# SIZE-CONTENT-NEXT: 0000: 112233 |
|
|
# SIZE-CONTENT-NEXT: )
|
|
|
|
--- !ELF
|
|
FileHeader:
|
|
Class: ELFCLASS64
|
|
Data: ELFDATA2LSB
|
|
Type: ET_EXEC
|
|
Sections:
|
|
- Name: .llvm_addrsig_sizegr
|
|
Type: SHT_LLVM_ADDRSIG
|
|
Size: 0x5
|
|
Content: "112233"
|
|
- Name: .llvm_addrsig_sizeeq
|
|
Type: SHT_LLVM_ADDRSIG
|
|
Size: 0x3
|
|
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: Section size must be greater than or equal to the content size
|
|
|
|
--- !ELF
|
|
FileHeader:
|
|
Class: ELFCLASS64
|
|
Data: ELFDATA2LSB
|
|
Type: ET_EXEC
|
|
Sections:
|
|
- Name: .llvm_addrsig
|
|
Type: SHT_LLVM_ADDRSIG
|
|
Size: 0x1
|
|
Content: "1122"
|
|
|
|
## Check we can't use "Size" and "Symbols" tags together.
|
|
|
|
# RUN: not yaml2obj --docnum=12 %s 2>&1 | FileCheck %s --check-prefix=CONTENT-SYMBOLS
|
|
|
|
--- !ELF
|
|
FileHeader:
|
|
Class: ELFCLASS64
|
|
Data: ELFDATA2LSB
|
|
Type: ET_EXEC
|
|
Sections:
|
|
- Name: .llvm_addrsig
|
|
Type: SHT_LLVM_ADDRSIG
|
|
Size: 0x1
|
|
Symbols: [ ]
|