[llvm] [yaml2obj][COFF] Add BBAddrMap support to yaml2coff (PR #224504)
James Henderson via llvm-commits
llvm-commits at lists.llvm.org
Wed Sep 23 01:27:18 PDT 2026
================
@@ -0,0 +1,321 @@
+## Check how yaml2obj produces .llvm_bb_addr_map sections.
+
+# RUN: yaml2obj --docnum=1 %s -o %t1 2>&1 | FileCheck %s --check-prefix=WARN
+# RUN: llvm-readobj --sections --section-data %t1 | FileCheck %s
+
+# WARN: warning: feature value(0) does not support multiple BB ranges.
+
+## Case 1: Specify SectionData.
+# CHECK: Number: 1
+# CHECK-NEXT: Name: .llvm_bb_addr_map
+# CHECK: RawDataSize: 0xD
+# CHECK: SectionData (
+# CHECK-NEXT: 0000: 00000000 00000000 01010203 04
+# CHECK-NEXT: )
+
+## Case 2: Empty.
+# CHECK: Number: 2
+# CHECK-NEXT: Name: .llvm_bb_addr_map
+# CHECK: RawDataSize: 0x0
+# CHECK-NEXT: PointerToRawData: 0x0
+
+## Case 3: Specify SizeOfRawData only.
+# CHECK: Number: 3
+# CHECK-NEXT: Name: .llvm_bb_addr_map
+# CHECK: RawDataSize: 0x8
+# CHECK-NEXT: PointerToRawData: 0x0
+
+## Case 4: Specify Entries.
+# CHECK: Number: 4
+# CHECK-NEXT: Name: .llvm_bb_addr_map
+# CHECK: RawDataSize: 0x12
+# CHECK: SectionData (
+# CHECK-NEXT: 0000: 03002000 00000000 0000010B 01020102
+# CHECK-NEXT: 0010: 0203
+# CHECK-NEXT: )
+
+## Case 5: Omitting BaseAddress zeroes bytes 2-9 of SectionData below.
+# CHECK: Number: 5
+# CHECK-NEXT: Name: .llvm_bb_addr_map
+# CHECK: RawDataSize: 0xF
+# CHECK: SectionData (
+# CHECK-NEXT: 0000: 03000000 00000000 0000010C 010203
+# CHECK-NEXT: )
+
+## Case 6: Override the NumBlocks field.
+# CHECK: Number: 6
+# CHECK-NEXT: Name: .llvm_bb_addr_map
+# CHECK: RawDataSize: 0xF
+# CHECK: SectionData (
+# CHECK-NEXT: 0000: 03002000 00000000 0000020D 010203
+# CHECK-NEXT: )
+
+## Case 7: Specify empty BBRanges.
+# CHECK: Number: 7
+# CHECK-NEXT: Name: .llvm_bb_addr_map
+# CHECK: RawDataSize: 0x3
+# CHECK: SectionData (
+# CHECK-NEXT: 0000: 030000
+# CHECK-NEXT: )
+
+## Case 8: Specify empty BBRanges with multi-bb-range.
+# CHECK: Number: 8
+# CHECK-NEXT: Name: .llvm_bb_addr_map
+# CHECK: RawDataSize: 0x3
+# CHECK: SectionData (
+# CHECK-NEXT: 0000: 030800
+# CHECK-NEXT: )
+
+## Case 9: Specify empty CallsiteEndOffsets.
+# CHECK: Number: 9
+# CHECK-NEXT: Name: .llvm_bb_addr_map
+# CHECK: RawDataSize: 0x10
+# CHECK: SectionData (
+# CHECK-NEXT: 0000: 03202000 00000000 0000010E 01000203
+# CHECK-NEXT: )
+
+## Case 10: Specify basic block hash.
+# CHECK: Number: 10
+# CHECK-NEXT: Name: .llvm_bb_addr_map
+# CHECK: RawDataSize: 0x18
+# CHECK: SectionData (
+# CHECK-NEXT: 0000: 04602000 00000000 0000010E 01000203
+# CHECK-NEXT: 0010: 23010000 00000000
+# CHECK-NEXT: )
+
+## Case 11: Specify empty Entries. The section stays empty, like Case 2.
+# CHECK: Number: 11
+# CHECK-NEXT: Name: .llvm_bb_addr_map
+# CHECK: RawDataSize: 0x0
+# CHECK-NEXT: PointerToRawData: 0x0
+
+--- !COFF
+header:
+ Machine: IMAGE_FILE_MACHINE_AMD64
+sections:
+
+## Test the following cases:
+
+## 1) We can produce a .llvm_bb_addr_map section from a description with section
+## content.
+ - Name: .llvm_bb_addr_map
+ Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_DISCARDABLE, IMAGE_SCN_MEM_READ ]
+ SectionData: "00000000000000000101020304"
+
+## 2) We can produce an empty .llvm_bb_addr_map section from a description with
+## no content keys at all.
+ - Name: .llvm_bb_addr_map
+ Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_DISCARDABLE, IMAGE_SCN_MEM_READ ]
+
+## 3) We can produce a .llvm_bb_addr_map section of a specific size when we
+## specify the size only.
+ - Name: .llvm_bb_addr_map
+ Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_DISCARDABLE, IMAGE_SCN_MEM_READ ]
+ SizeOfRawData: 8
----------------
jh7370 wrote:
I think we should have a test case for SectionData being of the same size as the SizeOfRawData. We probably also should reject SizeOfRawData mismatching the size of SectionData (or whatever the pattern is for other section types in ELF).
https://github.com/llvm/llvm-project/pull/224504
More information about the llvm-commits
mailing list