[PATCH] D52524: Add -Wno-poison-system-directories flag
yunlian created this revision. Herald added a subscriber: cfe-commits. When using clang as a cross-compiler, we should not use system headers or libraries to do the compilation. This CL creates a new warning flag -Wpoison-system-directories support to emit warnings if --sysroot is set and headers or libraries from common host system location are used. Repository: rC Clang https://reviews.llvm.org/D52524 Files: include/clang/Basic/DiagnosticCommonKinds.td include/clang/Basic/DiagnosticGroups.td include/clang/Frontend/Utils.h lib/Frontend/CompilerInstance.cpp lib/Frontend/InitHeaderSearch.cpp Index: lib/Frontend/InitHeaderSearch.cpp === --- lib/Frontend/InitHeaderSearch.cpp +++ lib/Frontend/InitHeaderSearch.cpp @@ -45,12 +45,13 @@ HeaderSearch bool Verbose; std::string IncludeSysroot; + DiagnosticsEngine bool HasSysroot; public: - InitHeaderSearch(HeaderSearch , bool verbose, StringRef sysroot) -: Headers(HS), Verbose(verbose), IncludeSysroot(sysroot), + InitHeaderSearch(HeaderSearch , bool verbose, StringRef sysroot, DiagnosticsEngine ) +: Headers(HS), Verbose(verbose), IncludeSysroot(sysroot), Diag(Diag), HasSysroot(!(sysroot.empty() || sysroot == "/")) { } @@ -138,6 +139,17 @@ SmallString<256> MappedPathStorage; StringRef MappedPathStr = Path.toStringRef(MappedPathStorage); + // If use system headers/libraries while cross-compiling, + // emit the warning. + if (HasSysroot) { +if(MappedPathStr.startswith("/usr/include") || + MappedPathStr.startswith("/usr/local/include") || + MappedPathStr.startswith("/lib") || + MappedPathStr.startswith("/usr/local/lib") { + Diag.Report(diag::warn_poison_system_directories) << MappedPathStr.str(); + } + } + // Compute the DirectoryLookup type. SrcMgr::CharacteristicKind Type; if (Group == Quoted || Group == Angled || Group == IndexHeaderMap) { @@ -663,8 +675,9 @@ void clang::ApplyHeaderSearchOptions(HeaderSearch , const HeaderSearchOptions , const LangOptions , + DiagnosticsEngine , const llvm::Triple ) { - InitHeaderSearch Init(HS, HSOpts.Verbose, HSOpts.Sysroot); + InitHeaderSearch Init(HS, HSOpts.Verbose, HSOpts.Sysroot, Diag); // Add the user defined entries. for (unsigned i = 0, e = HSOpts.UserEntries.size(); i != e; ++i) { Index: lib/Frontend/CompilerInstance.cpp === --- lib/Frontend/CompilerInstance.cpp +++ lib/Frontend/CompilerInstance.cpp @@ -416,7 +416,7 @@ HeaderSearchTriple = >getAuxTargetInfo()->getTriple(); ApplyHeaderSearchOptions(PP->getHeaderSearchInfo(), getHeaderSearchOpts(), - PP->getLangOpts(), *HeaderSearchTriple); + PP->getLangOpts(), PP->getDiagnostics(), *HeaderSearchTriple); PP->setPreprocessedOutput(getPreprocessorOutputOpts().ShowCPP); Index: include/clang/Frontend/Utils.h === --- include/clang/Frontend/Utils.h +++ include/clang/Frontend/Utils.h @@ -63,6 +63,7 @@ void ApplyHeaderSearchOptions(HeaderSearch , const HeaderSearchOptions , const LangOptions , + DiagnosticsEngine , const llvm::Triple ); /// InitializePreprocessor - Initialize the preprocessor getting it and the Index: include/clang/Basic/DiagnosticGroups.td === --- include/clang/Basic/DiagnosticGroups.td +++ include/clang/Basic/DiagnosticGroups.td @@ -1031,3 +1031,7 @@ // A warning group specifically for warnings related to function // multiversioning. def FunctionMultiVersioning : DiagGroup<"function-multiversion">; + +// A warning group for warnings about including system headers when +// cross-compiling. +def PoisonSystemDirectories : DiagGroup<"poison-system-directories">; Index: include/clang/Basic/DiagnosticCommonKinds.td === --- include/clang/Basic/DiagnosticCommonKinds.td +++ include/clang/Basic/DiagnosticCommonKinds.td @@ -248,4 +248,7 @@ // OpenMP def err_omp_more_one_clause : Error< "directive '#pragma omp %0' cannot contain more than one '%1' clause%select{| with '%3' name modifier| with 'source' dependence}2">; + +// Poison system directories. +def warn_poison_system_directories : Warning <"include location '%0' is unsafe for cross-compilation">, InGroup; } Index: lib/Frontend/InitHeaderSearch.cpp === --- lib/Frontend/InitHeaderSearch.cpp +++ lib/Frontend/InitHeaderSearch.cpp @@ -45,12 +45,13 @@ HeaderSearch
[PATCH] D48680: Add missing visibility annotation for __base
yunlian created this revision. Herald added subscribers: cfe-commits, ldionne. This adds missing visibility annotation for __base. Repository: rCXX libc++ https://reviews.llvm.org/D48680 Files: include/functional Index: include/functional === --- include/functional +++ include/functional @@ -1458,7 +1458,7 @@ namespace __function { -template class __base; +template class _LIBCPP_TEMPLATE_VIS __base; template class __base<_Rp(_ArgTypes...)> Index: include/functional === --- include/functional +++ include/functional @@ -1458,7 +1458,7 @@ namespace __function { -template class __base; +template class _LIBCPP_TEMPLATE_VIS __base; template class __base<_Rp(_ArgTypes...)> ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D44788: Add an option to support debug fission on implicit ThinLTO.
This revision was automatically updated to reflect the committed changes. Closed by commit rL335546: Add an option to support debug fission on implicit ThinLTO. (authored by yunlian, committed by ). Herald added a subscriber: llvm-commits. Changed prior to commit: https://reviews.llvm.org/D44788?vs=152794=152797#toc Repository: rL LLVM https://reviews.llvm.org/D44788 Files: cfe/trunk/lib/Driver/ToolChains/CommonArgs.cpp cfe/trunk/test/Driver/lto-dwo.c Index: cfe/trunk/test/Driver/lto-dwo.c === --- cfe/trunk/test/Driver/lto-dwo.c +++ cfe/trunk/test/Driver/lto-dwo.c @@ -0,0 +1,6 @@ +// Confirm that -gsplit-dwarf=DIR is passed to linker + +// 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" Index: cfe/trunk/lib/Driver/ToolChains/CommonArgs.cpp === --- cfe/trunk/lib/Driver/ToolChains/CommonArgs.cpp +++ cfe/trunk/lib/Driver/ToolChains/CommonArgs.cpp @@ -416,6 +416,12 @@ CmdArgs.push_back(Args.MakeArgString(Twine("-plugin-opt=O") + OOpt)); } + if (Args.hasArg(options::OPT_gsplit_dwarf)) { +CmdArgs.push_back( +Args.MakeArgString(Twine("-plugin-opt=dwo_dir=") + +Output.getFilename() + "_dwo")); + } + if (IsThinLTO) CmdArgs.push_back("-plugin-opt=thinlto"); Index: cfe/trunk/test/Driver/lto-dwo.c === --- cfe/trunk/test/Driver/lto-dwo.c +++ cfe/trunk/test/Driver/lto-dwo.c @@ -0,0 +1,6 @@ +// Confirm that -gsplit-dwarf=DIR is passed to linker + +// 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" Index: cfe/trunk/lib/Driver/ToolChains/CommonArgs.cpp === --- cfe/trunk/lib/Driver/ToolChains/CommonArgs.cpp +++ cfe/trunk/lib/Driver/ToolChains/CommonArgs.cpp @@ -416,6 +416,12 @@ CmdArgs.push_back(Args.MakeArgString(Twine("-plugin-opt=O") + OOpt)); } + if (Args.hasArg(options::OPT_gsplit_dwarf)) { +CmdArgs.push_back( +Args.MakeArgString(Twine("-plugin-opt=dwo_dir=") + +Output.getFilename() + "_dwo")); + } + if (IsThinLTO) CmdArgs.push_back("-plugin-opt=thinlto"); ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D44788: Add an option to support debug fission on implicit ThinLTO.
yunlian updated this revision to Diff 152794. https://reviews.llvm.org/D44788 Files: lib/Driver/ToolChains/CommonArgs.cpp test/Driver/lto-dwo.c Index: test/Driver/lto-dwo.c === --- /dev/null +++ test/Driver/lto-dwo.c @@ -0,0 +1,6 @@ +// Confirm that -gsplit-dwarf=DIR is passed to linker + +// 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" Index: lib/Driver/ToolChains/CommonArgs.cpp === --- lib/Driver/ToolChains/CommonArgs.cpp +++ lib/Driver/ToolChains/CommonArgs.cpp @@ -416,6 +416,12 @@ CmdArgs.push_back(Args.MakeArgString(Twine("-plugin-opt=O") + OOpt)); } + if (Args.hasArg(options::OPT_gsplit_dwarf)) { +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,6 @@ +// Confirm that -gsplit-dwarf=DIR is passed to linker + +// 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" Index: lib/Driver/ToolChains/CommonArgs.cpp === --- lib/Driver/ToolChains/CommonArgs.cpp +++ lib/Driver/ToolChains/CommonArgs.cpp @@ -416,6 +416,12 @@ CmdArgs.push_back(Args.MakeArgString(Twine("-plugin-opt=O") + OOpt)); } + if (Args.hasArg(options::OPT_gsplit_dwarf)) { +CmdArgs.push_back( +Args.MakeArgString(Twine("-plugin-opt=dwo_dir=") + +Output.getFilename() + "_dwo")); + } + if (IsThinLTO) CmdArgs.push_back("-plugin-opt=thinlto"); ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D44788: Add an option to support debug fission on implicit ThinLTO.
yunlian marked 2 inline comments as done. yunlian added a comment. ping? https://reviews.llvm.org/D44788 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D44788: Add an option to support debug fission on implicit ThinLTO.
yunlian updated this revision to Diff 152120. yunlian added a comment. Removed redundant 'if' statement https://reviews.llvm.org/D44788 Files: include/clang/Driver/Options.td lib/Driver/ToolChains/CommonArgs.cpp test/Driver/lto-dwo.c 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" Index: lib/Driver/ToolChains/CommonArgs.cpp === --- lib/Driver/ToolChains/CommonArgs.cpp +++ lib/Driver/ToolChains/CommonArgs.cpp @@ -416,6 +416,20 @@ 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)); + } + else if (Args.hasArg(options::OPT_gsplit_dwarf)) { +CmdArgs.push_back( +Args.MakeArgString(Twine("-plugin-opt=dwo_dir=") + +Output.getFilename() + "_dwo")); + } + if (IsThinLTO) CmdArgs.push_back("-plugin-opt=thinlto"); Index: include/clang/Driver/Options.td === --- include/clang/Driver/Options.td +++ include/clang/Driver/Options.td @@ -1788,6 +1788,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: 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" Index: lib/Driver/ToolChains/CommonArgs.cpp === --- lib/Driver/ToolChains/CommonArgs.cpp +++ lib/Driver/ToolChains/CommonArgs.cpp @@ -416,6 +416,20 @@ 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)); + } + else if (Args.hasArg(options::OPT_gsplit_dwarf)) { +CmdArgs.push_back( +Args.MakeArgString(Twine("-plugin-opt=dwo_dir=") + +Output.getFilename() + "_dwo")); + } + if (IsThinLTO) CmdArgs.push_back("-plugin-opt=thinlto"); Index: include/clang/Driver/Options.td === --- include/clang/Driver/Options.td +++ include/clang/Driver/Options.td @@ -1788,6 +1788,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, ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D44788: Add an option to support debug fission on implicit ThinLTO.
yunlian added inline comments. Comment at: lib/Driver/ToolChains/CommonArgs.cpp:428 + + if (Args.hasArg(options::OPT_gsplit_dwarf)) { +if (!Args.getLastArg(options::OPT_gsplit_dwarf_EQ)) { pcc wrote: > If you make this `else if (Args.hasArg(options::OPT_gsplit_dwarf)) {` you > wouldn't need the if on line 429. Will do. https://reviews.llvm.org/D44788 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D44788: Add an option to support debug fission on implicit ThinLTO.
yunlian added a comment. ping? https://reviews.llvm.org/D44788 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D44788: Add an option to support debug fission on implicit ThinLTO.
yunlian added a comment. ping? https://reviews.llvm.org/D44788 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D44788: Add an option to support debug fission on implicit ThinLTO.
yunlian updated this revision to Diff 150419. yunlian added a comment. Makes the default value to /path/to/binary_dwo, when DWO_DIR is provided, make the path to DWO_DIR/path/to/binary_dwo https://reviews.llvm.org/D44788 Files: include/clang/Driver/Options.td lib/Driver/ToolChains/CommonArgs.cpp test/Driver/lto-dwo.c 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" 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: 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: 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" 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: 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,
[PATCH] D44788: Add an option to support debug fission on implicit ThinLTO.
yunlian updated this revision to Diff 150028. https://reviews.llvm.org/D44788 Files: include/clang/Driver/Options.td lib/Driver/ToolChains/CommonArgs.cpp test/Driver/lto-dwo.c 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 2> %t +// RUN: FileCheck -check-prefix=CHECK-LINK-DWO-DIR < %t %s +// +// CHECK-LINK-DWO-DIR: "-plugin-opt=dwo_dir=DIR" +// + +// RUN: %clang -target x86_64-unknown-linux -### %s -flto=thin -gsplit-dwarf 2> %t +// RUN: FileCheck -check-prefix=CHECK-LINK-DWO-DIR-DEFAULT < %t %s +// +// CHECK-LINK-DWO-DIR-DEFAULT: "-plugin-opt=dwo_dir=." Index: lib/Driver/ToolChains/CommonArgs.cpp === --- lib/Driver/ToolChains/CommonArgs.cpp +++ lib/Driver/ToolChains/CommonArgs.cpp @@ -417,6 +417,19 @@ if (IsThinLTO) CmdArgs.push_back("-plugin-opt=thinlto"); + if (Arg *A = Args.getLastArg(options::OPT_gsplit_dwarf_EQ)) { +StringRef DWO_Dir = A->getValue(); +CmdArgs.push_back( +Args.MakeArgString(Twine("-plugin-opt=dwo_dir=") + DWO_Dir)); + } + + 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=."))); +} + } + if (unsigned Parallelism = getLTOParallelism(Args, ToolChain.getDriver())) CmdArgs.push_back( Args.MakeArgString("-plugin-opt=jobs=" + Twine(Parallelism))); Index: include/clang/Driver/Options.td === --- include/clang/Driver/Options.td +++ include/clang/Driver/Options.td @@ -1762,6 +1762,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: 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 2> %t +// RUN: FileCheck -check-prefix=CHECK-LINK-DWO-DIR < %t %s +// +// CHECK-LINK-DWO-DIR: "-plugin-opt=dwo_dir=DIR" +// + +// RUN: %clang -target x86_64-unknown-linux -### %s -flto=thin -gsplit-dwarf 2> %t +// RUN: FileCheck -check-prefix=CHECK-LINK-DWO-DIR-DEFAULT < %t %s +// +// CHECK-LINK-DWO-DIR-DEFAULT: "-plugin-opt=dwo_dir=." Index: lib/Driver/ToolChains/CommonArgs.cpp === --- lib/Driver/ToolChains/CommonArgs.cpp +++ lib/Driver/ToolChains/CommonArgs.cpp @@ -417,6 +417,19 @@ if (IsThinLTO) CmdArgs.push_back("-plugin-opt=thinlto"); + if (Arg *A = Args.getLastArg(options::OPT_gsplit_dwarf_EQ)) { +StringRef DWO_Dir = A->getValue(); +CmdArgs.push_back( +Args.MakeArgString(Twine("-plugin-opt=dwo_dir=") + DWO_Dir)); + } + + 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=."))); +} + } + if (unsigned Parallelism = getLTOParallelism(Args, ToolChain.getDriver())) CmdArgs.push_back( Args.MakeArgString("-plugin-opt=jobs=" + Twine(Parallelism))); Index: include/clang/Driver/Options.td === --- include/clang/Driver/Options.td +++ include/clang/Driver/Options.td @@ -1762,6 +1762,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, ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D44788: Add an option to support debug fission on implicit ThinLTO.
yunlian marked an inline comment as done. yunlian added a comment. Herald added a subscriber: steven_wu. ping? https://reviews.llvm.org/D44788 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D44788: Add an option to support debug fission on implicit ThinLTO.
yunlian updated this revision to Diff 146698. yunlian edited the summary of this revision. yunlian added a comment. Herald added subscribers: JDevlieghere, aprantl. Use the option -gsplit-dwarf to make it more consistent. https://reviews.llvm.org/D44788 Files: include/clang/Driver/Options.td lib/Driver/ToolChains/CommonArgs.cpp test/Driver/lto-dwo.c Index: lib/Driver/ToolChains/CommonArgs.cpp === --- lib/Driver/ToolChains/CommonArgs.cpp +++ lib/Driver/ToolChains/CommonArgs.cpp @@ -417,6 +417,27 @@ if (IsThinLTO) CmdArgs.push_back("-plugin-opt=thinlto"); + if (Arg *A = Args.getLastArg(options::OPT_gsplit_dwarf_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(); +CmdArgs.push_back( +Args.MakeArgString(Twine("-plugin-opt=dwo_dir=") + DWO_Dir)); + } + + if (Args.hasArg(options::OPT_gsplit_dwarf)) { +if (!Args.getLastArg(options::OPT_gsplit_dwarf_EQ)) { + const char *Objcopy = + Args.MakeArgString(ToolChain.GetProgramPath(CLANG_DEFAULT_OBJCOPY)); + CmdArgs.push_back( + Args.MakeArgString(Twine("-plugin-opt=objcopy=") + Objcopy)); + CmdArgs.push_back( + Args.MakeArgString(Twine("-plugin-opt=dwo_dir=."))); +} + } + if (unsigned Parallelism = getLTOParallelism(Args, ToolChain.getDriver())) CmdArgs.push_back( Args.MakeArgString("-plugin-opt=jobs=" + Twine(Parallelism))); Index: include/clang/Driver/Options.td === --- include/clang/Driver/Options.td +++ include/clang/Driver/Options.td @@ -1762,6 +1762,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: test/Driver/lto-dwo.c === --- /dev/null +++ test/Driver/lto-dwo.c @@ -0,0 +1,16 @@ +// Confirm that -gsplit-dwarf=DIR is passed to linker + +// RUN: %clang -target x86_64-unknown-linux -### %s -flto=thin -gsplit-dwarf=DIR 2> %t +// RUN: FileCheck -check-prefix=CHECK-LINK-DWO-DIR < %t %s +// RUN: FileCheck -check-prefix=CHECK-LINK-OBJCOPY < %t %s +// +// CHECK-LINK-DWO-DIR: "-plugin-opt=dwo_dir=DIR" +// CHECK-LINK-OBJCOPY: "-plugin-opt=objcopy={{.*}}objcopy" +// + +// RUN: %clang -target x86_64-unknown-linux -### %s -flto=thin -gsplit-dwarf 2> %t +// RUN: FileCheck -check-prefix=CHECK-LINK-DWO-DIR-DEFAULT < %t %s +// RUN: FileCheck -check-prefix=CHECK-LINK-OBJCOPY-DEFAULT < %t %s +// +// CHECK-LINK-DWO-DIR-DEFAULT: "-plugin-opt=dwo_dir=." +// CHECK-LINK-OBJCOPY-DEFAULT: "-plugin-opt=objcopy={{.*}}objcopy" Index: lib/Driver/ToolChains/CommonArgs.cpp === --- lib/Driver/ToolChains/CommonArgs.cpp +++ lib/Driver/ToolChains/CommonArgs.cpp @@ -417,6 +417,27 @@ if (IsThinLTO) CmdArgs.push_back("-plugin-opt=thinlto"); + if (Arg *A = Args.getLastArg(options::OPT_gsplit_dwarf_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(); +CmdArgs.push_back( +Args.MakeArgString(Twine("-plugin-opt=dwo_dir=") + DWO_Dir)); + } + + if (Args.hasArg(options::OPT_gsplit_dwarf)) { +if (!Args.getLastArg(options::OPT_gsplit_dwarf_EQ)) { + const char *Objcopy = + Args.MakeArgString(ToolChain.GetProgramPath(CLANG_DEFAULT_OBJCOPY)); + CmdArgs.push_back( + Args.MakeArgString(Twine("-plugin-opt=objcopy=") + Objcopy)); + CmdArgs.push_back( + Args.MakeArgString(Twine("-plugin-opt=dwo_dir=."))); +} + } + if (unsigned Parallelism = getLTOParallelism(Args, ToolChain.getDriver())) CmdArgs.push_back( Args.MakeArgString("-plugin-opt=jobs=" + Twine(Parallelism))); Index: include/clang/Driver/Options.td === --- include/clang/Driver/Options.td +++ include/clang/Driver/Options.td @@ -1762,6 +1762,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 :
[PATCH] D44788: Add an option to support debug fission on implicit ThinLTO.
yunlian added a comment. ping? https://reviews.llvm.org/D44788 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D44788: Add an option to support debug fission on implicit ThinLTO.
yunlian added a comment. ping? https://reviews.llvm.org/D44788 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D44788: Add an option to support debug fission on implicit ThinLTO.
yunlian added a comment. I prefer to have a dedicated directory to store all the .dwo files. As dblaikie said, all the .dwo files are temporary files. In addition, in order to differentiate the .dwo files generated by different link stage with the same .o, we need to add some suffixes to the .dwo file. So for a file a.o, we may need to generate a .dwo named a._${number}_${random_string}.dwo, which is not neat. Furthermore, we need to dealing with archive files. In this case, we may need to generate multiple .dwo files for a single archive files. https://reviews.llvm.org/D44788 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D44788: Add an option to support debug fission on implicit ThinLTO.
yunlian updated this revision to Diff 140857. https://reviews.llvm.org/D44788 Files: docs/ClangCommandLineReference.rst include/clang/Driver/Options.td lib/Driver/ToolChains/CommonArgs.cpp test/Driver/lto-dwo.c Index: test/Driver/lto-dwo.c === --- /dev/null +++ test/Driver/lto-dwo.c @@ -0,0 +1,8 @@ +// Confirm that -glto-dwo-dir=DIR is passed to linker + +// RUN: %clang -target x86_64-unknown-linux -### %s -flto=thin -glto-dwo-dir=DIR 2> %t +// RUN: FileCheck -check-prefix=CHECK-LINK-DWO-DIR < %t %s +// RUN: FileCheck -check-prefix=CHECK-LINK-OBJCOPY < %t %s +// +// CHECK-LINK-DWO-DIR: "-plugin-opt=dwo_dir=DIR" +// CHECK-LINK-OBJCOPY: "-plugin-opt=objcopy={{.*}}objcopy" Index: lib/Driver/ToolChains/CommonArgs.cpp === --- lib/Driver/ToolChains/CommonArgs.cpp +++ lib/Driver/ToolChains/CommonArgs.cpp @@ -415,6 +415,16 @@ 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(); +CmdArgs.push_back( +Args.MakeArgString(Twine("-plugin-opt=dwo_dir=") + DWO_Dir)); + } + if (unsigned Parallelism = getLTOParallelism(Args, D)) CmdArgs.push_back( Args.MakeArgString("-plugin-opt=jobs=" + Twine(Parallelism))); Index: include/clang/Driver/Options.td === --- include/clang/Driver/Options.td +++ include/clang/Driver/Options.td @@ -1700,6 +1700,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 glto_dwo_dir_EQ : Joined<["-"], "glto-dwo-dir=">, Group; def ggnu_pubnames : Flag<["-"], "ggnu-pubnames">, Group, Flags<[CC1Option]>; def gdwarf_aranges : Flag<["-"], "gdwarf-aranges">, Group; def gmodules : Flag <["-"], "gmodules">, Group, Index: docs/ClangCommandLineReference.rst === --- docs/ClangCommandLineReference.rst +++ docs/ClangCommandLineReference.rst @@ -2587,6 +2587,8 @@ .. option:: -gstrict-dwarf, -gno-strict-dwarf +.. option:: -glto-dwo-dir= + .. option:: -gz DWARF debug sections compression type Index: test/Driver/lto-dwo.c === --- /dev/null +++ test/Driver/lto-dwo.c @@ -0,0 +1,8 @@ +// Confirm that -glto-dwo-dir=DIR is passed to linker + +// RUN: %clang -target x86_64-unknown-linux -### %s -flto=thin -glto-dwo-dir=DIR 2> %t +// RUN: FileCheck -check-prefix=CHECK-LINK-DWO-DIR < %t %s +// RUN: FileCheck -check-prefix=CHECK-LINK-OBJCOPY < %t %s +// +// CHECK-LINK-DWO-DIR: "-plugin-opt=dwo_dir=DIR" +// CHECK-LINK-OBJCOPY: "-plugin-opt=objcopy={{.*}}objcopy" Index: lib/Driver/ToolChains/CommonArgs.cpp === --- lib/Driver/ToolChains/CommonArgs.cpp +++ lib/Driver/ToolChains/CommonArgs.cpp @@ -415,6 +415,16 @@ 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(); +CmdArgs.push_back( +Args.MakeArgString(Twine("-plugin-opt=dwo_dir=") + DWO_Dir)); + } + if (unsigned Parallelism = getLTOParallelism(Args, D)) CmdArgs.push_back( Args.MakeArgString("-plugin-opt=jobs=" + Twine(Parallelism))); Index: include/clang/Driver/Options.td === --- include/clang/Driver/Options.td +++ include/clang/Driver/Options.td @@ -1700,6 +1700,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 glto_dwo_dir_EQ : Joined<["-"], "glto-dwo-dir=">, Group; def ggnu_pubnames : Flag<["-"], "ggnu-pubnames">, Group, Flags<[CC1Option]>; def gdwarf_aranges : Flag<["-"], "gdwarf-aranges">, Group; def gmodules : Flag <["-"], "gmodules">, Group, Index: docs/ClangCommandLineReference.rst === --- docs/ClangCommandLineReference.rst +++ docs/ClangCommandLineReference.rst @@ -2587,6 +2587,8 @@ .. option:: -gstrict-dwarf, -gno-strict-dwarf +.. option:: -glto-dwo-dir= + .. option:: -gz DWARF debug sections
[PATCH] D44788: Add an option to support debug fission on implicit ThinLTO.
yunlian updated this revision to Diff 139956. https://reviews.llvm.org/D44788 Files: docs/ClangCommandLineReference.rst include/clang/Driver/Options.td lib/Driver/ToolChains/CommonArgs.cpp test/Driver/lto-dwo.c Index: lib/Driver/ToolChains/CommonArgs.cpp === --- lib/Driver/ToolChains/CommonArgs.cpp +++ lib/Driver/ToolChains/CommonArgs.cpp @@ -415,6 +415,16 @@ 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(); +CmdArgs.push_back( +Args.MakeArgString(Twine("-plugin-opt=dwo_dir=") + DWO_Dir)); + } + if (unsigned Parallelism = getLTOParallelism(Args, D)) CmdArgs.push_back( Args.MakeArgString("-plugin-opt=jobs=" + Twine(Parallelism))); Index: include/clang/Driver/Options.td === --- include/clang/Driver/Options.td +++ include/clang/Driver/Options.td @@ -1700,6 +1700,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 glto_dwo_dir_EQ : Joined<["-"], "glto-dwo-dir=">, Group; def ggnu_pubnames : Flag<["-"], "ggnu-pubnames">, Group, Flags<[CC1Option]>; def gdwarf_aranges : Flag<["-"], "gdwarf-aranges">, Group; def gmodules : Flag <["-"], "gmodules">, Group, Index: docs/ClangCommandLineReference.rst === --- docs/ClangCommandLineReference.rst +++ docs/ClangCommandLineReference.rst @@ -2587,6 +2587,8 @@ .. option:: -gstrict-dwarf, -gno-strict-dwarf +.. option:: -glto-dwo-dir= + .. option:: -gz DWARF debug sections compression type Index: test/Driver/lto-dwo.c === --- /dev/null +++ test/Driver/lto-dwo.c @@ -0,0 +1,8 @@ +// Confirm that -glto-dwo-dir=DIR is passed to linker + +// RUN: %clang -target x86_64-unknown-linux -### %s -flto=thin -glto-dwo-dir=DIR 2> %t +// RUN: FileCheck -check-prefix=CHECK-LINK-DWO-DIR < %t %s +// RUN: FileCheck -check-prefix=CHECK-LINK-OBJCOPY < %t %s +// +// CHECK-LINK-DWO-DIR: "-plugin-opt=dwo_dir=DIR" +// CHECK-LINK-OBJCOPY: "-plugin-opt=objcopy={{.*}}objcopy" Index: lib/Driver/ToolChains/CommonArgs.cpp === --- lib/Driver/ToolChains/CommonArgs.cpp +++ lib/Driver/ToolChains/CommonArgs.cpp @@ -415,6 +415,16 @@ 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(); +CmdArgs.push_back( +Args.MakeArgString(Twine("-plugin-opt=dwo_dir=") + DWO_Dir)); + } + if (unsigned Parallelism = getLTOParallelism(Args, D)) CmdArgs.push_back( Args.MakeArgString("-plugin-opt=jobs=" + Twine(Parallelism))); Index: include/clang/Driver/Options.td === --- include/clang/Driver/Options.td +++ include/clang/Driver/Options.td @@ -1700,6 +1700,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 glto_dwo_dir_EQ : Joined<["-"], "glto-dwo-dir=">, Group; def ggnu_pubnames : Flag<["-"], "ggnu-pubnames">, Group, Flags<[CC1Option]>; def gdwarf_aranges : Flag<["-"], "gdwarf-aranges">, Group; def gmodules : Flag <["-"], "gmodules">, Group, Index: docs/ClangCommandLineReference.rst === --- docs/ClangCommandLineReference.rst +++ docs/ClangCommandLineReference.rst @@ -2587,6 +2587,8 @@ .. option:: -gstrict-dwarf, -gno-strict-dwarf +.. option:: -glto-dwo-dir= + .. option:: -gz DWARF debug sections compression type Index: test/Driver/lto-dwo.c === --- /dev/null +++ test/Driver/lto-dwo.c @@ -0,0 +1,8 @@ +// Confirm that -glto-dwo-dir=DIR is passed to linker + +// RUN: %clang -target x86_64-unknown-linux -### %s -flto=thin -glto-dwo-dir=DIR 2> %t +// RUN: FileCheck -check-prefix=CHECK-LINK-DWO-DIR < %t %s +// RUN: FileCheck -check-prefix=CHECK-LINK-OBJCOPY < %t %s +// +// CHECK-LINK-DWO-DIR: "-plugin-opt=dwo_dir=DIR" +// CHECK-LINK-OBJCOPY:
[PATCH] D44788: Add an option to support debug fission on implicit ThinLTO.
yunlian added a comment. I have another one https://reviews.llvm.org/D44792 on LLVM side. Repository: rC Clang https://reviews.llvm.org/D44788 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D44788: Add an option to support debug fission on implicit ThinLTO.
yunlian created this revision. yunlian added reviewers: tejohnson, dblaikie, pcc. Herald added subscribers: cfe-commits, inglorion, mehdi_amini. This adds an option -gthinlto-dwo-dir=. LLVM can create .dwo files in the given directory during the implicit ThinLTO link stage. Repository: rC Clang https://reviews.llvm.org/D44788 Files: docs/ClangCommandLineReference.rst include/clang/Driver/Options.td lib/Driver/ToolChains/CommonArgs.cpp Index: lib/Driver/ToolChains/CommonArgs.cpp === --- lib/Driver/ToolChains/CommonArgs.cpp +++ lib/Driver/ToolChains/CommonArgs.cpp @@ -415,6 +415,16 @@ if (IsThinLTO) CmdArgs.push_back("-plugin-opt=thinlto"); + if (Arg *A = Args.getLastArg(options::OPT_gthinlto_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(); +CmdArgs.push_back( +Args.MakeArgString(Twine("-plugin-opt=dwo_dir=") + DWO_Dir)); + } + if (unsigned Parallelism = getLTOParallelism(Args, D)) CmdArgs.push_back( Args.MakeArgString("-plugin-opt=jobs=" + Twine(Parallelism))); Index: include/clang/Driver/Options.td === --- include/clang/Driver/Options.td +++ include/clang/Driver/Options.td @@ -1700,6 +1700,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 gthinlto_dwo_dir_EQ : Joined<["-"], "gthinlto-dwo-dir=">, Group; def ggnu_pubnames : Flag<["-"], "ggnu-pubnames">, Group, Flags<[CC1Option]>; def gdwarf_aranges : Flag<["-"], "gdwarf-aranges">, Group; def gmodules : Flag <["-"], "gmodules">, Group, Index: docs/ClangCommandLineReference.rst === --- docs/ClangCommandLineReference.rst +++ docs/ClangCommandLineReference.rst @@ -2587,6 +2587,8 @@ .. option:: -gstrict-dwarf, -gno-strict-dwarf +.. option:: -gthinlto-dwo-dir= + .. option:: -gz DWARF debug sections compression type Index: lib/Driver/ToolChains/CommonArgs.cpp === --- lib/Driver/ToolChains/CommonArgs.cpp +++ lib/Driver/ToolChains/CommonArgs.cpp @@ -415,6 +415,16 @@ if (IsThinLTO) CmdArgs.push_back("-plugin-opt=thinlto"); + if (Arg *A = Args.getLastArg(options::OPT_gthinlto_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(); +CmdArgs.push_back( +Args.MakeArgString(Twine("-plugin-opt=dwo_dir=") + DWO_Dir)); + } + if (unsigned Parallelism = getLTOParallelism(Args, D)) CmdArgs.push_back( Args.MakeArgString("-plugin-opt=jobs=" + Twine(Parallelism))); Index: include/clang/Driver/Options.td === --- include/clang/Driver/Options.td +++ include/clang/Driver/Options.td @@ -1700,6 +1700,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 gthinlto_dwo_dir_EQ : Joined<["-"], "gthinlto-dwo-dir=">, Group; def ggnu_pubnames : Flag<["-"], "ggnu-pubnames">, Group, Flags<[CC1Option]>; def gdwarf_aranges : Flag<["-"], "gdwarf-aranges">, Group; def gmodules : Flag <["-"], "gmodules">, Group, Index: docs/ClangCommandLineReference.rst === --- docs/ClangCommandLineReference.rst +++ docs/ClangCommandLineReference.rst @@ -2587,6 +2587,8 @@ .. option:: -gstrict-dwarf, -gno-strict-dwarf +.. option:: -gthinlto-dwo-dir= + .. option:: -gz DWARF debug sections compression type ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D35081: [ThinLTO] Allow multiple summary entries.
yunlian added a comment. I've sent a reproduce test case to tejohnson. https://reviews.llvm.org/D35081 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D35081: [ThinLTO] Allow multiple summary entries.
yunlian added a comment. This error happens when I try to triage a thinLTO failure on ARM. Initially I got some error like Instruction does not dominate all uses! %205 = bitcast i1 (%"class.blink::LayoutObject"*)** %194 to i8*, !dbg !51180 %200 = getelementptr i8, i8* %205, i32 ptrtoint (i8* @__typeid__ZTSN5blink12LayoutObjectE_100_byte to i32), !dbg !51170 LLVM ERROR: Broken function found, compilation aborted! clang-5.0: error: linker command failed with exit code 1 (use -v to see invocation) I then used distributed thinLTO to try to find a reduced test case. I use -Wl,-plugin-opt,thinlto-index-only=file to get the index file for each bite code and I run $cmd -fthinlto-index=${obj}.thinlto.bc -x ir ${obj} -o a.o -c to get the error shown in this change. https://reviews.llvm.org/D35081 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits