mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-02 00:36:22 +08:00
Asan changes for RISC-V.
We have only riscv64 asan support, there is no riscv32 support as yet. So I need to be able to conditionally enable asan support for the riscv target. I implemented this by returning zero from the asan_shadow_offset function. This requires a change to toplev.c and docs in target.def. gcc/ * config/riscv/riscv.c (riscv_asan_shadow_offset): New. (TARGET_ASAN_SHADOW_OFFSET): New. * doc/tm.texi: Regenerated. * target.def (asan_shadow_offset); Mention that it can return zero. * toplev.c (process_options): Check for and handle zero return from targetm.asan_shadow_offset call. Co-Authored-By: cooper.joshua <cooper.joshua@linux.alibaba.com>
This commit is contained in:
parent
a4dd85e015
commit
dcf0dde488
@ -5299,6 +5299,19 @@ riscv_gpr_save_operation_p (rtx op)
|
||||
return true;
|
||||
}
|
||||
|
||||
/* Implement TARGET_ASAN_SHADOW_OFFSET. */
|
||||
|
||||
static unsigned HOST_WIDE_INT
|
||||
riscv_asan_shadow_offset (void)
|
||||
{
|
||||
/* We only have libsanitizer support for RV64 at present.
|
||||
|
||||
This number must match kRiscv*_ShadowOffset* in the file
|
||||
libsanitizer/asan/asan_mapping.h which is currently 1<<29 for rv64,
|
||||
even though 1<<36 makes more sense. */
|
||||
return TARGET_64BIT ? (HOST_WIDE_INT_1 << 29) : 0;
|
||||
}
|
||||
|
||||
/* Initialize the GCC target structure. */
|
||||
#undef TARGET_ASM_ALIGNED_HI_OP
|
||||
#define TARGET_ASM_ALIGNED_HI_OP "\t.half\t"
|
||||
@ -5482,6 +5495,9 @@ riscv_gpr_save_operation_p (rtx op)
|
||||
#undef TARGET_NEW_ADDRESS_PROFITABLE_P
|
||||
#define TARGET_NEW_ADDRESS_PROFITABLE_P riscv_new_address_profitable_p
|
||||
|
||||
#undef TARGET_ASAN_SHADOW_OFFSET
|
||||
#define TARGET_ASAN_SHADOW_OFFSET riscv_asan_shadow_offset
|
||||
|
||||
struct gcc_target targetm = TARGET_INITIALIZER;
|
||||
|
||||
#include "gt-riscv.h"
|
||||
|
@ -12094,7 +12094,8 @@ is zero, which disables this optimization.
|
||||
@deftypefn {Target Hook} {unsigned HOST_WIDE_INT} TARGET_ASAN_SHADOW_OFFSET (void)
|
||||
Return the offset bitwise ored into shifted address to get corresponding
|
||||
Address Sanitizer shadow memory address. NULL if Address Sanitizer is not
|
||||
supported by the target.
|
||||
supported by the target. May return 0 if Address Sanitizer is not supported
|
||||
by a subtarget.
|
||||
@end deftypefn
|
||||
|
||||
@deftypefn {Target Hook} {unsigned HOST_WIDE_INT} TARGET_MEMMODEL_CHECK (unsigned HOST_WIDE_INT @var{val})
|
||||
|
@ -4462,7 +4462,8 @@ DEFHOOK
|
||||
(asan_shadow_offset,
|
||||
"Return the offset bitwise ored into shifted address to get corresponding\n\
|
||||
Address Sanitizer shadow memory address. NULL if Address Sanitizer is not\n\
|
||||
supported by the target.",
|
||||
supported by the target. May return 0 if Address Sanitizer is not supported\n\
|
||||
by a subtarget.",
|
||||
unsigned HOST_WIDE_INT, (void),
|
||||
NULL)
|
||||
|
||||
|
@ -1834,7 +1834,8 @@ process_options (void)
|
||||
}
|
||||
|
||||
if ((flag_sanitize & SANITIZE_USER_ADDRESS)
|
||||
&& targetm.asan_shadow_offset == NULL)
|
||||
&& ((targetm.asan_shadow_offset == NULL)
|
||||
|| (targetm.asan_shadow_offset () == 0)))
|
||||
{
|
||||
warning_at (UNKNOWN_LOCATION, 0,
|
||||
"%<-fsanitize=address%> not supported for this target");
|
||||
|
Loading…
Reference in New Issue
Block a user