[U-Boot] [PATCH 4/4] ARM: fix CONFIG_SPL_MAX_SIZE semantics

Benoît Thébaudeau
2013-04-08T21:43:37Z

Hi Albert,

On Monday, April 8, 2013 9:58:29 PM, Albert ARIBAUD wrote:
> The ASSERT() in arch/arm/cpu/u-boot.lds is unneeded as
> this linker file is not used for SPL builds. Remove it.
>
> The ASSERT() in arch/arm/cpu/u-boot-spl.lds is wrong
> as it compares image+BSS size to max image size only.
> Split it in two distinct ASSERT()s, one for image size,
> one for BSS size.
>
> Finally, update README regarding the (now homogeneous)
> semantics of the CONFIG_SPL_MAX_SIZE and
> CONFIG_SPL_BSS_MAX_SIZE macros.
>
> Signed-off-by: Albert ARIBAUD <albert.u.boot@aribaud.net>
> ---
> README | 17 +++++++++++++++--
> arch/arm/cpu/u-boot-spl.lds | 10 ++++++++--
> arch/arm/cpu/u-boot.lds | 4 ----
> 3 files changed, 23 insertions(+), 8 deletions(-)
>
> diff --git a/README b/README
> index a35ef31..c902421 100644
> --- a/README
> +++ b/README
> @@ -2784,7 +2784,14 @@ FIT uImage format:
> LDSCRIPT for linking the SPL binary.
>
> CONFIG_SPL_MAX_SIZE
> - Maximum binary size (text, data and rodata) of the SPL binary.
> + Maximum size for the image (sum of the text, data, rodata
> + and linker lists sections) of the SPL executable.
> + When defined, linker checks that the actual image size does
> + not exceed it.
> + The total amount of memory used by the SPL when running is
> + equal CONFIG_SPL_MAX_SIZE, plus CONFIG_SPL_BSS_MAX_SIZE if
> + it exists.
> + Note: image and BSS are disjoint for some targets.
>
> CONFIG_SPL_TEXT_BASE
> TEXT_BASE for linking the SPL binary.
> @@ -2797,7 +2804,13 @@ FIT uImage format:
> Link address for the BSS within the SPL binary.
>
> CONFIG_SPL_BSS_MAX_SIZE
> - Maximum binary size of the BSS section of the SPL binary.
> + Maximum size of the BSS section of the SPL executable.
> + When defined, linker checks that the actual BSS size does
> + not exceed it.
> + The total amount of memory used by the SPL when running is
> + equal CONFIG_SPL_MAX_SIZE, plus CONFIG_SPL_BSS_MAX_SIZE if
> + it exists.
> + Note: image and BSS are disjoint for some targets.
>
> CONFIG_SPL_STACK
> Adress of the start of the stack SPL will use
> diff --git a/arch/arm/cpu/u-boot-spl.lds b/arch/arm/cpu/u-boot-spl.lds
> index 3c0d99c..89ef9ce 100644
> --- a/arch/arm/cpu/u-boot-spl.lds
> +++ b/arch/arm/cpu/u-boot-spl.lds
> @@ -88,6 +88,12 @@ SECTIONS
> /DISCARD/ : { *(.gnu*) }
> }
>
> -#if defined(CONFIG_SPL_TEXT_BASE) && defined(CONFIG_SPL_MAX_SIZE)
> -ASSERT(__bss_end < (CONFIG_SPL_TEXT_BASE + CONFIG_SPL_MAX_SIZE), "SPL image
> too big");
> +#if defined(CONFIG_SPL_MAX_SIZE)
> +ASSERT(__image_copy_end - __image_copy_start < (CONFIG_SPL_MAX_SIZE), \

The possible relocation and MMU data is also part of the binary image file, so
that would be __bss_start rather than __image_copy_end above, and README should
be updated to reflect this.

> + "SPL image too big");
> +#endif
> +
> +#if defined(CONFIG_SPL_BSS_MAX_SIZE)
> +ASSERT(__bss_end - __bss_start < (CONFIG_SPL_BSS MAX_SIZE), \
> + "SPL image BSS too big");
> #endif
> diff --git a/arch/arm/cpu/u-boot.lds b/arch/arm/cpu/u-boot.lds
> index 3a1083d..7bbc4f5 100644
> --- a/arch/arm/cpu/u-boot.lds
> +++ b/arch/arm/cpu/u-boot.lds
> @@ -101,7 +101,3 @@ SECTIONS
> /DISCARD/ : { *(.interp*) }
> /DISCARD/ : { *(.gnu*) }
> }
> -
> -#if defined(CONFIG_SPL_TEXT_BASE) && defined(CONFIG_SPL_MAX_SIZE)
> -ASSERT(__bss_end < (CONFIG_SPL_TEXT_BASE + CONFIG_SPL_MAX_SIZE), "SPL image
> too big");
> -#endif
> --
> 1.7.10.4
>
> _______________________________________________
> U-Boot mailing list
> U-Boot at lists.denx.de
> http://lists.denx.de/mailman/listinfo/u-boot
>

Best regards,
Beno?t