[U-Boot] [PATCH v4 3/4] generic board patch of manual reloc and zero gd_t

FengHua fenghua at phytium.com.cn
Sat Aug 24 03:40:24 CEST 2013




> -----原始邮件-----
> 发件人: "Scott Wood" <scottwood at freescale.com>
> 发送时间: 2013年8月24日 星期六
> 收件人: "Simon Glass" <sjg at chromium.org>
> 抄送: FengHua <fenghua at phytium.com.cn>, trini <trini at ti.com>, u-boot <u-boot at lists.denx.de>
> 主题: Re: Re: [U-Boot] [PATCH v4 3/4] generic board patch of manual reloc and zero gd_t
> 
> On Fri, 2013-08-23 at 18:12 -0600, Simon Glass wrote:
> > Hi,
> > 
> > On Thu, Aug 22, 2013 at 8:55 AM, FengHua <fenghua at phytium.com.cn> wrote:
> > >
> > > On Thu, Aug 22, 2013 at 09:31:35AM +0800, FengHua wrote:
> > >>
> > >>
> > >>
> > >> > -----????????????-----
> > >> > ?????????: "Scott Wood" <scottwood at freescale.com>
> > >> > ????????????: 2013???8???22??? ?????????
> > >> > ?????????: "Simon Glass" <sjg at chromium.org>
> > >> > ??????: FengHua <fenghua at phytium.com.cn>, "trini at ti.com" <trini at ti.com>,
> > >> > "U-Boot
> > >> >  Mailing List" <u-boot at lists.denx.de>
> > >> > ??????: Re: [U-Boot] [PATCH v4 3/4] generic board patch of manual reloc
> > >> > and zero gd_t
> > >> >
> > >> > On Tue, 2013-08-20 at 23:27 -0600, Simon Glass wrote:
> > >> > > Hi David,
> > >> > >
> > >> > > On Tue, Aug 20, 2013 at 4:48 AM,  <fenghua at phytium.com.cn> wrote:
> > >> > > > diff --git a/common/board_r.c b/common/board_r.c
> > >> > > > index 86ca1cb..1b4bdd2 100644
> > >> > > > --- a/common/board_r.c
> > >> > > > +++ b/common/board_r.c
> > >> > > > @@ -157,6 +157,13 @@ static int initr_reloc_global_data(void)
> > >> > > >          */
> > >> > > >         gd->env_addr += gd->relocaddr - CONFIG_SYS_MONITOR_BASE;
> > >> > > >  #endif
> > >> > > > +#ifdef CONFIG_NEEDS_MANUAL_RELOC
> > >> > > > +       /*
> > >> > > > +        * We have to relocate the command table manually
> > >> > > > +        */
> > >> > > > +       fixup_cmdtable(ll_entry_start(cmd_tbl_t, cmd),
> > >> > > > +                       ll_entry_count(cmd_tbl_t, cmd));
> > >> > > > +#endif /* CONFIG_NEEDS_MANUAL_RELOC */
> > >> > >
> > >> > > Should this be done here or in main_loop()? How is this currently done
> > >> > > when not using generic board?
> > >> >
> > >> > It shouldn't be done at all -- let's not revive manual relocations.
> > >> > I'll try to get proper relocation working.
> > >>
> > >> Even the rela relocation of aarch64 works we should keep this here.
> > >> The generic board could be used by any other platform that need manual
> > >> relocation.
> > >
> > >>No, the point is that manual relocation is legacy and new platforms
> > >> should be using proper relocation.
> > >
> > >
> > >
> > >    Of course, manual relocation is not good. But I noticed that there are
> > > serveral architecture use manual relocation now, maybe we should keep this
> > > for compatibility. Another way, I am not sure whether we can get rid of
> > > manual relocation on all architecture. I used manual relocation on aarch64
> > > because I found the initial addresses of data in rela mode are all zero
> > > whatever the text base is, and I don't know how to solve this problem.
> > 
> > Possible there is a new relocation type that you need to support?
> 
> Yes, it's rela instead of rel.  FengHua claimed to have run into
> problems supporting it; I'll try to debug it hopefully somewhat soon
> (though I'll be on vacation most of next week, so probably not until at
> least the week after).
> 
> -Scott
> 
> 
> 
hi scott,
     I am looking forward to your result. In my knowledge, the RELA format relocation has no initial addend encoded. So application should be relocated before it runs. But u-boot make the relocation during it's running, it can not reference global variables and functions before it is copied to RAM and relocated. I don't know how to encode the initial addend to variables.
    Wish you make it!
br,
  david







More information about the U-Boot mailing list