[llvm] 28be1ea - [MC][COFF] Mark .debug_*.dwo sections IMAGE_SCN_LNK_REMOVE (#199616)
via llvm-commits
llvm-commits at lists.llvm.org
Sun May 31 18:25:52 PDT 2026
Author: Haohai Wen
Date: 2026-06-01T09:25:47+08:00
New Revision: 28be1eaf755a36187c40c2e251a663f811db5d9c
URL: https://github.com/llvm/llvm-project/commit/28be1eaf755a36187c40c2e251a663f811db5d9c
DIFF: https://github.com/llvm/llvm-project/commit/28be1eaf755a36187c40c2e251a663f811db5d9c.diff
LOG: [MC][COFF] Mark .debug_*.dwo sections IMAGE_SCN_LNK_REMOVE (#199616)
Mirror ELF's SHF_EXCLUDE so lld-link drops .dwo content from the linked
image.
Added:
Modified:
llvm/lib/MC/MCObjectFileInfo.cpp
llvm/test/DebugInfo/COFF/fission-sections.ll
Removed:
################################################################################
diff --git a/llvm/lib/MC/MCObjectFileInfo.cpp b/llvm/lib/MC/MCObjectFileInfo.cpp
index 74cf7068251de..b10f8b2c5cb64 100644
--- a/llvm/lib/MC/MCObjectFileInfo.cpp
+++ b/llvm/lib/MC/MCObjectFileInfo.cpp
@@ -815,46 +815,57 @@ void MCObjectFileInfo::initCOFFMCObjectFileInfo(const Triple &T) {
COFF::IMAGE_SCN_MEM_READ);
DwarfMacinfoDWOSection = Ctx->getCOFFSection(
".debug_macinfo.dwo", COFF::IMAGE_SCN_MEM_DISCARDABLE |
+ COFF::IMAGE_SCN_LNK_REMOVE |
COFF::IMAGE_SCN_CNT_INITIALIZED_DATA |
COFF::IMAGE_SCN_MEM_READ);
DwarfMacroDWOSection = Ctx->getCOFFSection(
".debug_macro.dwo", COFF::IMAGE_SCN_MEM_DISCARDABLE |
+ COFF::IMAGE_SCN_LNK_REMOVE |
COFF::IMAGE_SCN_CNT_INITIALIZED_DATA |
COFF::IMAGE_SCN_MEM_READ);
DwarfInfoDWOSection = Ctx->getCOFFSection(
".debug_info.dwo", COFF::IMAGE_SCN_MEM_DISCARDABLE |
+ COFF::IMAGE_SCN_LNK_REMOVE |
COFF::IMAGE_SCN_CNT_INITIALIZED_DATA |
COFF::IMAGE_SCN_MEM_READ);
DwarfTypesDWOSection = Ctx->getCOFFSection(
".debug_types.dwo", COFF::IMAGE_SCN_MEM_DISCARDABLE |
+ COFF::IMAGE_SCN_LNK_REMOVE |
COFF::IMAGE_SCN_CNT_INITIALIZED_DATA |
COFF::IMAGE_SCN_MEM_READ);
DwarfAbbrevDWOSection = Ctx->getCOFFSection(
".debug_abbrev.dwo", COFF::IMAGE_SCN_MEM_DISCARDABLE |
+ COFF::IMAGE_SCN_LNK_REMOVE |
COFF::IMAGE_SCN_CNT_INITIALIZED_DATA |
COFF::IMAGE_SCN_MEM_READ);
DwarfStrDWOSection = Ctx->getCOFFSection(
".debug_str.dwo", COFF::IMAGE_SCN_MEM_DISCARDABLE |
+ COFF::IMAGE_SCN_LNK_REMOVE |
COFF::IMAGE_SCN_CNT_INITIALIZED_DATA |
COFF::IMAGE_SCN_MEM_READ);
DwarfLineDWOSection = Ctx->getCOFFSection(
".debug_line.dwo", COFF::IMAGE_SCN_MEM_DISCARDABLE |
+ COFF::IMAGE_SCN_LNK_REMOVE |
COFF::IMAGE_SCN_CNT_INITIALIZED_DATA |
COFF::IMAGE_SCN_MEM_READ);
DwarfLocDWOSection = Ctx->getCOFFSection(
".debug_loc.dwo", COFF::IMAGE_SCN_MEM_DISCARDABLE |
+ COFF::IMAGE_SCN_LNK_REMOVE |
COFF::IMAGE_SCN_CNT_INITIALIZED_DATA |
COFF::IMAGE_SCN_MEM_READ);
DwarfLoclistsDWOSection = Ctx->getCOFFSection(
".debug_loclists.dwo", COFF::IMAGE_SCN_MEM_DISCARDABLE |
+ COFF::IMAGE_SCN_LNK_REMOVE |
COFF::IMAGE_SCN_CNT_INITIALIZED_DATA |
COFF::IMAGE_SCN_MEM_READ);
DwarfStrOffDWOSection = Ctx->getCOFFSection(
".debug_str_offsets.dwo", COFF::IMAGE_SCN_MEM_DISCARDABLE |
+ COFF::IMAGE_SCN_LNK_REMOVE |
COFF::IMAGE_SCN_CNT_INITIALIZED_DATA |
COFF::IMAGE_SCN_MEM_READ);
DwarfRnglistsDWOSection = Ctx->getCOFFSection(
".debug_rnglists.dwo", COFF::IMAGE_SCN_MEM_DISCARDABLE |
+ COFF::IMAGE_SCN_LNK_REMOVE |
COFF::IMAGE_SCN_CNT_INITIALIZED_DATA |
COFF::IMAGE_SCN_MEM_READ);
DwarfAddrSection = Ctx->getCOFFSection(
diff --git a/llvm/test/DebugInfo/COFF/fission-sections.ll b/llvm/test/DebugInfo/COFF/fission-sections.ll
index c16a4d072909e..cdf2a60811f1c 100644
--- a/llvm/test/DebugInfo/COFF/fission-sections.ll
+++ b/llvm/test/DebugInfo/COFF/fission-sections.ll
@@ -2,6 +2,9 @@
; RUN: llvm-objdump -ht %t | FileCheck --check-prefix=OBJ %s
; RUN: llvm-objdump -ht %t.dwo | FileCheck --check-prefix=DWO %s
+; RUN: llc -split-dwarf-file=%t.obj -O0 %s -mtriple=x86_64-unknown-windows-msvc -filetype=obj -o %t.obj
+; RUN: llvm-readobj --section-headers %t.obj | FileCheck --check-prefix=SINGLE %s
+
; This test is derived from test/DebugInfo/X86/fission-cu.ll
; But it checks that the output objects have the expected sections
@@ -56,3 +59,40 @@ source_filename = "test/DebugInfo/X86/fission-cu.ll"
; DWO-NEXT: [ 6](sec 4)(fl 0x00)(ty 0)(scl 3) (nx 1) 0x00000000 .debug_abbrev.dwo
; DWO-NEXT: AUX scnlen 0x33 nreloc 0 nlnno 0 checksum 0x8056e5e4 assoc 4 comdat 0
; DWO-EMPTY:
+
+; SINGLE: Name: .debug_str.dwo
+; SINGLE-NOT: Name:
+; SINGLE: Characteristics [
+; SINGLE-NEXT: IMAGE_SCN_ALIGN_1BYTES
+; SINGLE-NEXT: IMAGE_SCN_CNT_INITIALIZED_DATA
+; SINGLE-NEXT: IMAGE_SCN_LNK_REMOVE
+; SINGLE-NEXT: IMAGE_SCN_MEM_DISCARDABLE
+; SINGLE-NEXT: IMAGE_SCN_MEM_READ
+; SINGLE-NEXT: ]
+; SINGLE: Name: .debug_str_offsets.dwo
+; SINGLE-NOT: Name:
+; SINGLE: Characteristics [
+; SINGLE-NEXT: IMAGE_SCN_ALIGN_1BYTES
+; SINGLE-NEXT: IMAGE_SCN_CNT_INITIALIZED_DATA
+; SINGLE-NEXT: IMAGE_SCN_LNK_REMOVE
+; SINGLE-NEXT: IMAGE_SCN_MEM_DISCARDABLE
+; SINGLE-NEXT: IMAGE_SCN_MEM_READ
+; SINGLE-NEXT: ]
+; SINGLE: Name: .debug_info.dwo
+; SINGLE-NOT: Name:
+; SINGLE: Characteristics [
+; SINGLE-NEXT: IMAGE_SCN_ALIGN_1BYTES
+; SINGLE-NEXT: IMAGE_SCN_CNT_INITIALIZED_DATA
+; SINGLE-NEXT: IMAGE_SCN_LNK_REMOVE
+; SINGLE-NEXT: IMAGE_SCN_MEM_DISCARDABLE
+; SINGLE-NEXT: IMAGE_SCN_MEM_READ
+; SINGLE-NEXT: ]
+; SINGLE: Name: .debug_abbrev.dwo
+; SINGLE-NOT: Name:
+; SINGLE: Characteristics [
+; SINGLE-NEXT: IMAGE_SCN_ALIGN_1BYTES
+; SINGLE-NEXT: IMAGE_SCN_CNT_INITIALIZED_DATA
+; SINGLE-NEXT: IMAGE_SCN_LNK_REMOVE
+; SINGLE-NEXT: IMAGE_SCN_MEM_DISCARDABLE
+; SINGLE-NEXT: IMAGE_SCN_MEM_READ
+; SINGLE-NEXT: ]
More information about the llvm-commits
mailing list