On Tue, Jan 28, 2020 at 08:53:07PM +0300, Peter Mamonov wrote: > relocate_code() calculates relocation area size as a sum (barebox_image_size + > bss_len). barebox_image_size and bss_len are calculated as (__image_end - > __image_start) and (__bss_stop - __bss_start) respectively. This doesn't take > into account relocation data placed between __image_end and __bss_start. > However relocation preserves BSS position relative to image start, as if > relocation data is still there. This causes RAM overflow during BSS > initialization in main_entry(). This problem may be hidden due to the alignment > of the `relocaddr`. Thx! Works on ar9331 Tested-by: Oleksij Rempel <o.rempel@xxxxxxxxxxxxxx> > Signed-off-by: Peter Mamonov <pmamonov@xxxxxxxxx> > --- > arch/mips/lib/reloc.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/arch/mips/lib/reloc.c b/arch/mips/lib/reloc.c > index 32d776a6a6..41e2d5c75f 100644 > --- a/arch/mips/lib/reloc.c > +++ b/arch/mips/lib/reloc.c > @@ -121,7 +121,7 @@ void relocate_code(void *fdt, u32 fdt_size, u32 ram_size) > memset(__bss_start, 0, bss_len); > cpu_probe(); > > - length = barebox_image_size + bss_len; > + length = __bss_stop - __image_start; > relocaddr = ALIGN_DOWN(ram_size - length, SZ_64K); > relocaddr = KSEG0ADDR(relocaddr); > new_stack = relocaddr - MALLOC_SIZE - 16; > -- > 2.24.0 > > > _______________________________________________ > barebox mailing list > barebox@xxxxxxxxxxxxxxxxxxx > http://lists.infradead.org/mailman/listinfo/barebox > -- Pengutronix e.K. | | Steuerwalder Str. 21 | http://www.pengutronix.de/ | 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
Attachment:
signature.asc
Description: PGP signature
_______________________________________________ barebox mailing list barebox@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/barebox