diff options
| -rw-r--r-- | clang/lib/Driver/ToolChains/Clang.cpp | 4 | ||||
| -rw-r--r-- | clang/lib/Driver/ToolChains/CommonArgs.cpp | 24 | ||||
| -rw-r--r-- | clang/lib/Driver/ToolChains/CommonArgs.h | 2 | ||||
| -rw-r--r-- | clang/lib/Driver/ToolChains/Gnu.cpp | 2 | ||||
| -rw-r--r-- | clang/lib/Driver/ToolChains/MinGW.cpp | 2 | 
5 files changed, 21 insertions, 13 deletions
diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp index bbc2958697f..00b9a7868a0 100644 --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -4083,7 +4083,7 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,    const char *SplitDWARFOut;    if (SplitDWARF) {      CmdArgs.push_back("-split-dwarf-file"); -    SplitDWARFOut = SplitDebugName(Args, Output); +    SplitDWARFOut = SplitDebugName(Args, Input, Output);      CmdArgs.push_back(SplitDWARFOut);    } @@ -6137,7 +6137,7 @@ void ClangAs::ConstructJob(Compilation &C, const JobAction &JA,    if ((getDebugFissionKind(D, Args, A) == DwarfFissionKind::Split) &&        (T.isOSLinux() || T.isOSFuchsia())) {      CmdArgs.push_back("-split-dwarf-file"); -    CmdArgs.push_back(SplitDebugName(Args, Output)); +    CmdArgs.push_back(SplitDebugName(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 cff04d21590..16548c2aa41 100644 --- a/clang/lib/Driver/ToolChains/CommonArgs.cpp +++ b/clang/lib/Driver/ToolChains/CommonArgs.cpp @@ -816,18 +816,26 @@ bool tools::areOptimizationsEnabled(const ArgList &Args) {    return false;  } -const char *tools::SplitDebugName(const ArgList &Args, +const char *tools::SplitDebugName(const ArgList &Args, const InputInfo &Input,                                    const InputInfo &Output) { -  SmallString<128> F(Output.isFilename() -                         ? Output.getFilename() -                         : llvm::sys::path::stem(Output.getBaseInput())); -    if (Arg *A = Args.getLastArg(options::OPT_gsplit_dwarf_EQ))      if (StringRef(A->getValue()) == "single") -      return Args.MakeArgString(F); +      return Args.MakeArgString(Output.getFilename()); -  llvm::sys::path::replace_extension(F, "dwo"); -  return Args.MakeArgString(F); +  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"); +    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"); +    T += F; +    return Args.MakeArgString(F); +  }  }  void tools::SplitDebugInfo(const ToolChain &TC, Compilation &C, const Tool &T, diff --git a/clang/lib/Driver/ToolChains/CommonArgs.h b/clang/lib/Driver/ToolChains/CommonArgs.h index 496396f0919..9c64a50d565 100644 --- a/clang/lib/Driver/ToolChains/CommonArgs.h +++ b/clang/lib/Driver/ToolChains/CommonArgs.h @@ -62,7 +62,7 @@ void AddHIPLinkerScript(const ToolChain &TC, Compilation &C,                          const Tool &T);  const char *SplitDebugName(const llvm::opt::ArgList &Args, -                           const InputInfo &Output); +                           const InputInfo &Input, const InputInfo &Output);  void SplitDebugInfo(const ToolChain &TC, Compilation &C, const Tool &T,                      const JobAction &JA, const llvm::opt::ArgList &Args, diff --git a/clang/lib/Driver/ToolChains/Gnu.cpp b/clang/lib/Driver/ToolChains/Gnu.cpp index 07846328c54..178e7f72c74 100644 --- a/clang/lib/Driver/ToolChains/Gnu.cpp +++ b/clang/lib/Driver/ToolChains/Gnu.cpp @@ -826,7 +826,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, Output)); +                   SplitDebugName(Args, Inputs[0], Output));  }  namespace { diff --git a/clang/lib/Driver/ToolChains/MinGW.cpp b/clang/lib/Driver/ToolChains/MinGW.cpp index b08ca7a8454..ca41afeb989 100644 --- a/clang/lib/Driver/ToolChains/MinGW.cpp +++ b/clang/lib/Driver/ToolChains/MinGW.cpp @@ -53,7 +53,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, Output)); +                   SplitDebugName(Args, Inputs[0], Output));  }  void tools::MinGW::Linker::AddLibGCC(const ArgList &Args,  | 

