| From 825d656e40ccebfdfcb24d120e1e06cf91f4afff Mon Sep 17 00:00:00 2001 |
| From: Michael Ellerman <mpe@ellerman.id.au> |
| Date: Mon, 14 Oct 2019 13:30:43 +1100 |
| Subject: [PATCH] selftests/powerpc: Fixup clobbers for TM tests |
| |
| commit a02cbc7ffe529ed58b6bbe54652104fc2c88bd77 upstream. |
| |
| Some of our TM (Transactional Memory) tests, list "r1" (the stack |
| pointer) as a clobbered register. |
| |
| GCC >= 9 doesn't accept this, and the build breaks: |
| |
| ptrace-tm-spd-tar.c: In function 'tm_spd_tar': |
| ptrace-tm-spd-tar.c:31:2: error: listing the stack pointer register 'r1' in a clobber list is deprecated [-Werror=deprecated] |
| 31 | asm __volatile__( |
| | ^~~ |
| ptrace-tm-spd-tar.c:31:2: note: the value of the stack pointer after an 'asm' statement must be the same as it was before the statement |
| |
| We do have some fairly large inline asm blocks in these tests, and |
| some of them do change the value of r1. However they should all return |
| to C with the value in r1 restored, so I think it's legitimate to say |
| r1 is not clobbered. |
| |
| As Segher points out, the r1 clobbers may have been added because of |
| the use of `or 1,1,1`, however that doesn't actually clobber r1. |
| |
| Segher also points out that some of these tests do clobber LR, because |
| they call functions, and that is not listed in the clobbers, so add |
| that where appropriate. |
| |
| Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> |
| Link: https://lore.kernel.org/r/20191029095324.14669-1-mpe@ellerman.id.au |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/tools/testing/selftests/powerpc/ptrace/ptrace-tm-spd-tar.c b/tools/testing/selftests/powerpc/ptrace/ptrace-tm-spd-tar.c |
| index 25e23e73c72e..2ecfa1158e2b 100644 |
| --- a/tools/testing/selftests/powerpc/ptrace/ptrace-tm-spd-tar.c |
| +++ b/tools/testing/selftests/powerpc/ptrace/ptrace-tm-spd-tar.c |
| @@ -73,7 +73,7 @@ void tm_spd_tar(void) |
| [sprn_texasr]"i"(SPRN_TEXASR), [tar_1]"i"(TAR_1), |
| [dscr_1]"i"(DSCR_1), [tar_2]"i"(TAR_2), [dscr_2]"i"(DSCR_2), |
| [tar_3]"i"(TAR_3), [dscr_3]"i"(DSCR_3) |
| - : "memory", "r0", "r1", "r3", "r4", "r5", "r6" |
| + : "memory", "r0", "r3", "r4", "r5", "r6", "lr" |
| ); |
| |
| /* TM failed, analyse */ |
| diff --git a/tools/testing/selftests/powerpc/ptrace/ptrace-tm-spd-vsx.c b/tools/testing/selftests/powerpc/ptrace/ptrace-tm-spd-vsx.c |
| index f603fe5a445b..6f7fb51f0809 100644 |
| --- a/tools/testing/selftests/powerpc/ptrace/ptrace-tm-spd-vsx.c |
| +++ b/tools/testing/selftests/powerpc/ptrace/ptrace-tm-spd-vsx.c |
| @@ -74,8 +74,8 @@ void tm_spd_vsx(void) |
| "3: ;" |
| : [res] "=r" (result), [texasr] "=r" (texasr) |
| : [sprn_texasr] "i" (SPRN_TEXASR) |
| - : "memory", "r0", "r1", "r3", "r4", |
| - "r7", "r8", "r9", "r10", "r11" |
| + : "memory", "r0", "r3", "r4", |
| + "r7", "r8", "r9", "r10", "r11", "lr" |
| ); |
| |
| if (result) { |
| diff --git a/tools/testing/selftests/powerpc/ptrace/ptrace-tm-tar.c b/tools/testing/selftests/powerpc/ptrace/ptrace-tm-tar.c |
| index e0d37f07bdeb..46ef378a15ec 100644 |
| --- a/tools/testing/selftests/powerpc/ptrace/ptrace-tm-tar.c |
| +++ b/tools/testing/selftests/powerpc/ptrace/ptrace-tm-tar.c |
| @@ -62,7 +62,7 @@ void tm_tar(void) |
| [sprn_ppr]"i"(SPRN_PPR), [sprn_texasr]"i"(SPRN_TEXASR), |
| [tar_1]"i"(TAR_1), [dscr_1]"i"(DSCR_1), [tar_2]"i"(TAR_2), |
| [dscr_2]"i"(DSCR_2), [cptr1] "b" (&cptr[1]) |
| - : "memory", "r0", "r1", "r3", "r4", "r5", "r6" |
| + : "memory", "r0", "r3", "r4", "r5", "r6" |
| ); |
| |
| /* TM failed, analyse */ |
| diff --git a/tools/testing/selftests/powerpc/ptrace/ptrace-tm-vsx.c b/tools/testing/selftests/powerpc/ptrace/ptrace-tm-vsx.c |
| index 8027457b97b7..70ca01234f79 100644 |
| --- a/tools/testing/selftests/powerpc/ptrace/ptrace-tm-vsx.c |
| +++ b/tools/testing/selftests/powerpc/ptrace/ptrace-tm-vsx.c |
| @@ -62,8 +62,8 @@ void tm_vsx(void) |
| "3: ;" |
| : [res] "=r" (result), [texasr] "=r" (texasr) |
| : [sprn_texasr] "i" (SPRN_TEXASR), [cptr1] "b" (&cptr[1]) |
| - : "memory", "r0", "r1", "r3", "r4", |
| - "r7", "r8", "r9", "r10", "r11" |
| + : "memory", "r0", "r3", "r4", |
| + "r7", "r8", "r9", "r10", "r11", "lr" |
| ); |
| |
| if (result) { |
| -- |
| 2.7.4 |
| |