Skip to content

Commit 4e8986f

Browse files
authored
[Coverage] Mark coverage sections as metadata sections on COFF. (llvm#76834)
Mark `.lcovmap$M`, `.lcovfun$M`, `.lcovd` and `.lcovn` as metadata sections on COFF so they are not loaded into memory.
1 parent ab59037 commit 4e8986f

File tree

2 files changed

+25
-1
lines changed

2 files changed

+25
-1
lines changed

llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1669,9 +1669,18 @@ static int getSelectionForCOFF(const GlobalValue *GV) {
16691669

16701670
MCSection *TargetLoweringObjectFileCOFF::getExplicitSectionGlobal(
16711671
const GlobalObject *GO, SectionKind Kind, const TargetMachine &TM) const {
1672+
StringRef Name = GO->getSection();
1673+
if (Name == getInstrProfSectionName(IPSK_covmap, Triple::COFF,
1674+
/*AddSegmentInfo=*/false) ||
1675+
Name == getInstrProfSectionName(IPSK_covfun, Triple::COFF,
1676+
/*AddSegmentInfo=*/false) ||
1677+
Name == getInstrProfSectionName(IPSK_covdata, Triple::COFF,
1678+
/*AddSegmentInfo=*/false) ||
1679+
Name == getInstrProfSectionName(IPSK_covname, Triple::COFF,
1680+
/*AddSegmentInfo=*/false))
1681+
Kind = SectionKind::getMetadata();
16721682
int Selection = 0;
16731683
unsigned Characteristics = getCOFFSectionFlags(Kind, TM);
1674-
StringRef Name = GO->getSection();
16751684
StringRef COMDATSymName = "";
16761685
if (GO->hasComdat()) {
16771686
Selection = getSelectionForCOFF(GO);

llvm/test/CodeGen/X86/cov-sections.ll

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
; RUN: llc < %s -mtriple=x86_64-pc-windows-msvc -filetype=obj -o - | llvm-readobj -S - | FileCheck %s
2+
3+
@covmap = private global i32 0, section ".lcovmap$M"
4+
@covfun = private global i32 0, section ".lcovfun$M"
5+
@covname = private global i32 0, section ".lcovd"
6+
@covdata= private global i32 0, section ".lcovn"
7+
8+
; CHECK: Name: .lcovmap$M
9+
; CHECK: IMAGE_SCN_MEM_DISCARDABLE (0x2000000)
10+
; CHECK: Name: .lcovfun$M
11+
; CHECK: IMAGE_SCN_MEM_DISCARDABLE (0x2000000)
12+
; CHECK: Name: .lcovd
13+
; CHECK: IMAGE_SCN_MEM_DISCARDABLE (0x2000000)
14+
; CHECK: Name: .lcovn
15+
; CHECK: IMAGE_SCN_MEM_DISCARDABLE (0x2000000)

0 commit comments

Comments
 (0)