Nicholas Piggin <npig...@gmail.com> writes: > The basic TM vs syscall test code hard codes an sc instruction for the > system call, which fails to cover scv even when the userspace libc has > support for it. > > Duplicate the tests with hard coded scv variants so both are tested > when possible. > > Signed-off-by: Nicholas Piggin <npig...@gmail.com> > --- > .../selftests/powerpc/tm/tm-syscall-asm.S | 46 +++++++++++++++++++ > .../testing/selftests/powerpc/tm/tm-syscall.c | 36 ++++++++++++--- > 2 files changed, 75 insertions(+), 7 deletions(-) > > diff --git a/tools/testing/selftests/powerpc/tm/tm-syscall-asm.S > b/tools/testing/selftests/powerpc/tm/tm-syscall-asm.S > index bd1ca25febe4..849316831e6a 100644 > --- a/tools/testing/selftests/powerpc/tm/tm-syscall-asm.S > +++ b/tools/testing/selftests/powerpc/tm/tm-syscall-asm.S > @@ -2,6 +2,10 @@ > #include <ppc-asm.h> > #include <asm/unistd.h> > > +/* ppc-asm.h does not define r0 or r1 */ > +#define r0 0 > +#define r1 1 > + > .text > FUNC_START(getppid_tm_active) > tbegin. > @@ -26,3 +30,45 @@ FUNC_START(getppid_tm_suspended) > 1: > li r3, -1 > blr > + > +FUNC_START(getppid_scv_tm_active) > + mflr r0 > + std r0,16(r1) > + stdu r1,-32(r1) > + tbegin. > + beq 1f > + li r0, __NR_getppid > + scv 0 > + tend. > + addi r1,r1,32 > + ld r0,16(r1) > + mtlr r0 > + blr > +1: > + li r3, -1 > + addi r1,r1,32 > + ld r0,16(r1) > + mtlr r0 > + blr
There's some macros in tools/testing/selftests/powerpc/include/basic_asm.h that can do some of this boiler plate stack setup/teardown. Incremental diff below to use them, only build tested. cheers diff --git a/tools/testing/selftests/powerpc/tm/tm-syscall-asm.S b/tools/testing/selftests/powerpc/tm/tm-syscall-asm.S index 849316831e6a..a73694daca71 100644 --- a/tools/testing/selftests/powerpc/tm/tm-syscall-asm.S +++ b/tools/testing/selftests/powerpc/tm/tm-syscall-asm.S @@ -1,10 +1,5 @@ /* SPDX-License-Identifier: GPL-2.0 */ -#include <ppc-asm.h> -#include <asm/unistd.h> - -/* ppc-asm.h does not define r0 or r1 */ -#define r0 0 -#define r1 1 +#include <basic_asm.h> .text FUNC_START(getppid_tm_active) @@ -32,29 +27,21 @@ FUNC_START(getppid_tm_suspended) blr FUNC_START(getppid_scv_tm_active) - mflr r0 - std r0,16(r1) - stdu r1,-32(r1) + PUSH_BASIC_STACK(0) tbegin. beq 1f li r0, __NR_getppid scv 0 tend. - addi r1,r1,32 - ld r0,16(r1) - mtlr r0 + POP_BASIC_STACK(0) blr 1: li r3, -1 - addi r1,r1,32 - ld r0,16(r1) - mtlr r0 + POP_BASIC_STACK(0) blr FUNC_START(getppid_scv_tm_suspended) - mflr r0 - std r0,16(r1) - stdu r1,-32(r1) + PUSH_BASIC_STACK(0) tbegin. beq 1f li r0, __NR_getppid @@ -62,13 +49,9 @@ FUNC_START(getppid_scv_tm_suspended) scv 0 tresume. tend. - addi r1,r1,32 - ld r0,16(r1) - mtlr r0 + POP_BASIC_STACK(0) blr 1: li r3, -1 - addi r1,r1,32 - ld r0,16(r1) - mtlr r0 + POP_BASIC_STACK(0) blr