[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