
Dear Jeroen,
In message 1400416665.2394.20.camel@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? I cannot understand why that should be a problem for _start, but not for any of the other symbols we're relocating?
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?
Best regards,
Wolfgang Denk