r218541 - Don't link in sanitizer runtimes if -nostdlib/-nodefaultlibs is provided.

Filipe Cabecinhas filcab at filcab.net
Fri Oct 17 13:11:36 PDT 2014


I don't know anything about the go compiler, but it seems to me this patch
shouldn't be done like this.

If I understand correctly, when you pass -fsanitize=undefined (or whatever)
to the linker job, all it does is add the library. If this is correct, then
it makes no sense to have -nodefaultlibs remove it: it's not a default lib
and it was explicitly added by passing -fsanitize to the link job.

>From what's in the bug report, isn't it possible to change go's behaviour
by passing it -fsanitize=blah in CFLAGS but now passing it in LDFLAGS,
since it will add it by itself?

Regards,

  Filipe

On Friday, October 17, 2014, Eric Fiselier <eric at efcs.ca> wrote:

> Hi All,
>
> The libc++ LIT test driver uses -nodefaultlibs so that it can properly
> link against libc++ and the ABI library.
> Since this patch we can no longer use sanitizers when running our test
> suite since it's quite difficult to mimic the driver's behavior and
> manually link in the sanitizer runtimes.
>
> I agree with the rational behind your change.
> However, since it's difficult to manually link the sanitizer runtimes, it
> would be nice to have a way to force the front end to do it even when
> -nodefaultlibs is present.
> I think we should consider adding '-static-lib*san' flags similar to the
> ones provided by GCC.
>
> I'm not very knowledgeable about the clang linker driver so any input is
> welcome.
>
> /Eric
>
>
>
>
>
>
>
>
>
> On Fri, Sep 26, 2014 at 3:22 PM, Alexey Samsonov <vonosmas at gmail.com
> <javascript:_e(%7B%7D,'cvml','vonosmas at gmail.com');>> wrote:
>
>> Author: samsonov
>> Date: Fri Sep 26 16:22:08 2014
>> New Revision: 218541
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=218541&view=rev
>> Log:
>> Don't link in sanitizer runtimes if -nostdlib/-nodefaultlibs is provided.
>>
>> It makes no sense to link in sanitizer runtimes in this case: the user
>> probably doesn't want to see any system/toolchain libs in his link if he
>> provides these flags, and the link will most likely fail anyway - as
>> sanitizer
>> runtimes depend on libpthread, libdl, libc etc.
>>
>> Also, see discussion in
>> https://code.google.com/p/address-sanitizer/issues/detail?id=344
>>
>> Modified:
>>     cfe/trunk/lib/Driver/Tools.cpp
>>     cfe/trunk/test/Driver/sanitizer-ld.c
>>
>> Modified: cfe/trunk/lib/Driver/Tools.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=218541&r1=218540&r2=218541&view=diff
>>
>> ==============================================================================
>> --- cfe/trunk/lib/Driver/Tools.cpp (original)
>> +++ cfe/trunk/lib/Driver/Tools.cpp Fri Sep 26 16:22:08 2014
>> @@ -2243,6 +2243,10 @@ collectSanitizerRuntimes(const ToolChain
>>  // C runtime, etc). Returns true if sanitizer system deps need to be
>> linked in.
>>  static bool addSanitizerRuntimes(const ToolChain &TC, const ArgList
>> &Args,
>>                                   ArgStringList &CmdArgs) {
>> +  // Don't link in any sanitizer runtimes if we have no system libraries.
>> +  if (Args.hasArg(options::OPT_nostdlib) ||
>> +      Args.hasArg(options::OPT_nodefaultlibs))
>> +    return false;
>>    SmallVector<StringRef, 4> SharedRuntimes, StaticRuntimes,
>>        HelperStaticRuntimes;
>>    collectSanitizerRuntimes(TC, Args, SharedRuntimes, StaticRuntimes,
>>
>> Modified: cfe/trunk/test/Driver/sanitizer-ld.c
>> URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/sanitizer-ld.c?rev=218541&r1=218540&r2=218541&view=diff
>>
>> ==============================================================================
>> --- cfe/trunk/test/Driver/sanitizer-ld.c (original)
>> +++ cfe/trunk/test/Driver/sanitizer-ld.c Fri Sep 26 16:22:08 2014
>> @@ -301,3 +301,10 @@
>>  // CHECK-LSAN-ASAN-LINUX-NOT: libclang_rt.lsan
>>  // CHECK-LSAN-ASAN-LINUX: libclang_rt.asan-x86_64
>>  // CHECK-LSAN-ASAN-LINUX-NOT: libclang_rt.lsan
>> +
>> +// RUN: %clang -nostdlib -fsanitize=address %s -### -o %t.o 2>&1 \
>> +// RUN:     -target x86_64-unknown-linux \
>> +// RUN:     --sysroot=%S/Inputs/basic_linux_tree \
>> +// RUN:   | FileCheck --check-prefix=CHECK-NOSTDLIB %s
>> +// CHECK-NOSTDLIB: "{{.*}}ld{{(.exe)?}}"
>> +// CHECK-NOSTDLIB-NOT: libclang_rt.asan
>>
>>
>> _______________________________________________
>> cfe-commits mailing list
>> cfe-commits at cs.uiuc.edu
>> <javascript:_e(%7B%7D,'cvml','cfe-commits at cs.uiuc.edu');>
>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20141017/ccb8b8ef/attachment.html>


More information about the cfe-commits mailing list