mirror of
https://gcc.gnu.org/git/gcc.git
synced 2024-11-27 05:44:15 +08:00
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:
parent
bf1dde9790
commit
d730fd95ee
@ -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
|
||||
|
@ -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. */
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
|
@ -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. */
|
||||
|
@ -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 ()
|
||||
|
||||
|
@ -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>
|
||||
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user