From: Stephen Warren Date: Mon, 22 Oct 2012 06:19:33 +0000 (+0000) Subject: ARM: enhance u-boot.lds to detect over-sized SPL X-Git-Tag: v2013.01-rc2~146^2~13 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=2b7818d49f00ec185eb97650fc1b306c0c6e4565;p=oweals%2Fu-boot.git ARM: enhance u-boot.lds to detect over-sized SPL Add an ASSERT() to u-boot.lds to detect an SPL that doesn't fit within SPL_TEXT_BASE..SPL_MAX_SIZE. Different .lds files implement this check in two possible ways: 1) An ASSERT() like this 2) Defining a MEMORY region of size SPL_MAX_SIZE, and re-directing all linker output into that region. Since u-boot.lds is used for both SPL and main U-Boot, this would entail only sometimes defining a MEMORY region, and only sometimes performing that redirection, and hence option (1) was deemed much simpler, and hence implemented. Note that this causes build failures at least for NVIDIA Tegra Seaboard and Ventana. However, these are legitimate; the SPL doesn't fit within the required space, and this does cause runtime issues. Signed-off-by: Stephen Warren Acked-by: Simon Glass Acked-by: Allen Martin Acked-by: Tom Rini Tested-by: Simon Glass Signed-off-by: Tom Warren --- diff --git a/arch/arm/cpu/u-boot.lds b/arch/arm/cpu/u-boot.lds index 1996b97536..e6b202bd14 100644 --- a/arch/arm/cpu/u-boot.lds +++ b/arch/arm/cpu/u-boot.lds @@ -94,3 +94,7 @@ 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