While talking about #142, I did some testing on master here, and found:
i686 jit true -> boots to desktop ok
i686 jit false -> boots to desktop ok
x86_64 jit true -> boots to desktop ok
x86_64 jit false -> segfault on the boot screen before the first extension icon appears, no PPC stack trace
The x86_64 test there was on Debian 9:
Linux debcdehax 4.9.0-14-amd64 #1 SMP Debian 4.9.240-2 (2020-10-30) x86_64 GNU/Linux
Built with its:
$ gcc --version
gcc (Debian 6.3.0-18+deb9u1) 6.3.0 20170516
Copyright (C) 2016 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
The backtrace:
Thread 1 "SheepShaver" received signal SIGSEGV, Segmentation fault.
powerpc_cpu::execute_loadstore<op_template_nop<unsigned int>, input_gpr_except<bit_field<11, 15>, 0>, gpr_operand<bit_field<16, 20> >, false, 4, false, false> (this=0x79bfbfc0, opcode=<optimized out>) at ../kpx_cpu/src/cpu/ppc/ppc-execute.cpp:576
576 memory_helper<SZ, RX>::store(ea, operand_RS::get(this, opcode));
(gdb) bt
#0 powerpc_cpu::execute_loadstore<op_template_nop<unsigned int>, input_gpr_except<bit_field<11, 15>, 0>, gpr_operand<bit_field<16, 20> >, false, 4, false, false> (this=0x79bfbfc0, opcode=<optimized out>) at ../kpx_cpu/src/cpu/ppc/ppc-execute.cpp:576
#1 0x00000000780b6518 in nv_mem_fun1_t<void, powerpc_cpu, unsigned int>::operator() (x=<optimized out>, p=0x79bfbfc0, this=0x1038f960)
at ../kpx_cpu/include/nvmemfun.hpp:108
#2 powerpc_cpu::execute (this=0x79bfbfc0, entry=entry@entry=1085341696) at ../kpx_cpu/src/cpu/ppc/ppc-cpu.cpp:697
#3 0x00000000780cd69e in emul_ppc (entry=entry@entry=1085341696) at ../kpx_cpu/sheepshaver_glue.cpp:938
#4 0x0000000078065707 in jump_to_rom (entry=1085341696) at main_unix.cpp:1271
#5 emul_func (arg=0x0) at main_unix.cpp:1291
#6 main (argc=<optimized out>, argv=<optimized out>) at main_unix.cpp:1112
Disassembling at the point where the segfault happens:
The problem is that sigsegv.cpp's ix86_skip_instruction() doesn't know what to make of the 0x67 x86_64 32-bit address mode prefix on that instruction there.
While talking about #142, I did some testing on master here, and found:
i686 jit true -> boots to desktop ok i686 jit false -> boots to desktop ok x86_64 jit true -> boots to desktop ok x86_64 jit false -> segfault on the boot screen before the first extension icon appears, no PPC stack trace
The x86_64 test there was on Debian 9:
Built with its:
The backtrace:
Disassembling at the point where the segfault happens:
etc...
The problem is that
sigsegv.cpp
'six86_skip_instruction()
doesn't know what to make of the0x67
x86_64 32-bit address mode prefix on that instruction there.