- 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.
--- /dev/null
+/* 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 *);
+int *f( int a)
+{
+ return bar(&a);
+}
+/* { dg-warning ".'-fsanitize=kernel-address' with stack protection is not supported without '-fasan-shadow-offset=' for this target" "" { target *-*-* } 0 } */
--- /dev/null
+/* 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 *);
+int *f( int a)
+{
+ return bar(&a);
+}
--- /dev/null
+/* 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 ();
+}
+++ /dev/null
-/* PR target/91441 */
-/* { dg-do compile } */
-/* { dg-options "--param asan-stack=1 -fsanitize=kernel-address" } */
-
-int *bar(int *);
-int *f( int a)
-{
- return bar(&a);
-}
-/* { dg-warning ".'-fsanitize=kernel-address' with stack protection is not supported without '-fasan-shadow-offset=' for this target" "" { target *-*-* } 0 } */
+++ /dev/null
-/* PR target/96260 */
-/* { dg-do compile } */
-/* { dg-options "--param asan-stack=1 -fsanitize=kernel-address -fasan-shadow-offset=0x100000" } */
-
-int *bar(int *);
-int *f( int a)
-{
- return bar(&a);
-}
}
} "-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;
+}
if ((flag_sanitize & SANITIZE_KERNEL_ADDRESS)
&& (targetm.asan_shadow_offset == NULL
- && param_asan_stack
&& !asan_shadow_offset_set_p ()))
{
warning_at (UNKNOWN_LOCATION, 0,