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
