This revision was landed with ongoing or failed builds.
This revision was automatically updated to reflect the committed changes.
Closed by commit rG0604d86c07ab: Darwin: introduce a global override for debug
prefix map entries. (authored by aprantl).
Herald added a project: clang.
Changed prior to commit:
https://reviews.llvm.org/D119850?vs=408944&id=409282#toc
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D119850/new/
https://reviews.llvm.org/D119850
Files:
clang/include/clang/Driver/ToolChain.h
clang/lib/Driver/ToolChains/Clang.cpp
clang/lib/Driver/ToolChains/Darwin.cpp
clang/lib/Driver/ToolChains/Darwin.h
clang/test/Driver/darwin-debug-prefix-map.c
clang/test/Driver/darwin-debug-prefix-map.s
Index: clang/test/Driver/darwin-debug-prefix-map.s
===================================================================
--- /dev/null
+++ clang/test/Driver/darwin-debug-prefix-map.s
@@ -0,0 +1,6 @@
+// RUN: env RC_DEBUG_PREFIX_MAP=old=new \
+// RUN: %clang -target arm64-apple-darwin -### -c -g %s 2>&1 | FileCheck %s
+// RUN: env RC_DEBUG_PREFIX_MAP=illegal \
+// RUN: %clang -target arm64-apple-darwin -### -c -g %s 2>&1 | FileCheck %s --check-prefix=ERR
+// CHECK: "-fdebug-prefix-map=old=new"
+// ERR: invalid argument 'illegal'
Index: clang/test/Driver/darwin-debug-prefix-map.c
===================================================================
--- /dev/null
+++ clang/test/Driver/darwin-debug-prefix-map.c
@@ -0,0 +1,6 @@
+// RUN: env RC_DEBUG_PREFIX_MAP=old=new \
+// RUN: %clang -target arm64-apple-darwin -### -c -g %s 2>&1 | FileCheck %s
+// RUN: env RC_DEBUG_PREFIX_MAP=illegal \
+// RUN: %clang -target arm64-apple-darwin -### -c -g %s 2>&1 | FileCheck %s --check-prefix=ERR
+// CHECK: "-fdebug-prefix-map=old=new"
+// ERR: invalid argument 'illegal'
Index: clang/lib/Driver/ToolChains/Darwin.h
===================================================================
--- clang/lib/Driver/ToolChains/Darwin.h
+++ clang/lib/Driver/ToolChains/Darwin.h
@@ -267,6 +267,7 @@
bool SupportsProfiling() const override;
bool UseDwarfDebugFlags() const override;
+ std::string GetGlobalDebugPathRemapping() const override;
llvm::ExceptionHandling
GetExceptionModel(const llvm::opt::ArgList &Args) const override {
Index: clang/lib/Driver/ToolChains/Darwin.cpp
===================================================================
--- clang/lib/Driver/ToolChains/Darwin.cpp
+++ clang/lib/Driver/ToolChains/Darwin.cpp
@@ -2843,6 +2843,12 @@
return false;
}
+std::string MachO::GetGlobalDebugPathRemapping() const {
+ if (const char *S = ::getenv("RC_DEBUG_PREFIX_MAP"))
+ return S;
+ return {};
+}
+
llvm::ExceptionHandling Darwin::GetExceptionModel(const ArgList &Args) const {
// Darwin uses SjLj exceptions on ARM.
if (getTriple().getArch() != llvm::Triple::arm &&
Index: clang/lib/Driver/ToolChains/Clang.cpp
===================================================================
--- clang/lib/Driver/ToolChains/Clang.cpp
+++ clang/lib/Driver/ToolChains/Clang.cpp
@@ -668,17 +668,24 @@
}
/// Add a CC1 and CC1AS option to specify the debug file path prefix map.
-static void addDebugPrefixMapArg(const Driver &D, const ArgList &Args, ArgStringList &CmdArgs) {
- for (const Arg *A : Args.filtered(options::OPT_ffile_prefix_map_EQ,
- options::OPT_fdebug_prefix_map_EQ)) {
- StringRef Map = A->getValue();
+static void addDebugPrefixMapArg(const Driver &D, const ToolChain &TC,
+ const ArgList &Args, ArgStringList &CmdArgs) {
+ auto AddOneArg = [&](StringRef Map, StringRef Name) {
if (!Map.contains('='))
- D.Diag(diag::err_drv_invalid_argument_to_option)
- << Map << A->getOption().getName();
+ D.Diag(diag::err_drv_invalid_argument_to_option) << Map << Name;
else
CmdArgs.push_back(Args.MakeArgString("-fdebug-prefix-map=" + Map));
+ };
+
+ for (const Arg *A : Args.filtered(options::OPT_ffile_prefix_map_EQ,
+ options::OPT_fdebug_prefix_map_EQ)) {
+ AddOneArg(A->getValue(), A->getOption().getName());
A->claim();
}
+ std::string GlobalRemapEntry = TC.GetGlobalDebugPathRemapping();
+ if (GlobalRemapEntry.empty())
+ return;
+ AddOneArg(GlobalRemapEntry, "environment");
}
/// Add a CC1 and CC1AS option to specify the macro file path prefix map.
@@ -5717,7 +5724,7 @@
const char *DebugCompilationDir =
addDebugCompDirArg(Args, CmdArgs, D.getVFS());
- addDebugPrefixMapArg(D, Args, CmdArgs);
+ addDebugPrefixMapArg(D, TC, Args, CmdArgs);
if (Arg *A = Args.getLastArg(options::OPT_ftemplate_depth_,
options::OPT_ftemplate_depth_EQ)) {
@@ -7785,7 +7792,8 @@
DebugInfoKind = (WantDebug ? codegenoptions::DebugInfoConstructor
: codegenoptions::NoDebugInfo);
- addDebugPrefixMapArg(getToolChain().getDriver(), Args, CmdArgs);
+ addDebugPrefixMapArg(getToolChain().getDriver(), getToolChain(), Args,
+ CmdArgs);
// Set the AT_producer to the clang version when using the integrated
// assembler on assembly source files.
Index: clang/include/clang/Driver/ToolChain.h
===================================================================
--- clang/include/clang/Driver/ToolChain.h
+++ clang/include/clang/Driver/ToolChain.h
@@ -513,6 +513,9 @@
/// compile unit information.
virtual bool UseDwarfDebugFlags() const { return false; }
+ /// Add an additional -fdebug-prefix-map entry.
+ virtual std::string GetGlobalDebugPathRemapping() const { return {}; }
+
// Return the DWARF version to emit, in the absence of arguments
// to the contrary.
virtual unsigned GetDefaultDwarfVersion() const { return 5; }
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits