## 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: [ ]