https://github.com/vvereschaka created 
https://github.com/llvm/llvm-project/pull/205729

Remap a file path for the object file name in CodeView debug info (S_OBJNAME) 
with the path prefix specified by `fdebug-prefix-map=` option.

>From 112097dac5f0b7e44f88507738f11a2f90b210e1 Mon Sep 17 00:00:00 2001
From: Vladimir Vereschaka <[email protected]>
Date: Wed, 24 Jun 2026 22:21:40 -0700
Subject: [PATCH] [DebugInfo][CodeView] Emit path prefix substitution for COFF
 object file name.

Remap a file path for the object file name in CodeView debug info (S_OBJNAME)
with the path prefix specified by `fdebug-prefix-map=` option.
---
 clang/include/clang/Basic/CodeGenOptions.h |  4 ++++
 clang/lib/Basic/CodeGenOptions.cpp         | 10 ++++++++++
 clang/lib/CodeGen/BackendUtil.cpp          |  2 +-
 clang/lib/CodeGen/CGDebugInfo.cpp          |  6 +-----
 4 files changed, 16 insertions(+), 6 deletions(-)

diff --git a/clang/include/clang/Basic/CodeGenOptions.h 
b/clang/include/clang/Basic/CodeGenOptions.h
index 97d68877467fd..027ccac08e879 100644
--- a/clang/include/clang/Basic/CodeGenOptions.h
+++ b/clang/include/clang/Basic/CodeGenOptions.h
@@ -700,6 +700,10 @@ class CodeGenOptions : public CodeGenOptionsBase {
     }
     llvm_unreachable("Unknown BoolFromMem enum");
   }
+
+  /// Remap specified path prefix using provided DebugPrefixMap map.
+  /// Returns updated path or unchanged if no substituion was found.
+  std::string remapDebugPathPrefix(StringRef Path) const;
 };
 
 }  // end namespace clang
diff --git a/clang/lib/Basic/CodeGenOptions.cpp 
b/clang/lib/Basic/CodeGenOptions.cpp
index db8a77cd93cf6..a16a8a126e709 100644
--- a/clang/lib/Basic/CodeGenOptions.cpp
+++ b/clang/lib/Basic/CodeGenOptions.cpp
@@ -7,6 +7,7 @@
 
//===----------------------------------------------------------------------===//
 
 #include "clang/Basic/CodeGenOptions.h"
+#include "llvm/Support/Path.h"
 
 namespace clang {
 
@@ -50,4 +51,13 @@ void CodeGenOptions::resetNonModularOptions(StringRef 
ModuleFormat) {
   RelocationModel = llvm::Reloc::PIC_;
 }
 
+std::string CodeGenOptions::remapDebugPathPrefix(StringRef Path) const {
+  SmallString<0> P = Path;
+
+  for (auto &[From, To] : llvm::reverse(DebugPrefixMap))
+    if (llvm::sys::path::replace_path_prefix(P, From, To))
+      break;
+  return P.str().str();
+}
+
 }  // end namespace clang
diff --git a/clang/lib/CodeGen/BackendUtil.cpp 
b/clang/lib/CodeGen/BackendUtil.cpp
index a46a25c4492f2..a6730d6a0022e 100644
--- a/clang/lib/CodeGen/BackendUtil.cpp
+++ b/clang/lib/CodeGen/BackendUtil.cpp
@@ -470,7 +470,7 @@ static bool initTargetOptions(const CompilerInstance &CI,
   Options.XRayFunctionIndex = CodeGenOpts.XRayFunctionIndex;
   Options.LoopAlignment = CodeGenOpts.LoopAlignment;
   Options.DebugStrictDwarf = CodeGenOpts.DebugStrictDwarf;
-  Options.ObjectFilenameForDebug = CodeGenOpts.ObjectFilenameForDebug;
+  Options.ObjectFilenameForDebug = 
CodeGenOpts.remapDebugPathPrefix(CodeGenOpts.ObjectFilenameForDebug);
   Options.Hotpatch = CodeGenOpts.HotPatch;
   Options.JMCInstrument = CodeGenOpts.JMCInstrument;
   Options.XCOFFReadOnlyPointers = CodeGenOpts.XCOFFReadOnlyPointers;
diff --git a/clang/lib/CodeGen/CGDebugInfo.cpp 
b/clang/lib/CodeGen/CGDebugInfo.cpp
index 7421733efcc24..5331d1231d407 100644
--- a/clang/lib/CodeGen/CGDebugInfo.cpp
+++ b/clang/lib/CodeGen/CGDebugInfo.cpp
@@ -671,11 +671,7 @@ llvm::DIFile *CGDebugInfo::createFile(
 }
 
 std::string CGDebugInfo::remapDIPath(StringRef Path) const {
-  SmallString<256> P = Path;
-  for (auto &[From, To] : llvm::reverse(CGM.getCodeGenOpts().DebugPrefixMap))
-    if (llvm::sys::path::replace_path_prefix(P, From, To))
-      break;
-  return P.str().str();
+  return CGM.getCodeGenOpts().remapDebugPathPrefix(Path);
 }
 
 unsigned CGDebugInfo::getLineNumber(SourceLocation Loc) {

_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to