Hi All, Since this patch series now contains SVE support I am removing the changes to the SVE tests in this patch series. I assume the OK still stands as the only change here is undoing updates to three files.
Thanks, Tamar gcc/testsuite/ 2018-08-28 Tamar Christina <tamar.christ...@arm.com> PR target/86486 * gcc.dg/pr82788.c: Skip for AArch64. * gcc.dg/guality/vla-1.c: Turn off stack-clash. * gcc.target/aarch64/subsp.c: Likewise. * gcc.dg/params/blocksort-part.c: Skip stack-clash checks on AArch64. * gcc.dg/stack-check-10.c: Add AArch64 specific checks. * gcc.dg/stack-check-5.c: Add AArch64 specific checks. * gcc.dg/stack-check-6a.c: Skip on AArch64, we don't support this. * testsuite/lib/target-supports.exp (check_effective_target_frame_pointer_for_non_leaf): AArch64 does not require frame pointer for non-leaf functions. > -----Original Message----- > From: Jeff Law <l...@redhat.com> > Sent: Friday, August 3, 2018 19:30 > To: Tamar Christina <tamar.christ...@arm.com>; gcc-patches@gcc.gnu.org > Cc: nd <n...@arm.com>; James Greenhalgh <james.greenha...@arm.com>; > Richard Earnshaw <richard.earns...@arm.com>; Marcus Shawcroft > <marcus.shawcr...@arm.com> > Subject: Re: [PATCH][GCC][AArch64] Cleanup the AArch64 testsuite when > stack-clash is on [Patch (6/6)] > > On 07/24/2018 04:28 AM, tamar.christ...@arm.com wrote: > > Hi All, > > > > This patch cleans up the testsuite when a run is done with stack clash > > protection turned on. > > > > Concretely this switches off -fstack-clash-protection for a couple of tests: > > > > * sve: We don't yet support stack-clash-protection and sve, so for now turn > these off. > > * assembler scan: some tests are quite fragile in that they check for exact > > assembly output, e.g. check for exact amount of sub etc. These won't > > match now. > > * vla: Some of the ubsan tests negative array indices. Because the arrays > weren't > > used before the incorrect $sp wouldn't have been used. The correct > value is > > restored on ret. Now however we probe the $sp which causes a > segfault. > > * params: When testing the parameters we have to skip these on AArch64 > because of our > > custom constraints on them. We already test them separately so > > this > isn't a > > loss. > > > > Note that the testsuite is not entire clean due to gdb failure caused > > by alloca with stack clash. On AArch64 we output an incorrect .loc > > directive, but this is already the case with the current implementation in > GCC and is a bug unrelated to this patch series. > > > > Bootstrapped Regtested on aarch64-none-linux-gnu, x86_64-pc-linux-gnu > and no issues. > > Both targets were tested with stack clash on and off by default. > > > > Ok for trunk? > > > > Thanks, > > Tamar > > > > gcc/testsuite/ > > 2018-07-24 Tamar Christina <tamar.christ...@arm.com> > > > > PR target/86486 > > * gcc.dg/pr82788.c: Skip for AArch64. > > * gcc.dg/guality/vla-1.c: Turn off stack-clash. > > * gcc.target/aarch64/subsp.c: Likewise. > > * gcc.target/aarch64/sve/mask_struct_load_3.c: Likewise. > > * gcc.target/aarch64/sve/mask_struct_store_3.c: Likewise. > > * gcc.target/aarch64/sve/mask_struct_store_4.c: Likewise. > > * gcc.dg/params/blocksort-part.c: Skip stack-clash checks > > on AArch64. > > * gcc.dg/stack-check-10.c: Add AArch64 specific checks. > > * gcc.dg/stack-check-5.c: Add AArch64 specific checks. > > * gcc.dg/stack-check-6a.c: Skip on AArch64, we don't support this. > > * testsuite/lib/target-supports.exp > > (check_effective_target_frame_pointer_for_non_leaf): AArch64 > does not > > require frame pointer for non-leaf functions. > > > >> -----Original Message----- > >> From: Tamar Christina <tamar.christ...@arm.com> > >> Sent: Wednesday, July 11, 2018 12:23 > >> To: gcc-patches@gcc.gnu.org > >> Cc: nd <n...@arm.com>; James Greenhalgh > <james.greenha...@arm.com>; > >> Richard Earnshaw <richard.earns...@arm.com>; Marcus Shawcroft > >> <marcus.shawcr...@arm.com> > >> Subject: [PATCH][GCC][AArch64] Cleanup the AArch64 testsuite when > >> stack- clash is on [Patch (6/6)] > >> > >> Hi All, > >> > >> This patch cleans up the testsuite when a run is done with stack > >> clash protection turned on. > >> > >> Concretely this switches off -fstack-clash-protection for a couple of > >> tests: > >> > >> * sve: We don't yet support stack-clash-protection and sve, so for > >> now turn these off. > >> * assembler scan: some tests are quite fragile in that they check for exact > >> assembly output, e.g. check for exact amount of sub etc. These > >> won't > >> match now. > >> * vla: Some of the ubsan tests negative array indices. Because the > >> arrays weren't > >> used before the incorrect $sp wouldn't have been used. The > >> correct value is > >> restored on ret. Now however we probe the $sp which causes a > segfault. > >> * params: When testing the parameters we have to skip these on > >> AArch64 because of our > >> custom constraints on them. We already test them > >> separately so this isn't a > >> loss. > >> > >> Note that the testsuite is not entire clean due to gdb failure caused > >> by alloca with stack clash. On AArch64 we output an incorrect .loc > >> directive, but this is already the case with the current > >> implementation in GCC and is a bug unrelated to this patch series. > >> > >> Bootstrapped Regtested on aarch64-none-linux-gnu, x86_64-pc-linux-gnu > >> and no issues. > >> Both targets were tested with stack clash on and off by default. > >> > >> Ok for trunk? > >> > >> Thanks, > >> Tamar > >> > >> gcc/testsuite/ > >> 2018-07-11 Tamar Christina <tamar.christ...@arm.com> > >> > >> PR target/86486 > >> gcc.dg/pr82788.c: Skip for AArch64. > >> gcc.dg/guality/vla-1.c: Turn off stack-clash. > >> gcc.target/aarch64/subsp.c: Likewise. > >> gcc.target/aarch64/sve/mask_struct_load_3.c: Likewise. > >> gcc.target/aarch64/sve/mask_struct_store_3.c: Likewise. > >> gcc.target/aarch64/sve/mask_struct_store_4.c: Likewise. > >> gcc.dg/params/blocksort-part.c: Skip stack-clash checks > >> on AArch64. > > This is fine. FWIW, I'd been ignoring vla-1 and one or two others that were > clearly invalid if stack-clash were on by default locally, but didn't push any > kind of patch for that upstream since I didn't think anyone builds with > stack- > clash on by default (I did for testing purposes of course). > > Jeff >
diff --git a/gcc/testsuite/c-c++-common/ubsan/vla-1.c b/gcc/testsuite/c-c++-common/ubsan/vla-1.c index 52ade3aab7566dce3ca7ef931ac65895005d5e13..c97465edae195442a71ee66ab25015a2ac4fc8fc 100644 --- a/gcc/testsuite/c-c++-common/ubsan/vla-1.c +++ b/gcc/testsuite/c-c++-common/ubsan/vla-1.c @@ -1,5 +1,5 @@ /* { dg-do run } */ -/* { dg-options "-fsanitize=vla-bound -Wall -Wno-unused-variable" } */ +/* { dg-options "-fsanitize=vla-bound -Wall -Wno-unused-variable -fno-stack-clash-protection" } */ typedef long int V; int x = -1; diff --git a/gcc/testsuite/gcc.dg/params/blocksort-part.c b/gcc/testsuite/gcc.dg/params/blocksort-part.c index a9154f2e61ccd21b60153f20be3891b988f9ef2c..1e677878e7bd9c68b026f8c72b0de9f01e15459c 100644 --- a/gcc/testsuite/gcc.dg/params/blocksort-part.c +++ b/gcc/testsuite/gcc.dg/params/blocksort-part.c @@ -1,3 +1,4 @@ +/* { dg-skip-if "AArch64 does not support these bounds." { aarch64*-*-* } { "--param stack-clash-protection-*" } } */ /*-------------------------------------------------------------*/ /*--- Block sorting machinery ---*/ diff --git a/gcc/testsuite/gcc.dg/pr82788.c b/gcc/testsuite/gcc.dg/pr82788.c index a8f628fd7f66c3e56739f6ff491df38b23f4d4df..41c442f61a625c8b350e1e4c870a98d86b167031 100644 --- a/gcc/testsuite/gcc.dg/pr82788.c +++ b/gcc/testsuite/gcc.dg/pr82788.c @@ -1,4 +1,5 @@ /* { dg-do run } */ /* { dg-options "-O2 -fstack-clash-protection --param stack-clash-protection-probe-interval=10 --param stack-clash-protection-guard-size=12" } */ /* { dg-require-effective-target supports_stack_clash_protection } */ +/* { dg-skip-if "AArch64 does not support this interval." { aarch64*-*-* } } */ int main() { int a[1442]; return 0;} diff --git a/gcc/testsuite/gcc.dg/stack-check-10.c b/gcc/testsuite/gcc.dg/stack-check-10.c index a86956ad6925464e4a938a33e609fae5004201c7..2f5a090cb7a4ed6d2e6e4317492150a348a326ab 100644 --- a/gcc/testsuite/gcc.dg/stack-check-10.c +++ b/gcc/testsuite/gcc.dg/stack-check-10.c @@ -39,3 +39,4 @@ f3 (void) need a frame pointer. Otherwise neither should. */ /* { dg-final { scan-rtl-dump-times "Stack clash no frame pointer needed" 2 "pro_and_epilogue" { target { ! frame_pointer_for_non_leaf } } } } */ /* { dg-final { scan-rtl-dump-times "Stack clash frame pointer needed" 2 "pro_and_epilogue" { target { frame_pointer_for_non_leaf } } } } */ +/* { dg-final { scan-rtl-dump-times "Stack clash no probe small stack adjustment in prologue" 2 "pro_and_epilogue" { target { aarch64*-*-* } } } } */ diff --git a/gcc/testsuite/gcc.dg/stack-check-5.c b/gcc/testsuite/gcc.dg/stack-check-5.c index 604fa3cf6c5b502f74c1e3497b3b8d72a15bb3ea..0243147939c10e8f4632520b12714724af85b332 100644 --- a/gcc/testsuite/gcc.dg/stack-check-5.c +++ b/gcc/testsuite/gcc.dg/stack-check-5.c @@ -66,7 +66,9 @@ f3 (void) /* { dg-final { scan-rtl-dump-times "Stack clash no frame pointer needed" 4 "pro_and_epilogue" { target { ! frame_pointer_for_non_leaf } } } } */ /* { dg-final { scan-rtl-dump-times "Stack clash no frame pointer needed" 2 "pro_and_epilogue" { target { frame_pointer_for_non_leaf } } } } */ /* { dg-final { scan-rtl-dump-times "Stack clash frame pointer needed" 2 "pro_and_epilogue" { target { frame_pointer_for_non_leaf } } } } */ - +/* AArch64 won't require a probe here due to the allocation amount being less than 1KB. */ +/* { dg-final { scan-rtl-dump-times "Stack clash no probe small stack adjustment in prologue" 3 "pro_and_epilogue" { target { aarch64*-*-* } } } } */ +/* { dg-final { scan-rtl-dump-times "Stack clash no probe no stack adjustment in prologue" 1 "pro_and_epilogue" { target { aarch64*-*-* } } } } */ /* We have selected the size of the array in f2/f3 to be large enough to not live in the red zone on targets that support it. diff --git a/gcc/testsuite/gcc.dg/stack-check-6a.c b/gcc/testsuite/gcc.dg/stack-check-6a.c index 8fb9c621585957a85877ebadfbc4a8daabe4311c..68dd9bc48a0c26ecb84ddd2c09b8aa74d3276695 100644 --- a/gcc/testsuite/gcc.dg/stack-check-6a.c +++ b/gcc/testsuite/gcc.dg/stack-check-6a.c @@ -5,6 +5,7 @@ /* { dg-options "-O2 -fstack-clash-protection -fdump-rtl-pro_and_epilogue -fno-optimize-sibling-calls --param stack-clash-protection-probe-interval=12 --param stack-clash-protection-guard-size=16" } */ /* { dg-require-effective-target supports_stack_clash_protection } */ /* { dg-skip-if "" { *-*-* } { "-fstack-protector*" } { "" } } */ +/* { dg-skip-if "" { aarch64*-*-* } } */ #include "stack-check-6.c" diff --git a/gcc/testsuite/gcc.target/aarch64/subsp.c b/gcc/testsuite/gcc.target/aarch64/subsp.c index 70d848c59d1f1e4df4314ca012c7a5d9d3b91ebc..6ef6b2c90ae694055749a94b68cbba5ee4aea882 100644 --- a/gcc/testsuite/gcc.target/aarch64/subsp.c +++ b/gcc/testsuite/gcc.target/aarch64/subsp.c @@ -1,4 +1,4 @@ -/* { dg-options "-O" } */ +/* { dg-options "-O -fno-stack-clash-protection" } */ int foo (void *); diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp index 7f33ce8a3efabc8a9144a83ee326120415fd38f7..7e9e89175071e2b93128c7423dc2b72510f3aa6d 100644 --- a/gcc/testsuite/lib/target-supports.exp +++ b/gcc/testsuite/lib/target-supports.exp @@ -9341,10 +9341,6 @@ proc check_effective_target_supports_stack_clash_protection { } { # Return 1 if the target creates a frame pointer for non-leaf functions # Note we ignore cases where we apply tail call optimization here. proc check_effective_target_frame_pointer_for_non_leaf { } { - if { [istarget aarch*-*-*] } { - return 1 - } - # Solaris/x86 defaults to -fno-omit-frame-pointer. if { [istarget i?86-*-solaris*] || [istarget x86_64-*-solaris*] } { return 1