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 |
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
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 --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. */