From 5f13745b95aba2dda2a010c9f706577d10b23dca Mon Sep 17 00:00:00 2001 From: jakub Date: Tue, 5 Feb 2013 15:55:31 +0000 Subject: [PATCH] PR sanitizer/55374 * config/gnu-user.h (LIBTSAN_EARLY_SPEC): Define. (STATIC_LIBTSAN_LIBS): Likewise. * gcc.c (ADD_STATIC_LIBTSAN_LIBS, LIBTSAN_EARLY_SPEC): Define. (LIBTSAN_SPEC): Add ADD_STATIC_LIBTSAN_LIBS, if LIBTSAN_EARLY_SPEC is defined, don't add anything else beyond that. (SANITIZER_EARLY_SPEC, SANITIZER_SPEC): Define. (LINK_COMMAND_SPEC): Use them. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@195761 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 9 +++++++++ gcc/config/gnu-user.h | 10 +++++++++- gcc/gcc.c | 43 ++++++++++++++++++++++++++++++++++--------- 3 files changed, 52 insertions(+), 10 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a6ab680..6440481 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,14 @@ 2013-02-05 Jakub Jelinek + PR sanitizer/55374 + * config/gnu-user.h (LIBTSAN_EARLY_SPEC): Define. + (STATIC_LIBTSAN_LIBS): Likewise. + * gcc.c (ADD_STATIC_LIBTSAN_LIBS, LIBTSAN_EARLY_SPEC): Define. + (LIBTSAN_SPEC): Add ADD_STATIC_LIBTSAN_LIBS, if LIBTSAN_EARLY_SPEC + is defined, don't add anything else beyond that. + (SANITIZER_EARLY_SPEC, SANITIZER_SPEC): Define. + (LINK_COMMAND_SPEC): Use them. + PR tree-optimization/56205 * tree-stdarg.c (check_all_va_list_escapes): Return true if there are any PHI nodes that set non-va_list_escape_vars SSA_NAME diff --git a/gcc/config/gnu-user.h b/gcc/config/gnu-user.h index 0024626..ba627e0 100644 --- a/gcc/config/gnu-user.h +++ b/gcc/config/gnu-user.h @@ -101,14 +101,22 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see /* 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. */ + 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 "%{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" diff --git a/gcc/gcc.c b/gcc/gcc.c index 29735be..5022789 100644 --- a/gcc/gcc.c +++ b/gcc/gcc.c @@ -564,12 +564,25 @@ proper position among the other output files. */ #endif #ifndef LIBTSAN_SPEC -#ifdef HAVE_LD_STATIC_DYNAMIC +#ifdef STATIC_LIBTSAN_LIBS +#define ADD_STATIC_LIBTSAN_LIBS \ + " %{static-libtsan:" STATIC_LIBTSAN_LIBS "}" +#else +#define ADD_STATIC_LIBTSAN_LIBS +#endif +#ifdef LIBTSAN_EARLY_SPEC +#define LIBTSAN_SPEC ADD_STATIC_LIBTSAN_LIBS +#elif defined(HAVE_LD_STATIC_DYNAMIC) #define LIBTSAN_SPEC "%{static-libtsan:" LD_STATIC_OPTION \ - "} -ltsan %{static-libtsan:" LD_DYNAMIC_OPTION "}" + "} -ltsan %{static-libtsan:" LD_DYNAMIC_OPTION "}" \ + ADD_STATIC_LIBTSAN_LIBS #else -#define LIBTSAN_SPEC "-ltsan" +#define LIBTSAN_SPEC "-ltsan" ADD_STATIC_LIBTSAN_LIBS +#endif #endif + +#ifndef LIBTSAN_EARLY_SPEC +#define LIBTSAN_EARLY_SPEC "" #endif /* config.h can define LIBGCC_SPEC to override how and when libgcc.a is @@ -691,6 +704,21 @@ proper position among the other output files. */ %e-fuse-linker-plugin is not supported in this configuration}" #endif +/* Linker command line options for -fsanitize= early on the command line. */ +#ifndef SANITIZER_EARLY_SPEC +#define SANITIZER_EARLY_SPEC "\ +%{!nostdlib:%{!nodefaultlibs:%{fsanitize=address:" LIBASAN_EARLY_SPEC "} \ + %{fsanitize=thread:" LIBTSAN_EARLY_SPEC "}}}" +#endif + +/* Linker command line options for -fsanitize= late on the command line. */ +#ifndef SANITIZER_SPEC +#define SANITIZER_SPEC "\ +%{!nostdlib:%{!nodefaultlibs:%{fsanitize=address:" LIBASAN_SPEC "\ + %{static:%ecannot specify -static with -fsanitize=address}}\ + %{fsanitize=thread:" LIBTSAN_SPEC "\ + %{!pie:%{!shared:%e-fsanitize=thread linking must be done with -pie or -shared}}}}}" +#endif /* -u* was put back because both BSD and SysV seem to support it. */ /* %{static:} simply prevents an error message if the target machine @@ -706,19 +734,16 @@ proper position among the other output files. */ %{!fsyntax-only:%{!c:%{!M:%{!MM:%{!E:%{!S:\ %(linker) " \ LINK_PLUGIN_SPEC \ - "%{flto|flto=*:%