On Fri, Jan 30, 2026 at 10:55 PM Tom Rini <[email protected]> wrote:
>
> On Fri, Jan 30, 2026 at 11:12:17AM +0800, Brian Sune wrote:
>
> > The linker script u-boot-spl.lds now
> > is no longer aligned and -nodtb.bin ending shows
> > the zeros are not 8 byte aligned. This result in
> > the Makefile.xpl simply think the previous file
> > is aligned and do not zero pad. simply fix the
> > data align to 8 can ensure the -nodtb.bin is aligned,
> > hence, the formation of u-boot-spl.bin properly align.
> >
> > Signed-off-by: Brian Sune <[email protected]>
> > ---
> > arch/arm/cpu/u-boot-spl.lds | 2 +-
> > 1 file changed, 1 insertion(+), 1 deletion(-)
>
> This fixes your problem in that it results in the device tree being
> aligned still, but doesn't solve the underlying problem of why there
No it is not 4 extra bytes but 4 bytes short on the latest master commits.
> were 4 extra bytes. Can you please try:
>
> diff --git a/arch/arm/cpu/u-boot-spl.lds b/arch/arm/cpu/u-boot-spl.lds
> index c578c3ebf821..5f807323f856 100644
> --- a/arch/arm/cpu/u-boot-spl.lds
> +++ b/arch/arm/cpu/u-boot-spl.lds
> @@ -31,16 +31,16 @@ SECTIONS
> *(.data*)
> }
>
> - . = ALIGN(4);
> - __u_boot_list : {
> - KEEP(*(SORT(__u_boot_list*)));
> - }
> -
> . = ALIGN(4);
> .binman_sym_table : {
> __binman_sym_start = .;
> KEEP(*(SORT(.binman_sym*)));
> __binman_sym_end = .;
> + }
> +
> + . = ALIGN(4);
> + __u_boot_list : {
> + KEEP(*(SORT(__u_boot_list*)));
> . = ALIGN(8);
> }
>
This patch will create the same result but the actual problem
never caused by the -pad.bin.
The bss size is 8 byte aligned hence it will not be the issue from
first place at Makefile.xpl as it will not create any zero pad.
The issue here is that the nodtb size itself size is never 8 byte
aligned at the end result in short or long cases while the
Makefile.xpl only creates extra zero based on the bss size rather than
the nodtb size.
Then they simply join nodtb + pad + bss but from first place nodtb
is not sized correctly at the end aka 8 byte sized.
Any method that can make the end back to 8 byte size of the nodtb
should do the job.
> As the problem ends up being that when both of these are true:
> - .binman_sym_table is empty of actual .binman_sym* symbols
> - The inner '. = ALIGN(8);' increments the linker counter from the
> previous '. = ALIGN(4);' (in other words we were not already 8b
> aligned).
So what you are suggesting is that the section of binman_sym_table
is empty so the ALIGN(8) just simply cannot do its 8 byte alignment job.
And reversing the order makes sure it will always ALIGN end with 8.
But does "__u_boot_list" result in an empty case? If not then this
indeed do what I also wanted to.
I intended not to change any ordering to fix the issue.
Brian
>
> The linker sets the type for this section to "NOBITS" which in turn
> means that when we later call objcopy to create u-boot-spl-nodtb.bin we
> get a mismatch between our expected size and actual size for creating
> the -pad.bin file.
>
> --
> Tom