+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>
* tree.c (fld_type_variant): Copy canonical type.
#undef CPP_SPEC
#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
assembler requires -xarch=generic or -xarch=generic64 instead. */
#ifdef USE_GAS
#define LARGECOMM_SECTION_ASM_OP "\t.lbcomm\t"
#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_X86_64_FRAME_POINTER 1
#define DEF_ARCH64_SPEC(__str) "%{!m32:" __str "}"
#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
handled by both Sun as and GNU as. */
#define ASM_SPEC_BASE \
#define ENDFILE_VTV_SPEC ""
#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. */
#undef STARTFILE_SPEC
#ifdef HAVE_SOLARIS_CRTS
%{m64:%{m32:%emay not use both -m32 and -m64}} \
%{m64:-mptr64 -mstack-bias -mno-v8plus \
%{!mcpu*:-%{!mv8plus:mcpu=v9}}} \
-"
+" ASAN_CC1_SPEC
#else
#define CC1_SPEC "\
%{m32:%{m64:%emay not use both -m32 and -m64}} \
%{!mcpu*:%{!mv8plus:-mcpu=v9}}} \
%{mv8plus:-m32 -mptr32 -mno-stack-bias \
%{!mcpu*:-mcpu=v9}} \
-"
+" ASAN_CC1_SPEC
#endif
/* Support for a compile-time default CPU, et cetera. The rules are:
#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")
\f
/* Register the Solaris-specific #pragma directives. */
const_tree);
static int sparc_arg_partial_bytes (cumulative_args_t,
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_file_end (void);
static bool sparc_frame_pointer_required (void);
#undef TARGET_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
#define TARGET_EXPAND_BUILTIN_VA_START sparc_va_start
#undef TARGET_GIMPLIFY_VA_ARG_EXPR
{
return ggc_cleared_alloc<machine_function> ();
}
+\f
+/* 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);
+}
+\f
/* This is called from dwarf2out.c via TARGET_ASM_OUTPUT_DWARF_DTPREL.
We need to emit DTP-relative relocations. */
+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>
* gcc.dg/lto/tbaa-1.c: New testcase.
/* { dg-do run } */
+/* { dg-require-effective-target alloca } */
/* This testcase checks that allocas and VLAs inside loop are correctly unpoisoned. */
top = &x;
volatile char array[len];
assert(!((uintptr_t) array & 31L));
- alloca(len);
+ __builtin_alloca(len);
for (int i = 0; i < thirty_two; ++i) {
char array[i];
bot = array;
+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>
PR sanitizer/80953
;;
s390*-*-linux*)
;;
+ sparc*-*-solaris2.11*)
+ ;;
arm*-*-linux*)
;;
mips*64*-*-linux*)
x86_64-*-darwin[1]* | i?86-*-darwin[1]*)
TSAN_SUPPORTED=no
;;
+ x86_64-*-solaris2.11* | i?86-*-solaris2.11*)
+ ;;
*)
UNSUPPORTED=1
;;