diff -up ./arch/x86/Kconfig.cpu.pref ./arch/x86/Kconfig.cpu --- ./arch/x86/Kconfig.cpu.pref 2026-05-29 19:43:56.437070767 +0900 +++ ./arch/x86/Kconfig.cpu 2026-05-29 19:54:47.938471518 +0900 @@ -395,6 +395,16 @@ config IGNORE_SSP_OPCODE If you are not sure, say N. +config CPU_IGNORE_PREFETCH + bool "Skip unrecognized prefetch opcodes" + depends on X86_32 && CPU_EMU486 + help + Skips uncoditionally used prefetcht0, prefetcht1, prefetcht2, prefetchnta opcodes + on unsupported CPUs, with otherwise causes SIGILL. + gc package includes this. + + If you are not sure, say N. + config CPU_EMU_FUCOMI bool "Pentium-Pro FCOMI,FCMOVcc emulation" depends on X86_32 && CPU_EMU486 diff -up ./arch/x86/configs/i386_defconfig.pref ./arch/x86/configs/i386_defconfig --- ./arch/x86/configs/i386_defconfig.pref 2026-05-29 19:43:56.437070767 +0900 +++ ./arch/x86/configs/i386_defconfig 2026-05-29 19:54:47.938471518 +0900 @@ -34,6 +34,7 @@ CONFIG_SMP=y # CONFIG_CPU_EMU486_DEBUG is not set # CONFIG_GEODE_NOPL is not set # CONFIG_IGNORE_SSP_OPCODE is not set +# CONFIG_CPU_IGNORE_PREFETCH is not set # CONFIG_CPU_EMU_FUCOMI is not set # CONFIG_CPU_PROC_EMULATED_OPS is not set # CONFIG_CPU_PROC_EMULATED_FILES is not set diff -up ./arch/x86/kernel/traps.c.pref ./arch/x86/kernel/traps.c --- ./arch/x86/kernel/traps.c.pref 2026-05-29 19:43:56.439070774 +0900 +++ ./arch/x86/kernel/traps.c 2026-05-29 19:54:47.940471519 +0900 @@ -1491,6 +1491,29 @@ static void handle_invalid_op(struct pt_ } #endif /* CONFIG_GEODE_NOPL */ +#ifdef CONFIG_CPU_IGNORE_PREFETCH + if (op1 == 0x0F && op2 == 0x18) { /* 0f 18 /1|/2|/3|/0 prefetch */ + int mod; + get_user(op3, eip+2); + mod = op3 & 0b00111000; + switch (mod) { + case 1<<3: /* prefetch0 m8 */ + regs->ip = (u32)skip_modrm(eip+3, 32, op3); + return; + case 2<<3: /* prefetch1 m8 */ + regs->ip = (u32)skip_modrm(eip+3, 32, op3); + return; + case 3<<3: /* prefetch2 m8 */ + regs->ip = (u32)skip_modrm(eip+3, 32, op3); + return; + case 0<<3: /* prefetchnta m8 */ + regs->ip = (u32)skip_modrm(eip+3, 32, op3); + return; + default: break; /* unrecognized */ + } + } +#endif + #ifdef CONFIG_CPU_EMU_FUCOMI /* FCOMI, FCOMIP, FUCOMI, FUCOMIP emulation */ if (op1 == 0xDB) {