diff --git a/graphics/ddraw.c b/graphics/ddraw.c index 2a5f64298fb..2fcde7f1f80 100644 --- a/graphics/ddraw.c +++ b/graphics/ddraw.c @@ -73,7 +73,6 @@ /* Restore signal handlers overwritten by XF86DGA */ #define RESTORE_SIGNALS -BOOL32 (*SIGNAL_Reinit)(void); /* didn't find any obvious place to put this */ /* Where do these GUIDs come from? mkuuid. * They exist solely to distinguish between the targets Wine support, @@ -2750,7 +2749,7 @@ static HRESULT WINAPI DGA_IDirectDraw_SetDisplayMode( #endif #ifdef RESTORE_SIGNALS - if (SIGNAL_Reinit) SIGNAL_Reinit(); + SIGNAL_InitHandlers(); #endif return DD_OK; #else /* defined(HAVE_LIBXXF86DGA) */ @@ -3000,7 +2999,7 @@ static HRESULT WINAPI DGA_IDirectDraw2_RestoreDisplayMode(LPDIRECTDRAW2 this) { Sleep(1000); TSXF86DGADirectVideo(display,DefaultScreen(display),0); #ifdef RESTORE_SIGNALS - if (SIGNAL_Reinit) SIGNAL_Reinit(); + SIGNAL_InitHandlers(); #endif return DD_OK; #else /* defined(HAVE_LIBXXF86DGA) */ @@ -3033,7 +3032,8 @@ static ULONG WINAPI DGA_IDirectDraw2_Release(LPDIRECTDRAW2 this) { #ifdef HAVE_LIBXXF86DGA if (!--(this->ref)) { TSXF86DGADirectVideo(display,DefaultScreen(display),0); - + if (this->d.window && (this->d.mainWindow != this->d.window)) + DestroyWindow32(this->d.window); #ifdef HAVE_LIBXXF86VM if (orig_mode) { TSXF86VidModeSwitchToMode( @@ -3048,7 +3048,7 @@ static ULONG WINAPI DGA_IDirectDraw2_Release(LPDIRECTDRAW2 this) { #endif #ifdef RESTORE_SIGNALS - if (SIGNAL_Reinit) SIGNAL_Reinit(); + SIGNAL_InitHandlers(); #endif HeapFree(GetProcessHeap(),0,this); return 0; @@ -3061,6 +3061,8 @@ static ULONG WINAPI Xlib_IDirectDraw2_Release(LPDIRECTDRAW2 this) { TRACE( ddraw, "(%p)->() decrementing from %lu.\n", this, this->ref ); if (!--(this->ref)) { + if (this->d.window && (this->d.mainWindow != this->d.window)) + DestroyWindow32(this->d.window); HeapFree(GetProcessHeap(),0,this); return 0; } @@ -3773,7 +3775,7 @@ HRESULT WINAPI DGA_DirectDrawCreate( LPDIRECTDRAW *lplpDD, LPUNKNOWN pUnkOuter) (*lplpDD)->d.screen_depth = DefaultDepthOfScreen(X11DRV_GetXScreen()); (*lplpDD)->d.depth = DefaultDepthOfScreen(X11DRV_GetXScreen()); #ifdef RESTORE_SIGNALS - if (SIGNAL_Reinit) SIGNAL_Reinit(); + SIGNAL_InitHandlers(); #endif return DD_OK; diff --git a/if1632/Makefile.in b/if1632/Makefile.in index 5552ef01c29..4ffa622928f 100644 --- a/if1632/Makefile.in +++ b/if1632/Makefile.in @@ -55,7 +55,6 @@ C_SRCS = \ builtin.c \ dummy.c \ relay.c \ - signal.c \ snoop.c \ thunk.c diff --git a/if1632/signal.c b/if1632/signal.c deleted file mode 100644 index 29ade19212f..00000000000 --- a/if1632/signal.c +++ /dev/null @@ -1,229 +0,0 @@ -/* - * Emulator signal handling - * - * Copyright 1995 Alexandre Julliard - */ - -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include - -#include "debugger.h" -#include "options.h" -#include "sig_context.h" -#include "miscemu.h" -#include "dosexe.h" -#include "thread.h" -#include "debug.h" - -static const char * const SIGNAL_traps[] = -{ - "Division by zero exception", /* 0 */ - "Debug exception", /* 1 */ - "NMI interrupt", /* 2 */ - "Breakpoint exception", /* 3 */ - "Overflow exception", /* 4 */ - "Bound range exception", /* 5 */ - "Invalid opcode exception", /* 6 */ - "Device not available exception", /* 7 */ - "Double fault exception", /* 8 */ - "Coprocessor segment overrun", /* 9 */ - "Invalid TSS exception", /* 10 */ - "Segment not present exception", /* 11 */ - "Stack fault", /* 12 */ - "General protection fault", /* 13 */ - "Page fault", /* 14 */ - "Unknown exception", /* 15 */ - "Floating point exception", /* 16 */ - "Alignment check exception", /* 17 */ - "Machine check exception" /* 18 */ -}; - -#define NB_TRAPS (sizeof(SIGNAL_traps) / sizeof(SIGNAL_traps[0])) - -extern void SIGNAL_SetHandler( int sig, void (*func)(), int flags ); -extern BOOL32 INSTR_EmulateInstruction( SIGCONTEXT *context ); - - -/********************************************************************** - * SIGNAL_break - * - * Handle Ctrl-C and such - */ -static HANDLER_DEF(SIGNAL_break) -{ - HANDLER_INIT(); - if (Options.debug) - wine_debug( signal, HANDLER_CONTEXT ); /* Enter our debugger */ - else exit(0); -} - - -/********************************************************************** - * SIGNAL_trap - * - * SIGTRAP handler. - */ -static HANDLER_DEF(SIGNAL_trap) -{ - HANDLER_INIT(); - wine_debug( signal, HANDLER_CONTEXT ); /* Enter our debugger */ -} - - -/********************************************************************** - * SIGNAL_fault - * - * Segfault handler. - */ -static HANDLER_DEF(SIGNAL_fault) -{ - const char *fault = "Segmentation fault"; - - HANDLER_INIT(); - if (INSTR_EmulateInstruction( HANDLER_CONTEXT )) return; -#ifdef TRAP_sig - if (TRAP_sig( HANDLER_CONTEXT ) < NB_TRAPS) - fault = SIGNAL_traps[TRAP_sig( HANDLER_CONTEXT )]; -#endif - if (IS_SELECTOR_SYSTEM(CS_sig(HANDLER_CONTEXT))) - { - MSG("%s in 32-bit code (0x%08lx).\n", fault, EIP_sig(HANDLER_CONTEXT)); - } - else - { - MSG("%s in 16-bit code (%04x:%04lx).\n", fault, - (WORD)CS_sig(HANDLER_CONTEXT), EIP_sig(HANDLER_CONTEXT) ); - } -#ifdef CR2_sig - MSG("Fault address is 0x%08lx\n",CR2_sig(HANDLER_CONTEXT)); -#endif - wine_debug( signal, HANDLER_CONTEXT ); -} - - -/*********************************************************************** - * SIGNAL_SetContext - * - * Set the register values from a sigcontext. - */ -#ifdef UNUSED_FUNCTIONS -static void SIGNAL_SetSigContext( const SIGCONTEXT *sigcontext, - CONTEXT *context ) -{ - EAX_reg(context) = EAX_sig(sigcontext); - EBX_reg(context) = EBX_sig(sigcontext); - ECX_reg(context) = ECX_sig(sigcontext); - EDX_reg(context) = EDX_sig(sigcontext); - ESI_reg(context) = ESI_sig(sigcontext); - EDI_reg(context) = EDI_sig(sigcontext); - EBP_reg(context) = EBP_sig(sigcontext); - EFL_reg(context) = EFL_sig(sigcontext); - EIP_reg(context) = EIP_sig(sigcontext); - ESP_reg(context) = ESP_sig(sigcontext); - CS_reg(context) = LOWORD(CS_sig(sigcontext)); - DS_reg(context) = LOWORD(DS_sig(sigcontext)); - ES_reg(context) = LOWORD(ES_sig(sigcontext)); - SS_reg(context) = LOWORD(SS_sig(sigcontext)); -#ifdef FS_sig - FS_reg(context) = LOWORD(FS_sig(sigcontext)); -#else - GET_FS( FS_reg(&DEBUG_context) ); - FS_reg(context) &= 0xffff; -#endif -#ifdef GS_sig - GS_reg(context) = LOWORD(GS_sig(sigcontext)); -#else - GET_GS( GS_reg(&DEBUG_context) ); - GS_reg(context) &= 0xffff; -#endif -} -#endif - - -/*********************************************************************** - * SIGNAL_GetSigContext - * - * Build a sigcontext from the register values. - */ -#ifdef UNUSED_FUNCTIONS -static void SIGNAL_GetSigContext( SIGCONTEXT *sigcontext, - const CONTEXT *context ) -{ - EAX_sig(sigcontext) = EAX_reg(context); - EBX_sig(sigcontext) = EBX_reg(context); - ECX_sig(sigcontext) = ECX_reg(context); - EDX_sig(sigcontext) = EDX_reg(context); - ESI_sig(sigcontext) = ESI_reg(context); - EDI_sig(sigcontext) = EDI_reg(context); - EBP_sig(sigcontext) = EBP_reg(context); - EFL_sig(sigcontext) = EFL_reg(context); - EIP_sig(sigcontext) = EIP_reg(context); - ESP_sig(sigcontext) = ESP_reg(context); - CS_sig(sigcontext) = CS_reg(context); - DS_sig(sigcontext) = DS_reg(context); - ES_sig(sigcontext) = ES_reg(context); - SS_sig(sigcontext) = SS_reg(context); -#ifdef FS_sig - FS_sig(sigcontext) = FS_reg(context); -#else - SET_FS( FS_reg(&DEBUG_context) ); -#endif -#ifdef GS_sig - GS_sig(sigcontext) = GS_reg(context); -#else - SET_GS( GS_reg(&DEBUG_context) ); -#endif -} -#endif - - -/*********************************************************************** - * SIGNAL_InfoRegisters - * - * Display registers information. - */ -void SIGNAL_InfoRegisters( CONTEXT *context ) -{ - MSG(" CS:%04x SS:%04x DS:%04x ES:%04x FS:%04x GS:%04x", - (WORD)CS_reg(context), (WORD)SS_reg(context), - (WORD)DS_reg(context), (WORD)ES_reg(context), - (WORD)FS_reg(context), (WORD)GS_reg(context) ); - MSG( "\n EIP:%08lx ESP:%08lx EBP:%08lx EFLAGS:%08lx\n", - EIP_reg(context), ESP_reg(context), - EBP_reg(context), EFL_reg(context) ); - MSG( " EAX:%08lx EBX:%08lx ECX:%08lx EDX:%08lx\n", - EAX_reg(context), EBX_reg(context), - ECX_reg(context), EDX_reg(context) ); - MSG( " ESI:%08lx EDI:%08lx\n", - ESI_reg(context), EDI_reg(context) ); -} - - -/********************************************************************** - * SIGNAL_InitEmulator - * - * Initialize emulator signals. - */ -BOOL32 SIGNAL_InitEmulator(void) -{ - SIGNAL_SetHandler( SIGINT, (void (*)())SIGNAL_break, 1); - SIGNAL_SetHandler( SIGSEGV, (void (*)())SIGNAL_fault, 1); - SIGNAL_SetHandler( SIGILL, (void (*)())SIGNAL_fault, 1); - SIGNAL_SetHandler( SIGFPE, (void (*)())SIGNAL_fault, 1); - SIGNAL_SetHandler( SIGTRAP, (void (*)())SIGNAL_trap, 1); /* debugger */ - SIGNAL_SetHandler( SIGHUP, (void (*)())SIGNAL_trap, 1); /* forced break*/ -#ifdef SIGBUS - SIGNAL_SetHandler( SIGBUS, (void (*)())SIGNAL_fault, 1); -#endif - instr_emu_call = INSTR_EmulateInstruction; - return TRUE; -} diff --git a/include/debugger.h b/include/debugger.h index 39ead45653d..74bf0bb7f47 100644 --- a/include/debugger.h +++ b/include/debugger.h @@ -321,4 +321,13 @@ extern void DEBUG_Disassemble( const DBG_ADDR *, const DBG_ADDR*, int offset ); extern void ctx_debug( int signal, CONTEXT *regs ); extern void wine_debug( int signal, SIGCONTEXT *regs ); + /* miscemu/instr.c */ +extern BOOL32 INSTR_EmulateInstruction( SIGCONTEXT* ); + + /* loader/signal.c */ +extern void (*fnWINE_Debugger)(int,SIGCONTEXT*); +extern void (*ctx_debug_call)( int, CONTEXT* ); +extern BOOL32 (*fnINSTR_EmulateInstruction)( SIGCONTEXT* ); + + #endif /* __WINE_DEBUGGER_H */ diff --git a/include/dosexe.h b/include/dosexe.h index bbed1f85759..9da24374509 100644 --- a/include/dosexe.h +++ b/include/dosexe.h @@ -43,11 +43,6 @@ extern LPDOSTASK MZ_AllocDPMITask( HMODULE16 hModule ); #define V86_FLAG 0x00020000 -extern void (*ctx_debug_call)( int, CONTEXT* ); -#ifdef __i386__ -extern BOOL32 (*instr_emu_call)( SIGCONTEXT* ); -#endif - extern void MZ_Tick( WORD handle ); extern HINSTANCE16 MZ_CreateProcess( LPCSTR name, LPCSTR cmdline, LPCSTR env, BOOL32 inherit, diff --git a/include/miscemu.h b/include/miscemu.h index 61b2f34b759..49992a685cb 100644 --- a/include/miscemu.h +++ b/include/miscemu.h @@ -105,10 +105,7 @@ extern void WINAPI XMS_Handler(CONTEXT*); extern BOOL32 SIGNAL_Init(void); extern void SIGNAL_SetHandler( int sig, void (*func)(), int flags ); extern void SIGNAL_MaskAsyncEvents( BOOL32 flag ); - -/* if1632/signal.c */ -extern BOOL32 SIGNAL_InitEmulator(void); -extern BOOL32 (*SIGNAL_Reinit)(void); +extern void SIGNAL_InitHandlers(void); /* misc/aspi.c */ extern void ASPI_DOS_HandleInt(CONTEXT *context); diff --git a/include/sig_context.h b/include/sig_context.h index 6a1541b7036..3554854d5fb 100644 --- a/include/sig_context.h +++ b/include/sig_context.h @@ -35,6 +35,7 @@ typedef struct unsigned long oldmask; unsigned long cr2; } SIGCONTEXT; +#define __HAVE_SIGCONTEXT #define HANDLER_DEF(name) void name (int signal, SIGCONTEXT context) #define HANDLER_CONTEXT (&context) @@ -58,6 +59,7 @@ typedef struct #include typedef struct trapframe SIGCONTEXT; +#define __HAVE_SIGCONTEXT #define HANDLER_DEF(name) void name(int signal, int code, SIGCONTEXT *context) #define HANDLER_CONTEXT context @@ -73,6 +75,7 @@ typedef struct trapframe SIGCONTEXT; #include typedef struct sigcontext SIGCONTEXT; +#define __HAVE_SIGCONTEXT #define HANDLER_DEF(name) void name(int signal, int code, SIGCONTEXT *context) #define HANDLER_CONTEXT context @@ -87,6 +90,7 @@ typedef struct sigcontext SIGCONTEXT; #endif #include typedef struct ucontext SIGCONTEXT; +#define __HAVE_SIGCONTEXT #define HANDLER_DEF(name) void name(int signal, void *siginfo, SIGCONTEXT *context) #define HANDLER_CONTEXT context @@ -126,6 +130,7 @@ typedef struct _CONTEXT /* Note 1 */ ULONG ctx_RegEsp; ULONG ctx_SegSs; } SIGCONTEXT; +#define __HAVE_SIGCONTEXT /*typedef CONTEXTRECORD *PCONTEXTRECORD;*/ #endif /* __EMX__ */ @@ -265,4 +270,9 @@ typedef struct _CONTEXT /* Note 1 */ #endif /* __i386__ */ +#ifndef __HAVE_SIGCONTEXT +/* empty entry for non x86 architectures mostly. */ +typedef DWORD SIGCONTEXT; +#endif + #endif /* __WINE_SIG_CONTEXT_H */ diff --git a/loader/dos/dosvm.c b/loader/dos/dosvm.c index 17d6d4a3982..0cf299070c1 100644 --- a/loader/dos/dosvm.c +++ b/loader/dos/dosvm.c @@ -23,15 +23,12 @@ #include "msdos.h" #include "miscemu.h" #include "debugger.h" -#include "debug.h" #include "module.h" #include "task.h" #include "ldt.h" #include "dosexe.h" #include "dosmod.h" - -void (*ctx_debug_call)(int sig,CONTEXT*ctx)=NULL; -BOOL32 (*instr_emu_call)(SIGCONTEXT*ctx)=NULL; +#include "debug.h" #ifdef MZ_SUPPORTED @@ -121,7 +118,7 @@ static int DOSVM_Process( LPDOSTASK lpDosTask, int fn, int sig, #define CP(x,y) y##_sig(&sigcontext) = VM86->regs.x CV; #undef CP - if (instr_emu_call) ret=instr_emu_call(&sigcontext); + if (fnINSTR_EmulateInstruction) ret=fnINSTR_EmulateInstruction(&sigcontext); #define CP(x,y) VM86->regs.x = y##_sig(&sigcontext) CV; #undef CP diff --git a/loader/signal.c b/loader/signal.c index 7e8c29f07c6..6be2645b5c0 100644 --- a/loader/signal.c +++ b/loader/signal.c @@ -1,12 +1,13 @@ /* * Wine signal handling * + * Copyright 1995 Alexandre Julliard */ #include "config.h" -#include #include +#include #include #include #include @@ -29,10 +30,46 @@ # endif #endif -#include "miscemu.h" -#include "selectors.h" -#include "sig_context.h" #include "winsock.h" +#include "global.h" +#include "options.h" +#include "debugger.h" +#include "miscemu.h" +#include "dosexe.h" +#include "thread.h" +#include "debug.h" + +void (*fnWINE_Debugger)(int,SIGCONTEXT*) = NULL; +void (*ctx_debug_call)(int sig,CONTEXT*ctx)=NULL; +BOOL32 (*fnINSTR_EmulateInstruction)(SIGCONTEXT*ctx)=NULL; + +#ifdef __i386__ + +/* i386 specific faults */ +static const char * const SIGNAL_traps[] = +{ + "Division by zero exception", /* 0 */ + "Debug exception", /* 1 */ + "NMI interrupt", /* 2 */ + "Breakpoint exception", /* 3 */ + "Overflow exception", /* 4 */ + "Bound range exception", /* 5 */ + "Invalid opcode exception", /* 6 */ + "Device not available exception", /* 7 */ + "Double fault exception", /* 8 */ + "Coprocessor segment overrun", /* 9 */ + "Invalid TSS exception", /* 10 */ + "Segment not present exception", /* 11 */ + "Stack fault", /* 12 */ + "General protection fault", /* 13 */ + "Page fault", /* 14 */ + "Unknown exception", /* 15 */ + "Floating point exception", /* 16 */ + "Alignment check exception", /* 17 */ + "Machine check exception" /* 18 */ +}; +#define NB_TRAPS (sizeof(SIGNAL_traps) / sizeof(SIGNAL_traps[0])) +#endif /* Linux sigaction function */ @@ -151,6 +188,106 @@ extern void WINSOCK_sigio(int a); extern void ASYNC_sigio(int a); +/********************************************************************** + * SIGNAL_MaskAsyncEvents + */ +void SIGNAL_MaskAsyncEvents( BOOL32 flag ) +{ + sigprocmask( (flag) ? SIG_BLOCK : SIG_UNBLOCK , &async_signal_set, NULL); +} + +extern void SIGNAL_SetHandler( int sig, void (*func)(), int flags ); + +/********************************************************************** + * SIGNAL_break + * + * Handle Ctrl-C and such + */ +static HANDLER_DEF(SIGNAL_break) +{ + HANDLER_INIT(); + if (Options.debug && fnWINE_Debugger) + fnWINE_Debugger( signal, HANDLER_CONTEXT ); /* Enter our debugger */ + else exit(0); +} + + +/********************************************************************** + * SIGNAL_trap + * + * SIGTRAP handler. + */ +static HANDLER_DEF(SIGNAL_trap) +{ + HANDLER_INIT(); + if (fnWINE_Debugger) + fnWINE_Debugger( signal, HANDLER_CONTEXT ); /* Enter our debugger */ +} + + +/********************************************************************** + * SIGNAL_fault + * + * Segfault handler. + */ +static HANDLER_DEF(SIGNAL_fault) +{ + const char *fault = "Segmentation fault"; + HANDLER_INIT(); + +#ifdef __i386__ + +#if defined(TRAP_sig) && defined(CR2_sig) + if (TRAP_sig(HANDLER_CONTEXT) == 0x0e + && VIRTUAL_HandleFault( (LPVOID)CR2_sig(HANDLER_CONTEXT) )) + return; +#endif + + if (fnINSTR_EmulateInstruction && + fnINSTR_EmulateInstruction( HANDLER_CONTEXT ) + ) + return; + +#ifdef TRAP_sig + if (TRAP_sig( HANDLER_CONTEXT ) < NB_TRAPS) + fault = SIGNAL_traps[TRAP_sig( HANDLER_CONTEXT )]; +#endif + if (IS_SELECTOR_SYSTEM(CS_sig(HANDLER_CONTEXT))) + { + MSG("%s in 32-bit code (0x%08lx).\n", fault, EIP_sig(HANDLER_CONTEXT)); + } + else + { + MSG("%s in 16-bit code (%04x:%04lx).\n", fault, + (WORD)CS_sig(HANDLER_CONTEXT), EIP_sig(HANDLER_CONTEXT) ); + } +#ifdef CR2_sig + MSG("Fault address is 0x%08lx\n",CR2_sig(HANDLER_CONTEXT)); +#endif +#endif + + if (fnWINE_Debugger) + fnWINE_Debugger( signal, HANDLER_CONTEXT ); +} + + +/********************************************************************** + * SIGNAL_InitHandlers + */ +void SIGNAL_InitHandlers(void) +{ + SIGNAL_SetHandler( SIGINT, (void (*)())SIGNAL_break, 1); + SIGNAL_SetHandler( SIGSEGV, (void (*)())SIGNAL_fault, 1); + SIGNAL_SetHandler( SIGILL, (void (*)())SIGNAL_fault, 1); + SIGNAL_SetHandler( SIGFPE, (void (*)())SIGNAL_fault, 1); + SIGNAL_SetHandler( SIGTRAP, (void (*)())SIGNAL_trap, 1); /* debugger */ + SIGNAL_SetHandler( SIGHUP, (void (*)())SIGNAL_trap, 1); /* forced break*/ +#ifdef SIGBUS + SIGNAL_SetHandler( SIGBUS, (void (*)())SIGNAL_fault, 1); +#endif + return; +} + /********************************************************************** * SIGNAL_Init */ @@ -180,20 +317,10 @@ BOOL32 SIGNAL_Init(void) /* SIGNAL_SetHandler( SIGIO, (void (*)())WINSOCK_sigio, 0); */ SIGNAL_SetHandler( SIGIO, (void (*)())ASYNC_sigio, 0); #endif - sigaddset(&async_signal_set, SIGALRM); /* ignore SIGPIPE so that WINSOCK can get a EPIPE error instead */ signal (SIGPIPE, SIG_IGN); + SIGNAL_InitHandlers(); return TRUE; } - - -/********************************************************************** - * SIGNAL_MaskAsyncEvents - */ -void SIGNAL_MaskAsyncEvents( BOOL32 flag ) -{ - sigprocmask( (flag) ? SIG_BLOCK : SIG_UNBLOCK , &async_signal_set, NULL); -} - diff --git a/miscemu/instr.c b/miscemu/instr.c index 8b4877bc2a6..577644c5334 100644 --- a/miscemu/instr.c +++ b/miscemu/instr.c @@ -323,13 +323,6 @@ BOOL32 INSTR_EmulateInstruction( SIGCONTEXT *context ) SEGPTR gpHandler; BYTE *instr; - /* Check for page-fault */ - -#if defined(TRAP_sig) && defined(CR2_sig) - if (TRAP_sig(context) == 0x0e - && VIRTUAL_HandleFault( (LPVOID)CR2_sig(context) )) return TRUE; -#endif - long_op = long_addr = IS_SEL_32(context,CS_sig(context)); instr = (BYTE *)MK_PTR(context,CS_sig(context),EIP_sig(context)); if (!instr) return FALSE; diff --git a/miscemu/main.c b/miscemu/main.c index cda9fca106b..31b4b203007 100644 --- a/miscemu/main.c +++ b/miscemu/main.c @@ -32,10 +32,6 @@ BOOL32 MAIN_EmulatorInit(void) /* Initialize relay code */ if (!RELAY_Init()) return FALSE; - /* Initialize signal handling */ - if (!SIGNAL_InitEmulator()) return FALSE; - SIGNAL_Reinit=SIGNAL_InitEmulator; - /* Create the Win16 printer driver */ if (!WIN16DRV_Init()) return FALSE; @@ -150,8 +146,11 @@ int main( int argc, char *argv[] ) } } - /* Set up debugger callback routines */ - ctx_debug_call = ctx_debug; + /* Set up debugger/instruction emulation callback routines */ + ctx_debug_call = ctx_debug; + fnWINE_Debugger = wine_debug; + fnINSTR_EmulateInstruction = INSTR_EmulateInstruction; + if (Options.debug) TASK_AddTaskEntryBreakpoint = DEBUG_AddTaskEntryBreakpoint; @@ -177,4 +176,3 @@ int main( int argc, char *argv[] ) MSG( "main: Should never happen: returned from TASK_StartTask()\n" ); return 0; } -