[compiler-rt] r227161 - [ASan] Use rpath in tests that produce a shared library

Kuba Brecka kuba.brecka at gmail.com
Thu Mar 26 08:20:18 PDT 2015


Hi Alexander,

the reason is that in one of our internal test setups, we’re doing remote testing, and we move/copy the shared libraries.  If we don’t use “-rpath” and “-install_name”, the executable has a hardcoded full path to the library and doesn’t work when moved elsewhere.

Could this instead be solved by some extra lit substitutions that would resolve differently on Linux and Darwin?

Kuba

> On Mar 26, 2015, at 2:15 PM, Alexander Potapenko <glider at google.com> wrote:
> 
> Overall, what's the reason behind this patch?
> I've been trying to merge the Linux and Darwin versions of
> interception-in-shared-lib-test today making the RUN lines look as
> follows:
> 
> // RUN: %clangxx_asan -O0 %s -DSHARED_LIB \
> // RUN:     -shared -o %t-so.so -fPIC
> // RUN: %clangxx_asan -O0 %s -o %t %t-so.so && \
> // RUN:     not %run %t 2>&1 | FileCheck %s
> 
> , but the additional linker flags complicate that. Are they really necessary?
> 
> On Tue, Mar 24, 2015 at 5:35 PM, Alexander Potapenko <glider at google.com> wrote:
>> There are two problems with this patch:
>> 1. (minor) Clang doesn't use the -rpath argument on Linux in
>> TestCases/suppressions-library.cc.
>> 2. In their current state, these two tests don't work on my machine (OS X 10.9):
>> 
>> $ DYLD_PRINT_RPATHS=1 <cut>/Output/suppressions-library.cc.tmp
>> RPATH failed to expanding     @rpath/suppressions-library.cc.tmp-so.so
>> to: @executable_path/suppressions-library.cc.tmp-so.so
>> RPATH failed to expanding     @rpath/suppressions-library.cc.tmp-so.so
>> to: @executable_path/suppressions-library.cc.tmp-so.so
>> RPATH failed to expanding     @rpath/suppressions-library.cc.tmp-so.so
>> to: <cut>/../lib/clang/3.7.0/lib/darwin/suppressions-library.cc.tmp-so.so
>> dyld: Library not loaded: @rpath/suppressions-library.cc.tmp-so.so
>>  Referenced from: <cut>/Output/suppressions-library.cc.tmp
>>  Reason: image not found
>> Trace/BPT trap: 5
>> 
>> For some reason dyld fails to find the dynamic library next to the
>> executable, if that executable was linked with
>> -Wl,-rpath, at executable_path.
>> The solution is to link with "-Wl,-rpath, at executable_path/" (note the
>> trailing slash), but I don't fully understand why this happens for me
>> and not for Kuba.
>> 
>> On Tue, Jan 27, 2015 at 4:29 AM, Kuba Brecka <kuba.brecka at gmail.com> wrote:
>>> Author: kuba.brecka
>>> Date: Mon Jan 26 19:29:18 2015
>>> New Revision: 227161
>>> 
>>> URL: http://llvm.org/viewvc/llvm-project?rev=227161&view=rev
>>> Log:
>>> [ASan] Use rpath in tests that produce a shared library
>>> 
>>> Modifying Darwin/interception-in-shared-lib-test.cc and suppressions-library.cc
>>> to use rpath instead of linking against the full path to the temporary file.
>>> NFC.
>>> 
>>> 
>>> 
>>> Modified:
>>>    compiler-rt/trunk/test/asan/TestCases/Darwin/interception-in-shared-lib-test.cc
>>>    compiler-rt/trunk/test/asan/TestCases/suppressions-library.cc
>>> 
>>> Modified: compiler-rt/trunk/test/asan/TestCases/Darwin/interception-in-shared-lib-test.cc
>>> URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/asan/TestCases/Darwin/interception-in-shared-lib-test.cc?rev=227161&r1=227160&r2=227161&view=diff
>>> ==============================================================================
>>> --- compiler-rt/trunk/test/asan/TestCases/Darwin/interception-in-shared-lib-test.cc (original)
>>> +++ compiler-rt/trunk/test/asan/TestCases/Darwin/interception-in-shared-lib-test.cc Mon Jan 26 19:29:18 2015
>>> @@ -3,11 +3,11 @@
>>> // ../Linux/interception-in-shared-lib-test.cc.
>>> 
>>> // RUN: %clangxx_asan -O0 %s -DSHARED_LIB \
>>> -// RUN:     -shared -o %T/libinterception-in-shared-lib-test.so \
>>> -// RUN:     -fPIC
>>> +// RUN:     -shared -o %t-so.so \
>>> +// RUN:     -fPIC -install_name @rpath/interception-in-shared-lib-test.cc.tmp-so.so
>>> // TODO(glider): figure out how to set rpath in a more portable way and unite
>>> // this test with ../Linux/interception-in-shared-lib-test.cc.
>>> -// RUN: %clangxx_asan -O0 %s -o %t -Wl,-rpath, at executable-path -L%T -linterception-in-shared-lib-test && \
>>> +// RUN: %clangxx_asan -O0 %s -o %t -Wl,-rpath, at executable_path %t-so.so && \
>>> // RUN:     not %run %t 2>&1 | FileCheck %s
>>> 
>>> #include <stdio.h>
>>> 
>>> Modified: compiler-rt/trunk/test/asan/TestCases/suppressions-library.cc
>>> URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/asan/TestCases/suppressions-library.cc?rev=227161&r1=227160&r2=227161&view=diff
>>> ==============================================================================
>>> --- compiler-rt/trunk/test/asan/TestCases/suppressions-library.cc (original)
>>> +++ compiler-rt/trunk/test/asan/TestCases/suppressions-library.cc Mon Jan 26 19:29:18 2015
>>> @@ -1,10 +1,10 @@
>>> -// RUN: %clangxx_asan -O0 -DSHARED_LIB %s -fPIC -shared -o %t-so.so
>>> -// RUN: %clangxx_asan -O0 %s %t-so.so -o %t
>>> +// RUN: %clangxx_asan -O0 -DSHARED_LIB %s -fPIC -shared -o %t-so.so -install_name @rpath/suppressions-library.cc.tmp-so.so
>>> +// RUN: %clangxx_asan -O0 %s %t-so.so -o %t -rpath @executable_path
>>> 
>>> // Check that without suppressions, we catch the issue.
>>> // RUN: not %run %t 2>&1 | FileCheck --check-prefix=CHECK-CRASH %s
>>> 
>>> -// RUN: echo "interceptor_via_lib:%t-so.so" > %t.supp
>>> +// RUN: echo "interceptor_via_lib:suppressions-library.cc.tmp-so.so" > %t.supp
>>> // RUN: ASAN_OPTIONS="suppressions='%t.supp'" %run %t 2>&1 | FileCheck --check-prefix=CHECK-IGNORE %s
>>> 
>>> // XFAIL: android
>>> 
>>> 
>>> _______________________________________________
>>> llvm-commits mailing list
>>> llvm-commits at cs.uiuc.edu
>>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>> 
>> 
>> 
>> --
>> Alexander Potapenko
>> Software Engineer
>> Google Moscow
> 
> 
> 
> -- 
> Alexander Potapenko
> Software Engineer
> Google Moscow





More information about the llvm-commits mailing list