phosek updated this revision to Diff 213233.
phosek added a comment.

I've decided to go with the original `-f[no-]sanitize-link-deps`: 
`-fsanitize-minimal-runtime` is also a cc1 flag which affects codegen, 
`-fshared-libsan` and `-fstatic-libsan` are orthogonal, e.g. it's possible to 
have minimal shared or static runtime, so these really need to be different 
flags.


Repository:
  rC Clang

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D65029/new/

https://reviews.llvm.org/D65029

Files:
  clang/include/clang/Driver/Options.td
  clang/lib/Driver/ToolChains/CommonArgs.cpp
  clang/test/Driver/sanitizer-ld.c


Index: clang/test/Driver/sanitizer-ld.c
===================================================================
--- clang/test/Driver/sanitizer-ld.c
+++ clang/test/Driver/sanitizer-ld.c
@@ -843,3 +843,19 @@
 // CHECK-DSO-SHARED-HWASAN-AARCH64-LINUX-NOT: "-ldl"
 // CHECK-DSO-SHARED-HWASAN-AARCH64-LINUX-NOT: "--export-dynamic"
 // CHECK-DSO-SHARED-HWASAN-AARCH64-LINUX-NOT: "--dynamic-list"
+
+// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
+// RUN:     -target i386-unknown-linux -fuse-ld=ld -fsanitize=address 
-fsanitize-link-deps \
+// RUN:     -resource-dir=%S/Inputs/resource_dir \
+// RUN:     --sysroot=%S/Inputs/basic_linux_tree \
+// RUN:   | FileCheck --check-prefix=CHECK-SANITIZE-LINK-DEPS %s
+//
+// CHECK-SANITIZE-LINK-DEPS: libclang_rt.asan-i386.a"
+
+// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
+// RUN:     -target i386-unknown-linux -fuse-ld=ld -fsanitize=address 
-fno-sanitize-link-deps \
+// RUN:     -resource-dir=%S/Inputs/resource_dir \
+// RUN:     --sysroot=%S/Inputs/basic_linux_tree \
+// RUN:   | FileCheck --check-prefix=CHECK-NO-SANITIZE-LINK-DEPS %s
+//
+// CHECK-NO-SANITIZE-LINK-DEPS-NOT: libclang_rt.asan-i386.a"
Index: clang/lib/Driver/ToolChains/CommonArgs.cpp
===================================================================
--- clang/lib/Driver/ToolChains/CommonArgs.cpp
+++ clang/lib/Driver/ToolChains/CommonArgs.cpp
@@ -701,6 +701,10 @@
 // C runtime, etc). Returns true if sanitizer system deps need to be linked in.
 bool tools::addSanitizerRuntimes(const ToolChain &TC, const ArgList &Args,
                                  ArgStringList &CmdArgs) {
+  if (!Args.hasFlag(options::OPT_fsanitize_link_deps,
+                    options::OPT_fno_sanitize_link_deps, true))
+    return false;
+
   SmallVector<StringRef, 4> SharedRuntimes, StaticRuntimes,
       NonWholeStaticRuntimes, HelperStaticRuntimes, RequiredSymbols;
   collectSanitizerRuntimes(TC, Args, SharedRuntimes, StaticRuntimes,
Index: clang/include/clang/Driver/Options.td
===================================================================
--- clang/include/clang/Driver/Options.td
+++ clang/include/clang/Driver/Options.td
@@ -1088,6 +1088,15 @@
   HelpText<"Strip (or keep only, if negative) a given number of path 
components "
            "when emitting check metadata.">;
 
+def fsanitize_link_deps : Flag<["-"], "fsanitize-link-deps">,
+                          Group<f_Group>,
+                          Flags<[CC1Option]>,
+                          HelpText<"Enable linking of sanitizer dependencies">;
+def fno_sanitize_link_deps : Flag<["-"], "fno-sanitize-link-deps">,
+                             Group<f_Group>,
+                             Flags<[CC1Option]>,
+                             HelpText<"Disable linking of sanitizer 
dependencies">;
+
 } // end -f[no-]sanitize* flags
 
 def funsafe_math_optimizations : Flag<["-"], "funsafe-math-optimizations">,


Index: clang/test/Driver/sanitizer-ld.c
===================================================================
--- clang/test/Driver/sanitizer-ld.c
+++ clang/test/Driver/sanitizer-ld.c
@@ -843,3 +843,19 @@
 // CHECK-DSO-SHARED-HWASAN-AARCH64-LINUX-NOT: "-ldl"
 // CHECK-DSO-SHARED-HWASAN-AARCH64-LINUX-NOT: "--export-dynamic"
 // CHECK-DSO-SHARED-HWASAN-AARCH64-LINUX-NOT: "--dynamic-list"
+
+// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
+// RUN:     -target i386-unknown-linux -fuse-ld=ld -fsanitize=address -fsanitize-link-deps \
+// RUN:     -resource-dir=%S/Inputs/resource_dir \
+// RUN:     --sysroot=%S/Inputs/basic_linux_tree \
+// RUN:   | FileCheck --check-prefix=CHECK-SANITIZE-LINK-DEPS %s
+//
+// CHECK-SANITIZE-LINK-DEPS: libclang_rt.asan-i386.a"
+
+// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
+// RUN:     -target i386-unknown-linux -fuse-ld=ld -fsanitize=address -fno-sanitize-link-deps \
+// RUN:     -resource-dir=%S/Inputs/resource_dir \
+// RUN:     --sysroot=%S/Inputs/basic_linux_tree \
+// RUN:   | FileCheck --check-prefix=CHECK-NO-SANITIZE-LINK-DEPS %s
+//
+// CHECK-NO-SANITIZE-LINK-DEPS-NOT: libclang_rt.asan-i386.a"
Index: clang/lib/Driver/ToolChains/CommonArgs.cpp
===================================================================
--- clang/lib/Driver/ToolChains/CommonArgs.cpp
+++ clang/lib/Driver/ToolChains/CommonArgs.cpp
@@ -701,6 +701,10 @@
 // C runtime, etc). Returns true if sanitizer system deps need to be linked in.
 bool tools::addSanitizerRuntimes(const ToolChain &TC, const ArgList &Args,
                                  ArgStringList &CmdArgs) {
+  if (!Args.hasFlag(options::OPT_fsanitize_link_deps,
+                    options::OPT_fno_sanitize_link_deps, true))
+    return false;
+
   SmallVector<StringRef, 4> SharedRuntimes, StaticRuntimes,
       NonWholeStaticRuntimes, HelperStaticRuntimes, RequiredSymbols;
   collectSanitizerRuntimes(TC, Args, SharedRuntimes, StaticRuntimes,
Index: clang/include/clang/Driver/Options.td
===================================================================
--- clang/include/clang/Driver/Options.td
+++ clang/include/clang/Driver/Options.td
@@ -1088,6 +1088,15 @@
   HelpText<"Strip (or keep only, if negative) a given number of path components "
            "when emitting check metadata.">;
 
+def fsanitize_link_deps : Flag<["-"], "fsanitize-link-deps">,
+                          Group<f_Group>,
+                          Flags<[CC1Option]>,
+                          HelpText<"Enable linking of sanitizer dependencies">;
+def fno_sanitize_link_deps : Flag<["-"], "fno-sanitize-link-deps">,
+                             Group<f_Group>,
+                             Flags<[CC1Option]>,
+                             HelpText<"Disable linking of sanitizer dependencies">;
+
 } // end -f[no-]sanitize* flags
 
 def funsafe_math_optimizations : Flag<["-"], "funsafe-math-optimizations">,
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to