From 6db7a60554bc4f828c6776ac6ea3c1d587a9c7e0 Mon Sep 17 00:00:00 2001 From: Khem Raj Date: Sat, 12 Mar 2022 15:16:44 -0800 Subject: clang: Use -mno-altivec for ppc 7400 Workaround qemuppc illegal instruction trap on vxor instruction emulation this instruction is emitted by clang with -mcpu=7400 on ppc32 when compiling musl/strspn.c file The crash shows up running qemu-ppc via gobject-introspection, so a long unwieldy path but we know whats happening Signed-off-by: Khem Raj (cherry picked from commit 321edad13fd9275fb08700252d58a38b2b400670) --- classes/clang.bbclass | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/classes/clang.bbclass b/classes/clang.bbclass index b696f62..5517ca6 100644 --- a/classes/clang.bbclass +++ b/classes/clang.bbclass @@ -42,6 +42,10 @@ LDFLAGS:append:toolchain-clang = " ${COMPILER_RT} ${LIBCPLUSPLUS}" TUNE_CCARGS:remove:toolchain-clang = "-meb" TUNE_CCARGS:remove:toolchain-clang = "-mel" TUNE_CCARGS:append:toolchain-clang = "${@bb.utils.contains("TUNE_FEATURES", "bigendian", " -mbig-endian", " -mlittle-endian", d)}" +# Qemu uses 7400 but fails to emulate VSX/altivec instrs e.g. xor and fails with illegal instructions especially on musl/strspn.c +# Workaround the qemu limitation by disable altivec in code generation, gcc does not use altivec, so code generated with clang is +# superior but sadly qemu starts to puke :(, maybe it will work ok on real hardware !! +TUNE_CCARGS:append:toolchain-clang = "${@bb.utils.contains("TUNE_FEATURES", "ppc7400", " -mno-altivec", "", d)}" # Clang does not yet support big.LITTLE performance tunes, so use the LITTLE for tunes TUNE_CCARGS:remove:toolchain-clang = "-mtune=cortex-a57.cortex-a53 -mtune=cortex-a72.cortex-a53 -mtune=cortex-a15.cortex-a7 -mtune=cortex-a17.cortex-a7 -mtune=cortex-a72.cortex-a35 -mtune=cortex-a73.cortex-a53 -mtune=cortex-a75.cortex-a55 -mtune=cortex-a76.cortex-a55" @@ -57,16 +61,16 @@ TUNE_CCARGS:remove:toolchain-clang = "-mcpu=octeontx2" TUNE_CCARGS:append:toolchain-clang:riscv32 = " -mno-relax" TUNE_CCARGS:append:toolchain-clang:riscv64 = " -mno-relax" -TUNE_CCARGS:remove:toolchain-clang:powerpc = "-mhard-float" -TUNE_CCARGS:remove:toolchain-clang:powerpc = "-mno-spe" - -TUNE_CCARGS:append:toolchain-clang = " -Qunused-arguments" -TUNE_CCARGS:append:toolchain-clang:libc-musl:powerpc64 = " -mlong-double-64 -fno-force-enable-int128" -TUNE_CCARGS:append:toolchain-clang:libc-musl:powerpc64le = " -mlong-double-64 -fno-force-enable-int128" -TUNE_CCARGS:append:toolchain-clang:libc-musl:powerpc = " -mlong-double-64 -fno-force-enable-int128" +# Reconcile some ppc anamolies +TUNE_CCARGS:remove:toolchain-clang:powerpc = "-mhard-float -mno-spe" +TUNE_CCARGS:append:toolchain-clang:libc-musl:powerpc64 = " -mlong-double-64" +TUNE_CCARGS:append:toolchain-clang:libc-musl:powerpc64le = " -mlong-double-64" +TUNE_CCARGS:append:toolchain-clang:libc-musl:powerpc = " -mlong-double-64" # usrmerge workaround TUNE_CCARGS:append:toolchain-clang = "${@bb.utils.contains("DISTRO_FEATURES", "usrmerge", " --dyld-prefix=/usr", "", d)}" +TUNE_CCARGS:append:toolchain-clang = " -Qunused-arguments" + LDFLAGS:append:toolchain-clang:class-nativesdk:x86-64 = " -Wl,-dynamic-linker,${base_libdir}/ld-linux-x86-64.so.2" LDFLAGS:append:toolchain-clang:class-nativesdk:x86 = " -Wl,-dynamic-linker,${base_libdir}/ld-linux.so.2" LDFLAGS:append:toolchain-clang:class-nativesdk:aarch64 = " -Wl,-dynamic-linker,${base_libdir}/ld-linux-aarch64.so.1" -- cgit v1.2.3-54-g00ecf