Again, please send patch as plain text. On Fri, 2022-07-01 at 08:18 +0000, Dimitrije Milosevic wrote: > When we use cross toolchains, in which the GCC libraries are not > installed within a designated system root, the shared sanitizer > libraries link against libstdc++.so* within the same libraries. > This directory, however, is not in RPATH, so attempting to build a > dynamically linked application with -fsanitize=... gives a linkage > error. > More information can be found here: > https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69839.
Hmm... Is anyone really using a cross compiler without a sysroot? PR 69839 is already closed as INVALID. If you don't want to install GCC runtime libraries into the sysroot (for example, for multiple GCC builds using a shared sysroot), we have --enable-version-specific-runtime-libs but unfortunately it's broken (PR 32415). Please explain the actual use case and let us elaborate to see if there is a better solution. > gcc/ChangeLog: > * gcc.c (LIBSAN_RPATH): New macro. > (LIBASAN_SPEC): Add LIBSAN_RPATH. > (LIBUBSAN_SPEC): Likewise. > (LIBTSAN_SPEC): Likewise. > (LIBLSAN_SPEC): Likewise. > > libsanitizer/ChangeLog: > * configure.ac (link_libsan_rpath): New config variable. > * libsanitizer.spec.in (link_libsan_rpath): New spec. > * configure (link_libsan_rpath): New config variable. > * Makefile.in (link_libsan_rpath): Define new Makefile > variable. > * asan/Makefile.in: Likewise. > * interception/Makefile.in: Likewise. > * libbacktrace/Makefile.in: Likewise. > * lsan/Makefile.in: Likewise. > * sanitizer_common/Makefile.in: Likewise. > * tsan/Makefile.in: Likewise. > * ubsan/Makefile.in: Likewise. > * hwasan/Makefile.in: Likewise. > > --- > > gcc/gcc.cc | 20 ++++++++++++-------- > libsanitizer/Makefile.in | 1 + > libsanitizer/asan/Makefile.in | 1 + > libsanitizer/configure | 10 ++++++++-- > libsanitizer/configure.ac | 7 +++++++ > libsanitizer/hwasan/Makefile.in | 1 + > libsanitizer/interception/Makefile.in | 1 + > libsanitizer/libbacktrace/Makefile.in | 1 + > libsanitizer/libsanitizer.spec.in | 2 ++ > libsanitizer/lsan/Makefile.in | 1 + > libsanitizer/sanitizer_common/Makefile.in | 1 + > libsanitizer/tsan/Makefile.in | 1 + > libsanitizer/ubsan/Makefile.in | 1 + > 13 files changed, 38 insertions(+), 10 deletions(-) > > > diff --git a/gcc/gcc.cc b/gcc/gcc.ccindex 299e09c4f54..37ff75f1ad5 > 100644 > --- a/gcc/gcc.cc > +++ b/gcc/gcc.cc > @@ -738,17 +738,21 @@ proper position among the other output files. > */ > #define STACK_SPLIT_SPEC " %{fsplit-stack: --wrap=pthread_create}" > #endif > > +#ifndef LIBSAN_RPATH > +#define LIBSAN_RPATH " > %:include(libsanitizer.spec)%(link_libsan_rpath)" > +#endif > + > #ifndef LIBASAN_SPEC > #define STATIC_LIBASAN_LIBS \ > " %{static- > libasan|static:%:include(libsanitizer.spec)%(link_libasan)}" > #ifdef LIBASAN_EARLY_SPEC > -#define LIBASAN_SPEC STATIC_LIBASAN_LIBS > +#define LIBASAN_SPEC STATIC_LIBASAN_LIBS LIBSAN_RPATH > #elif defined(HAVE_LD_STATIC_DYNAMIC) > #define LIBASAN_SPEC "%{static-libasan:" LD_STATIC_OPTION \ > "} -lasan %{static-libasan:" LD_DYNAMIC_OPTION > "}" \ > STATIC_LIBASAN_LIBS > #else > -#define LIBASAN_SPEC "-lasan" STATIC_LIBASAN_LIBS > +#define LIBASAN_SPEC "-lasan" STATIC_LIBASAN_LIBS LIBSAN_RPATH > #endif > #endif > > @@ -778,13 +782,13 @@ proper position among the other output files. > */ > #define STATIC_LIBTSAN_LIBS \ > " %{static- > libtsan|static:%:include(libsanitizer.spec)%(link_libtsan)}" > #ifdef LIBTSAN_EARLY_SPEC > -#define LIBTSAN_SPEC STATIC_LIBTSAN_LIBS > +#define LIBTSAN_SPEC STATIC_LIBTSAN_LIBS LIBSAN_RPATH > #elif defined(HAVE_LD_STATIC_DYNAMIC) > #define LIBTSAN_SPEC "%{static-libtsan:" LD_STATIC_OPTION \ > "} -ltsan %{static-libtsan:" LD_DYNAMIC_OPTION > "}" \ > STATIC_LIBTSAN_LIBS > #else > -#define LIBTSAN_SPEC "-ltsan" STATIC_LIBTSAN_LIBS > +#define LIBTSAN_SPEC "-ltsan" STATIC_LIBTSAN_LIBS LIBSAN_RPATH > #endif > #endif > > @@ -793,7 +797,7 @@ proper position among the other output files. */ > #endif > > #ifndef LIBLSAN_SPEC > -#define STATIC_LIBLSAN_LIBS \ > +#define STATIC_LIBLSAN_LIBS LIBSAN_RPATH \ > " %{static- > liblsan|static:%:include(libsanitizer.spec)%(link_liblsan)}" > #ifdef LIBLSAN_EARLY_SPEC > #define LIBLSAN_SPEC STATIC_LIBLSAN_LIBS > @@ -802,7 +806,7 @@ proper position among the other output files. */ > "} -llsan %{static-liblsan:" LD_DYNAMIC_OPTION > "}" \ > STATIC_LIBLSAN_LIBS > #else > -#define LIBLSAN_SPEC "-llsan" STATIC_LIBLSAN_LIBS > +#define LIBLSAN_SPEC "-llsan" STATIC_LIBLSAN_LIBS LIBSAN_RPATH > #endif > #endif > > @@ -816,9 +820,9 @@ proper position among the other output files. */ > #ifdef HAVE_LD_STATIC_DYNAMIC > #define LIBUBSAN_SPEC "%{static-libubsan:" LD_STATIC_OPTION \ > "} -lubsan %{static-libubsan:" LD_DYNAMIC_OPTION > "}" \ > - STATIC_LIBUBSAN_LIBS > + STATIC_LIBUBSAN_LIBS LIBSAN_RPATH > #else > -#define LIBUBSAN_SPEC "-lubsan" STATIC_LIBUBSAN_LIBS > +#define LIBUBSAN_SPEC "-lubsan" STATIC_LIBUBSAN_LIBS LIBSAN_RPATH > #endif > #endif > > diff --git a/libsanitizer/Makefile.in b/libsanitizer/Makefile.in > index 65e7f2e9553..ef71407a512 100644 > --- a/libsanitizer/Makefile.in > +++ b/libsanitizer/Makefile.in > @@ -333,6 +333,7 @@ libexecdir = @libexecdir@ > link_libasan = @link_libasan@ > link_libhwasan = @link_libhwasan@ > link_liblsan = @link_liblsan@ > +link_libsan_rpath = @link_libsan_rpath@ > link_libtsan = @link_libtsan@ > link_libubsan = @link_libubsan@ > localedir = @localedir@ > diff --git a/libsanitizer/asan/Makefile.in > b/libsanitizer/asan/Makefile.in > index 7833a9a4c3f..143dafa450d 100644 > --- a/libsanitizer/asan/Makefile.in > +++ b/libsanitizer/asan/Makefile.in > @@ -387,6 +387,7 @@ libexecdir = @libexecdir@ > link_libasan = @link_libasan@ > link_libhwasan = @link_libhwasan@ > link_liblsan = @link_liblsan@ > +link_libsan_rpath = @link_libsan_rpath@ > link_libtsan = @link_libtsan@ > link_libubsan = @link_libubsan@ > localedir = @localedir@ > diff --git a/libsanitizer/configure b/libsanitizer/configure > index 771b135573a..4408167929f 100755 > --- a/libsanitizer/configure > +++ b/libsanitizer/configure > @@ -660,6 +660,7 @@ link_libubsan > link_libtsan > link_libhwasan > link_libasan > +link_libsan_rpath > HWASAN_SUPPORTED_FALSE > HWASAN_SUPPORTED_TRUE > LSAN_SUPPORTED_FALSE > @@ -12359,7 +12360,7 @@ else > lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 > lt_status=$lt_dlunknown > cat > conftest.$ac_ext <<_LT_EOF > -#line 12362 "configure" > +#line 12363 "configure" > #include "confdefs.h" > > #if HAVE_DLFCN_H > @@ -12465,7 +12466,7 @@ else > lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 > lt_status=$lt_dlunknown > cat > conftest.$ac_ext <<_LT_EOF > -#line 12468 "configure" > +#line 12469 "configure" > #include "confdefs.h" > > #if HAVE_DLFCN_H > @@ -15935,6 +15936,11 @@ if test "x$ac_cv_lib_dl_dlsym" = xyes; then : > link_sanitizer_common="-ldl $link_sanitizer_common" > fi > > +lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os- > directory 2>/dev/null` > +if test -n "$with_cross_host" && > + test x"$with_cross_host" != x"no"; then > + link_libsan_rpath="-rpath- > link=%R/../${target_alias}/lib/$lt_multi_os_dir" > +fi > > # Set up the set of additional libraries that we need to link against > for libasan. > link_libasan=$link_sanitizer_common > diff --git a/libsanitizer/configure.ac b/libsanitizer/configure.ac > index 7f1ef3979c4..4c7c3814cf1 100644 > --- a/libsanitizer/configure.ac > +++ b/libsanitizer/configure.ac > @@ -118,6 +118,13 @@ AC_CHECK_LIB(rt, shm_open, > AC_CHECK_LIB(dl, dlsym, > [link_sanitizer_common="-ldl $link_sanitizer_common"]) > > +lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os- > directory 2>/dev/null` > +if test -n "$with_cross_host" && > + test x"$with_cross_host" != x"no"; then > + link_libsan_rpath="-rpath- > link=%R/../../${target_alias}/lib/$lt_multi_os_dir" > +fi > +AC_SUBST(link_libsan_rpath) > + > # Set up the set of additional libraries that we need to link against > for libasan. > link_libasan=$link_sanitizer_common > AC_SUBST(link_libasan) > diff --git a/libsanitizer/hwasan/Makefile.in > b/libsanitizer/hwasan/Makefile.in > index b9b942003a3..cda1c944542 100644 > --- a/libsanitizer/hwasan/Makefile.in > +++ b/libsanitizer/hwasan/Makefile.in > @@ -376,6 +376,7 @@ libexecdir = @libexecdir@ > link_libasan = @link_libasan@ > link_libhwasan = @link_libhwasan@ > link_liblsan = @link_liblsan@ > +link_libsan_rpath = @link_libsan_rpath@ > link_libtsan = @link_libtsan@ > link_libubsan = @link_libubsan@ > localedir = @localedir@ > diff --git a/libsanitizer/interception/Makefile.in > b/libsanitizer/interception/Makefile.in > index 85dd386de47..a10851cd157 100644 > --- a/libsanitizer/interception/Makefile.in > +++ b/libsanitizer/interception/Makefile.in > @@ -305,6 +305,7 @@ libexecdir = @libexecdir@ > link_libasan = @link_libasan@ > link_libhwasan = @link_libhwasan@ > link_liblsan = @link_liblsan@ > +link_libsan_rpath = @link_libsan_rpath@ > link_libtsan = @link_libtsan@ > link_libubsan = @link_libubsan@ > localedir = @localedir@ > diff --git a/libsanitizer/libbacktrace/Makefile.in > b/libsanitizer/libbacktrace/Makefile.in > index c0243fa4aab..4c75070a6e3 100644 > --- a/libsanitizer/libbacktrace/Makefile.in > +++ b/libsanitizer/libbacktrace/Makefile.in > @@ -355,6 +355,7 @@ libexecdir = @libexecdir@ > link_libasan = @link_libasan@ > link_libhwasan = @link_libhwasan@ > link_liblsan = @link_liblsan@ > +link_libsan_rpath = @link_libsan_rpath@ > link_libtsan = @link_libtsan@ > link_libubsan = @link_libubsan@ > localedir = @localedir@ > diff --git a/libsanitizer/libsanitizer.spec.in > b/libsanitizer/libsanitizer.spec.in > index 70a33574d7b..1df604335d5 100644 > --- a/libsanitizer/libsanitizer.spec.in > +++ b/libsanitizer/libsanitizer.spec.in > @@ -11,3 +11,5 @@ > > *link_liblsan: @link_liblsan@ > > +*link_libsan_rpath: @link_libsan_rpath@ > + > diff --git a/libsanitizer/lsan/Makefile.in > b/libsanitizer/lsan/Makefile.in > index d8fd4ee9557..8f459b255d7 100644 > --- a/libsanitizer/lsan/Makefile.in > +++ b/libsanitizer/lsan/Makefile.in > @@ -350,6 +350,7 @@ libexecdir = @libexecdir@ > link_libasan = @link_libasan@ > link_libhwasan = @link_libhwasan@ > link_liblsan = @link_liblsan@ > +link_libsan_rpath = @link_libsan_rpath@ > link_libtsan = @link_libtsan@ > link_libubsan = @link_libubsan@ > localedir = @localedir@ > diff --git a/libsanitizer/sanitizer_common/Makefile.in > b/libsanitizer/sanitizer_common/Makefile.in > index 07047bd4b17..e916a803786 100644 > --- a/libsanitizer/sanitizer_common/Makefile.in > +++ b/libsanitizer/sanitizer_common/Makefile.in > @@ -342,6 +342,7 @@ libexecdir = @libexecdir@ > link_libasan = @link_libasan@ > link_libhwasan = @link_libhwasan@ > link_liblsan = @link_liblsan@ > +link_libsan_rpath = @link_libsan_rpath@ > link_libtsan = @link_libtsan@ > link_libubsan = @link_libubsan@ > localedir = @localedir@ > diff --git a/libsanitizer/tsan/Makefile.in > b/libsanitizer/tsan/Makefile.in > index 36498832bb8..ab8db13a268 100644 > --- a/libsanitizer/tsan/Makefile.in > +++ b/libsanitizer/tsan/Makefile.in > @@ -379,6 +379,7 @@ libexecdir = @libexecdir@ > link_libasan = @link_libasan@ > link_libhwasan = @link_libhwasan@ > link_liblsan = @link_liblsan@ > +link_libsan_rpath = @link_libsan_rpath@ > link_libtsan = @link_libtsan@ > link_libubsan = @link_libubsan@ > localedir = @localedir@ > diff --git a/libsanitizer/ubsan/Makefile.in > b/libsanitizer/ubsan/Makefile.in > index 92a8e387fd7..5fc063fe9ee 100644 > --- a/libsanitizer/ubsan/Makefile.in > +++ b/libsanitizer/ubsan/Makefile.in > @@ -344,6 +344,7 @@ libexecdir = @libexecdir@ > link_libasan = @link_libasan@ > link_libhwasan = @link_libhwasan@ > link_liblsan = @link_liblsan@ > +link_libsan_rpath = @link_libsan_rpath@ > link_libtsan = @link_libtsan@ > link_libubsan = @link_libubsan@ > localedir = @localedir@ > > --- > -- Xi Ruoyao <xry...@xry111.site> School of Aerospace Science and Technology, Xidian University