diff mbox series

PR target/91441 - Turn off -fsanitize=kernel-address if TARGET_ASAN_SHADOW_OFFSET is not implemented.

Message ID 20190816024508.31194-1-kito.cheng@sifive.com
State New
Headers show
Series PR target/91441 - Turn off -fsanitize=kernel-address if TARGET_ASAN_SHADOW_OFFSET is not implemented. | expand

Commit Message

Kito Cheng Aug. 16, 2019, 2:45 a.m. UTC
- -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.
---
 gcc/testsuite/gcc.target/riscv/pr91441.c | 10 ++++++++++
 gcc/toplev.c                             | 10 +---------
 2 files changed, 11 insertions(+), 9 deletions(-)
 create mode 100644 gcc/testsuite/gcc.target/riscv/pr91441.c

Comments

Jeff Law Aug. 16, 2019, 3:51 p.m. UTC | #1
On 8/15/19 8:45 PM, Kito Cheng wrote:
>  - -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.
OK
jeff
Kito Cheng Aug. 19, 2019, 3:22 a.m. UTC | #2
Hi Jeff:

Thanks, committed as r274631.

On Fri, Aug 16, 2019 at 11:51 PM Jeff Law <law@redhat.com> wrote:
>
> On 8/15/19 8:45 PM, Kito Cheng wrote:
> >  - -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.
> OK
> jeff
diff mbox series

Patch

diff --git a/gcc/testsuite/gcc.target/riscv/pr91441.c b/gcc/testsuite/gcc.target/riscv/pr91441.c
new file mode 100644
index 00000000000..593a2972a0f
--- /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 7e0b9216dea..ddbb8b49436 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.  */