On Tue, Aug 01, 2023 at 12:10:52AM +0800, Shiji Yang wrote: > On Mon, 31 Jul 2023 16:17:39 +0200, Marek Vasut wrote: > >On 7/31/23 13:57, Shiji Yang wrote: > >> Only ARM target defines _image_binary_end symbol as char*, All other > >> targets define it as an ulong type in include/asm-generic/sections.h. > >> > >> This patch fixes the boot failure on MIPS target. Error log: > >> SPL: Image overlaps SPL > >> > >> Fixes: 1b8a1be1a1f1 ("spl: spl_legacy: Fix spl_end address") > >> Signed-off-by: Shiji Yang <yangshij...@outlook.com> > >> --- > >> common/spl/spl_legacy.c | 6 +++++- > >> 1 file changed, 5 insertions(+), 1 deletion(-) > >> > >> diff --git a/common/spl/spl_legacy.c b/common/spl/spl_legacy.c > >> index 095443c63d..0fef890384 100644 > >> --- a/common/spl/spl_legacy.c > >> +++ b/common/spl/spl_legacy.c > >> @@ -18,9 +18,13 @@ > >> > >> static void spl_parse_legacy_validate(uintptr_t start, uintptr_t size) > >> { > >> + uintptr_t end = start + size; > >> uintptr_t spl_start = (uintptr_t)_start; > >> +#ifdef CONFIG_ARM > >> uintptr_t spl_end = (uintptr_t)_image_binary_end; > >> - uintptr_t end = start + size; > >> +#else > >> + uintptr_t spl_end = (uintptr_t)&_image_binary_end; > > > >I _think_ only this extra & should be enough and that should also work > >on ARM, right ? > > > >[...] > > Hi! Thanks for your review. For ARM target, My understanding is that > '&_image_binary_end' is a random value. '&_image_binary_end' is a > pointer which points to the spl image end address. I think it's not > okay for ARM target. > > I do not have any relevant ARM devices, so I can't test it.
OK, but why isn't the answer that _image_binary_end should be char for everyone, and that it was simply mis-placed in the header to start with (which is why it was then later added to the header for non-ARM)? Given how everyone not-ARM treats it exactly like ARM does in linker scripts, that seems the most likely case. -- Tom
signature.asc
Description: PGP signature