From: Yaxun (Sam) Liu Date: Mon, 14 Sep 2020 18:21:30 +0000 (-0400) Subject: recommit [HIP] Fix -gsplit-dwarf option X-Git-Tag: llvmorg-13-init~11166 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=e6d50b4f22dc6bbf0b0b40cfdab172bf5c1694e1;p=platform%2Fupstream%2Fllvm.git recommit [HIP] Fix -gsplit-dwarf option recommit e50465ecefc964e5700df26fc7e02a673eed085a 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. --- diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp index 0518dc2..12b3c86 100644 --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -4810,7 +4810,7 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA, (isa(JA) || isa(JA) || isa(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."); diff --git a/clang/lib/Driver/ToolChains/CommonArgs.cpp b/clang/lib/Driver/ToolChains/CommonArgs.cpp index 5dc5d83..f0ab0ef 100644 --- a/clang/lib/Driver/ToolChains/CommonArgs.cpp +++ b/clang/lib/Driver/ToolChains/CommonArgs.cpp @@ -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); } diff --git a/clang/lib/Driver/ToolChains/CommonArgs.h b/clang/lib/Driver/ToolChains/CommonArgs.h index 0028ea0..4947c33b 100644 --- a/clang/lib/Driver/ToolChains/CommonArgs.h +++ b/clang/lib/Driver/ToolChains/CommonArgs.h @@ -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, diff --git a/clang/lib/Driver/ToolChains/Gnu.cpp b/clang/lib/Driver/ToolChains/Gnu.cpp index 7f7a395..68a75db 100644 --- a/clang/lib/Driver/ToolChains/Gnu.cpp +++ b/clang/lib/Driver/ToolChains/Gnu.cpp @@ -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 { diff --git a/clang/lib/Driver/ToolChains/MinGW.cpp b/clang/lib/Driver/ToolChains/MinGW.cpp index ea9d29a..4267af6 100644 --- a/clang/lib/Driver/ToolChains/MinGW.cpp +++ b/clang/lib/Driver/ToolChains/MinGW.cpp @@ -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, diff --git a/clang/test/Driver/hip-gsplit-dwarf-options.hip b/clang/test/Driver/hip-gsplit-dwarf-options.hip new file mode 100644 index 0000000..9f735c0 --- /dev/null +++ b/clang/test/Driver/hip-gsplit-dwarf-options.hip @@ -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"}}