linuxloader: add -armhf on arm only for TARGET_FPU 'hard'

There are two types of soft FPU options for arm, soft and softfp, and if
using the latter the wrong dynamic loader will be used.

E.g. go will link against ld-linux-armhf.so.3, but libc6 will only ship
a ld-linux.so.3, so go programs will fail to start.

Fix this by instead checking for TARGET_FPU being 'hard' and then
applying the suffix.

(From OE-Core rev: 07b4c7a2bd23f8645810e13439e814caaaf9cd94)

Signed-off-by: Jonas Gorski <jonas.gorski@bisdn.de>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Jonas Gorski 2024-06-05 09:26:29 +02:00 committed by Richard Purdie
parent 9f48761d68
commit 46b5c2ea6c

View File

@ -57,7 +57,7 @@ def get_glibc_loader(d):
elif re.search("i.86", targetarch): elif re.search("i.86", targetarch):
dynamic_loader = "${base_libdir}/ld-linux.so.2" dynamic_loader = "${base_libdir}/ld-linux.so.2"
elif targetarch == "arm": elif targetarch == "arm":
dynamic_loader = "${base_libdir}/ld-linux${@['-armhf', ''][d.getVar('TARGET_FPU') == 'soft']}.so.3" dynamic_loader = "${base_libdir}/ld-linux${@['', '-armhf'][d.getVar('TARGET_FPU') == 'hard']}.so.3"
elif targetarch.startswith("aarch64"): elif targetarch.startswith("aarch64"):
dynamic_loader = "${base_libdir}/ld-linux-aarch64${ARMPKGSFX_ENDIAN_64}.so.1" dynamic_loader = "${base_libdir}/ld-linux-aarch64${ARMPKGSFX_ENDIAN_64}.so.1"
elif targetarch.startswith("riscv64"): elif targetarch.startswith("riscv64"):