aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKito Cheng <kito.cheng@sifive.com>2019-08-19 03:21:44 +0000
committerKito Cheng <kito@gcc.gnu.org>2019-08-19 03:21:44 +0000
commit6490e2556dc1ae5346ef73022ff1e415c35742ad (patch)
treeaf44f80923754951c1b569f8d66cda8eaf956d12
parent88898d1e1ec4e2240b52818cef4981dd85585a31 (diff)
downloadgcc-6490e2556dc1ae5346ef73022ff1e415c35742ad.zip
gcc-6490e2556dc1ae5346ef73022ff1e415c35742ad.tar.gz
gcc-6490e2556dc1ae5346ef73022ff1e415c35742ad.tar.bz2
PR target/91441 - Turn off -fsanitize=kernel-address if TARGET_ASAN_SHADOW_OFFSET is not implemented.
- -fsanitize=kernel-address will call targetm.asan_shadow_offset () at asan_shadow_offset, so it will crash if TARGET_ASAN_SHADOW_OFFSET is not implemented, that's mean -fsanitize=kernel-address is not supported for target without TARGET_ASAN_SHADOW_OFFSET implementation. gcc/ChangeLog: PR target/91441 * toplev.c (process_options): Check TARGET_ASAN_SHADOW_OFFSET is implemented for -fsanitize=kernel-address, and merge check logic with -fsanitize=address. testsuite/ChangeLog: PR target/91441 * gcc.target/riscv/pr91441.c: New. From-SVN: r274631
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.target/riscv/pr91441.c10
-rw-r--r--gcc/toplev.c10
4 files changed, 23 insertions, 9 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index bf0dbe0..fb32bb1 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2019-08-19 Kito Cheng <kito.cheng@sifive.com>
+
+ PR target/91441
+ * toplev.c (process_options): Check TARGET_ASAN_SHADOW_OFFSET is
+ implemented for -fsanitize=kernel-address, and merge check logic
+ with -fsanitize=address.
+
2019-08-18 Iain Sandoe <iain@sandoe.co.uk>
* config/rs6000/darwin.h (TARGET_OS_CPP_BUILTINS): Add asserts
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index dc44897..96f259e 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2019-08-19 Kito Cheng <kito.cheng@sifive.com>
+
+ PR target/91441
+ * gcc.target/riscv/pr91441.c: New.
+
2019-08-18 Steven G. Kargl <kargl@gcc.gnu.org>
PR fortran/91485
diff --git a/gcc/testsuite/gcc.target/riscv/pr91441.c b/gcc/testsuite/gcc.target/riscv/pr91441.c
new file mode 100644
index 0000000..593a297
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/pr91441.c
@@ -0,0 +1,10 @@
+/* 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=address' and '-fsanitize=kernel-address' are not supported for this target" "" { target *-*-* } 0 } */
diff --git a/gcc/toplev.c b/gcc/toplev.c
index 7e0b921..ddbb8b4 100644
--- a/gcc/toplev.c
+++ b/gcc/toplev.c
@@ -1744,7 +1744,7 @@ process_options (void)
/* Address Sanitizer needs porting to each target architecture. */
if ((flag_sanitize & SANITIZE_ADDRESS)
- && !FRAME_GROWS_DOWNWARD)
+ && (!FRAME_GROWS_DOWNWARD || targetm.asan_shadow_offset == NULL))
{
warning_at (UNKNOWN_LOCATION, 0,
"%<-fsanitize=address%> and %<-fsanitize=kernel-address%> "
@@ -1752,14 +1752,6 @@ process_options (void)
flag_sanitize &= ~SANITIZE_ADDRESS;
}
- if ((flag_sanitize & SANITIZE_USER_ADDRESS)
- && targetm.asan_shadow_offset == NULL)
- {
- warning_at (UNKNOWN_LOCATION, 0,
- "%<-fsanitize=address%> not supported for this target");
- flag_sanitize &= ~SANITIZE_ADDRESS;
- }
-
/* Do not use IPA optimizations for register allocation if profiler is active
or patchable function entries are inserted for run-time instrumentation
or port does not emit prologue and epilogue as RTL. */