[PATCH v4 2/9] board_f: Correct stack reservation

Heinrich Schuchardt xypron.glpk at gmx.de
Sun Nov 3 18:18:21 CET 2024


On 11/3/24 01:28, Simon Glass wrote:
> The reserve_stack_aligned() function already ensures that the resulting
> address is aligned to a 16-byte boundary. The comment seems to suggest
> that 16 is passed reserve_stack_aligned() to make it aligned.
>
> Change the value to 0, since the stack can start at the current address,
> if it is suitably aligned already.
>
> Signed-off-by: Simon Glass <sjg at chromium.org>
> ---
>
> (no changes since v1)
>
>   common/board_f.c | 2 +-
>   1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/common/board_f.c b/common/board_f.c
> index 98dc2591e1d..677e37d93c0 100644
> --- a/common/board_f.c
> +++ b/common/board_f.c
> @@ -601,7 +601,7 @@ __weak int arch_reserve_stacks(void)
>   static int reserve_stacks(void)
>   {
>   	/* make stack pointer 16-byte aligned */
> -	gd->start_addr_sp = reserve_stack_aligned(16);
> +	gd->start_addr_sp = reserve_stack_aligned(0);

In 1938f4a5b62f ("Introduce generic pre-relocation board_f.c") you wrote:

/* setup stack pointer for exceptions */
gd->dest_addr_sp -= 16;
/* leave 3 words for abort-stack, plus 1 for alignment */
gd->dest_addr_sp -= 16;

Is that not relevant anymore?

Does all and every U-Boot architecture decrement the stack pointer
before writing values to the stack?

E.g. Microblaze, MIPS, RISC-V, and Super-H do not have a dedicated PUSH
instruction.

Best regards

Heinrich

>
>   	/*
>   	 * let the architecture-specific code tailor gd->start_addr_sp and



More information about the U-Boot mailing list