Dear List
So far, uclibc relied on the informal behaviour of GNU ld to put the link address of the _DYNAMIC symbol in the first GOT entry. This does not work with LLVM lld which does not follow this convention. Consequently, glibc has abandoned its usage in favour of using __ehdr_start as magic symbol to infer the load address [1].
Note that this implies that the link time address of __ehdr_start is *always* 0! So far, this seems to be the case on all platforms.
We implemented this change only for the platforms which we actively support and test at Kernkonzept (arm64, arm, i386, x86_64 and and riscv). The riscv64 dl-sysdep.h already used the method we converted the others to. For the other platforms we do not have the capacity to port this, but as long as noone wants to build them using lld this should not be an issue.
Please feel free to test this on the relevant platforms before merging, to be sure it works as intended with the upstream version of the lib.
Best regards,
- Marcus
[1] https://sourceware.org/bugzilla/show_bug.cgi?id=28203