forked from OSchip/llvm-project
Darwin: introduce a global override for debug prefix map entries.
This patch adds a new Darwin clang driver environment variable in the spirit of RC_DEBUG_OPTIONS, called RC_DEBUG_PREFIX_MAP, which allows a meta build tool to add one additional -fdebug-prefix-map entry without the knowledge of the build system. rdar://85224675 Differential Revision: https://reviews.llvm.org/D119850
This commit is contained in:
parent
9a460b848f
commit
0604d86c07
|
@ -513,6 +513,9 @@ public:
|
|||
/// 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; }
|
||||
|
|
|
@ -668,17 +668,24 @@ static void addDebugObjectName(const ArgList &Args, ArgStringList &CmdArgs,
|
|||
}
|
||||
|
||||
/// 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 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
|
|||
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 @@ void ClangAs::ConstructJob(Compilation &C, const JobAction &JA,
|
|||
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.
|
||||
|
|
|
@ -2843,6 +2843,12 @@ bool MachO::UseDwarfDebugFlags() const {
|
|||
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 &&
|
||||
|
|
|
@ -267,6 +267,7 @@ public:
|
|||
bool SupportsProfiling() const override;
|
||||
|
||||
bool UseDwarfDebugFlags() const override;
|
||||
std::string GetGlobalDebugPathRemapping() const override;
|
||||
|
||||
llvm::ExceptionHandling
|
||||
GetExceptionModel(const llvm::opt::ArgList &Args) const override {
|
||||
|
|
|
@ -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'
|
|
@ -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'
|
Loading…
Reference in New Issue