mirror of git://gcc.gnu.org/git/gcc.git
Enable libsanitizer on Solaris (PR sanitizer/80953)
gcc: PR sanitizer/80953 * config/sol2.h (ASAN_CC1_SPEC): Define. (LD_WHOLE_ARCHIVE_OPTION): Define. (LD_NO_WHOLE_ARCHIVE_OPTION): Define. (ASAN_REJECT_SPEC): Provide default. (LIBASAN_EARLY_SPEC): Define. (LIBTSAN_EARLY_SPEC): Define. (LIBLSAN_EARLY_SPEC): Define. * config/i386/sol2.h (CC1_SPEC): Redefine. (ASAN_REJECT_SPEC): Define. * config/sparc/sparc.c (sparc_asan_shadow_offset): Declare. (TARGET_ASAN_SHADOW_OFFSET): Define. (sparc_asan_shadow_offset): New function. * config/sparc/sol2.h (CC1_SPEC): Append ASAN_CC1_SPEC. (ASAN_REJECT_SPEC): Define. gcc/testsuite: PR sanitizer/80953 * c-c++-common/asan/alloca_loop_unpoisoning.c: Require alloca support. (foo): Use __builtin_alloca. libsanitizer: PR sanitizer/80953 * configure.tgt (sparc*-*-solaris2.11*): Enable. (x86_64-*-solaris2.11* | i?86-*-solaris2.11*): Enable. From-SVN: r265837
This commit is contained in:
parent
0b5ccc800e
commit
aaabfd71e3
|
@ -1,3 +1,22 @@
|
||||||
|
2018-11-06 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
|
||||||
|
|
||||||
|
PR sanitizer/80953
|
||||||
|
* config/sol2.h (ASAN_CC1_SPEC): Define.
|
||||||
|
(LD_WHOLE_ARCHIVE_OPTION): Define.
|
||||||
|
(LD_NO_WHOLE_ARCHIVE_OPTION): Define.
|
||||||
|
(ASAN_REJECT_SPEC): Provide default.
|
||||||
|
(LIBASAN_EARLY_SPEC): Define.
|
||||||
|
(LIBTSAN_EARLY_SPEC): Define.
|
||||||
|
(LIBLSAN_EARLY_SPEC): Define.
|
||||||
|
* config/i386/sol2.h (CC1_SPEC): Redefine.
|
||||||
|
(ASAN_REJECT_SPEC): Define.
|
||||||
|
|
||||||
|
* config/sparc/sparc.c (sparc_asan_shadow_offset): Declare.
|
||||||
|
(TARGET_ASAN_SHADOW_OFFSET): Define.
|
||||||
|
(sparc_asan_shadow_offset): New function.
|
||||||
|
* config/sparc/sol2.h (CC1_SPEC): Append ASAN_CC1_SPEC.
|
||||||
|
(ASAN_REJECT_SPEC): Define.
|
||||||
|
|
||||||
018-11-06 Jan Hubicka <jh@suse.cz>
|
018-11-06 Jan Hubicka <jh@suse.cz>
|
||||||
|
|
||||||
* tree.c (fld_type_variant): Copy canonical type.
|
* tree.c (fld_type_variant): Copy canonical type.
|
||||||
|
|
|
@ -54,6 +54,9 @@ along with GCC; see the file COPYING3. If not see
|
||||||
#undef CPP_SPEC
|
#undef CPP_SPEC
|
||||||
#define CPP_SPEC "%(cpp_subtarget)"
|
#define CPP_SPEC "%(cpp_subtarget)"
|
||||||
|
|
||||||
|
#undef CC1_SPEC
|
||||||
|
#define CC1_SPEC "%(cc1_cpu) " ASAN_CC1_SPEC
|
||||||
|
|
||||||
/* GNU as understands --32 and --64, but the native Solaris
|
/* GNU as understands --32 and --64, but the native Solaris
|
||||||
assembler requires -xarch=generic or -xarch=generic64 instead. */
|
assembler requires -xarch=generic or -xarch=generic64 instead. */
|
||||||
#ifdef USE_GAS
|
#ifdef USE_GAS
|
||||||
|
@ -241,6 +244,10 @@ along with GCC; see the file COPYING3. If not see
|
||||||
#define LARGECOMM_SECTION_ASM_OP "\t.lbcomm\t"
|
#define LARGECOMM_SECTION_ASM_OP "\t.lbcomm\t"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* -fsanitize=address is currently only supported for 32-bit. */
|
||||||
|
#define ASAN_REJECT_SPEC \
|
||||||
|
DEF_ARCH64_SPEC("%e:-fsanitize=address is not supported in this configuration")
|
||||||
|
|
||||||
#define USE_IX86_FRAME_POINTER 1
|
#define USE_IX86_FRAME_POINTER 1
|
||||||
#define USE_X86_64_FRAME_POINTER 1
|
#define USE_X86_64_FRAME_POINTER 1
|
||||||
|
|
||||||
|
|
|
@ -138,6 +138,9 @@ along with GCC; see the file COPYING3. If not see
|
||||||
#define DEF_ARCH64_SPEC(__str) "%{!m32:" __str "}"
|
#define DEF_ARCH64_SPEC(__str) "%{!m32:" __str "}"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* Solaris needs -fasynchronous-unwind-tables to generate unwind info. */
|
||||||
|
#define ASAN_CC1_SPEC "%{%:sanitize(address):-fasynchronous-unwind-tables}"
|
||||||
|
|
||||||
/* It's safe to pass -s always, even if -g is not used. Those options are
|
/* It's safe to pass -s always, even if -g is not used. Those options are
|
||||||
handled by both Sun as and GNU as. */
|
handled by both Sun as and GNU as. */
|
||||||
#define ASM_SPEC_BASE \
|
#define ASM_SPEC_BASE \
|
||||||
|
@ -231,6 +234,36 @@ along with GCC; see the file COPYING3. If not see
|
||||||
#define ENDFILE_VTV_SPEC ""
|
#define ENDFILE_VTV_SPEC ""
|
||||||
#endif /* !ENABLE_VTABLE_VERIFY */
|
#endif /* !ENABLE_VTABLE_VERIFY */
|
||||||
|
|
||||||
|
/* 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 with --{,no-}whole-archive around
|
||||||
|
it to force everything into the executable. */
|
||||||
|
|
||||||
|
#ifndef USE_GNU_LD
|
||||||
|
#define LD_WHOLE_ARCHIVE_OPTION "-z allextract"
|
||||||
|
#define LD_NO_WHOLE_ARCHIVE_OPTION "-z defaultextract"
|
||||||
|
#else
|
||||||
|
#define LD_WHOLE_ARCHIVE_OPTION "--whole-archive"
|
||||||
|
#define LD_NO_WHOLE_ARCHIVE_OPTION "--no-whole-archive"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Allow rejecting -fsanitize=address, e.g. for specific multilibs. */
|
||||||
|
#ifndef ASAN_REJECT_SPEC
|
||||||
|
#define ASAN_REJECT_SPEC ""
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define LIBASAN_EARLY_SPEC ASAN_REJECT_SPEC \
|
||||||
|
" %{!shared:libasan_preinit%O%s} \
|
||||||
|
%{static-libasan:%{!shared: -Bstatic "\
|
||||||
|
LD_WHOLE_ARCHIVE_OPTION " -lasan " LD_NO_WHOLE_ARCHIVE_OPTION \
|
||||||
|
"-Bdynamic}}%{!static-libasan:-lasan}"
|
||||||
|
|
||||||
|
/* Error out on -fsanitize=thread|leak. */
|
||||||
|
#define LIBTSAN_EARLY_SPEC "\
|
||||||
|
%e:-fsanitize=thread is not supported in this configuration"
|
||||||
|
#define LIBLSAN_EARLY_SPEC "\
|
||||||
|
%e:-fsanitize=leak is not supported in this configuration"
|
||||||
|
|
||||||
/* We don't use the standard svr4 STARTFILE_SPEC because it's wrong for us. */
|
/* We don't use the standard svr4 STARTFILE_SPEC because it's wrong for us. */
|
||||||
#undef STARTFILE_SPEC
|
#undef STARTFILE_SPEC
|
||||||
#ifdef HAVE_SOLARIS_CRTS
|
#ifdef HAVE_SOLARIS_CRTS
|
||||||
|
|
|
@ -237,7 +237,7 @@ extern const char *host_detect_local_cpu (int argc, const char **argv);
|
||||||
%{m64:%{m32:%emay not use both -m32 and -m64}} \
|
%{m64:%{m32:%emay not use both -m32 and -m64}} \
|
||||||
%{m64:-mptr64 -mstack-bias -mno-v8plus \
|
%{m64:-mptr64 -mstack-bias -mno-v8plus \
|
||||||
%{!mcpu*:-%{!mv8plus:mcpu=v9}}} \
|
%{!mcpu*:-%{!mv8plus:mcpu=v9}}} \
|
||||||
"
|
" ASAN_CC1_SPEC
|
||||||
#else
|
#else
|
||||||
#define CC1_SPEC "\
|
#define CC1_SPEC "\
|
||||||
%{m32:%{m64:%emay not use both -m32 and -m64}} \
|
%{m32:%{m64:%emay not use both -m32 and -m64}} \
|
||||||
|
@ -245,7 +245,7 @@ extern const char *host_detect_local_cpu (int argc, const char **argv);
|
||||||
%{!mcpu*:%{!mv8plus:-mcpu=v9}}} \
|
%{!mcpu*:%{!mv8plus:-mcpu=v9}}} \
|
||||||
%{mv8plus:-m32 -mptr32 -mno-stack-bias \
|
%{mv8plus:-m32 -mptr32 -mno-stack-bias \
|
||||||
%{!mcpu*:-mcpu=v9}} \
|
%{!mcpu*:-mcpu=v9}} \
|
||||||
"
|
" ASAN_CC1_SPEC
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Support for a compile-time default CPU, et cetera. The rules are:
|
/* Support for a compile-time default CPU, et cetera. The rules are:
|
||||||
|
@ -322,6 +322,9 @@ extern const char *host_detect_local_cpu (int argc, const char **argv);
|
||||||
|
|
||||||
#define ENDFILE_ARCH_SPEC ""
|
#define ENDFILE_ARCH_SPEC ""
|
||||||
|
|
||||||
|
/* -fsanitize=address is currently only supported for 32-bit. */
|
||||||
|
#define ASAN_REJECT_SPEC \
|
||||||
|
DEF_ARCH64_SPEC("%e:-fsanitize=address is not supported in this configuration")
|
||||||
|
|
||||||
|
|
||||||
/* Register the Solaris-specific #pragma directives. */
|
/* Register the Solaris-specific #pragma directives. */
|
||||||
|
|
|
@ -674,6 +674,7 @@ static unsigned int sparc_function_arg_boundary (machine_mode,
|
||||||
const_tree);
|
const_tree);
|
||||||
static int sparc_arg_partial_bytes (cumulative_args_t,
|
static int sparc_arg_partial_bytes (cumulative_args_t,
|
||||||
machine_mode, tree, bool);
|
machine_mode, tree, bool);
|
||||||
|
static unsigned HOST_WIDE_INT sparc_asan_shadow_offset (void);
|
||||||
static void sparc_output_dwarf_dtprel (FILE *, int, rtx) ATTRIBUTE_UNUSED;
|
static void sparc_output_dwarf_dtprel (FILE *, int, rtx) ATTRIBUTE_UNUSED;
|
||||||
static void sparc_file_end (void);
|
static void sparc_file_end (void);
|
||||||
static bool sparc_frame_pointer_required (void);
|
static bool sparc_frame_pointer_required (void);
|
||||||
|
@ -839,6 +840,9 @@ char sparc_hard_reg_printed[8];
|
||||||
#undef TARGET_STRICT_ARGUMENT_NAMING
|
#undef TARGET_STRICT_ARGUMENT_NAMING
|
||||||
#define TARGET_STRICT_ARGUMENT_NAMING sparc_strict_argument_naming
|
#define TARGET_STRICT_ARGUMENT_NAMING sparc_strict_argument_naming
|
||||||
|
|
||||||
|
#undef TARGET_ASAN_SHADOW_OFFSET
|
||||||
|
#define TARGET_ASAN_SHADOW_OFFSET sparc_asan_shadow_offset
|
||||||
|
|
||||||
#undef TARGET_EXPAND_BUILTIN_VA_START
|
#undef TARGET_EXPAND_BUILTIN_VA_START
|
||||||
#define TARGET_EXPAND_BUILTIN_VA_START sparc_va_start
|
#define TARGET_EXPAND_BUILTIN_VA_START sparc_va_start
|
||||||
#undef TARGET_GIMPLIFY_VA_ARG_EXPR
|
#undef TARGET_GIMPLIFY_VA_ARG_EXPR
|
||||||
|
@ -12476,7 +12480,15 @@ sparc_init_machine_status (void)
|
||||||
{
|
{
|
||||||
return ggc_cleared_alloc<machine_function> ();
|
return ggc_cleared_alloc<machine_function> ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Implement the TARGET_ASAN_SHADOW_OFFSET hook. */
|
||||||
|
|
||||||
|
static unsigned HOST_WIDE_INT
|
||||||
|
sparc_asan_shadow_offset (void)
|
||||||
|
{
|
||||||
|
return TARGET_ARCH64 ? HOST_WIDE_INT_C (0x7fff8000) : (HOST_WIDE_INT_1 << 29);
|
||||||
|
}
|
||||||
|
|
||||||
/* This is called from dwarf2out.c via TARGET_ASM_OUTPUT_DWARF_DTPREL.
|
/* This is called from dwarf2out.c via TARGET_ASM_OUTPUT_DWARF_DTPREL.
|
||||||
We need to emit DTP-relative relocations. */
|
We need to emit DTP-relative relocations. */
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,10 @@
|
||||||
|
2018-11-06 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
|
||||||
|
|
||||||
|
PR sanitizer/80953
|
||||||
|
* c-c++-common/asan/alloca_loop_unpoisoning.c: Require alloca
|
||||||
|
support.
|
||||||
|
(foo): Use __builtin_alloca.
|
||||||
|
|
||||||
2018-11-06 Jan Hubicka <jh@suse.cz>
|
2018-11-06 Jan Hubicka <jh@suse.cz>
|
||||||
|
|
||||||
* gcc.dg/lto/tbaa-1.c: New testcase.
|
* gcc.dg/lto/tbaa-1.c: New testcase.
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
/* { dg-do run } */
|
/* { dg-do run } */
|
||||||
|
/* { dg-require-effective-target alloca } */
|
||||||
|
|
||||||
/* This testcase checks that allocas and VLAs inside loop are correctly unpoisoned. */
|
/* This testcase checks that allocas and VLAs inside loop are correctly unpoisoned. */
|
||||||
|
|
||||||
|
@ -16,7 +17,7 @@ __attribute__((noinline)) void foo(int len) {
|
||||||
top = &x;
|
top = &x;
|
||||||
volatile char array[len];
|
volatile char array[len];
|
||||||
assert(!((uintptr_t) array & 31L));
|
assert(!((uintptr_t) array & 31L));
|
||||||
alloca(len);
|
__builtin_alloca(len);
|
||||||
for (int i = 0; i < thirty_two; ++i) {
|
for (int i = 0; i < thirty_two; ++i) {
|
||||||
char array[i];
|
char array[i];
|
||||||
bot = array;
|
bot = array;
|
||||||
|
|
|
@ -1,3 +1,9 @@
|
||||||
|
2018-11-06 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
|
||||||
|
|
||||||
|
PR sanitizer/80953
|
||||||
|
* configure.tgt (sparc*-*-solaris2.11*): Enable.
|
||||||
|
(x86_64-*-solaris2.11* | i?86-*-solaris2.11*): Enable.
|
||||||
|
|
||||||
2018-11-06 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
|
2018-11-06 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
|
||||||
|
|
||||||
PR sanitizer/80953
|
PR sanitizer/80953
|
||||||
|
|
|
@ -43,6 +43,8 @@ case "${target}" in
|
||||||
;;
|
;;
|
||||||
s390*-*-linux*)
|
s390*-*-linux*)
|
||||||
;;
|
;;
|
||||||
|
sparc*-*-solaris2.11*)
|
||||||
|
;;
|
||||||
arm*-*-linux*)
|
arm*-*-linux*)
|
||||||
;;
|
;;
|
||||||
mips*64*-*-linux*)
|
mips*64*-*-linux*)
|
||||||
|
@ -61,6 +63,8 @@ case "${target}" in
|
||||||
x86_64-*-darwin[1]* | i?86-*-darwin[1]*)
|
x86_64-*-darwin[1]* | i?86-*-darwin[1]*)
|
||||||
TSAN_SUPPORTED=no
|
TSAN_SUPPORTED=no
|
||||||
;;
|
;;
|
||||||
|
x86_64-*-solaris2.11* | i?86-*-solaris2.11*)
|
||||||
|
;;
|
||||||
*)
|
*)
|
||||||
UNSUPPORTED=1
|
UNSUPPORTED=1
|
||||||
;;
|
;;
|
||||||
|
|
Loading…
Reference in New Issue