> From: Tom Rini <[email protected]>
> Sent: Wednesday, January 28, 2026 5:32 AM
> 
> As of v2026.01, no platforms contain any rel.dyn sections in their xPL phase
> images. Their inclusion in linker scripts initially was an oversight as part 
> of
> taking the full U-Boot linker scripts and modifying them down. Then in commit
> 8b0ebe054bb3 ("arm: Update linker scripts to ensure appended device tree is
> aligned") these sections were used to force correct alignment for the device
> tree. This however, lead to a different problem.
> 
> That problem is that when we do not have a separate BSS section in SPL we
> instead would overlay the BSS with the rel.dyn section, in the common linker
> script case. This in turn lead to creating an incorrectly sized BSS "pad" file
> sometimes (depending on arbitrary changes within the rest of the binary 
> itself).
> This in turn lead to the dtb being in the wrong location in the binary and not
> found at run time.
> 
> This commit fixes a few things:
> - Remove the rel.dyn section from all ARM SPL linker scripts.
> - In turn, this moves the dtb alignment statement in to another section.
> - For ast2600 which uses CONFIG_POSITION_INDEPENDENT we need to keep
> the
>   symbols however.
> 
> Tested-by: Fabio Estevam <[email protected]>
> Reported-by: Fabio Estevam <[email protected]>
> Co-developed-by: Ilias Apalodimas <[email protected]>
> Signed-off-by: Tom Rini <[email protected]>
> ---
> I sent this off-list to Fabio first to confirm it finally fixed things.
> 
> Cc: "Chia-Wei, Wang" <[email protected]>
> Cc: Adam Ford <[email protected]>
> ---
>  arch/arm/cpu/arm926ejs/mxs/u-boot-spl.lds      |  8 --------
>  arch/arm/cpu/u-boot-spl.lds                    | 13 ++-----------
>  arch/arm/mach-aspeed/ast2600/u-boot-spl.lds    | 16 +++++++---------
>  board/davinci/da8xxevm/u-boot-spl-da850evm.lds |  9 ++-------
>  4 files changed, 11 insertions(+), 35 deletions(-)
> 
> diff --git a/arch/arm/cpu/arm926ejs/mxs/u-boot-spl.lds
> b/arch/arm/cpu/arm926ejs/mxs/u-boot-spl.lds
> index b4adae272eba..ac166d1d8526 100644
> --- a/arch/arm/cpu/arm926ejs/mxs/u-boot-spl.lds
> +++ b/arch/arm/cpu/arm926ejs/mxs/u-boot-spl.lds
> @@ -33,14 +33,6 @@ SECTIONS
>               *(.data*)
>       }
> 
> -     . = ALIGN(4);
> -
> -     .rel.dyn : {
> -             __rel_dyn_start = .;
> -             *(.rel*)
> -             __rel_dyn_end = .;
> -     }
> -
>       .bss : {
>               . = ALIGN(4);
>               __bss_start = .;
> diff --git a/arch/arm/cpu/u-boot-spl.lds b/arch/arm/cpu/u-boot-spl.lds index
> d780a5060774..c578c3ebf821 100644
> --- a/arch/arm/cpu/u-boot-spl.lds
> +++ b/arch/arm/cpu/u-boot-spl.lds
> @@ -41,23 +41,14 @@ SECTIONS
>               __binman_sym_start = .;
>               KEEP(*(SORT(.binman_sym*)));
>               __binman_sym_end = .;
> -     }
> -
> -     . = ALIGN(4);
> -
> -     __image_copy_end = .;
> -
> -     .rel.dyn : {
> -             __rel_dyn_start = .;
> -             *(.rel*)
> -             __rel_dyn_end = .;
>               . = ALIGN(8);
>       }
> 
> +     __image_copy_end = .;
>       _image_binary_end = .;
>       _end = .;
> 
> -     .bss __rel_dyn_start (OVERLAY) : {
> +     .bss : {
>               __bss_start = .;
>               *(.bss*)
>                . = ALIGN(8);
> diff --git a/arch/arm/mach-aspeed/ast2600/u-boot-spl.lds
> b/arch/arm/mach-aspeed/ast2600/u-boot-spl.lds
> index c9664a6ce566..303ace2f61ca 100644
> --- a/arch/arm/mach-aspeed/ast2600/u-boot-spl.lds
> +++ b/arch/arm/mach-aspeed/ast2600/u-boot-spl.lds
> @@ -49,19 +49,17 @@ SECTIONS
>               __binman_sym_start = .;
>               KEEP(*(SORT(.binman_sym*)));
>               __binman_sym_end = .;
> +             . = ALIGN(8);
>       } > .nor
> 
> -     . = ALIGN(4);
> +     /*
> +      * These platforms enable CONFIG_POSITION_INDEPENDENT and so need
> +      * these names. The always however hold the same value.
> +      */
> +     __rel_dyn_start = .;
> +     __rel_dyn_end = .;
> 
>       __image_copy_end = .;
> -
> -     .rel.dyn : {
> -             __rel_dyn_start = .;
> -             *(.rel*)
> -             __rel_dyn_end = .;
> -             . = ALIGN(8);
> -     } > .nor
> -
>       _end = .;
>       _image_binary_end = .;
> 

Thanks for the fix.
Aspeed enables PIE mainly for the U-Boot execution.
For SPL, the symbols should be fine to be the same.

Reviewed-by: "Chia-Wei, Wang" <[email protected]>

Reply via email to