forked from Mirrors/wine-wine
ntdll: Switch linux to siginfo-style signal handling.
parent
acb7f8abe2
commit
38cf3a4305
|
@ -65,60 +65,36 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef linux
|
#ifdef linux
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
unsigned short sc_gs, __gsh;
|
|
||||||
unsigned short sc_fs, __fsh;
|
|
||||||
unsigned short sc_es, __esh;
|
|
||||||
unsigned short sc_ds, __dsh;
|
|
||||||
unsigned long sc_edi;
|
|
||||||
unsigned long sc_esi;
|
|
||||||
unsigned long sc_ebp;
|
|
||||||
unsigned long sc_esp;
|
|
||||||
unsigned long sc_ebx;
|
|
||||||
unsigned long sc_edx;
|
|
||||||
unsigned long sc_ecx;
|
|
||||||
unsigned long sc_eax;
|
|
||||||
unsigned long sc_trapno;
|
|
||||||
unsigned long sc_err;
|
|
||||||
unsigned long sc_eip;
|
|
||||||
unsigned short sc_cs, __csh;
|
|
||||||
unsigned long sc_eflags;
|
|
||||||
unsigned long esp_at_signal;
|
|
||||||
unsigned short sc_ss, __ssh;
|
|
||||||
unsigned long i387;
|
|
||||||
unsigned long oldmask;
|
|
||||||
unsigned long cr2;
|
|
||||||
} volatile SIGCONTEXT;
|
|
||||||
|
|
||||||
#define HANDLER_DEF(name) void name( int __signal, SIGCONTEXT __context )
|
typedef ucontext_t SIGCONTEXT;
|
||||||
#define HANDLER_CONTEXT (&__context)
|
|
||||||
|
|
||||||
#define EAX_sig(context) ((context)->sc_eax)
|
#define HANDLER_DEF(name) void name( int __signal, siginfo_t *__siginfo, SIGCONTEXT *__context )
|
||||||
#define EBX_sig(context) ((context)->sc_ebx)
|
#define HANDLER_CONTEXT __context
|
||||||
#define ECX_sig(context) ((context)->sc_ecx)
|
|
||||||
#define EDX_sig(context) ((context)->sc_edx)
|
|
||||||
#define ESI_sig(context) ((context)->sc_esi)
|
|
||||||
#define EDI_sig(context) ((context)->sc_edi)
|
|
||||||
#define EBP_sig(context) ((context)->sc_ebp)
|
|
||||||
|
|
||||||
#define CS_sig(context) ((context)->sc_cs)
|
#define EAX_sig(context) ((context)->uc_mcontext.gregs[REG_EAX])
|
||||||
#define DS_sig(context) ((context)->sc_ds)
|
#define EBX_sig(context) ((context)->uc_mcontext.gregs[REG_EBX])
|
||||||
#define ES_sig(context) ((context)->sc_es)
|
#define ECX_sig(context) ((context)->uc_mcontext.gregs[REG_ECX])
|
||||||
#define FS_sig(context) ((context)->sc_fs)
|
#define EDX_sig(context) ((context)->uc_mcontext.gregs[REG_EDX])
|
||||||
#define GS_sig(context) ((context)->sc_gs)
|
#define ESI_sig(context) ((context)->uc_mcontext.gregs[REG_ESI])
|
||||||
#define SS_sig(context) ((context)->sc_ss)
|
#define EDI_sig(context) ((context)->uc_mcontext.gregs[REG_EDI])
|
||||||
|
#define EBP_sig(context) ((context)->uc_mcontext.gregs[REG_EBP])
|
||||||
|
#define ESP_sig(context) ((context)->uc_mcontext.gregs[REG_ESP])
|
||||||
|
|
||||||
#define TRAP_sig(context) ((context)->sc_trapno)
|
#define CS_sig(context) ((context)->uc_mcontext.gregs[REG_CS])
|
||||||
#define ERROR_sig(context) ((context)->sc_err)
|
#define DS_sig(context) ((context)->uc_mcontext.gregs[REG_DS])
|
||||||
#define EFL_sig(context) ((context)->sc_eflags)
|
#define ES_sig(context) ((context)->uc_mcontext.gregs[REG_ES])
|
||||||
|
#define SS_sig(context) ((context)->uc_mcontext.gregs[REG_SS])
|
||||||
|
#define FS_sig(context) ((context)->uc_mcontext.gregs[REG_FS])
|
||||||
|
#define GS_sig(context) ((context)->uc_mcontext.gregs[REG_GS])
|
||||||
|
|
||||||
#define EIP_sig(context) ((context)->sc_eip)
|
#define EFL_sig(context) ((context)->uc_mcontext.gregs[REG_EFL])
|
||||||
#define ESP_sig(context) ((context)->sc_esp)
|
#define EIP_sig(context) ((context)->uc_mcontext.gregs[REG_EIP])
|
||||||
|
#define TRAP_sig(context) ((context)->uc_mcontext.gregs[REG_TRAPNO])
|
||||||
|
#define ERROR_sig(context) ((context)->uc_mcontext.gregs[REG_ERR])
|
||||||
|
|
||||||
#define FPU_sig(context) ((FLOATING_SAVE_AREA*)((context)->i387))
|
#define FPU_sig(context) ((FLOATING_SAVE_AREA*)((context)->uc_mcontext.fpregs))
|
||||||
|
|
||||||
#define FAULT_ADDRESS ((void *)HANDLER_CONTEXT->cr2)
|
#define FAULT_ADDRESS (__siginfo->si_addr)
|
||||||
|
|
||||||
#define VM86_EAX 0 /* the %eax value while vm86_enter is executing */
|
#define VM86_EAX 0 /* the %eax value while vm86_enter is executing */
|
||||||
|
|
||||||
|
@ -1466,16 +1442,7 @@ BOOL SIGNAL_Init(void)
|
||||||
sigaddset( &sig_act.sa_mask, SIGINT );
|
sigaddset( &sig_act.sa_mask, SIGINT );
|
||||||
sigaddset( &sig_act.sa_mask, SIGUSR1 );
|
sigaddset( &sig_act.sa_mask, SIGUSR1 );
|
||||||
sigaddset( &sig_act.sa_mask, SIGUSR2 );
|
sigaddset( &sig_act.sa_mask, SIGUSR2 );
|
||||||
|
|
||||||
#if defined(linux)
|
|
||||||
sig_act.sa_flags = SA_RESTART;
|
|
||||||
#elif defined (__svr4__) || defined(_SCO_DS) || defined(__APPLE__) || \
|
|
||||||
defined(__NetBSD__) || defined(__OpenBSD__) || \
|
|
||||||
defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
|
|
||||||
sig_act.sa_flags = SA_SIGINFO | SA_RESTART;
|
sig_act.sa_flags = SA_SIGINFO | SA_RESTART;
|
||||||
#else
|
|
||||||
sig_act.sa_flags = 0;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef SA_ONSTACK
|
#ifdef SA_ONSTACK
|
||||||
sig_act.sa_flags |= SA_ONSTACK;
|
sig_act.sa_flags |= SA_ONSTACK;
|
||||||
|
|
Loading…
Reference in New Issue