On 9/24/20 8:45 AM, André Przywara wrote: > On 24/09/2020 01:17, Andre Przywara wrote: >> When the actual offset between link and runtime address is zero, there >> is no need for patching up U-Boot early when running with >> CONFIG_POSITION_INDEPENDENT. > > That turns out to be not fully true. > Some toolchains (all Linaro cross compilers?) don't handle this well, > they keep the original locations in the binary uninitialised, and rely > on the reldyn fixup table to patch in the actual values. > Other compilers (GCC 9.2 vanilla, Ubuntu GCC 7.5.0, Arm website 9.2) > fill in the addresses both into the binary and the fixup, so this patch > works. > > It seems to be fixed by enabling CONFIG_STATIC_RELA? > I see it's disabled for CONFIG_POSITION_INDEPENDENT, what was the reason > behind that?
I can't remember for sure. I tried re-enabling STATIC_RELA at both the upstream commit where POSITION_INDEPENDENT was first implemented and at top-of-tree, and ran test/py on Tegra, and it works fine. Perhaps I just figured there was no need to perform the static relocations since the code would always do it? I figure it's safe to re-enable it, i.e. decouple the two config options completely.