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