| ## 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 |
| Machine: EM_X86_64 |
| Sections: |
| - Name: .llvm_addrsig |
| Type: SHT_LLVM_ADDRSIG |
| Symbols: |
| - Name: foo |
| - Name: bar |
| - Index: 1 |
| - Index: 2 |
| Symbols: |
| - Name: foo |
| Type: STT_FUNC |
| Binding: STB_GLOBAL |
| - Name: bar |
| Type: STT_FUNC |
| Binding: STB_GLOBAL |
| |
| ## We can't specify both "Index" and "Name" when defining a symbol. |
| |
| # RUN: not yaml2obj --docnum=2 %s 2>&1 | FileCheck %s --check-prefix=INDEX-NAME |
| |
| # INDEX-NAME: error: "Index" and "Name" cannot be used together when defining a symbol |
| |
| --- !ELF |
| FileHeader: |
| Class: ELFCLASS64 |
| Data: ELFDATA2LSB |
| Type: ET_DYN |
| Machine: EM_X86_64 |
| Sections: |
| - Name: .llvm_addrsig |
| Type: SHT_LLVM_ADDRSIG |
| Symbols: |
| - Name: foo |
| Index: 1 |
| Symbols: |
| - Name: foo |
| 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=3 %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 |
| Machine: EM_X86_64 |
| Sections: |
| - Name: .llvm_addrsig |
| Type: SHT_LLVM_ADDRSIG |
| Symbols: |
| - Name: foo |
| - Name: bar |
| |
| ## Check we can specify any arbitrary symbol indices. |
| |
| # RUN: yaml2obj --docnum=4 %s -o %t4 |
| # RUN: llvm-readobj --sections --section-data %t4 | 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 |
| Machine: EM_X86_64 |
| Sections: |
| - Name: .llvm_addrsig |
| Type: SHT_LLVM_ADDRSIG |
| Symbols: |
| - Index: 0 |
| - Index: 255 |
| - Index: 0x11223344 |
| ## 0xFFFFFFFF is a maximum allowed index value. |
| - Index: 0xFFFFFFFF |
| |
| ## Check that the maximum symbol index size is 32 bits. |
| |
| # RUN: not yaml2obj --docnum=5 %s 2>&1 | FileCheck %s --check-prefix=SYMBOL-INDEX-OVERFLOW |
| |
| # SYMBOL-INDEX-OVERFLOW: error: out of range hex32 number |
| |
| --- !ELF |
| FileHeader: |
| Class: ELFCLASS64 |
| Data: ELFDATA2LSB |
| Type: ET_DYN |
| Machine: EM_X86_64 |
| Sections: |
| - Name: .llvm_addrsig |
| Type: SHT_LLVM_ADDRSIG |
| Symbols: |
| - Index: 0x1122334455 |
| |
| ## Check we can use the "Content" tag to specify any data for SHT_LLVM_ADDRSIG sections. |
| |
| # RUN: yaml2obj --docnum=6 %s -o %t6 |
| # RUN: llvm-readobj --sections --section-data %t6 | 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 |
| Machine: EM_X86_64 |
| Sections: |
| - Name: .llvm_addrsig |
| Type: SHT_LLVM_ADDRSIG |
| Content: "1122334455" |
| |
| ## Either "Content" or "Symbols" must be specifed for SHT_LLVM_ADDRSIG sections. |
| |
| # RUN: not yaml2obj --docnum=7 %s 2>&1 | FileCheck %s --check-prefix=NO-TAGS |
| |
| # NO-TAGS: error: one of "Content", "Size" or "Symbols" must be specified |
| |
| --- !ELF |
| FileHeader: |
| Class: ELFCLASS64 |
| Data: ELFDATA2LSB |
| Type: ET_DYN |
| Machine: EM_X86_64 |
| 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=8 %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 |
| Machine: EM_X86_64 |
| 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=9 %s -o %t9 |
| # RUN: llvm-readobj --sections %t9 | FileCheck %s --check-prefix=LINK |
| |
| # LINK: Name: .llvm_addrsig |
| # LINK: Link: |
| # LINK-SAME: 123{{$}} |
| |
| --- !ELF |
| FileHeader: |
| Class: ELFCLASS64 |
| Data: ELFDATA2LSB |
| Type: ET_DYN |
| Machine: EM_X86_64 |
| 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=10 %s -o %t10 |
| # RUN: llvm-readobj --sections --section-data %t10 | 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 |
| Machine: EM_X86_64 |
| 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=11 %s -o %t11 |
| # RUN: llvm-readobj --sections --section-data %t11 | 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 |
| Machine: EM_X86_64 |
| 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=12 %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: .llvm_addrsig |
| Type: SHT_LLVM_ADDRSIG |
| Size: 0x1 |
| Content: "1122" |
| |
| ## Check we can't use "Size" and "Symbols" tags together. |
| |
| # RUN: not yaml2obj --docnum=13 %s 2>&1 | FileCheck %s --check-prefix=CONTENT-SYMBOLS |
| |
| --- !ELF |
| FileHeader: |
| Class: ELFCLASS64 |
| Data: ELFDATA2LSB |
| Type: ET_EXEC |
| Machine: EM_X86_64 |
| Sections: |
| - Name: .llvm_addrsig |
| Type: SHT_LLVM_ADDRSIG |
| Size: 0x1 |
| Symbols: [ ] |