[U-Boot] armv8 relocation questions

Jeroen Hofstee dasuboot at myspectrum.nl
Mon May 19 09:37:27 CEST 2014


Hello Wolfgang.

On zo, 2014-05-18 at 21:51 +0200, Wolfgang Denk wrote:

> In message <1400416665.2394.20.camel at yellow> you wrote:
> > 
> > > > So, I think the 4kb alignment would be a requirement or restriction.
> > > > Gcc did not declare it explicitly
> > > > due to in normal world memory are allocated with page aligned.
> > > > If u-boot for aarch64 want to be compiled at address not 4kb aligned
> > > > the relocated address
> > > > should also be shifted with the same offset.
> > > 
> > > Sorry, I don't understand anything here.  At which exact place is
> > > there any such 4 k alignment restriction?  When we relocate U-Boot, we
> > > just process a list of addresses.  Even if the start of the image is
> > > aligned to a 4 k boundary, there are a zillion of other addresses that
> > > are not, and these can be relocated just fine.
> > > 
> > 
> > The following document [1] mentions:
> > 
> > "ADRP Xd, label
> ...
> > And apparently gcc choose to use it as such. Since the instructions in
> 
> Where exactly does it chose to do so?

In the code emitter which decide to use the following instructions to
look up a label, as mentioned by David [1]. Since it only uses _part of_
the pc, it introduces the need to have the relocation offset be a
multiple of 4k.  

     adrp  x0,  ...
     add   x0, x0, 0x30

>  I cannot understand why that
> should be a problem for _start, but not for any of the other symbols
> we're relocating?
> 

It is not a problem of _start. Any label / symbol which is looked up
with only the adrp + compile time offset will be incorrect if the
relocation offset is not n * 4k. It just that moving _start around makes
the relocation offset not obey this requirement.

> > question are relative to the most significant bits of the pc it does not
> > need fixups, so it is not included in the "list of addresses" you
> > mention. The compiler does create the 4k requirement though by using the
> > instruction the way it does.
> 
> Sorry, I cannot follow.  where exactly does this happen, and why
> there, and not anywhere else?
> 

In any code emitted which uses above pattern. And above code works fine
if text is 4k natural aligned before and after relocation. It also works
fine when the same offset is used before and after relocation.

Regards,
Jeroen

[1] http://lists.denx.de/pipermail/u-boot/2014-May/179713.html




More information about the U-Boot mailing list