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

Alexander Potapenko glider at google.com
Thu Mar 26 11:22:57 PDT 2015


I've been trying those, but couldn't come up with a solution that is
elegant enough.
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.

sent from phone
On Mar 26, 2015 6:20 PM, "Kuba Brecka" <kuba.brecka at gmail.com> wrote:

> 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
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20150326/74f5b46a/attachment.html>


More information about the llvm-commits mailing list