From f75c8b3c8db9cac8f25b379d8fd24ae3ff31919a Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Fri, 18 Jan 2013 22:09:26 +0000 Subject: [PATCH] Include ubsan runtime even when building a shared library. We don't require the executable to be linked with UBSan. llvm-svn: 172856 --- clang/lib/Driver/Tools.cpp | 20 +++++++++----------- clang/test/Driver/ubsan-ld.c | 10 ++++++++++ 2 files changed, 19 insertions(+), 11 deletions(-) diff --git a/clang/lib/Driver/Tools.cpp b/clang/lib/Driver/Tools.cpp index 3fbcd94..3132e75 100644 --- a/clang/lib/Driver/Tools.cpp +++ b/clang/lib/Driver/Tools.cpp @@ -1587,17 +1587,15 @@ static void addMsanRTLinux(const ToolChain &TC, const ArgList &Args, /// (Linux). static void addUbsanRTLinux(const ToolChain &TC, const ArgList &Args, ArgStringList &CmdArgs) { - if (!Args.hasArg(options::OPT_shared)) { - // LibUbsan is "libclang_rt.ubsan-.a" in the Linux library - // resource directory. - SmallString<128> LibUbsan(TC.getDriver().ResourceDir); - llvm::sys::path::append(LibUbsan, "lib", "linux", - (Twine("libclang_rt.ubsan-") + - TC.getArchName() + ".a")); - CmdArgs.push_back(Args.MakeArgString(LibUbsan)); - CmdArgs.push_back("-lpthread"); - CmdArgs.push_back("-export-dynamic"); - } + // LibUbsan is "libclang_rt.ubsan-.a" in the Linux library + // resource directory. + SmallString<128> LibUbsan(TC.getDriver().ResourceDir); + llvm::sys::path::append(LibUbsan, "lib", "linux", + (Twine("libclang_rt.ubsan-") + + TC.getArchName() + ".a")); + CmdArgs.push_back(Args.MakeArgString(LibUbsan)); + CmdArgs.push_back("-lpthread"); + CmdArgs.push_back("-export-dynamic"); } static bool shouldUseFramePointer(const ArgList &Args, diff --git a/clang/test/Driver/ubsan-ld.c b/clang/test/Driver/ubsan-ld.c index 4a17e7c..133d7a3 100644 --- a/clang/test/Driver/ubsan-ld.c +++ b/clang/test/Driver/ubsan-ld.c @@ -9,6 +9,16 @@ // CHECK-LINUX: libclang_rt.ubsan-i386.a" // CHECK-LINUX: "-lpthread" +// RUN: %clang -fsanitize=undefined %s -### -o %t.o 2>&1 \ +// RUN: -target i386-unknown-linux \ +// RUN: --sysroot=%S/Inputs/basic_linux_tree \ +// RUN: -shared \ +// RUN: | FileCheck --check-prefix=CHECK-LINUX-SHARED %s +// CHECK-LINUX-SHARED: "{{.*}}ld{{(.exe)?}}" +// CHECK-LINUX-SHARED-NOT: "-lc" +// CHECK-LINUX-SHARED: libclang_rt.ubsan-i386.a" +// CHECK-LINUX-SHARED: "-lpthread" + // RUN: %clang -fsanitize=bounds %s -### -o %t.o 2>&1 \ // RUN: -target i386-unknown-linux \ // RUN: --sysroot=%S/Inputs/basic_linux_tree \ -- 2.7.4