| #include <signal.h> | |
| #include <stdio.h> | |
| extern void wine_debug(unsigned int*); | |
| #ifdef linux | |
| #include <linux/sched.h> | |
| #include <asm/system.h> | |
| #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) {} |