PR target/96307: Fix KASAN option checking.

- Disable kasan if target is unsupported and -fasan-shadow-offset= is not
   given, no matter `--param asan-stack=1` is given or not.

 - Moving KASAN option checking testcase to gcc.dg, those testcase could be
   useful for all other target which not support asan.

 - Verifed on riscv and x86.

gcc/ChangeLog:

	PR target/96307
	* toplev.c (process_options): Remove param_asan_stack checking for kasan
	option checking.

gcc/testsuite/ChangeLog:

	PR target/96307
	* gcc.dg/pr96307.c: New.
	* gcc.target/riscv/pr96260.c: Move this test case from here to ...
	* gcc.dg/pr96260.c: ... here.
	* gcc.target/riscv/pr91441.c: Move this test case from here to ...
	* gcc.dg/pr91441.c: ... here.
	* lib/target-supports.exp (check_effective_target_no_fsanitize_address):
	New proc.
This commit is contained in:
Kito Cheng
2020-10-05 14:01:04 +08:00
parent f72af3af8d
commit 65e82636bc
5 changed files with 38 additions and 1 deletions

View File

@@ -1,5 +1,6 @@
/* PR target/91441 */
/* { dg-do compile } */
/* { dg-require-effective-target no_fsanitize_address }*/
/* { dg-options "--param asan-stack=1 -fsanitize=kernel-address" } */
int *bar(int *);

View File

@@ -1,5 +1,6 @@
/* PR target/96260 */
/* { dg-do compile } */
/* { dg-require-effective-target no_fsanitize_address }*/
/* { dg-options "--param asan-stack=1 -fsanitize=kernel-address -fasan-shadow-offset=0x100000" } */
int *bar(int *);

View File

@@ -0,0 +1,25 @@
/* PR target/96307 */
/* { dg-do compile } */
/* { dg-require-effective-target no_fsanitize_address }*/
/* { dg-additional-options "-fsanitize=kernel-address --param=asan-instrumentation-with-call-threshold=8" } */
#include <limits.h>
enum a {test1, test2, test3=INT_MAX};
enum a a;
enum a *b;
void reset (void);
void
t()
{
if (a != test2)
__builtin_abort ();
if (*b != test2)
__builtin_abort ();
reset ();
if (a != test1)
__builtin_abort ();
if (*b != test1)
__builtin_abort ();
}

View File

@@ -10582,3 +10582,14 @@ proc check_effective_target_movdir { } {
}
} "-mmovdiri -mmovdir64b" ]
}
# Return 1 if target is not support address sanitize, 1 otherwise.
proc check_effective_target_no_fsanitize_address {} {
if ![check_no_compiler_messages fsanitize_address executable {
int main (void) { return 0; }
}] {
return 1;
}
return 0;
}

View File

@@ -1843,7 +1843,6 @@ process_options (void)
if ((flag_sanitize & SANITIZE_KERNEL_ADDRESS)
&& (targetm.asan_shadow_offset == NULL
&& param_asan_stack
&& !asan_shadow_offset_set_p ()))
{
warning_at (UNKNOWN_LOCATION, 0,