gcc: Enable bits for sanitizer support on FreeBSD x86_64

This patch add the necessary bits to suport libasan on FreeBSD x86_64.

gcc
	* config/i386/i386.h: Define a new macro: SUBTARGET_SHADOW_OFFSET.
	* config/i386/i386.c (ix86_asan_shadow_offset): Use this macro.
	* config/i386/darwin.h: Override the SUBTARGET_SHADOW_OFFSET macro.
	* config/i386/freebsd.h: Likewise.
	* config/freebsd.h (LIBASAN_EARLY_SPEC): Define.
	LIBTSAN_EARLY_SPEC): Likewise. (LIBLSAN_EARLY_SPEC): Likewise.

libsanitizer:

	* configure.tgt: Add x86_64- and i?86-*-freebsd* targets.
This commit is contained in:
Andreas Tobler 2020-05-01 09:04:01 +02:00
parent bf1dde9790
commit d730fd95ee
8 changed files with 53 additions and 3 deletions

View File

@ -1,3 +1,12 @@
2020-05-01 Andreas Tobler <andreast@gcc.gnu.org>
* config/i386/i386.h: Define a new macro: SUBTARGET_SHADOW_OFFSET.
* config/i386/i386.c (ix86_asan_shadow_offset): Use this macro.
* config/i386/darwin.h: Override the SUBTARGET_SHADOW_OFFSET macro.
* config/i386/freebsd.h: Likewise.
* config/freebsd.h (LIBASAN_EARLY_SPEC): Define.
LIBTSAN_EARLY_SPEC): Likewise. (LIBLSAN_EARLY_SPEC): Likewise.
2020-04-30 Alexandre Oliva <oliva@adacore.com>
* doc/sourcebuild.texi (Effective-Target Keywords): Document

View File

@ -62,6 +62,27 @@ along with GCC; see the file COPYING3. If not see
#define USE_LD_AS_NEEDED 1
#endif
/* 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. And similarly for -ltsan
and -llsan. */
#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 -lpthread}"
#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 -lpthread}"
#undef LIBLSAN_EARLY_SPEC
#define LIBLSAN_EARLY_SPEC "%{static-liblsan:%{!shared:" \
LD_STATIC_OPTION " --whole-archive -llsan --no-whole-archive " \
LD_DYNAMIC_OPTION "}}%{!static-liblsan:-llsan -lpthread}"
#endif
/************************[ Target stuff ]***********************************/
/* All FreeBSD Architectures support the ELF object file format. */

View File

@ -347,6 +347,12 @@ along with GCC; see the file COPYING3. If not see
#define SUBTARGET_INIT_BUILTINS \
do { \
ix86_builtins[(int) IX86_BUILTIN_CFSTRING] \
/* Define the shadow offset for asan. */
#undef SUBTARGET_SHADOW_OFFSET
#define SUBTARGET_SHADOW_OFFSET \
(TARGET_LP64 ? HOST_WIDE_INT_1 << 44 : HOST_WIDE_INT_1 << 29)
= darwin_init_cfstring_builtins ((unsigned) (IX86_BUILTIN_CFSTRING)); \
darwin_rename_builtins (); \
} while(0)

View File

@ -129,3 +129,7 @@ along with GCC; see the file COPYING3. If not see
#define TARGET_ASM_FILE_END file_end_indicate_exec_stack
/* Define the shadow offsets for asan. */
#undef SUBTARGET_SHADOW_OFFSET
#define SUBTARGET_SHADOW_OFFSET \
(TARGET_LP64 ? HOST_WIDE_INT_1 << 46 : HOST_WIDE_INT_1 << 30)

View File

@ -1397,9 +1397,7 @@ ix86_legitimate_combined_insn (rtx_insn *insn)
static unsigned HOST_WIDE_INT
ix86_asan_shadow_offset (void)
{
return TARGET_LP64 ? (TARGET_MACHO ? (HOST_WIDE_INT_1 << 44)
: HOST_WIDE_INT_C (0x7fff8000))
: (HOST_WIDE_INT_1 << 29);
return SUBTARGET_SHADOW_OFFSET;
}
/* Argument support functions. */

View File

@ -1321,6 +1321,13 @@ extern const char *host_detect_local_cpu (int argc, const char **argv);
#define SUBTARGET_FRAME_POINTER_REQUIRED 0
#endif
/* Define the shadow offset for asan. Other OS's can override in the
respective tm.h files. */
#ifndef SUBTARGET_SHADOW_OFFSET
#define SUBTARGET_SHADOW_OFFSET \
(TARGET_LP64 ? HOST_WIDE_INT_C (0x7fff8000) : HOST_WIDE_INT_1 << 29)
#endif
/* Make sure we can access arbitrary call frames. */
#define SETUP_FRAME_ADDRESSES() ix86_setup_frame_addresses ()

View File

@ -1,3 +1,6 @@
2020-05-01 Andreas Tobler <andreast@gcc.gnu.org>
* configure.tgt: Add x86_64- and i?86-*-freebsd* targets.
2020-05-01 Andreas Tobler <andreast@gcc.gnu.org>

View File

@ -22,6 +22,8 @@
TSAN_TARGET_DEPENDENT_OBJECTS=
SANITIZER_COMMON_TARGET_DEPENDENT_OBJECTS=
case "${target}" in
x86_64-*-freebsd* | i?86-*-freebsd*)
;;
x86_64-*-linux* | i?86-*-linux*)
if test x$ac_cv_sizeof_void_p = x8; then
TSAN_SUPPORTED=yes