On Mon, 25 Feb 2019, Falk Richter wrote:
> >Synopsis:    <OpenBSD 6.4 doesn't boot on 486 class processor anymore>
...
> >Description:
>       <Just after booting the kernel the system stops with:
> trap: 0(0) invalid opcode fault
> cn_tab=0x5412c
> eax 0 ecx 0 edx ff58 ebx ffc8
> esp fe0c ebp ff40 esi 8 edi ff58
> eip 4241c eflags 10046 cs 8 ss 10
> ds 10 es 10 fs 10 gs 10
> 
> I tested it with AMD / Cyrix 486DX2-66, AMD 486DX4-100 and Cyrix 
> 5x86-100GP processors on different mainboards with chipsets of UMC, SiS 
> and Winbond. I found one exception which works yet (see dmesg): AMD 5x86 
> P75 (marketing name) which was a AMD 486DX4-133 with write-back cache.

The problem is that ucode_load() in sys/arch/i386/stand/libsa/exec_i386.c 
uses CPUID() without checking whether the cpuid instruction is supported.  
There are currently three places in sys/arch/i386/stand/libsa which make 
that check: cpuprobe.c, machdep.c, and random_i386.S. ucode_load() could 
copy the chunk from machdep.c...or someone could add a global and do the 
check once, early...


Philip Guenther

Reply via email to