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 #include +#ifndef __ASSEMBLY__ +/* + * gcc 10 started to emit a .machine directive at the beginning of generated + * .s files, which overrides assembler -Wa,-m 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 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 */