[lld] [llvm] [lld][COFF] Restore `lto-embed-bitcode` and `-fembed-bitcode` Bitcode Embedding Features (PR #188398)

Austin Hudson via llvm-commits llvm-commits at lists.llvm.org
Wed Mar 25 06:31:38 PDT 2026


https://github.com/realoriginal updated https://github.com/llvm/llvm-project/pull/188398

>From 08bccbf72b01cdb0f195c07da5cb94735209b19e Mon Sep 17 00:00:00 2001
From: realoriginal <ajhson001 at gmail.com>
Date: Tue, 24 Mar 2026 19:17:31 -0700
Subject: [PATCH 1/3] Revert "[LLD][COFF] Discard .llvmbc and .llvmcmd sections
 (#150897)"

This reverts commit 41f333250bf2b9699b9c8cfec3b12dc046162679.
---
 lld/COFF/InputFiles.cpp          |  5 -----
 lld/test/COFF/embed-bitcode.test | 30 ------------------------------
 2 files changed, 35 deletions(-)
 delete mode 100644 lld/test/COFF/embed-bitcode.test

diff --git a/lld/COFF/InputFiles.cpp b/lld/COFF/InputFiles.cpp
index 492b2ad80166d..4320a39644616 100644
--- a/lld/COFF/InputFiles.cpp
+++ b/lld/COFF/InputFiles.cpp
@@ -404,11 +404,6 @@ SectionChunk *ObjFile::readSection(uint32_t sectionNumber,
     return nullptr;
   }
 
-  // Those sections are generated by -fembed-bitcode and do not need to be kept
-  // in executable files.
-  if (name == ".llvmbc" || name == ".llvmcmd")
-    return nullptr;
-
   // Object files may have DWARF debug info or MS CodeView debug info
   // (or both).
   //
diff --git a/lld/test/COFF/embed-bitcode.test b/lld/test/COFF/embed-bitcode.test
deleted file mode 100644
index 10f88c5c0117d..0000000000000
--- a/lld/test/COFF/embed-bitcode.test
+++ /dev/null
@@ -1,30 +0,0 @@
-# RUN: yaml2obj %s -o %t.obj
-# RUN: lld-link /entry:main /subsystem:console /out:%t.exe %t.obj
-# RUN: llvm-readobj -S %t.exe | FileCheck %s
-
-# CHECK-NOT: Name: .llvmbc
-# CHECK-NOT: Name: .llvmcmd
-
---- !COFF
-header:
-  Machine:         IMAGE_FILE_MACHINE_AMD64
-
-sections:
-  - Name:            .text
-    Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
-    SectionData:     "C3"
-  - Name:           .llvmbc
-    Characteristics: [ IMAGE_SCN_MEM_DISCARDABLE ]
-    SectionData:     "4243C0DE"
-  - Name:           .llvmcmd
-    Characteristics: [ IMAGE_SCN_MEM_DISCARDABLE ]
-    SectionData:     "2D63633100"
-
-symbols:
-  - Name:            main
-    Value:           0
-    SectionNumber:   1
-    SimpleType:      IMAGE_SYM_TYPE_NULL
-    ComplexType:     IMAGE_SYM_DTYPE_FUNCTION
-    StorageClass:    IMAGE_SYM_CLASS_EXTERNAL
-...

>From 7f0a008ad76bb7d8b310fb7a9961025ed39d35a5 Mon Sep 17 00:00:00 2001
From: realoriginal <ajhson001 at gmail.com>
Date: Tue, 24 Mar 2026 19:17:32 -0700
Subject: [PATCH 2/3] Revert "[COFF] Set .llvmbc and .llvmcmd to metadata
 section (#150879)"

This reverts commit 07d396b6f595eb90fb40f49d8a11f944553b9bfd.
---
 llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp |  3 +--
 llvm/test/CodeGen/X86/embed-bitcode.ll            | 13 -------------
 2 files changed, 1 insertion(+), 15 deletions(-)

diff --git a/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp b/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
index 40ddbca84b111..da93a1e12599c 100644
--- a/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
+++ b/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
@@ -1737,8 +1737,7 @@ 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();
   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 d4af9544bc1be..0d66ba879211d 100644
--- a/llvm/test/CodeGen/X86/embed-bitcode.ll
+++ b/llvm/test/CodeGen/X86/embed-bitcode.ll
@@ -1,23 +1,10 @@
 ; 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_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_MEM_DISCARDABLE
-; 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 16b841f8d4d4dee2e0406783cb0e419b148497ab Mon Sep 17 00:00:00 2001
From: realoriginal <ajhson001 at gmail.com>
Date: Wed, 25 Mar 2026 06:26:44 -0700
Subject: [PATCH 3/3] Reapply "[COFF] Set .llvmbc and .llvmcmd to metadata
 section (#150879)"

This reverts commit 7f0a008ad76bb7d8b310fb7a9961025ed39d35a5.
---
 llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp |  3 ++-
 llvm/test/CodeGen/X86/embed-bitcode.ll            | 13 +++++++++++++
 2 files changed, 15 insertions(+), 1 deletion(-)

diff --git a/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp b/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
index da93a1e12599c..40ddbca84b111 100644
--- a/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
+++ b/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
@@ -1737,7 +1737,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 0d66ba879211d..d4af9544bc1be 100644
--- a/llvm/test/CodeGen/X86/embed-bitcode.ll
+++ b/llvm/test/CodeGen/X86/embed-bitcode.ll
@@ -1,10 +1,23 @@
 ; 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_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_MEM_DISCARDABLE
+; 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"



More information about the llvm-commits mailing list