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
>
>

Reply via email to