#include #include extern void wine_debug(unsigned int*); #ifdef linux #include #include #endif struct sigaction segv_act; #ifdef linux struct sigcontext_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; }; #endif #ifdef linux static void win_fault(int signal, struct sigcontext_struct context){ struct sigcontext_struct *scp = &context; #else static void win_fault(int signal, int code, struct sigcontext *scp){ #endif wine_debug((unsigned int *) scp); /* Enter our debugger */ } char realtext[] = "This is what should really be printed\n"; int main(){ char * pnt; #ifdef linux segv_act.sa_handler = (__sighandler_t) win_fault; sigaction(SIGSEGV, &segv_act, NULL); #endif #if defined(__NetBSD__) || defined(__FreeBSD__) sigset_t sig_mask; sigemptyset(&sig_mask); segv_act.sa_handler = (__sighandler_t) win_fault; segv_act.sa_flags = 0; segv_act.sa_mask = sig_mask; if (sigaction(SIGSEGV, &segv_act, NULL) < 0) { perror("sigaction"); exit(1); } #endif fprintf(stderr,"%x\n", realtext); /* Now force a segmentation fault */ pnt = (char *) 0xc0000000; fprintf(stderr,"%s", pnt); return 0; } unsigned int * wine_files = NULL; GetEntryPointFromOrdinal(int wpnt, int ordinal) {}