40 lines
1.3 KiB
Diff
40 lines
1.3 KiB
Diff
diff --git a/arch/powerpc/include/asm/asm-compat.h b/arch/powerpc/include/asm/asm-compat.h
|
|
index 2b736d9fbb1b..f9ac4a36f026 100644
|
|
--- a/arch/powerpc/include/asm/asm-compat.h
|
|
+++ b/arch/powerpc/include/asm/asm-compat.h
|
|
@@ -5,6 +5,34 @@
|
|
#include <asm/types.h>
|
|
#include <asm/ppc-opcode.h>
|
|
|
|
+#ifndef __ASSEMBLY__
|
|
+/*
|
|
+ * gcc 10 started to emit a .machine directive at the beginning of generated
|
|
+ * .s files, which overrides assembler -Wa,-m<cpu> options passed down.
|
|
+ * Unclear if this behaviour will be reverted.
|
|
+ *
|
|
+ * gas 2.38 commit b25f942e18d6 made .machine directive more strict, commit
|
|
+ * cebc89b9328ea weakens it to take into account the gcc directive and allow
|
|
+ * assembler -m<cpu> options to work.
|
|
+ *
|
|
+ * A combination of both results in an older machine -mcpu= code generation
|
|
+ * preventing newer mneumonics in inline asm being recognised because it
|
|
+ * overrides our -Wa,-many option from being recognised.
|
|
+ *
|
|
+ * Emitting a .machine any directive by hand allows us to hack our way around
|
|
+ * this.
|
|
+ *
|
|
+ * XXX: verify versions and combinations.
|
|
+ */
|
|
+#ifdef CONFIG_CC_IS_GCC
|
|
+#if (GCC_VERSION >= 100000)
|
|
+#if (CONFIG_AS_VERSION == 23800)
|
|
+asm(".machine any");
|
|
+#endif
|
|
+#endif
|
|
+#endif
|
|
+#endif /* __ASSEMBLY__ */
|
|
+
|
|
#ifdef __powerpc64__
|
|
|
|
/* operations for longs and pointers */
|