<p dir="ltr">I've been trying those, but couldn't come up with a solution that is elegant enough.<br>
Because those linker flag substitutions must depend on the shared library names, we must either parameterize them somehow (which lit doesn't support yet) or make fragile assumptions about the shared library names depending on %t value.</p>
<p dir="ltr">sent from phone</p>
<div class="gmail_quote">On Mar 26, 2015 6:20 PM, "Kuba Brecka" <<a href="mailto:kuba.brecka@gmail.com">kuba.brecka@gmail.com</a>> wrote:<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi Alexander,<br>
<br>
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.<br>
<br>
Could this instead be solved by some extra lit substitutions that would resolve differently on Linux and Darwin?<br>
<br>
Kuba<br>
<br>
> On Mar 26, 2015, at 2:15 PM, Alexander Potapenko <<a href="mailto:glider@google.com">glider@google.com</a>> wrote:<br>
><br>
> Overall, what's the reason behind this patch?<br>
> I've been trying to merge the Linux and Darwin versions of<br>
> interception-in-shared-lib-test today making the RUN lines look as<br>
> follows:<br>
><br>
> // RUN: %clangxx_asan -O0 %s -DSHARED_LIB \<br>
> // RUN:     -shared -o %t-so.so -fPIC<br>
> // RUN: %clangxx_asan -O0 %s -o %t %t-so.so && \<br>
> // RUN:     not %run %t 2>&1 | FileCheck %s<br>
><br>
> , but the additional linker flags complicate that. Are they really necessary?<br>
><br>
> On Tue, Mar 24, 2015 at 5:35 PM, Alexander Potapenko <<a href="mailto:glider@google.com">glider@google.com</a>> wrote:<br>
>> There are two problems with this patch:<br>
>> 1. (minor) Clang doesn't use the -rpath argument on Linux in<br>
>> TestCases/suppressions-library.cc.<br>
>> 2. In their current state, these two tests don't work on my machine (OS X 10.9):<br>
>><br>
>> $ DYLD_PRINT_RPATHS=1 <cut>/Output/suppressions-library.cc.tmp<br>
>> RPATH failed to expanding     @rpath/<a href="http://suppressions-library.cc.tmp-so.so" target="_blank">suppressions-library.cc.tmp-so.so</a><br>
>> to: @executable_path/<a href="http://suppressions-library.cc.tmp-so.so" target="_blank">suppressions-library.cc.tmp-so.so</a><br>
>> RPATH failed to expanding     @rpath/<a href="http://suppressions-library.cc.tmp-so.so" target="_blank">suppressions-library.cc.tmp-so.so</a><br>
>> to: @executable_path/<a href="http://suppressions-library.cc.tmp-so.so" target="_blank">suppressions-library.cc.tmp-so.so</a><br>
>> RPATH failed to expanding     @rpath/<a href="http://suppressions-library.cc.tmp-so.so" target="_blank">suppressions-library.cc.tmp-so.so</a><br>
>> to: <cut>/../lib/clang/3.7.0/lib/darwin/<a href="http://suppressions-library.cc.tmp-so.so" target="_blank">suppressions-library.cc.tmp-so.so</a><br>
>> dyld: Library not loaded: @rpath/<a href="http://suppressions-library.cc.tmp-so.so" target="_blank">suppressions-library.cc.tmp-so.so</a><br>
>>  Referenced from: <cut>/Output/suppressions-library.cc.tmp<br>
>>  Reason: image not found<br>
>> Trace/BPT trap: 5<br>
>><br>
>> For some reason dyld fails to find the dynamic library next to the<br>
>> executable, if that executable was linked with<br>
>> -Wl,-rpath,@executable_path.<br>
>> The solution is to link with "-Wl,-rpath,@executable_path/" (note the<br>
>> trailing slash), but I don't fully understand why this happens for me<br>
>> and not for Kuba.<br>
>><br>
>> On Tue, Jan 27, 2015 at 4:29 AM, Kuba Brecka <<a href="mailto:kuba.brecka@gmail.com">kuba.brecka@gmail.com</a>> wrote:<br>
>>> Author: kuba.brecka<br>
>>> Date: Mon Jan 26 19:29:18 2015<br>
>>> New Revision: 227161<br>
>>><br>
>>> URL: <a href="http://llvm.org/viewvc/llvm-project?rev=227161&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=227161&view=rev</a><br>
>>> Log:<br>
>>> [ASan] Use rpath in tests that produce a shared library<br>
>>><br>
>>> Modifying Darwin/interception-in-shared-lib-test.cc and suppressions-library.cc<br>
>>> to use rpath instead of linking against the full path to the temporary file.<br>
>>> NFC.<br>
>>><br>
>>><br>
>>><br>
>>> Modified:<br>
>>>    compiler-rt/trunk/test/asan/TestCases/Darwin/interception-in-shared-lib-test.cc<br>
>>>    compiler-rt/trunk/test/asan/TestCases/suppressions-library.cc<br>
>>><br>
>>> Modified: compiler-rt/trunk/test/asan/TestCases/Darwin/interception-in-shared-lib-test.cc<br>
>>> URL: <a href="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" target="_blank">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</a><br>
>>> ==============================================================================<br>
>>> --- compiler-rt/trunk/test/asan/TestCases/Darwin/interception-in-shared-lib-test.cc (original)<br>
>>> +++ compiler-rt/trunk/test/asan/TestCases/Darwin/interception-in-shared-lib-test.cc Mon Jan 26 19:29:18 2015<br>
>>> @@ -3,11 +3,11 @@<br>
>>> // ../Linux/interception-in-shared-lib-test.cc.<br>
>>><br>
>>> // RUN: %clangxx_asan -O0 %s -DSHARED_LIB \<br>
>>> -// RUN:     -shared -o %T/libinterception-in-shared-lib-test.so \<br>
>>> -// RUN:     -fPIC<br>
>>> +// RUN:     -shared -o %t-so.so \<br>
>>> +// RUN:     -fPIC -install_name @rpath/<a href="http://interception-in-shared-lib-test.cc.tmp-so.so" target="_blank">interception-in-shared-lib-test.cc.tmp-so.so</a><br>
>>> // TODO(glider): figure out how to set rpath in a more portable way and unite<br>
>>> // this test with ../Linux/interception-in-shared-lib-test.cc.<br>
>>> -// RUN: %clangxx_asan -O0 %s -o %t -Wl,-rpath,@executable-path -L%T -linterception-in-shared-lib-test && \<br>
>>> +// RUN: %clangxx_asan -O0 %s -o %t -Wl,-rpath,@executable_path %t-so.so && \<br>
>>> // RUN:     not %run %t 2>&1 | FileCheck %s<br>
>>><br>
>>> #include <stdio.h><br>
>>><br>
>>> Modified: compiler-rt/trunk/test/asan/TestCases/suppressions-library.cc<br>
>>> URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/asan/TestCases/suppressions-library.cc?rev=227161&r1=227160&r2=227161&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/asan/TestCases/suppressions-library.cc?rev=227161&r1=227160&r2=227161&view=diff</a><br>
>>> ==============================================================================<br>
>>> --- compiler-rt/trunk/test/asan/TestCases/suppressions-library.cc (original)<br>
>>> +++ compiler-rt/trunk/test/asan/TestCases/suppressions-library.cc Mon Jan 26 19:29:18 2015<br>
>>> @@ -1,10 +1,10 @@<br>
>>> -// RUN: %clangxx_asan -O0 -DSHARED_LIB %s -fPIC -shared -o %t-so.so<br>
>>> -// RUN: %clangxx_asan -O0 %s %t-so.so -o %t<br>
>>> +// RUN: %clangxx_asan -O0 -DSHARED_LIB %s -fPIC -shared -o %t-so.so -install_name @rpath/<a href="http://suppressions-library.cc.tmp-so.so" target="_blank">suppressions-library.cc.tmp-so.so</a><br>
>>> +// RUN: %clangxx_asan -O0 %s %t-so.so -o %t -rpath @executable_path<br>
>>><br>
>>> // Check that without suppressions, we catch the issue.<br>
>>> // RUN: not %run %t 2>&1 | FileCheck --check-prefix=CHECK-CRASH %s<br>
>>><br>
>>> -// RUN: echo "interceptor_via_lib:%t-so.so" > %t.supp<br>
>>> +// RUN: echo "interceptor_via_lib:<a href="http://suppressions-library.cc.tmp-so.so" target="_blank">suppressions-library.cc.tmp-so.so</a>" > %t.supp<br>
>>> // RUN: ASAN_OPTIONS="suppressions='%t.supp'" %run %t 2>&1 | FileCheck --check-prefix=CHECK-IGNORE %s<br>
>>><br>
>>> // XFAIL: android<br>
>>><br>
>>><br>
>>> _______________________________________________<br>
>>> llvm-commits mailing list<br>
>>> <a href="mailto:llvm-commits@cs.uiuc.edu">llvm-commits@cs.uiuc.edu</a><br>
>>> <a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br>
>><br>
>><br>
>><br>
>> --<br>
>> Alexander Potapenko<br>
>> Software Engineer<br>
>> Google Moscow<br>
><br>
><br>
><br>
> --<br>
> Alexander Potapenko<br>
> Software Engineer<br>
> Google Moscow<br>
<br>
</blockquote></div>