Commit fd19a1f7 authored by Michael Ellerman's avatar Michael Ellerman

selftests/powerpc: Ensure 16-byte stack pointer alignment

The PUSH/POP_BASIC_STACK helpers in basic_asm.h do not ensure that the
stack pointer is always 16-byte aligned, which is required per the ABI.

Fix the macros to do the alignment if the caller fails to.

Currently only one caller passes a non-aligned size, tm_signal_self(),
which hasn't been caught in testing, presumably because it's a leaf
function.
Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/20220627140239.2464900-1-mpe@ellerman.id.au
parent 2b461880
...@@ -58,7 +58,7 @@ ...@@ -58,7 +58,7 @@
#define PUSH_BASIC_STACK(_extra) \ #define PUSH_BASIC_STACK(_extra) \
mflr r0; \ mflr r0; \
std r0, STACK_FRAME_LR_POS(%r1); \ std r0, STACK_FRAME_LR_POS(%r1); \
stdu %r1, -(_extra + STACK_FRAME_MIN_SIZE)(%r1); \ stdu %r1, -(((_extra + 15) & ~15) + STACK_FRAME_MIN_SIZE)(%r1); \
mfcr r0; \ mfcr r0; \
stw r0, STACK_FRAME_CR_POS(%r1); \ stw r0, STACK_FRAME_CR_POS(%r1); \
std %r2, STACK_FRAME_TOC_POS(%r1); std %r2, STACK_FRAME_TOC_POS(%r1);
...@@ -67,7 +67,7 @@ ...@@ -67,7 +67,7 @@
ld %r2, STACK_FRAME_TOC_POS(%r1); \ ld %r2, STACK_FRAME_TOC_POS(%r1); \
lwz r0, STACK_FRAME_CR_POS(%r1); \ lwz r0, STACK_FRAME_CR_POS(%r1); \
mtcr r0; \ mtcr r0; \
addi %r1, %r1, (_extra + STACK_FRAME_MIN_SIZE); \ addi %r1, %r1, (((_extra + 15) & ~15) + STACK_FRAME_MIN_SIZE); \
ld r0, STACK_FRAME_LR_POS(%r1); \ ld r0, STACK_FRAME_LR_POS(%r1); \
mtlr r0; mtlr r0;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment