| ## 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 (0x6FFF4C08) |
| # CHECK-NEXT: Flags [ (0x0) |
| # CHECK-NEXT: ] |
| # CHECK-NEXT: Address: 0x0 |
| # CHECK-NEXT: Offset: 0x40 |
| # CHECK-NEXT: Size: 12 |
| # 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 |
| # 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: 20000000 00000000 01010203 |
| # 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: 00000000 00000000 01010203 |
| # CHECK-NEXT: ) |
| |
| # Case 6: Override the NumBlocks field. |
| # CHECK: Name: .llvm_bb_addr_map (1) |
| # CHECK: SectionData ( |
| # CHECK-NEXT: 0000: 20000000 00000000 02010203 |
| # 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: "000000000000000001010203" |
| |
| ## 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: |
| - Address: 0x0000000000000020 |
| BBEntries: |
| - AddressOffset: 0x00000001 |
| Size: 0x00000002 |
| Metadata: 0x00000003 |
| |
| ## 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: |
| - BBEntries: |
| - 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: |
| - Address: 0x0000000000000020 |
| NumBlocks: 2 |
| BBEntries: |
| - AddressOffset: 0x00000001 |
| Size: 0x00000002 |
| Metadata: 0x00000003 |
| |
| ## 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>]] |