ping On Mon, Oct 5, 2020 at 5:49 PM Kito Cheng <kito.ch...@sifive.com> wrote:
> - 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. > --- > .../{gcc.target/riscv => gcc.dg}/pr91441.c | 1 + > .../{gcc.target/riscv => gcc.dg}/pr96260.c | 1 + > gcc/testsuite/gcc.dg/pr96307.c | 25 +++++++++++++++++++ > gcc/testsuite/lib/target-supports.exp | 11 ++++++++ > gcc/toplev.c | 1 - > 5 files changed, 38 insertions(+), 1 deletion(-) > rename gcc/testsuite/{gcc.target/riscv => gcc.dg}/pr91441.c (85%) > rename gcc/testsuite/{gcc.target/riscv => gcc.dg}/pr96260.c (77%) > create mode 100644 gcc/testsuite/gcc.dg/pr96307.c > > diff --git a/gcc/testsuite/gcc.target/riscv/pr91441.c > b/gcc/testsuite/gcc.dg/pr91441.c > similarity index 85% > rename from gcc/testsuite/gcc.target/riscv/pr91441.c > rename to gcc/testsuite/gcc.dg/pr91441.c > index b55df5e7f00c..4f7a8fbec5e9 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 > similarity index 77% > rename from gcc/testsuite/gcc.target/riscv/pr96260.c > rename to gcc/testsuite/gcc.dg/pr96260.c > index 229997f877b7..734832f021e3 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 000000000000..cd1c17c9661b > --- /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 8314e443c437..e80b71a2110c 100644 > --- a/gcc/testsuite/lib/target-supports.exp > +++ b/gcc/testsuite/lib/target-supports.exp > @@ -10552,3 +10552,14 @@ proc check_effective_target_ident_directive {} { > int i; > }] > } > + > +# 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 a4cb8bb262ed..540e131d963d 100644 > --- a/gcc/toplev.c > +++ b/gcc/toplev.c > @@ -1842,7 +1842,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, > -- > 2.28.0 > >