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

via llvm-commits llvm-commits at lists.llvm.org
Wed Jan 3 09:05:41 PST 2024


llvmbot wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-backend-x86

Author: Zequan Wu (ZequanWu)

<details>
<summary>Changes</summary>

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

---
Full diff: https://github.com/llvm/llvm-project/pull/76834.diff


2 Files Affected:

- (modified) llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp (+10-1) 
- (added) llvm/test/CodeGen/X86/cov-sections.ll (+15) 


``````````diff
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)

``````````

</details>


https://github.com/llvm/llvm-project/pull/76834


More information about the llvm-commits mailing list