diff options
author | Khem Raj <raj.khem@gmail.com> | 2022-03-12 15:16:44 -0800 |
---|---|---|
committer | Khem Raj <raj.khem@gmail.com> | 2023-09-08 09:08:54 -0700 |
commit | 6db7a60554bc4f828c6776ac6ea3c1d587a9c7e0 (patch) | |
tree | 741b0addec61d0a1e117defa977d6c8688e1664f | |
parent | 7b64db0047976abfbeab7dadfe8b4fd28ea695f2 (diff) | |
download | meta-clang-6db7a60554bc4f828c6776ac6ea3c1d587a9c7e0.tar.gz |
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 <raj.khem@gmail.com>
(cherry picked from commit 321edad13fd9275fb08700252d58a38b2b400670)
-rw-r--r-- | classes/clang.bbclass | 18 |
1 files 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}" | |||
42 | TUNE_CCARGS:remove:toolchain-clang = "-meb" | 42 | TUNE_CCARGS:remove:toolchain-clang = "-meb" |
43 | TUNE_CCARGS:remove:toolchain-clang = "-mel" | 43 | TUNE_CCARGS:remove:toolchain-clang = "-mel" |
44 | TUNE_CCARGS:append:toolchain-clang = "${@bb.utils.contains("TUNE_FEATURES", "bigendian", " -mbig-endian", " -mlittle-endian", d)}" | 44 | TUNE_CCARGS:append:toolchain-clang = "${@bb.utils.contains("TUNE_FEATURES", "bigendian", " -mbig-endian", " -mlittle-endian", d)}" |
45 | # Qemu uses 7400 but fails to emulate VSX/altivec instrs e.g. xor and fails with illegal instructions especially on musl/strspn.c | ||
46 | # Workaround the qemu limitation by disable altivec in code generation, gcc does not use altivec, so code generated with clang is | ||
47 | # superior but sadly qemu starts to puke :(, maybe it will work ok on real hardware !! | ||
48 | TUNE_CCARGS:append:toolchain-clang = "${@bb.utils.contains("TUNE_FEATURES", "ppc7400", " -mno-altivec", "", d)}" | ||
45 | 49 | ||
46 | # Clang does not yet support big.LITTLE performance tunes, so use the LITTLE for tunes | 50 | # Clang does not yet support big.LITTLE performance tunes, so use the LITTLE for tunes |
47 | 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" | 51 | 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" | |||
57 | TUNE_CCARGS:append:toolchain-clang:riscv32 = " -mno-relax" | 61 | TUNE_CCARGS:append:toolchain-clang:riscv32 = " -mno-relax" |
58 | TUNE_CCARGS:append:toolchain-clang:riscv64 = " -mno-relax" | 62 | TUNE_CCARGS:append:toolchain-clang:riscv64 = " -mno-relax" |
59 | 63 | ||
60 | TUNE_CCARGS:remove:toolchain-clang:powerpc = "-mhard-float" | 64 | # Reconcile some ppc anamolies |
61 | TUNE_CCARGS:remove:toolchain-clang:powerpc = "-mno-spe" | 65 | TUNE_CCARGS:remove:toolchain-clang:powerpc = "-mhard-float -mno-spe" |
62 | 66 | TUNE_CCARGS:append:toolchain-clang:libc-musl:powerpc64 = " -mlong-double-64" | |
63 | TUNE_CCARGS:append:toolchain-clang = " -Qunused-arguments" | 67 | TUNE_CCARGS:append:toolchain-clang:libc-musl:powerpc64le = " -mlong-double-64" |
64 | TUNE_CCARGS:append:toolchain-clang:libc-musl:powerpc64 = " -mlong-double-64 -fno-force-enable-int128" | 68 | TUNE_CCARGS:append:toolchain-clang:libc-musl:powerpc = " -mlong-double-64" |
65 | TUNE_CCARGS:append:toolchain-clang:libc-musl:powerpc64le = " -mlong-double-64 -fno-force-enable-int128" | ||
66 | TUNE_CCARGS:append:toolchain-clang:libc-musl:powerpc = " -mlong-double-64 -fno-force-enable-int128" | ||
67 | # usrmerge workaround | 69 | # usrmerge workaround |
68 | TUNE_CCARGS:append:toolchain-clang = "${@bb.utils.contains("DISTRO_FEATURES", "usrmerge", " --dyld-prefix=/usr", "", d)}" | 70 | TUNE_CCARGS:append:toolchain-clang = "${@bb.utils.contains("DISTRO_FEATURES", "usrmerge", " --dyld-prefix=/usr", "", d)}" |
69 | 71 | ||
72 | TUNE_CCARGS:append:toolchain-clang = " -Qunused-arguments" | ||
73 | |||
70 | LDFLAGS:append:toolchain-clang:class-nativesdk:x86-64 = " -Wl,-dynamic-linker,${base_libdir}/ld-linux-x86-64.so.2" | 74 | LDFLAGS:append:toolchain-clang:class-nativesdk:x86-64 = " -Wl,-dynamic-linker,${base_libdir}/ld-linux-x86-64.so.2" |
71 | LDFLAGS:append:toolchain-clang:class-nativesdk:x86 = " -Wl,-dynamic-linker,${base_libdir}/ld-linux.so.2" | 75 | LDFLAGS:append:toolchain-clang:class-nativesdk:x86 = " -Wl,-dynamic-linker,${base_libdir}/ld-linux.so.2" |
72 | LDFLAGS:append:toolchain-clang:class-nativesdk:aarch64 = " -Wl,-dynamic-linker,${base_libdir}/ld-linux-aarch64.so.1" | 76 | LDFLAGS:append:toolchain-clang:class-nativesdk:aarch64 = " -Wl,-dynamic-linker,${base_libdir}/ld-linux-aarch64.so.1" |