From 6aa757590aede3e334dcac0a76968739417d6a39 Mon Sep 17 00:00:00 2001 From: Viktor Kutuzov Date: Tue, 18 Mar 2014 09:36:50 +0000 Subject: [PATCH] Add support for sanitizers arguments on FreeBSD git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@204129 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Driver/Tools.cpp | 12 ++++++++++-- test/Driver/sanitizer-ld.c | 23 +++++++++++++++++++++++ 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/lib/Driver/Tools.cpp b/lib/Driver/Tools.cpp index b0572b7191..f808a18c7a 100644 --- a/lib/Driver/Tools.cpp +++ b/lib/Driver/Tools.cpp @@ -1775,7 +1775,11 @@ static StringRef getArchNameForCompilerRTLib(const ToolChain &TC) { static SmallString<128> getCompilerRTLibDir(const ToolChain &TC) { // The runtimes are located in the OS-specific resource directory. SmallString<128> Res(TC.getDriver().ResourceDir); - llvm::sys::path::append(Res, "lib", TC.getOS()); + const llvm::Triple &Triple = TC.getTriple(); + // TC.getOS() yield "freebsd10.0" whereas "freebsd" is expected. + StringRef OSLibName = (Triple.getOS() == llvm::Triple::FreeBSD) ? + "freebsd" : TC.getOS(); + llvm::sys::path::append(Res, "lib", OSLibName); return Res; } @@ -1836,8 +1840,10 @@ static void addSanitizerRTLinkFlags( CmdArgs.push_back("-lpthread"); CmdArgs.push_back("-lrt"); - CmdArgs.push_back("-ldl"); CmdArgs.push_back("-lm"); + // There's no libdl on FreeBSD. + if (TC.getTriple().getOS() != llvm::Triple::FreeBSD) + CmdArgs.push_back("-ldl"); // If possible, use a dynamic symbols file to export the symbols from the // runtime library. If we can't do so, use -export-dynamic instead to export @@ -6236,6 +6242,8 @@ void freebsd::Link::ConstructJob(Compilation &C, const JobAction &JA, CmdArgs.push_back(Args.MakeArgString(ToolChain.GetFilePath("crtn.o"))); } + addSanitizerRuntimes(getToolChain(), Args, CmdArgs); + addProfileRT(ToolChain, Args, CmdArgs); const char *Exec = diff --git a/test/Driver/sanitizer-ld.c b/test/Driver/sanitizer-ld.c index 57f33d8737..ee0d611964 100644 --- a/test/Driver/sanitizer-ld.c +++ b/test/Driver/sanitizer-ld.c @@ -15,6 +15,29 @@ // CHECK-ASAN-LINUX-NOT: "-export-dynamic" // CHECK-ASAN-LINUX: "--dynamic-list={{.*}}libclang_rt.asan-i386.a.syms" +// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ +// RUN: -target i386-unknown-freebsd -fsanitize=address \ +// RUN: -resource-dir=%S/Inputs/resource_dir \ +// RUN: --sysroot=%S/Inputs/basic_freebsd_tree \ +// RUN: | FileCheck --check-prefix=CHECK-ASAN-FREEBSD %s +// +// CHECK-ASAN-FREEBSD: "{{(.*[^-.0-9A-Z_a-z])?}}ld{{(.exe)?}}" +// CHECK-ASAN-FREEBSD-NOT: "-lc" +// CHECK-ASAN-FREEBSD: freebsd/libclang_rt.asan-i386.a" +// CHECK-ASAN-FREEBSD: "-lpthread" +// CHECK-ASAN-FREEBSD: "-lrt" +// CHECK-ASAN-FREEBSD: "-export-dynamic" +// CHECK-ASAN-FREEBSD-NOT: "--dynamic-list" + +// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ +// RUN: -target i386-unknown-freebsd -fsanitize=address \ +// RUN: -resource-dir=%S/Inputs/resource_dir \ +// RUN: --sysroot=%S/Inputs/basic_freebsd_tree \ +// RUN: | FileCheck --check-prefix=CHECK-ASAN-FREEBSD-LDL %s +// +// CHECK-ASAN-FREEBSD-LDL: "{{(.*[^-.0-9A-Z_a-z])?}}ld{{(.exe)?}}" +// CHECK-ASAN-FREEBSD-LDL-NOT: "-ldl" + // RUN: %clangxx -no-canonical-prefixes %s -### -o %t.o 2>&1 \ // RUN: -target i386-unknown-linux -fsanitize=address \ // RUN: -resource-dir=%S/Inputs/empty_resource_dir \ -- 2.40.0