Re: [PATCH] x86/build: Do not allow X86_NATIVE_CPU to be enabled on non-x86_64 hosts

From: Borislav Petkov

Date: Sat Nov 14 2026 - 15:26:08 EST


On Fri, Nov 13, 2026 at 05:31:34PM -0700, Nathan Chancellor wrote:
> When cross compiling x86_64 from an aarch64 machine using clang with
> CONFIG_X86_NATIVE_CPU enabled, there may be a slew of warnings from each
> .c file, which makes it nearly impossible to find real issues.
>
> '+crc' is not a recognized feature for this target (ignoring feature)
> '+fp-armv8' is not a recognized feature for this target (ignoring feature)
> '+lse' is not a recognized feature for this target (ignoring feature)
> '+neon' is not a recognized feature for this target (ignoring feature)
> '+sha2' is not a recognized feature for this target (ignoring feature)
> '+sha3' is not a recognized feature for this target (ignoring feature)
> '-rand' is not a recognized feature for this target (ignoring feature)
> '-sme' is not a recognized feature for this target (ignoring feature)
> '-sme2' is not a recognized feature for this target (ignoring feature)
> '-sve' is not a recognized feature for this target (ignoring feature)
>
> Internally, clang expands '-march=native' into a list of target features
> to enable based on the detected CPU. The x86 part of the clang driver
> notes
>
> // FIXME: Reject attempts to use -march=native unless the target matches
> // the host.
>
> which was first added by the initial '-march=native' support in clang in
> 2009 [1] (other architecture drivers appear to have a similar problem).
>
> Due to the lack of validation that the host CPU is an x86_64 CPU,
> '-march=native' is expanded using the aarch64 host CPU's target
> features, which are unrecognized by the x86 backend.
>
> While this should obviously be fixed in the compiler, this does not help
> currently released toolchains that have this issue. As a simple
> workaround, only allow CONFIG_X86_NATIVE_CPU to be enabled when
> targeting and running on an x86_64 host.
>
> Cc: stable@xxxxxxxxxxxxxxx
> Fixes: ea1dcca1de12 ("x86/kbuild/64: Add the CONFIG_X86_NATIVE_CPU option to locally optimize the kernel with '-march=native'")
> Link: https://github.com/llvm/llvm-project/commit/e13ada6a3b236f505b24501d456dec2518e4944c [1]
> Signed-off-by: Nathan Chancellor <nathan@xxxxxxxxxx>
> ---
> arch/x86/Kconfig.cpu | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/arch/x86/Kconfig.cpu b/arch/x86/Kconfig.cpu
> index 6e7a366f0798..4043b7227e36 100644
> --- a/arch/x86/Kconfig.cpu
> +++ b/arch/x86/Kconfig.cpu
> @@ -216,7 +216,7 @@ config RUSTC_HAS_APXF
>
> config X86_NATIVE_CPU
> bool "Build and optimize for local/native CPU"
> - depends on X86_64
> + depends on X86_64 && $(success,test "$(shell,uname -m)" = "x86_64")
> depends on CC_HAS_MARCH_NATIVE
> depends on !RUST || RUSTC_HAS_APXF
> help

This looks like a whack-a-mole-y fix to me. Especially if the other arches
would have the same problem.

So wouldn't a more generic fix checking

native arch == target arch

somewhere in the makefile be better?

Thx.

--
Regards/Gruss,
Boris.

https://people.kernel.org/tglx/notes-about-netiquette