| This patch is under review at https://reviews.llvm.org/D44788 |
| It makes clang accept the option -glto-dwo-dir and pass |
| it to llvm to enable thinlto with debug fission. |
| |
| --- a/tools/clang/docs/ClangCommandLineReference.rst |
| +++ b/tools/clang/docs/ClangCommandLineReference.rst |
| @@ -2587,6 +2587,8 @@ Debug information flags |
| |
| .. option:: -gstrict-dwarf, -gno-strict-dwarf |
| |
| +.. option:: -glto-dwo-dir=<arg> |
| + |
| .. option:: -gz |
| |
| DWARF debug sections compression type |
| diff --git a/include/clang/Driver/Options.td b/include/clang/Driver/Options.td |
| index 6925157d2e..83a4f5bc86 100644 |
| --- a/tools/clang/include/clang/Driver/Options.td |
| +++ b/tools/clang/include/clang/Driver/Options.td |
| @@ -1700,6 +1700,7 @@ def gno_strict_dwarf : Flag<["-"], "gno-strict-dwarf">, Group<g_flags_Group>; |
| def gcolumn_info : Flag<["-"], "gcolumn-info">, Group<g_flags_Group>, Flags<[CoreOption]>; |
| def gno_column_info : Flag<["-"], "gno-column-info">, Group<g_flags_Group>, Flags<[CoreOption]>; |
| def gsplit_dwarf : Flag<["-"], "gsplit-dwarf">, Group<g_flags_Group>; |
| +def glto_dwo_dir_EQ : Joined<["-"], "glto-dwo-dir=">, Group<g_flags_Group>; |
| def ggnu_pubnames : Flag<["-"], "ggnu-pubnames">, Group<g_flags_Group>, Flags<[CC1Option]>; |
| def gdwarf_aranges : Flag<["-"], "gdwarf-aranges">, Group<g_flags_Group>; |
| def gmodules : Flag <["-"], "gmodules">, Group<gN_Group>, |
| diff --git a/lib/Driver/ToolChains/CommonArgs.cpp b/lib/Driver/ToolChains/CommonArgs.cpp |
| index 17ab82e97c..67992a655e 100644 |
| --- a/tools/clang/lib/Driver/ToolChains/CommonArgs.cpp |
| +++ b/tools/clang/lib/Driver/ToolChains/CommonArgs.cpp |
| @@ -417,6 +417,19 @@ |
| if (IsThinLTO) |
| CmdArgs.push_back("-plugin-opt=thinlto"); |
| |
| + if (Arg *A = Args.getLastArg(options::OPT_glto_dwo_dir_EQ)) { |
| + const char *Objcopy = |
| + Args.MakeArgString(ToolChain.GetProgramPath(CLANG_DEFAULT_OBJCOPY)); |
| + CmdArgs.push_back( |
| + Args.MakeArgString(Twine("-plugin-opt=objcopy=") + Objcopy)); |
| + StringRef Dwo_Dir = A->getValue(); |
| + SmallString<1024> DwoDir; |
| + llvm::sys::path::native(Dwo_Dir, DwoDir); |
| + llvm::sys::path::append(DwoDir, Twine(Output.getFilename()) + "_dwo"); |
| + CmdArgs.push_back( |
| + Args.MakeArgString(Twine("-plugin-opt=dwo_dir=") + DwoDir)); |
| + } |
| + |
| if (unsigned Parallelism = getLTOParallelism(Args, ToolChain.getDriver())) |
| CmdArgs.push_back( |
| Args.MakeArgString("-plugin-opt=jobs=" + Twine(Parallelism))); |