[llvm] 4e8986f - [Coverage] Mark coverage sections as metadata sections on COFF. (#76834)

via llvm-commits llvm-commits at lists.llvm.org
Tue Jan 9 13:58:33 PST 2024


Author: Zequan Wu
Date: 2024-01-09T16:58:28-05:00
New Revision: 4e8986fc58dd88cbef9089a9b2841e0a87cbb481

URL: https://github.com/llvm/llvm-project/commit/4e8986fc58dd88cbef9089a9b2841e0a87cbb481
DIFF: https://github.com/llvm/llvm-project/commit/4e8986fc58dd88cbef9089a9b2841e0a87cbb481.diff

LOG: [Coverage] Mark coverage sections as metadata sections on COFF. (#76834)

Mark `.lcovmap$M`, `.lcovfun$M`, `.lcovd` and `.lcovn` as metadata
sections on COFF so they are not loaded into memory.

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

Modified: 
    llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp b/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
index 6e69dc66429d31..a69b71451736fa 100644
--- a/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
+++ b/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
@@ -1669,9 +1669,18 @@ static int getSelectionForCOFF(const GlobalValue *GV) {
 
 MCSection *TargetLoweringObjectFileCOFF::getExplicitSectionGlobal(
     const GlobalObject *GO, SectionKind Kind, const TargetMachine &TM) const {
+  StringRef Name = GO->getSection();
+  if (Name == getInstrProfSectionName(IPSK_covmap, Triple::COFF,
+                                      /*AddSegmentInfo=*/false) ||
+      Name == getInstrProfSectionName(IPSK_covfun, Triple::COFF,
+                                      /*AddSegmentInfo=*/false) ||
+      Name == getInstrProfSectionName(IPSK_covdata, Triple::COFF,
+                                      /*AddSegmentInfo=*/false) ||
+      Name == getInstrProfSectionName(IPSK_covname, Triple::COFF,
+                                      /*AddSegmentInfo=*/false))
+    Kind = SectionKind::getMetadata();
   int Selection = 0;
   unsigned Characteristics = getCOFFSectionFlags(Kind, TM);
-  StringRef Name = GO->getSection();
   StringRef COMDATSymName = "";
   if (GO->hasComdat()) {
     Selection = getSelectionForCOFF(GO);

diff  --git a/llvm/test/CodeGen/X86/cov-sections.ll b/llvm/test/CodeGen/X86/cov-sections.ll
new file mode 100644
index 00000000000000..6c4f3f079f38e3
--- /dev/null
+++ b/llvm/test/CodeGen/X86/cov-sections.ll
@@ -0,0 +1,15 @@
+; RUN: llc < %s -mtriple=x86_64-pc-windows-msvc -filetype=obj -o - | llvm-readobj -S - | FileCheck %s
+
+ at covmap = private global i32 0, section ".lcovmap$M"
+ at covfun = private global i32 0, section ".lcovfun$M"
+ at covname = private global i32 0, section ".lcovd"
+ at covdata= private global i32 0, section ".lcovn"
+
+; CHECK: Name: .lcovmap$M
+; CHECK: IMAGE_SCN_MEM_DISCARDABLE (0x2000000)
+; CHECK: Name: .lcovfun$M
+; CHECK: IMAGE_SCN_MEM_DISCARDABLE (0x2000000)
+; CHECK: Name: .lcovd
+; CHECK: IMAGE_SCN_MEM_DISCARDABLE (0x2000000)
+; CHECK: Name: .lcovn
+; CHECK: IMAGE_SCN_MEM_DISCARDABLE (0x2000000)


        


More information about the llvm-commits mailing list