Hi, On Fri, Sep 14, 2018 at 09:20:04PM +0300, Панов Андрей wrote: > Hi! > > Attached patch fixed the problem. > > in arch/arm/cpu/uncompress.c global_variable_offset() was called before relocation. > > And we have TEXT_BASE = 0 (since CONFIG_*_RELOCATABLE is set and it is not configurable) > > Arch memory starts at 0x60000000 and image linked at 0x0, so global_variable_offset() returns 0x60000000 > > We're running around 0x60000000 and at > image_end = (void *)&image_end_marker + global_variable_offset(); > &image_end_marker is 0x6000XXXXX > image_end goes at 0x60000000 more than it is actually > > After relocation global_variable_offset() becomes zero. > > So if we move > image_end = (void *)&image_end_marker + global_variable_offset(); > after relocation it will point to right location. This patch only works for CONFIG_PBL_RELOCATABLE enabled. If it's not enabled, then we will move the binary to its link address, but not the compressed image behind the binary. After that image_end is correctly calculated to the address behind the new image, but there's only garbage. I have a patch in preparation I'll post shortly. Sascha > diff --git a/arch/arm/cpu/uncompress.c b/arch/arm/cpu/uncompress.c > index b07087e4c..708c04c1f 100644 > --- a/arch/arm/cpu/uncompress.c > +++ b/arch/arm/cpu/uncompress.c > @@ -50,8 +50,6 @@ void __noreturn barebox_multi_pbl_start(unsigned long membase, > void *pg_start; > unsigned long pc = get_pc(); > > - image_end = (void *)&image_end_marker + global_variable_offset(); > - > if (IS_ENABLED(CONFIG_PBL_RELOCATABLE)) { > /* > * If we run from inside the memory just relocate the binary > @@ -64,6 +62,8 @@ void __noreturn barebox_multi_pbl_start(unsigned long membase, > relocate_to_adr(membase); > } > > + image_end = (void *)&image_end_marker + global_variable_offset(); > + > /* > * image_end is the image_end_marker defined above. It is the last location > * in the executable. Right after the executable the build process adds > > > _______________________________________________ > barebox mailing list > barebox@xxxxxxxxxxxxxxxxxxx > http://lists.infradead.org/mailman/listinfo/barebox -- Pengutronix e.K. | | Industrial Linux Solutions | http://www.pengutronix.de/ | Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 | _______________________________________________ barebox mailing list barebox@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/barebox