[PATCH 04/12] x86: Make sure the SPL image ends on a suitable boundary

Bin Meng bmeng.cn at gmail.com
Thu Jan 21 06:35:00 CET 2021


Hi Simon,

On Sun, Jan 17, 2021 at 5:54 AM Simon Glass <sjg at chromium.org> wrote:
>
> The part of U-Boot that actually ends up in u-boot-nodtb.bin is not built
> with any particular alignment. It ends at the start of the BSS section.
> The BSS section selects its own alignment, which may larger.

I don't see start of the BSS section has alignment in the linker script.

> This means that there can be a gap of a few bytes between the image
> ending and BSS starting.
>
> Since u-boot.bin is build by joining u-boot-nodtb.bin and u-boot.dtb (with
> perhaps some padding for BSS), the expected result is not obtained. U-Boot
> uses the end of BSS to find the devicetree, so this means that it cannot
> be found.

Please explain this in more details, maybe showing a failure case with
exact bss start/size and where U-Boot expects to get the device tree
but it's not

>
> Add 32-byte alignment of BSS so that the image size is correct and
> appending the devicetree will place it at the end of BSS.
>
> Signed-off-by: Simon Glass <sjg at chromium.org>
> ---
>
>  arch/x86/cpu/u-boot-spl.lds | 1 +
>  1 file changed, 1 insertion(+)
>
> diff --git a/arch/x86/cpu/u-boot-spl.lds b/arch/x86/cpu/u-boot-spl.lds
> index e6c22895b35..e0c70b076b8 100644
> --- a/arch/x86/cpu/u-boot-spl.lds
> +++ b/arch/x86/cpu/u-boot-spl.lds
> @@ -43,6 +43,7 @@ SECTIONS
>                 __binman_sym_start = .;
>                 KEEP(*(SORT(.binman_sym*)));
>                 __binman_sym_end = .;
> +               . = ALIGN(32);

Is 32 safe enough?

>         }
>
>          _image_binary_end = .;
> --

Regards,
Bin


More information about the U-Boot mailing list