aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorKito Cheng <kito.cheng@sifive.com>2020-10-05 14:01:04 +0800
committerKito Cheng <kito.cheng@sifive.com>2020-11-06 11:08:52 +0800
commit65e82636bcdb72a878c2e53943e71b15dd9fb22d (patch)
tree27d7ab7a0566078eb8d660092c1804a998c17ba3 /gcc
parentf72af3af8d526793e4927daf44ae0611c3d0cc85 (diff)
downloadgcc-65e82636bcdb72a878c2e53943e71b15dd9fb22d.zip
gcc-65e82636bcdb72a878c2e53943e71b15dd9fb22d.tar.gz
gcc-65e82636bcdb72a878c2e53943e71b15dd9fb22d.tar.bz2
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.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/testsuite/gcc.dg/pr91441.c (renamed from gcc/testsuite/gcc.target/riscv/pr91441.c)1
-rw-r--r--gcc/testsuite/gcc.dg/pr96260.c (renamed from gcc/testsuite/gcc.target/riscv/pr96260.c)1
-rw-r--r--gcc/testsuite/gcc.dg/pr96307.c25
-rw-r--r--gcc/testsuite/lib/target-supports.exp11
-rw-r--r--gcc/toplev.c1
5 files changed, 38 insertions, 1 deletions
diff --git a/gcc/testsuite/gcc.target/riscv/pr91441.c b/gcc/testsuite/gcc.dg/pr91441.c
index b55df5e..4f7a8fb 100644
--- a/gcc/testsuite/gcc.target/riscv/pr91441.c
+++ b/gcc/testsuite/gcc.dg/pr91441.c
@@ -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 *);
diff --git a/gcc/testsuite/gcc.target/riscv/pr96260.c b/gcc/testsuite/gcc.dg/pr96260.c
index 229997f..734832f 100644
--- a/gcc/testsuite/gcc.target/riscv/pr96260.c
+++ b/gcc/testsuite/gcc.dg/pr96260.c
@@ -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 *);
diff --git a/gcc/testsuite/gcc.dg/pr96307.c b/gcc/testsuite/gcc.dg/pr96307.c
new file mode 100644
index 0000000..cd1c17c9
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr96307.c
@@ -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 ();
+}
diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp
index 8439720..08e96e1 100644
--- a/gcc/testsuite/lib/target-supports.exp
+++ b/gcc/testsuite/lib/target-supports.exp
@@ -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;
+}
diff --git a/gcc/toplev.c b/gcc/toplev.c
index 20e231f..e32dc28 100644
--- a/gcc/toplev.c
+++ b/gcc/toplev.c
@@ -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,