[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