diff --git a/patches/openwrt/to-upstream/0102-gcc-ppc-expect-sf-ld-suffix-even-with-spe-enabled.patch b/patches/openwrt/to-upstream/0102-gcc-ppc-expect-sf-ld-suffix-even-with-spe-enabled.patch new file mode 100644 index 0000000000000000000000000000000000000000..b8d2f81d9910aabd663bd594c2f9560c51be9e13 --- /dev/null +++ b/patches/openwrt/to-upstream/0102-gcc-ppc-expect-sf-ld-suffix-even-with-spe-enabled.patch @@ -0,0 +1,79 @@ +From 65190e71599951bf8b383df3a75790a82c6f9f66 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?=C5=A0imon=20Bo=C5=99ek?= <simon.borek@nic.cz> +Date: Wed, 13 Jul 2022 18:43:02 +0200 +Subject: [PATCH 1/2] gcc 8.4.0: mpc85xx SPE: expect '-sf' `ld` suffix even with SPE enabled + +An incorrect name of the dynamic linker symlink is expected on Turris 1.x +(and probably other mpc85xx devices) with SPE ISA extension[^1] enabled otherwise, +leading to gcc compiled binaries being unable to utilize dynamic linker => crashes at boot. + +From musl point of view usage of Power ISA SPE instructions for floating point +arithmetic is considered to be soft float. As a result the name of symlink +to musl `ld` is appended with '-sf' suffix. + +Note: The scope of changes and new conditions is probably larger than necessary. +Since SPE instructions are relevant to e500 PPC cores only (used in both mpc8540 and mpc8548) +this should not break any OpenWrt (future or existing) device. +Nevertheless, there is no doubt this patch can be further optimized. + +[^1]: https://www.nxp.com/docs/en/reference-manual/SPEPEM.pdf + +Co-authored-by: Pali Rohár <pali@kernel.org> +Signed-off-by: Šimon Bořek <simon.borek@nic.cz> +--- + ...-in-linux64.h-sysv4.h-if-musl-spe-or.patch | 46 +++++++++++++++++++ + 1 file changed, 46 insertions(+) + create mode 100644 toolchain/gcc/patches/8.4.0/969-ppc-add-sf-to-ld-in-linux64.h-sysv4.h-if-musl-spe-or.patch + +diff --git a/toolchain/gcc/patches/8.4.0/969-ppc-add-sf-to-ld-in-linux64.h-sysv4.h-if-musl-spe-or.patch b/toolchain/gcc/patches/8.4.0/969-ppc-add-sf-to-ld-in-linux64.h-sysv4.h-if-musl-spe-or.patch +new file mode 100644 +index 0000000000..f723a2e673 +--- /dev/null ++++ b/toolchain/gcc/patches/8.4.0/969-ppc-add-sf-to-ld-in-linux64.h-sysv4.h-if-musl-spe-or.patch +@@ -0,0 +1,43 @@ ++From 6c0906bc51d2bb12ef9b0f4261cf9a39425e0ff7 Mon Sep 17 00:00:00 2001 ++From: =?UTF-8?q?=C5=A0imon=20Bo=C5=99ek?= <simon.borek@nic.cz> ++Date: Wed, 13 Jul 2022 12:39:07 +0200 ++Subject: [PATCH] add -sf suffix to the dynamic linker in linux64.h and sysv4.h if musl-spe is to be used ++ ++The scope of changes and new conditions is probably larger than necessary. Further refactoring would be beneficial. ++--- ++ gcc/config/powerpcspe/linux64.h | 4 ++-- ++ gcc/config/powerpcspe/sysv4.h | 2 +- ++ 2 files changed, 3 insertions(+), 3 deletions(-) ++ ++diff --git a/gcc/config/powerpcspe/linux64.h b/gcc/config/powerpcspe/linux64.h ++index b3a0cc4e46c..79ad98270e7 100644 ++--- a/gcc/config/powerpcspe/linux64.h +++++ b/gcc/config/powerpcspe/linux64.h ++@@ -425,9 +425,9 @@ extern int dot_symbols; ++ #endif ++ ++ #define MUSL_DYNAMIC_LINKER32 \ ++- "/lib/ld-musl-powerpc" MUSL_DYNAMIC_LINKER_E "%{msoft-float:-sf}.so.1" +++ "/lib/ld-musl-powerpc" MUSL_DYNAMIC_LINKER_E "%{msoft-float|mspe|mabi=spe|mcpu=8540|mcpu=8548:-sf}.so.1" ++ #define MUSL_DYNAMIC_LINKER64 \ ++- "/lib/ld-musl-powerpc64" MUSL_DYNAMIC_LINKER_E "%{msoft-float:-sf}.so.1" +++ "/lib/ld-musl-powerpc64" MUSL_DYNAMIC_LINKER_E "%{msoft-float|mspe|mabi=spe|mcpu=8540|mcpu=8548:-sf}.so.1" ++ ++ #define UCLIBC_DYNAMIC_LINKER32 "/lib/ld-uClibc.so.0" ++ #define UCLIBC_DYNAMIC_LINKER64 "/lib/ld64-uClibc.so.0" ++diff --git a/gcc/config/powerpcspe/sysv4.h b/gcc/config/powerpcspe/sysv4.h ++index 4f352746151..a79df9ff376 100644 ++--- a/gcc/config/powerpcspe/sysv4.h +++++ b/gcc/config/powerpcspe/sysv4.h ++@@ -783,7 +783,7 @@ ENDIAN_SELECT(" -mbig", " -mlittle", DEFAULT_ASM_ENDIAN) ++ #define GLIBC_DYNAMIC_LINKER "/lib/ld.so.1" ++ #define UCLIBC_DYNAMIC_LINKER "/lib/ld-uClibc.so.0" ++ #define MUSL_DYNAMIC_LINKER \ ++- "/lib/ld-musl-powerpc" MUSL_DYNAMIC_LINKER_E "%{msoft-float:-sf}.so.1" +++ "/lib/ld-musl-powerpc" MUSL_DYNAMIC_LINKER_E "%{msoft-float|mspe|mabi=spe|mcpu=8540|mcpu=8548:-sf}.so.1" ++ #if DEFAULT_LIBC == LIBC_UCLIBC ++ #define CHOOSE_DYNAMIC_LINKER(G, U, M) \ ++ "%{mglibc:" G ";:%{mmusl:" M ";:" U "}}" ++-- ++2.35.3 ++ +-- +2.35.3 +