| ## Check how yaml2obj produces .llvm_bb_addr_map sections. |
| |
| # RUN: yaml2obj --docnum=1 %s -o %t1 |
| # RUN: llvm-readobj --sections --section-data %t1 | FileCheck %s |
| |
| ## Case 1: Specify content. |
| # CHECK: Section { |
| # CHECK: Index: 1 |
| # CHECK-NEXT: Name: .llvm_bb_addr_map (1) |
| # CHECK-NEXT: Type: SHT_LLVM_BB_ADDR_MAP (0x6FFF4C0A) |
| # CHECK-NEXT: Flags [ (0x0) |
| # CHECK-NEXT: ] |
| # CHECK-NEXT: Address: 0x0 |
| # CHECK-NEXT: Offset: 0x40 |
| # CHECK-NEXT: Size: 13 |
| # CHECK-NEXT: Link: 0 |
| # CHECK-NEXT: Info: 0 |
| # CHECK-NEXT: AddressAlignment: 0 |
| # CHECK-NEXT: EntrySize: 0 |
| # CHECK-NEXT: SectionData ( |
| # CHECK-NEXT: 0000: 00000000 00000000 01010203 04 |
| # CHECK-NEXT: ) |
| # CHECK-NEXT: } |
| |
| ## Case 2: Empty. |
| # CHECK: Name: .llvm_bb_addr_map (1) |
| # CHECK: Size: |
| # CHECK-SAME: {{^ 0$}} |
| |
| ## Case 3: Specify Size only. |
| # CHECK: Name: .llvm_bb_addr_map (1) |
| # CHECK: SectionData ( |
| # CHECK-NEXT: 0000: 00000000 00000000 |
| # CHECK-NEXT: ) |
| |
| # Case 4: Specify Entries. |
| # CHECK: Name: .llvm_bb_addr_map (1) |
| # CHECK: SectionData ( |
| # CHECK-NEXT: 0000: 03002000 00000000 0000010B 01020102 |
| # CHECK-NEXT: 0010: 0203 |
| # CHECK-NEXT: ) |
| |
| # Case 5: Specify Entries and omit the Address field. |
| # CHECK: Name: .llvm_bb_addr_map (1) |
| # CHECK: Address: |
| # CHECK-SAME: {{^ 0x0$}} |
| # CHECK: SectionData ( |
| # CHECK-NEXT: 0000: 03000000 00000000 0000010C 010203 |
| # CHECK-NEXT: ) |
| |
| # Case 6: Override the NumBlocks field. |
| # CHECK: Name: .llvm_bb_addr_map (1) |
| # CHECK: SectionData ( |
| # CHECK-NEXT: 0000: 03002000 00000000 0000020D 010203 |
| # CHECK-NEXT: ) |
| |
| # Case 7: Specify empty BBRanges. |
| # CHECK: Name: .llvm_bb_addr_map (1) |
| # CHECK: SectionData ( |
| # CHECK-NEXT: 0000: 030000 |
| # CHECK-NEXT: ) |
| |
| # Case 8: Specify empty BBRanges with multi-bb-range. |
| # CHECK: Name: .llvm_bb_addr_map (1) |
| # CHECK: SectionData ( |
| # CHECK-NEXT: 0000: 030800 |
| # CHECK-NEXT: ) |
| |
| # Case 9: Specify empty CallsiteEndOffsets. |
| # CHECK: Name: .llvm_bb_addr_map (1) |
| # CHECK: SectionData ( |
| # CHECK-NEXT: 0000: 03202000 00000000 0000010E 01000203 |
| # CHECK-NEXT: ) |
| |
| # Case 10: Specify basic block hash. |
| # CHECK: Name: .llvm_bb_addr_map (1) |
| # CHECK: SectionData ( |
| # CHECK-NEXT: 0000: 04602000 00000000 0000010E 01000203 |
| # CHECK-NEXT: 0010: 23010000 00000000 |
| # CHECK-NEXT: ) |
| |
| |
| --- !ELF |
| FileHeader: |
| Class: ELFCLASS64 |
| Data: ELFDATA2LSB |
| Type: ET_EXEC |
| Sections: |
| |
| ## Test the following cases: |
| |
| ## 1) We can produce an .llvm_bb_addr_map section from a description with section |
| ## content. |
| ## Specify Content. |
| - Name: '.llvm_bb_addr_map (1)' |
| Type: SHT_LLVM_BB_ADDR_MAP |
| Content: "00000000000000000101020304" |
| |
| ## 2) We can produce an empty .llvm_bb_addr_map section from a description |
| ## with empty section content. |
| - Name: '.llvm_bb_addr_map (2)' |
| Type: SHT_LLVM_BB_ADDR_MAP |
| |
| ## 3) We can produce a zero .llvm_bb_addr_map section of a specific size when |
| ## we specify the size only. |
| - Name: '.llvm_bb_addr_map (3)' |
| Type: SHT_LLVM_BB_ADDR_MAP |
| Size: 8 |
| |
| ## 4) We can produce an .llvm_bb_addr_map section from a description with |
| ## Entries. |
| - Name: '.llvm_bb_addr_map (4)' |
| Type: SHT_LLVM_BB_ADDR_MAP |
| Entries: |
| - Version: 3 |
| BBRanges: |
| - BaseAddress: 0x0000000000000020 |
| BBEntries: |
| - ID: 11 |
| AddressOffset: 0x00000001 |
| Size: 0x00000002 |
| Metadata: 0x00000003 |
| CallsiteEndOffsets: [0x1, 0x2] |
| |
| ## 5) When specifying the description with Entries, the 'Address' field will be |
| ## zero when omitted. |
| - Name: '.llvm_bb_addr_map (5)' |
| Type: SHT_LLVM_BB_ADDR_MAP |
| Entries: |
| - Version: 3 |
| BBRanges: |
| - BBEntries: |
| - ID: 12 |
| AddressOffset: 0x00000001 |
| Size: 0x00000002 |
| Metadata: 0x00000003 |
| |
| ## 6) We can override the NumBlocks field with a value different from the |
| ## actual number of BB Entries. |
| - Name: '.llvm_bb_addr_map (6)' |
| Type: SHT_LLVM_BB_ADDR_MAP |
| Entries: |
| - Version: 3 |
| BBRanges: |
| - BaseAddress: 0x0000000000000020 |
| NumBlocks: 2 |
| BBEntries: |
| - ID: 13 |
| AddressOffset: 0x00000001 |
| Size: 0x00000002 |
| Metadata: 0x00000003 |
| |
| ## 7) We can produce a SHT_LLVM_BB_ADDR_MAP section from a description |
| ## with one entry with empty BBRanges. |
| - Name: '.llvm_bb_addr_map (7)' |
| Type: SHT_LLVM_BB_ADDR_MAP |
| Entries: |
| - Version: 3 |
| BBRanges: [] |
| |
| ## 8) We can produce a SHT_LLVM_BB_ADDR_MAP section from a multi-bb-range |
| ## description with one entry with empty BBRanges. |
| - Name: '.llvm_bb_addr_map (8)' |
| Type: SHT_LLVM_BB_ADDR_MAP |
| Entries: |
| - Version: 3 |
| Feature: 0x8 |
| BBRanges: [] |
| |
| ## 9) We can produce a SHT_LLVM_BB_ADDR_MAP section from a description |
| ## with empty callsite offsets. |
| - Name: '.llvm_bb_addr_map (9)' |
| Type: SHT_LLVM_BB_ADDR_MAP |
| Entries: |
| - Version: 3 |
| Feature: 0x20 |
| BBRanges: |
| - BaseAddress: 0x0000000000000020 |
| BBEntries: |
| - ID: 14 |
| AddressOffset: 0x00000001 |
| Size: 0x00000002 |
| Metadata: 0x00000003 |
| CallsiteEndOffsets: [] |
| |
| ## 10) We can produce a SHT_LLVM_BB_ADDR_MAP section with basic block hash. |
| - Name: '.llvm_bb_addr_map (10)' |
| Type: SHT_LLVM_BB_ADDR_MAP |
| Entries: |
| - Version: 4 |
| Feature: 0x60 |
| BBRanges: |
| - BaseAddress: 0x0000000000000020 |
| BBEntries: |
| - ID: 14 |
| AddressOffset: 0x00000001 |
| Size: 0x00000002 |
| Metadata: 0x00000003 |
| CallsiteEndOffsets: [] |
| Hash: 0x123 |
| |
| ## Check we can't use Entries at the same time as either Content or Size. |
| # RUN: not yaml2obj --docnum=2 -DCONTENT="00" %s 2>&1 | FileCheck %s --check-prefix=INVALID |
| # RUN: not yaml2obj --docnum=2 -DSIZE="0" %s 2>&1 | FileCheck %s --check-prefix=INVALID |
| |
| # INVALID: error: "Entries" cannot be used with "Content" or "Size" |
| |
| --- !ELF |
| FileHeader: |
| Class: ELFCLASS64 |
| Data: ELFDATA2LSB |
| Type: ET_EXEC |
| Sections: |
| ## Specify Content and Size |
| - Name: '.llvm_bb_addr_map' |
| Type: SHT_LLVM_BB_ADDR_MAP |
| Entries: [] |
| Content: [[CONTENT=<none>]] |
| Size: [[SIZE=<none>]] |
| |
| ## Check that yaml2obj generates a warning when we use unsupported versions. |
| # RUN: yaml2obj --docnum=3 %s 2>&1 | FileCheck %s --check-prefix=INVALID-VERSION |
| # INVALID-VERSION: warning: unsupported SHT_LLVM_BB_ADDR_MAP version: 6; encoding using the most recent version |
| |
| --- !ELF |
| FileHeader: |
| Class: ELFCLASS64 |
| Data: ELFDATA2LSB |
| Type: ET_EXEC |
| Sections: |
| - Name: '.llvm_bb_addr_map' |
| Type: SHT_LLVM_BB_ADDR_MAP |
| Entries: |
| ## Specify unsupported version |
| - Version: 6 |