[PATCH] arch: arm: force 4K page alignment in linker
Peter Robinson
pbrobinson at gmail.com
Fri May 29 12:18:41 CEST 2026
Hi Sam,
> Since 5c71f8110, the u-boot.elf produced by dragonboard410c_defconfig no
> longer fits in the 1MiB aboot partition it is intended for.
>
> To be precise, this issue occurs on toolchains that have a linker with a
> COMMONPAGESIZE > 4K. Since u-boot is hardcoded for 4K granules, we
> ensure that the linker doesn't try to align to anything larger than
> that, otherwise we're just filling our ELFs with a bunch of useless
> zeros.
Is this just applicable to ELFs or can it be applied more widely?
> Suggested-by: Stephan Gerhold <stephan.gerhold at linaro.org>
> Signed-off-by: Sam Day <me at samcday.com>
Tested-by: Peter Robinson <pbrobinson at gmail.com>
Tested on a Rock960 where the elf output went from 9498864 to 9437424
> ---
> arch/arm/config.mk | 8 ++++++++
> 1 file changed, 8 insertions(+)
>
> diff --git a/arch/arm/config.mk b/arch/arm/config.mk
> index a7eff84a267..bce9a31e966 100644
> --- a/arch/arm/config.mk
> +++ b/arch/arm/config.mk
> @@ -112,6 +112,14 @@ endif
> # needed for relocation
> LDFLAGS_u-boot += -pie
>
> +ifeq ($(CONFIG_ARM64),y)
> +# U-Boot uses fixed 4K granules, so we force the linker to match.
> +# Otherwise, we're subject to toolchain preferences, (e.g Fedora's
> +# aarch64-linux-none toolchain selects 64K granules) and we end up wasting
> +# a lot of space in ELFs with MMU_PGPROT enabled.
> +LDFLAGS_u-boot += -z common-page-size=0x1000 -z max-page-size=0x1000
> +endif
> +
> #
> # FIXME: binutils versions < 2.22 have a bug in the assembler where
> # branches to weak symbols can be incorrectly optimized in thumb mode
>
> ---
> base-commit: 987907ae4bcc5d6055bdf7d318a3edf53e14d5fa
> change-id: 20260528-4k-page-alignment-6cb594a073b0
>
> Best regards,
> --
> Sam Day <me at samcday.com>
>
>
More information about the U-Boot
mailing list