[llvm] [COFF] Set .llvmbc and .llvmcmd to exclude section (PR #150879)

Haohai Wen via llvm-commits llvm-commits at lists.llvm.org
Sun Jul 27 23:54:20 PDT 2025


https://github.com/HaohaiWen updated https://github.com/llvm/llvm-project/pull/150879

>From a7516ecb9556333062b67c6f5647ee74ba995c7c Mon Sep 17 00:00:00 2001
From: Haohai Wen <haohai.wen at intel.com>
Date: Mon, 28 Jul 2025 10:28:03 +0800
Subject: [PATCH 1/4] [COFF] Set .llvmbc and .llvmcmd to metadata section

Those are metadata sections for ELF but was not properly set for COFF.
---
 llvm/test/CodeGen/X86/embed-bitcode.ll | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/llvm/test/CodeGen/X86/embed-bitcode.ll b/llvm/test/CodeGen/X86/embed-bitcode.ll
index 0d66ba879211d..edacedef71bf0 100644
--- a/llvm/test/CodeGen/X86/embed-bitcode.ll
+++ b/llvm/test/CodeGen/X86/embed-bitcode.ll
@@ -1,10 +1,25 @@
 ; RUN: llc -filetype=obj -mtriple=x86_64 %s -o %t
 ; RUN: llvm-readelf -S %t | FileCheck %s
+; RUN: llc -filetype=obj -mtriple=x86_64-pc-windows-msvc %s -o %t
+; RUN: llvm-readobj -S %t | FileCheck %s --check-prefix=COFF
 
 ; CHECK:      .text    PROGBITS 0000000000000000 [[#%x,OFF:]] 000000 00 AX 0
 ; CHECK-NEXT: .llvmbc  PROGBITS 0000000000000000 [[#%x,OFF:]] 000004 00    0
 ; CHECK-NEXT: .llvmcmd PROGBITS 0000000000000000 [[#%x,OFF:]] 000005 00    0
 
+; COFF:      Name: .llvmbc (2E 6C 6C 76 6D 62 63 00)
+; COFF:      Characteristics [
+; COFF-NEXT:   IMAGE_SCN_ALIGN_1BYTES
+; COFF-NEXT:   IMAGE_SCN_CNT_INITIALIZED_DATA
+; COFF-NEXT:   IMAGE_SCN_MEM_READ
+; COFF-NEXT: ]
+; COFF:      Name: .llvmcmd (2E 6C 6C 76 6D 63 6D 64)
+; COFF:      Characteristics [
+; COFF-NEXT:   IMAGE_SCN_ALIGN_1BYTES
+; COFF-NEXT:   IMAGE_SCN_CNT_INITIALIZED_DATA
+; COFF-NEXT:   IMAGE_SCN_MEM_READ
+; COFF-NEXT: ]
+
 @llvm.embedded.module = private constant [4 x i8] c"BC\C0\DE", section ".llvmbc", align 1
 @llvm.cmdline = private constant [5 x i8] c"-cc1\00", section ".llvmcmd", align 1
 @llvm.compiler.used = appending global [2 x ptr] [ptr @llvm.embedded.module, ptr @llvm.cmdline], section "llvm.metadata"

>From 95fdaa82da4c0f40b41ebb3ce57f8d2b1e596b7e Mon Sep 17 00:00:00 2001
From: Haohai Wen <haohai.wen at intel.com>
Date: Mon, 28 Jul 2025 13:24:16 +0800
Subject: [PATCH 2/4] Submit changes

---
 llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp | 3 ++-
 llvm/test/CodeGen/X86/embed-bitcode.ll            | 6 ++----
 2 files changed, 4 insertions(+), 5 deletions(-)

diff --git a/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp b/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
index 408d07b84482a..725e95107059e 100644
--- a/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
+++ b/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
@@ -1734,7 +1734,8 @@ MCSection *TargetLoweringObjectFileCOFF::getExplicitSectionGlobal(
       Name == getInstrProfSectionName(IPSK_covdata, Triple::COFF,
                                       /*AddSegmentInfo=*/false) ||
       Name == getInstrProfSectionName(IPSK_covname, Triple::COFF,
-                                      /*AddSegmentInfo=*/false))
+                                      /*AddSegmentInfo=*/false) ||
+      Name == ".llvmbc" || Name == ".llvmcmd")
     Kind = SectionKind::getMetadata();
   int Selection = 0;
   unsigned Characteristics = getCOFFSectionFlags(Kind, TM);
diff --git a/llvm/test/CodeGen/X86/embed-bitcode.ll b/llvm/test/CodeGen/X86/embed-bitcode.ll
index edacedef71bf0..d4af9544bc1be 100644
--- a/llvm/test/CodeGen/X86/embed-bitcode.ll
+++ b/llvm/test/CodeGen/X86/embed-bitcode.ll
@@ -10,14 +10,12 @@
 ; COFF:      Name: .llvmbc (2E 6C 6C 76 6D 62 63 00)
 ; COFF:      Characteristics [
 ; COFF-NEXT:   IMAGE_SCN_ALIGN_1BYTES
-; COFF-NEXT:   IMAGE_SCN_CNT_INITIALIZED_DATA
-; COFF-NEXT:   IMAGE_SCN_MEM_READ
+; COFF-NEXT:   IMAGE_SCN_MEM_DISCARDABLE
 ; COFF-NEXT: ]
 ; COFF:      Name: .llvmcmd (2E 6C 6C 76 6D 63 6D 64)
 ; COFF:      Characteristics [
 ; COFF-NEXT:   IMAGE_SCN_ALIGN_1BYTES
-; COFF-NEXT:   IMAGE_SCN_CNT_INITIALIZED_DATA
-; COFF-NEXT:   IMAGE_SCN_MEM_READ
+; COFF-NEXT:   IMAGE_SCN_MEM_DISCARDABLE
 ; COFF-NEXT: ]
 
 @llvm.embedded.module = private constant [4 x i8] c"BC\C0\DE", section ".llvmbc", align 1

>From 33d2a2630dc2df6539dc9ce35e307ead5a1b5f4e Mon Sep 17 00:00:00 2001
From: Haohai Wen <haohai.wen at intel.com>
Date: Mon, 28 Jul 2025 14:39:26 +0800
Subject: [PATCH 3/4] Set them as removed.

---
 llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp | 9 +++++++--
 llvm/test/CodeGen/X86/embed-bitcode.ll            | 2 ++
 2 files changed, 9 insertions(+), 2 deletions(-)

diff --git a/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp b/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
index 725e95107059e..7d4660f9c35bc 100644
--- a/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
+++ b/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
@@ -1734,9 +1734,14 @@ MCSection *TargetLoweringObjectFileCOFF::getExplicitSectionGlobal(
       Name == getInstrProfSectionName(IPSK_covdata, Triple::COFF,
                                       /*AddSegmentInfo=*/false) ||
       Name == getInstrProfSectionName(IPSK_covname, Triple::COFF,
-                                      /*AddSegmentInfo=*/false) ||
-      Name == ".llvmbc" || Name == ".llvmcmd")
+                                      /*AddSegmentInfo=*/false))
     Kind = SectionKind::getMetadata();
+
+  // Those sections are generated by -fembed-bitcode. They are only useful for
+  // object files and do not need to be kept in executable files.
+  if (Name == ".llvmbc" || Name == ".llvmcmd")
+    Kind = SectionKind::getExclude();
+
   int Selection = 0;
   unsigned Characteristics = getCOFFSectionFlags(Kind, TM);
   StringRef COMDATSymName = "";
diff --git a/llvm/test/CodeGen/X86/embed-bitcode.ll b/llvm/test/CodeGen/X86/embed-bitcode.ll
index d4af9544bc1be..25ad8c970c440 100644
--- a/llvm/test/CodeGen/X86/embed-bitcode.ll
+++ b/llvm/test/CodeGen/X86/embed-bitcode.ll
@@ -10,11 +10,13 @@
 ; COFF:      Name: .llvmbc (2E 6C 6C 76 6D 62 63 00)
 ; COFF:      Characteristics [
 ; COFF-NEXT:   IMAGE_SCN_ALIGN_1BYTES
+; COFF-NEXT:   IMAGE_SCN_LNK_REMOVE
 ; COFF-NEXT:   IMAGE_SCN_MEM_DISCARDABLE
 ; COFF-NEXT: ]
 ; COFF:      Name: .llvmcmd (2E 6C 6C 76 6D 63 6D 64)
 ; COFF:      Characteristics [
 ; COFF-NEXT:   IMAGE_SCN_ALIGN_1BYTES
+; COFF-NEXT:   IMAGE_SCN_LNK_REMOVE
 ; COFF-NEXT:   IMAGE_SCN_MEM_DISCARDABLE
 ; COFF-NEXT: ]
 

>From 0daf7f38bc69f09820273ef395c448cccc3afdfa Mon Sep 17 00:00:00 2001
From: Haohai Wen <haohai.wen at intel.com>
Date: Mon, 28 Jul 2025 14:53:01 +0800
Subject: [PATCH 4/4] Revert "Set them as removed."

This reverts commit 33d2a2630dc2df6539dc9ce35e307ead5a1b5f4e.
---
 llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp | 9 ++-------
 llvm/test/CodeGen/X86/embed-bitcode.ll            | 2 --
 2 files changed, 2 insertions(+), 9 deletions(-)

diff --git a/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp b/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
index 7d4660f9c35bc..725e95107059e 100644
--- a/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
+++ b/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
@@ -1734,14 +1734,9 @@ MCSection *TargetLoweringObjectFileCOFF::getExplicitSectionGlobal(
       Name == getInstrProfSectionName(IPSK_covdata, Triple::COFF,
                                       /*AddSegmentInfo=*/false) ||
       Name == getInstrProfSectionName(IPSK_covname, Triple::COFF,
-                                      /*AddSegmentInfo=*/false))
+                                      /*AddSegmentInfo=*/false) ||
+      Name == ".llvmbc" || Name == ".llvmcmd")
     Kind = SectionKind::getMetadata();
-
-  // Those sections are generated by -fembed-bitcode. They are only useful for
-  // object files and do not need to be kept in executable files.
-  if (Name == ".llvmbc" || Name == ".llvmcmd")
-    Kind = SectionKind::getExclude();
-
   int Selection = 0;
   unsigned Characteristics = getCOFFSectionFlags(Kind, TM);
   StringRef COMDATSymName = "";
diff --git a/llvm/test/CodeGen/X86/embed-bitcode.ll b/llvm/test/CodeGen/X86/embed-bitcode.ll
index 25ad8c970c440..d4af9544bc1be 100644
--- a/llvm/test/CodeGen/X86/embed-bitcode.ll
+++ b/llvm/test/CodeGen/X86/embed-bitcode.ll
@@ -10,13 +10,11 @@
 ; COFF:      Name: .llvmbc (2E 6C 6C 76 6D 62 63 00)
 ; COFF:      Characteristics [
 ; COFF-NEXT:   IMAGE_SCN_ALIGN_1BYTES
-; COFF-NEXT:   IMAGE_SCN_LNK_REMOVE
 ; COFF-NEXT:   IMAGE_SCN_MEM_DISCARDABLE
 ; COFF-NEXT: ]
 ; COFF:      Name: .llvmcmd (2E 6C 6C 76 6D 63 6D 64)
 ; COFF:      Characteristics [
 ; COFF-NEXT:   IMAGE_SCN_ALIGN_1BYTES
-; COFF-NEXT:   IMAGE_SCN_LNK_REMOVE
 ; COFF-NEXT:   IMAGE_SCN_MEM_DISCARDABLE
 ; COFF-NEXT: ]
 



More information about the llvm-commits mailing list