forked from OSchip/llvm-project
recommit [HIP] Fix -gsplit-dwarf option
recommit e50465ecef
with fix for
regression in lldb tests.
Two issues:
1. the directory part of original .dwo file was dropped
2. if the stem of the .dwo file contains '.', the last dot
and strings after that were removed
This recommit fixes those two issues.
This commit is contained in:
parent
c2deacd929
commit
e6d50b4f22
|
@ -4810,7 +4810,7 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
|
|||
(isa<AssembleJobAction>(JA) || isa<CompileJobAction>(JA) ||
|
||||
isa<BackendJobAction>(JA));
|
||||
if (SplitDWARF) {
|
||||
const char *SplitDWARFOut = SplitDebugName(Args, Input, Output);
|
||||
const char *SplitDWARFOut = SplitDebugName(JA, Args, Input, Output);
|
||||
CmdArgs.push_back("-split-dwarf-file");
|
||||
CmdArgs.push_back(SplitDWARFOut);
|
||||
if (DwarfFission == DwarfFissionKind::Split) {
|
||||
|
@ -7047,7 +7047,7 @@ void ClangAs::ConstructJob(Compilation &C, const JobAction &JA,
|
|||
if (getDebugFissionKind(D, Args, A) == DwarfFissionKind::Split &&
|
||||
T.isOSBinFormatELF()) {
|
||||
CmdArgs.push_back("-split-dwarf-output");
|
||||
CmdArgs.push_back(SplitDebugName(Args, Input, Output));
|
||||
CmdArgs.push_back(SplitDebugName(JA, Args, Input, Output));
|
||||
}
|
||||
|
||||
assert(Input.isFilename() && "Invalid input.");
|
||||
|
|
|
@ -902,8 +902,14 @@ bool tools::areOptimizationsEnabled(const ArgList &Args) {
|
|||
return false;
|
||||
}
|
||||
|
||||
const char *tools::SplitDebugName(const ArgList &Args, const InputInfo &Input,
|
||||
const char *tools::SplitDebugName(const JobAction &JA, const ArgList &Args,
|
||||
const InputInfo &Input,
|
||||
const InputInfo &Output) {
|
||||
auto AddPostfix = [JA](auto &F) {
|
||||
if (JA.getOffloadingDeviceKind() == Action::OFK_HIP)
|
||||
F += (Twine("_") + JA.getOffloadingArch()).str();
|
||||
F += ".dwo";
|
||||
};
|
||||
if (Arg *A = Args.getLastArg(options::OPT_gsplit_dwarf_EQ))
|
||||
if (StringRef(A->getValue()) == "single")
|
||||
return Args.MakeArgString(Output.getFilename());
|
||||
|
@ -911,14 +917,16 @@ const char *tools::SplitDebugName(const ArgList &Args, const InputInfo &Input,
|
|||
Arg *FinalOutput = Args.getLastArg(options::OPT_o);
|
||||
if (FinalOutput && Args.hasArg(options::OPT_c)) {
|
||||
SmallString<128> T(FinalOutput->getValue());
|
||||
llvm::sys::path::replace_extension(T, "dwo");
|
||||
llvm::sys::path::remove_filename(T);
|
||||
T += llvm::sys::path::stem(FinalOutput->getValue());
|
||||
AddPostfix(T);
|
||||
return Args.MakeArgString(T);
|
||||
} else {
|
||||
// Use the compilation dir.
|
||||
SmallString<128> T(
|
||||
Args.getLastArgValue(options::OPT_fdebug_compilation_dir));
|
||||
SmallString<128> F(llvm::sys::path::stem(Input.getBaseInput()));
|
||||
llvm::sys::path::replace_extension(F, "dwo");
|
||||
AddPostfix(F);
|
||||
T += F;
|
||||
return Args.MakeArgString(F);
|
||||
}
|
||||
|
|
|
@ -49,7 +49,7 @@ void AddRunTimeLibs(const ToolChain &TC, const Driver &D,
|
|||
llvm::opt::ArgStringList &CmdArgs,
|
||||
const llvm::opt::ArgList &Args);
|
||||
|
||||
const char *SplitDebugName(const llvm::opt::ArgList &Args,
|
||||
const char *SplitDebugName(const JobAction &JA, const llvm::opt::ArgList &Args,
|
||||
const InputInfo &Input, const InputInfo &Output);
|
||||
|
||||
void SplitDebugInfo(const ToolChain &TC, Compilation &C, const Tool &T,
|
||||
|
|
|
@ -939,7 +939,7 @@ void tools::gnutools::Assembler::ConstructJob(Compilation &C,
|
|||
if (Args.hasArg(options::OPT_gsplit_dwarf) &&
|
||||
getToolChain().getTriple().isOSLinux())
|
||||
SplitDebugInfo(getToolChain(), C, *this, JA, Args, Output,
|
||||
SplitDebugName(Args, Inputs[0], Output));
|
||||
SplitDebugName(JA, Args, Inputs[0], Output));
|
||||
}
|
||||
|
||||
namespace {
|
||||
|
|
|
@ -55,7 +55,7 @@ void tools::MinGW::Assembler::ConstructJob(Compilation &C, const JobAction &JA,
|
|||
|
||||
if (Args.hasArg(options::OPT_gsplit_dwarf))
|
||||
SplitDebugInfo(getToolChain(), C, *this, JA, Args, Output,
|
||||
SplitDebugName(Args, Inputs[0], Output));
|
||||
SplitDebugName(JA, Args, Inputs[0], Output));
|
||||
}
|
||||
|
||||
void tools::MinGW::Linker::AddLibGCC(const ArgList &Args,
|
||||
|
|
|
@ -0,0 +1,25 @@
|
|||
// REQUIRES: zlib, clang-driver, amdgpu-registered-target
|
||||
|
||||
// RUN: %clang -### -target x86_64-unknown-linux-gnu -c \
|
||||
// RUN: --offload-arch=gfx906:xnack+ %s -nogpulib -nogpuinc \
|
||||
// RUN: --offload-arch=gfx900 \
|
||||
// RUN: -ggdb -gsplit-dwarf 2>&1 | FileCheck %s
|
||||
|
||||
// RUN: %clang -### -target x86_64-unknown-linux-gnu -c \
|
||||
// RUN: -fgpu-rdc --offload-arch=gfx906:xnack+ %s -nogpulib -nogpuinc \
|
||||
// RUN: --offload-arch=gfx900 \
|
||||
// RUN: -ggdb -gsplit-dwarf 2>&1 | FileCheck %s
|
||||
|
||||
// RUN: %clang -### -target x86_64-unknown-linux-gnu \
|
||||
// RUN: --offload-arch=gfx906:xnack+ %s -nogpulib -nogpuinc \
|
||||
// RUN: --offload-arch=gfx900 \
|
||||
// RUN: -ggdb -gsplit-dwarf 2>&1 | FileCheck %s
|
||||
|
||||
// RUN: %clang -### -target x86_64-unknown-linux-gnu \
|
||||
// RUN: -fgpu-rdc --offload-arch=gfx906:xnack+ %s -nogpulib -nogpuinc \
|
||||
// RUN: --offload-arch=gfx900 \
|
||||
// RUN: -ggdb -gsplit-dwarf 2>&1 | FileCheck %s
|
||||
|
||||
// CHECK-DAG: {{".*clang.*".* "-target-cpu" "gfx906".* "-split-dwarf-output" "hip-gsplit-dwarf-options_gfx906:xnack\+.dwo"}}
|
||||
// CHECK-DAG: {{".*clang.*".* "-target-cpu" "gfx900".* "-split-dwarf-output" "hip-gsplit-dwarf-options_gfx900.dwo"}}
|
||||
// CHECK-DAG: {{".*clang.*".* "-target-cpu" "x86-64".* "-split-dwarf-output" "hip-gsplit-dwarf-options.dwo"}}
|
Loading…
Reference in New Issue