mirror of
https://forge.sourceware.org/marek/gcc.git
synced 2026-02-22 03:47:02 -05:00
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:
@@ -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 *);
|
||||
@@ -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 *);
|
||||
25
gcc/testsuite/gcc.dg/pr96307.c
Normal file
25
gcc/testsuite/gcc.dg/pr96307.c
Normal 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 ();
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user