This patch is okay with me if it is okay with the Release Managers. Thanks, David
On Thu, Jul 17, 2014 at 10:54 AM, Peter Bergner <berg...@vnet.ibm.com> wrote: > With a recent mainline libsanitizer merge from upstream, we're now seeing a > lot of mainline ASAN test suite failures with the following error: > > ==26426==ASan runtime does not come first in initial library list; you should > either link runtime to your application or manually preload it with > LD_PRELOAD. > FAIL: c-c++-common/asan/asan-interface-1.c -O0 execution test > > This is caused by mainline libasan detecting that libasan is not linked > first and erroring out. With the 4.8 and 4.9, we may just silently run > into problems. The root cause is that powerpc*-linux does not define > LIBASAN_EARLY_SPEC which is defined in gnu-user.h. It looks like all > *-linux architectures include gnu-user.h except for powerpc*-linux. > As discussed, for the 4.8 and 4.9 backports of the original patch, we > will just copy those defines to the rs6000 header files and not try and > include gnu-user.h itself. > > This passed bootstrap and regtesting on powerpc64-linux with no regressions. > Ok for 4.8? > > Peter > > > * config/rs6000/sysv4.h: > > Index: gcc/config/rs6000/sysv4.h > =================================================================== > --- gcc/config/rs6000/sysv4.h (revision 212695) > +++ gcc/config/rs6000/sysv4.h (working copy) > @@ -949,3 +949,27 @@ ncrtn.o%s" > #define TARGET_USES_SYSV4_OPT 1 > > #undef DBX_REGISTER_NUMBER > + > +/* Link -lasan early on the command line. For -static-libasan, don't link > + it for -shared link, the executable should be compiled with > -static-libasan > + in that case, and for executable link link with --{,no-}whole-archive > around > + it to force everything into the executable. And similarly for -ltsan. */ > +#if defined(HAVE_LD_STATIC_DYNAMIC) > +#undef LIBASAN_EARLY_SPEC > +#define LIBASAN_EARLY_SPEC "%{!shared:libasan_preinit%O%s} " \ > + "%{static-libasan:%{!shared:" \ > + LD_STATIC_OPTION " --whole-archive -lasan --no-whole-archive " \ > + LD_DYNAMIC_OPTION "}}%{!static-libasan:-lasan}" > +#undef LIBTSAN_EARLY_SPEC > +#define LIBTSAN_EARLY_SPEC "%{static-libtsan:%{!shared:" \ > + LD_STATIC_OPTION " --whole-archive -ltsan --no-whole-archive " \ > + LD_DYNAMIC_OPTION "}}%{!static-libtsan:-ltsan}" > +#endif > + > +/* Additional libraries needed by -static-libasan. */ > +#undef STATIC_LIBASAN_LIBS > +#define STATIC_LIBASAN_LIBS "-ldl -lpthread" > + > +/* Additional libraries needed by -static-libtsan. */ > +#undef STATIC_LIBTSAN_LIBS > +#define STATIC_LIBTSAN_LIBS "-ldl -lpthread" > >