[PATCH] env: Leave invalid env for nowhere location

Marek Vasut marex at denx.de
Thu Jun 10 15:28:30 CEST 2021


On 6/10/21 10:25 AM, Kunihiko Hayashi wrote:
Hi,

[...]

>>> gd->reloc_off is relocated address offset from zero, however,
>>> gd->env_addr has still non-relocated address.
>>>
>>>  >>>> |     gd->env_addr += gd->reloc_off;
>>>
>>> I think the env should be relocated if CONFIG_SYS_RELOC_GD_ENV_ADDR=y.
>>> But this code sets gd->env_addr incorrectly.
>>>
>>> In that case, there is a non-relocated <textbase> address instead of
>>> CONFIG_SYS_TEXT_BASE.
>>>
>>> This should be "gd->env_addr = (gd->env_addr - <textbase>) + 
>>> gd->reloc_off",
>>> However, I'm not sure how we get non-relocated <textbase> address.
>>
>> Maybe what you need to do is store current $pc register when you enter 
>> U-Boot very early on, in _start function, and then use it here ? 
>> Although, I am not entirely sure whether this is still possible on arm64.
> 
> Exactly. I guess it's reasonable to fix gd->env_addr when 
> POSITION_INDEPENDENT=y
> before relocation. I'll try it.

That sounds good, thank you !


More information about the U-Boot mailing list