Index: lib/Driver/ToolChains/OpenBSD.h =================================================================== --- lib/Driver/ToolChains/OpenBSD.h +++ lib/Driver/ToolChains/OpenBSD.h @@ -58,6 +58,8 @@ bool IsMathErrnoDefault() const override { return false; } bool IsObjCNonFragileABIDefault() const override { return true; } bool isPIEDefault() const override { return true; } + void AddCXXStdlibLibArgs(const llvm::opt::ArgList &Args, + llvm::opt::ArgStringList &CmdArgs) const override; unsigned GetDefaultStackProtectorLevel(bool KernelOrKext) const override { return 2; Index: lib/Driver/ToolChains/OpenBSD.cpp =================================================================== --- lib/Driver/ToolChains/OpenBSD.cpp +++ lib/Driver/ToolChains/OpenBSD.cpp @@ -186,7 +186,7 @@ if (!Args.hasArg(options::OPT_nostdlib, options::OPT_nodefaultlibs)) { if (D.CCCIsCXX()) { if (getToolChain().ShouldLinkCXXStdlib(Args)) - getToolChain().AddCXXStdlibLibArgs(Args, CmdArgs); + ToolChain.AddCXXStdlibLibArgs(Args, CmdArgs); if (Args.hasArg(options::OPT_pg)) CmdArgs.push_back("-lm_p"); else @@ -194,6 +194,9 @@ } if (NeedsSanitizerDeps) { CmdArgs.push_back(ToolChain.getCompilerRTArgString(Args, "builtins", false)); + if (getToolChain().getSanitizerArgs().needsFuzzer() && + !Args.hasArg(options::OPT_shared)) + CmdArgs.push_back(Args.hasArg(options::OPT_pg) ? "-lc++_p" : "-lc++"); linkSanitizerRuntimeDeps(ToolChain, CmdArgs); } if (NeedsXRayDeps) { @@ -259,6 +262,12 @@ getFilePaths().push_back("/usr/lib"); } +void OpenBSD::AddCXXStdlibLibArgs(const ArgList &Args, + ArgStringList &CmdArgs) const { + bool Profiling = Args.hasArg(options::OPT_pg); + CmdArgs.push_back(Profiling ? "-lstdc++_p" : "-lstdc++"); +} + Tool *OpenBSD::buildAssembler() const { return new tools::openbsd::Assembler(*this); }