From mboxrd@z Thu Jan 1 00:00:00 1970 From: Albert ARIBAUD Date: Tue, 14 May 2013 20:24:40 +0200 Subject: [U-Boot] [PATCH v2 1/4] mx31pdk: copy SPL directly, not using relocate_code. In-Reply-To: <1115395100.819514.1368551410764.JavaMail.root@advansee.com> References: <1368223012-17609-1-git-send-email-albert.u.boot@aribaud.net> <1368525030-5162-1-git-send-email-albert.u.boot@aribaud.net> <1368525030-5162-2-git-send-email-albert.u.boot@aribaud.net> <1623653468.816322.1368544452893.JavaMail.root@advansee.com> <20130514181355.438b37ff@lilith> <1115395100.819514.1368551410764.JavaMail.root@advansee.com> Message-ID: <20130514202440.7a7ebef7@lilith> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de Hi Beno?t, On Tue, 14 May 2013 19:10:10 +0200 (CEST), Beno?t Th?baudeau wrote: > Hi Albert, > > On Tuesday, May 14, 2013 6:13:55 PM, Albert ARIBAUD wrote: > > Hi Beno?t, > > > > On Tue, 14 May 2013 17:14:12 +0200 (CEST), Beno?t Th?baudeau > > wrote: > > > > > Hi Albert, > > > > > > On Tuesday, May 14, 2013 11:50:27 AM, Albert ARIBAUD wrote: > > > > Signed-off-by: Albert ARIBAUD > > > > --- > > > > Changes in v2: > > > > - dropped relocate_code() call from mx31pdk SPL > > > > > > > > board/freescale/mx31pdk/mx31pdk.c | 16 +++++++++++++++- > > > > 1 file changed, 15 insertions(+), 1 deletion(-) > > > > > > > > diff --git a/board/freescale/mx31pdk/mx31pdk.c > > > > b/board/freescale/mx31pdk/mx31pdk.c > > > > index 49158bd..4f6cfee 100644 > > > > --- a/board/freescale/mx31pdk/mx31pdk.c > > > > +++ b/board/freescale/mx31pdk/mx31pdk.c > > > > @@ -39,7 +39,21 @@ DECLARE_GLOBAL_DATA_PTR; > > > > #ifdef CONFIG_SPL_BUILD > > > > void board_init_f(ulong bootflag) > > > > { > > > > - relocate_code(CONFIG_SPL_TEXT_BASE); > > > > + /* > > > > + * copy ourselves from where we are running to where we were > > > > + * linked at. Use ulong pointers as all addresses involved > > > > + * are 4-byte-aligned. > > > > + */ > > > > + ulong *start_ptr, *end_ptr, *link_ptr, *run_ptr, *dst; > > > > + asm volatile ("ldr %0, =_start" : "=r"(start_ptr)); > > > > + asm volatile ("ldr %0, =_end" : "=r"(end_ptr)); > > > > > > Why not __image_copy_start/end instead? I know that the result will be the > > > same > > > here, but the naming would be more appropriate. The existing u-boot-spl.lds > > > still gives access to __image_copy_*. > > > > Well, yes, the naming seems appropriate, and I thought and said so > > myself some time ago. But then, I realize that __image_copy_start and > > __image_copy_end are tightly coupled with relocation, and I want to > > avoid creating any additional ties between relocation and SPL just when > > I am severing them. IOW, I want to keep the option of having a reduced > > SPL linker file, distinct from the u-boot one, and where none of > > __image_copy_*, __rel_dyn_* or __dynsym_start exist. > > OK, that's fine. > > Since _end is linker-generated contrary to the other symbols that you use in > those asm lines, have you checked that no R_ARM_ABS32 relocation data is > generated here? OTOH, -pie is not used with SPL, so there should be no > relocation data at all generated here, and the true final addresses should be in > the binary image. Indeed, SPL is meant to be loaded at its link-time address -- or, in the case of mx31pdk and tx25, loaded in a read buffer then moved by itself to its link-time address. In no case is SPL supposed to be relocated. You can verify with readelf -r that no relocation records are generated for SPL builds. > Best regards, > Beno?t Amicalement, -- Albert.