mirror of
https://github.com/kanjitalk755/macemu.git
synced 2025-02-04 14:33:47 +00:00
Sync with new SIGSEGV API.
This commit is contained in:
parent
7e7827a886
commit
19e145ad16
@ -253,7 +253,7 @@ static void *tick_func(void *arg);
|
||||
extern void emul_ppc(uint32 start);
|
||||
extern void init_emul_ppc(void);
|
||||
extern void exit_emul_ppc(void);
|
||||
sigsegv_return_t sigsegv_handler(sigsegv_address_t, sigsegv_address_t);
|
||||
sigsegv_return_t sigsegv_handler(sigsegv_info_t *sip);
|
||||
#else
|
||||
extern "C" void sigusr2_handler_init(int sig, siginfo_t *sip, void *scp);
|
||||
extern "C" void sigusr2_handler(int sig, siginfo_t *sip, void *scp);
|
||||
@ -1637,9 +1637,19 @@ static void sigsegv_handler(int sig, siginfo_t *sip, void *scp)
|
||||
#endif
|
||||
|
||||
#if ENABLE_VOSF
|
||||
// Handle screen fault.
|
||||
extern bool Screen_fault_handler(sigsegv_address_t fault_address, sigsegv_address_t fault_instruction);
|
||||
if (Screen_fault_handler((sigsegv_address_t)addr, (sigsegv_address_t)r->pc()))
|
||||
// Handle screen fault
|
||||
// XXX: don't redefine locally?
|
||||
#if SIGSEGV_CHECK_VERSION(1,0,0)
|
||||
struct sigsegv_info_t {
|
||||
sigsegv_address_t addr;
|
||||
sigsegv_address_t pc;
|
||||
};
|
||||
sigsegv_info_t si;
|
||||
si.addr = (sigsegv_address_t)addr;
|
||||
si.pc = (sigsegv_address_t)r->pc();
|
||||
#endif
|
||||
extern bool Screen_fault_handler(sigsegv_info_t *sip);
|
||||
if (Screen_fault_handler(&si))
|
||||
return;
|
||||
#endif
|
||||
|
||||
|
@ -114,7 +114,7 @@ static void jump_to_rom(uint32 entry);
|
||||
extern void emul_ppc(uint32 start);
|
||||
extern void init_emul_ppc(void);
|
||||
extern void exit_emul_ppc(void);
|
||||
sigsegv_return_t sigsegv_handler(sigsegv_address_t, sigsegv_address_t);
|
||||
sigsegv_return_t sigsegv_handler(sigsegv_info_t *sip);
|
||||
|
||||
|
||||
/*
|
||||
|
@ -171,7 +171,7 @@ public:
|
||||
void interrupt(uint32 entry);
|
||||
|
||||
// Make sure the SIGSEGV handler can access CPU registers
|
||||
friend sigsegv_return_t sigsegv_handler(sigsegv_address_t, sigsegv_address_t);
|
||||
friend sigsegv_return_t sigsegv_handler(sigsegv_info_t *sip);
|
||||
};
|
||||
|
||||
sheepshaver_cpu::sheepshaver_cpu()
|
||||
@ -730,16 +730,16 @@ static void dump_log(void)
|
||||
* Initialize CPU emulation
|
||||
*/
|
||||
|
||||
sigsegv_return_t sigsegv_handler(sigsegv_address_t fault_address, sigsegv_address_t fault_instruction)
|
||||
sigsegv_return_t sigsegv_handler(sigsegv_info_t *sip)
|
||||
{
|
||||
#if ENABLE_VOSF
|
||||
// Handle screen fault
|
||||
extern bool Screen_fault_handler(sigsegv_address_t, sigsegv_address_t);
|
||||
if (Screen_fault_handler(fault_address, fault_instruction))
|
||||
extern bool Screen_fault_handler(sigsegv_info_t *sip);
|
||||
if (Screen_fault_handler(sip))
|
||||
return SIGSEGV_RETURN_SUCCESS;
|
||||
#endif
|
||||
|
||||
const uintptr addr = (uintptr)fault_address;
|
||||
const uintptr addr = (uintptr)sigsegv_get_fault_address(sip);
|
||||
#if HAVE_SIGSEGV_SKIP_INSTRUCTION
|
||||
// Ignore writes to ROM
|
||||
if ((addr - (uintptr)ROMBaseHost) < ROM_SIZE)
|
||||
@ -790,8 +790,8 @@ sigsegv_return_t sigsegv_handler(sigsegv_address_t fault_address, sigsegv_addres
|
||||
#endif
|
||||
|
||||
fprintf(stderr, "SIGSEGV\n");
|
||||
fprintf(stderr, " pc %p\n", fault_instruction);
|
||||
fprintf(stderr, " ea %p\n", fault_address);
|
||||
fprintf(stderr, " pc %p\n", sigsegv_get_fault_instruction_address(sip));
|
||||
fprintf(stderr, " ea %p\n", sigsegv_get_fault_address(sip));
|
||||
dump_registers();
|
||||
ppc_cpu->dump_log();
|
||||
enter_mon();
|
||||
|
Loading…
x
Reference in New Issue
Block a user