Index: include/clang/Driver/Options.td =================================================================== --- include/clang/Driver/Options.td +++ include/clang/Driver/Options.td @@ -1781,6 +1781,7 @@ def gcolumn_info : Flag<["-"], "gcolumn-info">, Group, Flags<[CoreOption]>; def gno_column_info : Flag<["-"], "gno-column-info">, Group, Flags<[CoreOption]>; def gsplit_dwarf : Flag<["-"], "gsplit-dwarf">, Group; +def gsplit_dwarf_EQ : Joined<["-"], "gsplit-dwarf=">, Group; def ggnu_pubnames : Flag<["-"], "ggnu-pubnames">, Group, Flags<[CC1Option]>; def gdwarf_aranges : Flag<["-"], "gdwarf-aranges">, Group; def gmodules : Flag <["-"], "gmodules">, Group, Index: lib/Driver/ToolChains/CommonArgs.cpp =================================================================== --- lib/Driver/ToolChains/CommonArgs.cpp +++ lib/Driver/ToolChains/CommonArgs.cpp @@ -416,6 +416,23 @@ CmdArgs.push_back(Args.MakeArgString(Twine("-plugin-opt=O") + OOpt)); } + if (Arg *A = Args.getLastArg(options::OPT_gsplit_dwarf_EQ)) { + 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 (Args.hasArg(options::OPT_gsplit_dwarf)) { + if (!Args.getLastArg(options::OPT_gsplit_dwarf_EQ)) { + CmdArgs.push_back( + Args.MakeArgString(Twine("-plugin-opt=dwo_dir=") + + Output.getFilename() + "_dwo")); + } + } + if (IsThinLTO) CmdArgs.push_back("-plugin-opt=thinlto"); Index: test/Driver/lto-dwo.c =================================================================== --- /dev/null +++ test/Driver/lto-dwo.c @@ -0,0 +1,12 @@ +// Confirm that -gsplit-dwarf=DIR is passed to linker + +// RUN: %clang -target x86_64-unknown-linux -### %s -flto=thin -gsplit-dwarf=DIR -o a.out 2> %t +// RUN: FileCheck -check-prefix=CHECK-LINK-DWO-DIR < %t %s +// +// CHECK-LINK-DWO-DIR: "-plugin-opt=dwo_dir=DIR{{.*}}a.out_dwo" +// + +// RUN: %clang -target x86_64-unknown-linux -### %s -flto=thin -gsplit-dwarf -o a.out 2> %t +// RUN: FileCheck -check-prefix=CHECK-LINK-DWO-DIR-DEFAULT < %t %s +// +// CHECK-LINK-DWO-DIR-DEFAULT: "-plugin-opt=dwo_dir=a.out_dwo"