diff options
| author | Michael Ellerman <mpe@ellerman.id.au> | 2022-06-28 00:02:36 +1000 |
|---|---|---|
| committer | Michael Ellerman <mpe@ellerman.id.au> | 2022-07-25 12:05:16 +1000 |
| commit | 611e385087efc2cc3a7033aedd3f84ad0cf2a703 (patch) | |
| tree | 6a5546d4bfc523e329e31526573d599c030e76c7 /tools/testing/selftests/powerpc/include/basic_asm.h | |
| parent | 149a497d5fda3e996a00437260a4c170e43909c8 (diff) | |
selftests/powerpc/ptrace: Do more of ptrace-gpr in asm
The ptrace-gpr test includes some inline asm to load GPR and FPR
registers. It then goes back to C to wait for the parent to trace it and
then checks register contents.
The split between inline asm and C is fragile, it relies on the compiler
not using any non-volatile GPRs after the inline asm block. It also
requires a very large and unwieldy inline asm block.
So convert the logic to set registers, wait, and store registers to a
single asm function, meaning there's no window for the compiler to
intervene.
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/20220627140239.2464900-10-mpe@ellerman.id.au
Diffstat (limited to 'tools/testing/selftests/powerpc/include/basic_asm.h')
| -rw-r--r-- | tools/testing/selftests/powerpc/include/basic_asm.h | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/tools/testing/selftests/powerpc/include/basic_asm.h b/tools/testing/selftests/powerpc/include/basic_asm.h index 2d7f6e592dd9..26cde8ea1f49 100644 --- a/tools/testing/selftests/powerpc/include/basic_asm.h +++ b/tools/testing/selftests/powerpc/include/basic_asm.h @@ -94,4 +94,12 @@ PPC_LL r0, STACK_FRAME_LR_POS(%r1); \ mtlr r0; +.macro OP_REGS op, reg_width, start_reg, end_reg, base_reg, base_reg_offset=0, skip=0 + .set i, \start_reg + .rept (\end_reg - \start_reg + 1) + \op i, (\reg_width * (i - \skip) + \base_reg_offset)(\base_reg) + .set i, i + 1 + .endr +.endm + #endif /* _SELFTESTS_POWERPC_BASIC_ASM_H */ |
