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

Benoît Thébaudeau benoit.thebaudeau at advansee.com
Mon Apr 8 23:43:37 CEST 2013


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 at 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


More information about the U-Boot mailing list