[U-Boot] confusion about CONFIG_SYS_TEXT_BASE and gd->relocaddr
Marek Vasut
marek.vasut at gmail.com
Thu Nov 15 14:42:03 UTC 2018
On 11/15/2018 10:33 AM, tamzikin at sina.com wrote:
> Hi Marek,
Hi,
CC the list next time.
> I am Kin, nice to meet you, I know you because I saw your u-boot
> video on Youtube.
> I am a learner of u-boot, and I have a big confusion on it, so I
> would like to find answer from you.
>
> For compiling, some platform have CONFIG_SYS_TEXT_BASE set to some
> value, and CONFIG_SYS_TEXT_BASE will be used when linking all sections
> into one u-boot, so it can be said that the address of the first
> instruction in u-boot will be bound to address CONFIG_SYS_TEXT_BASE, and
> every variable and function will also be bound to address based on
> CONFIG_SYS_TEXT_BASE.
Yes, that's the link address.
> Before relocation, gd->relocaddr is calculated, and if gd->relocaddr
> doesn't equal to CONFIG_SYS_TEXT_BASE, u-boot is relocated to
> gd->relocaddr but not CONFIG_SYS_TEXT_BASE.
Right, U-Boot gets relocated to the end of RAM , so it's out of the way.
> Since all the functions and variables are bound to address based on
> CONFIG_SYS_TEXT_BASE during compilation, so if we don't locate u-boot to
> CONFIG_SYS_TEXT_BASE, u-boot cannot reach functions and variable correctly.
Take a look at relocate_code function and search for R_ARM_REL32 for
example, it should give you an idea how that relocation stuff works
and how the function pointers get adjusted to match the binary location.
> But this is actually how u-boot is designed, so I am confused, could
> you give me any hint for that?
> Thanks.
>
--
Best regards,
Marek Vasut
More information about the U-Boot
mailing list