Actual flag name is -fsanitize-link-c++-runtime. Sorry for wrong commit message.
On Fri, Aug 8, 2014 at 3:47 PM, Alexey Samsonov <[email protected]> wrote: > Author: samsonov > Date: Fri Aug 8 17:47:17 2014 > New Revision: 215252 > > URL: http://llvm.org/viewvc/llvm-project?rev=215252&view=rev > Log: > Add -link-cxx-sanitizer driver flag. > > Summary: > This flag can be used to force linking of CXX-specific parts > of sanitizer runtimes into the final executable. It gives more precise > control than --driver-mode=g++ and comes handy when user links several > object files with sanitized C++ code into an executable, but wants > to provide libstdc++ himself, instead of relying on Clang dirver's > behavior. > > Test Plan: clang regression test suite > > Reviewers: chandlerc, rsmith > > Reviewed By: rsmith > > Subscribers: cfe-commits > > Differential Revision: http://reviews.llvm.org/D4824 > > Modified: > cfe/trunk/include/clang/Driver/Options.td > cfe/trunk/include/clang/Driver/SanitizerArgs.h > cfe/trunk/lib/Driver/SanitizerArgs.cpp > cfe/trunk/lib/Driver/Tools.cpp > cfe/trunk/test/Driver/sanitizer-ld.c > > Modified: cfe/trunk/include/clang/Driver/Options.td > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/Options.td?rev=215252&r1=215251&r2=215252&view=diff > > ============================================================================== > --- cfe/trunk/include/clang/Driver/Options.td (original) > +++ cfe/trunk/include/clang/Driver/Options.td Fri Aug 8 17:47:17 2014 > @@ -535,6 +535,8 @@ def fsanitize_undefined_trap_on_error : > Group<f_clang_Group>, > Flags<[CC1Option]>; > def fno_sanitize_undefined_trap_on_error : Flag<["-"], > "fno-sanitize-undefined-trap-on-error">, > Group<f_clang_Group>; > +def fsanitize_link_cxx_runtime : Flag<["-"], > "fsanitize-link-c++-runtime">, > + Group<f_clang_Group>; > def funsafe_math_optimizations : Flag<["-"], > "funsafe-math-optimizations">, > Group<f_Group>; > def fno_unsafe_math_optimizations : Flag<["-"], > "fno-unsafe-math-optimizations">, > > Modified: cfe/trunk/include/clang/Driver/SanitizerArgs.h > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/SanitizerArgs.h?rev=215252&r1=215251&r2=215252&view=diff > > ============================================================================== > --- cfe/trunk/include/clang/Driver/SanitizerArgs.h (original) > +++ cfe/trunk/include/clang/Driver/SanitizerArgs.h Fri Aug 8 17:47:17 2014 > @@ -52,9 +52,9 @@ class SanitizerArgs { > bool AsanZeroBaseShadow; > bool UbsanTrapOnError; > bool AsanSharedRuntime; > + bool LinkCXXRuntimes; > > public: > - SanitizerArgs(); > /// Parses the sanitizer arguments from an argument list. > SanitizerArgs(const ToolChain &TC, const llvm::opt::ArgList &Args); > > @@ -77,6 +77,7 @@ class SanitizerArgs { > return (Kind & HasZeroBaseShadow) || AsanZeroBaseShadow; > } > bool needsUnwindTables() const { return Kind & NeedsUnwindTables; } > + bool linkCXXRuntimes() const { return LinkCXXRuntimes; } > void addArgs(const llvm::opt::ArgList &Args, > llvm::opt::ArgStringList &CmdArgs) const; > > > Modified: cfe/trunk/lib/Driver/SanitizerArgs.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/SanitizerArgs.cpp?rev=215252&r1=215251&r2=215252&view=diff > > ============================================================================== > --- cfe/trunk/lib/Driver/SanitizerArgs.cpp (original) > +++ cfe/trunk/lib/Driver/SanitizerArgs.cpp Fri Aug 8 17:47:17 2014 > @@ -28,10 +28,7 @@ void SanitizerArgs::clear() { > AsanZeroBaseShadow = false; > UbsanTrapOnError = false; > AsanSharedRuntime = false; > -} > - > -SanitizerArgs::SanitizerArgs() { > - clear(); > + LinkCXXRuntimes = false; > } > > SanitizerArgs::SanitizerArgs(const ToolChain &TC, > @@ -168,6 +165,10 @@ SanitizerArgs::SanitizerArgs(const ToolC > AsanZeroBaseShadow = > (TC.getTriple().getEnvironment() == llvm::Triple::Android); > } > + > + // Parse -link-cxx-sanitizer flag. > + LinkCXXRuntimes = > + Args.hasArg(options::OPT_fsanitize_link_cxx_runtime) || > D.CCCIsCXX(); > } > > void SanitizerArgs::addArgs(const llvm::opt::ArgList &Args, > > Modified: cfe/trunk/lib/Driver/Tools.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=215252&r1=215251&r2=215252&view=diff > > ============================================================================== > --- cfe/trunk/lib/Driver/Tools.cpp (original) > +++ cfe/trunk/lib/Driver/Tools.cpp Fri Aug 8 17:47:17 2014 > @@ -2273,13 +2273,13 @@ static void addDfsanRT(const ToolChain & > static void addSanitizerRuntimes(const ToolChain &TC, const ArgList &Args, > ArgStringList &CmdArgs) { > const SanitizerArgs &Sanitize = TC.getSanitizerArgs(); > - const Driver &D = TC.getDriver(); > if (Sanitize.needsUbsanRt()) > - addUbsanRT(TC, Args, CmdArgs, D.CCCIsCXX(), > - Sanitize.needsAsanRt() || Sanitize.needsTsanRt() || > - Sanitize.needsMsanRt() || Sanitize.needsLsanRt()); > + addUbsanRT(TC, Args, CmdArgs, Sanitize.linkCXXRuntimes(), > + Sanitize.needsAsanRt() || Sanitize.needsTsanRt() || > + Sanitize.needsMsanRt() || Sanitize.needsLsanRt()); > if (Sanitize.needsAsanRt()) > - addAsanRT(TC, Args, CmdArgs, Sanitize.needsSharedAsanRt(), > D.CCCIsCXX()); > + addAsanRT(TC, Args, CmdArgs, Sanitize.needsSharedAsanRt(), > + Sanitize.linkCXXRuntimes()); > if (Sanitize.needsTsanRt()) > addTsanRT(TC, Args, CmdArgs); > if (Sanitize.needsMsanRt()) > > Modified: cfe/trunk/test/Driver/sanitizer-ld.c > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/sanitizer-ld.c?rev=215252&r1=215251&r2=215252&view=diff > > ============================================================================== > --- cfe/trunk/test/Driver/sanitizer-ld.c (original) > +++ cfe/trunk/test/Driver/sanitizer-ld.c Fri Aug 8 17:47:17 2014 > @@ -195,6 +195,14 @@ > // CHECK-UBSAN-LINUX: "-lpthread" > // CHECK-UBSAN-LINUX-NOT: "-lstdc++" > > +// RUN: %clang -fsanitize=undefined -fsanitize-link-c++-runtime %s -### > -o %t.o 2>&1 \ > +// RUN: -target i386-unknown-linux \ > +// RUN: --sysroot=%S/Inputs/basic_linux_tree \ > +// RUN: | FileCheck --check-prefix=CHECK-UBSAN-LINUX-LINK-CXX %s > +// CHECK-UBSAN-LINUX-LINK-CXX-NOT: "-lstdc++" > +// CHECK-UBSAN-LINUX-LINK-CXX: "-whole-archive" > "{{.*}}libclang_rt.ubsan_cxx-i386.a" "-no-whole-archive" > +// CHECK-UBSAN-LINUX-LINK-CXX-NOT: "-lstdc++" > + > // RUN: %clangxx -fsanitize=undefined %s -### -o %t.o 2>&1 \ > // RUN: -target i386-unknown-linux \ > // RUN: -resource-dir=%S/Inputs/resource_dir \ > > > _______________________________________________ > cfe-commits mailing list > [email protected] > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits > -- Alexey Samsonov [email protected]
_______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
