Date: Tue, 12 Oct 1999 10:24:04 +0200 (IST) From: Eli Zaretskii X-Sender: eliz AT is To: djgpp-workers AT delorie DOT com Subject: Debugging under emulator Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Reply-To: djgpp-workers AT delorie DOT com With the following two patches to dbgcom.c and go32-nat.c, I can run an FP program under GDB when the emulator is in use. There are still problems to solve: if I set a breakpoint, the debuggee gets SIGSEGV when I continue it after the breakpoint. But at least I was able to run a large number-cruncher under GDB, and it produced correct results (although abyssmally slow). If you try this, remember to say "handle SIGEMT noprint nostop" before running the debuggee, otherwise each SIGNOFP will stop the debuggee and GDB will announce it. The patch for dbgcom.c is already checked into the CVS tree. *** src/debug/common/dbgcom.c1~ Sat Oct 9 16:40:46 1999 --- src/debug/common/dbgcom.c Sun Oct 10 19:48:22 1999 *************** void _clear_break_DPMI(void) *** 297,302 **** --- 297,304 ---- static __dpmi_paddr old_i31,old_i21,user_i31,user_i21; static int user_int_set = 0; static __dpmi_paddr my_i9,user_i9,my_i8,user_i8; + static void (*oldNOFP)(int); + static void dbgsig(int); static void hook_dpmi(void) { *************** static void hook_dpmi(void) *** 341,346 **** --- 343,349 ---- __dpmi_set_processor_exception_handler_vector(i,&app_handler[i]); } */ load_npx(); + oldNOFP = signal(SIGNOFP, dbgsig); /* if we run under FP emulation */ /* Crtl-C renders app code unreadable */ __djgpp_app_DS = app_ds; } *************** static void unhook_dpmi(void) *** 1009,1014 **** --- 1012,1018 ---- int i; /* Crtl-C renders debugger code unreadable */ __djgpp_app_DS = __djgpp_our_DS; + signal(SIGNOFP, oldNOFP); /* in case we run under FP emulation */ save_npx(); /* save app i31 and i21 if changed */ __dpmi_get_protected_mode_interrupt_vector(0x31, &user_i31); 1999-10-11 Eli Zaretskii * go32-nat.c (sig_map): Map exception 7 (no coprocessor) to SIGEMT, to support debugging on FPU-less machines. *** gdb/go32-nat.~16 Tue Aug 31 18:18:28 1999 --- gdb/go32-nat.c Sat Oct 9 14:25:46 1999 *************** sig_map[] = *** 345,351 **** 4, TARGET_SIGNAL_FPE, 5, TARGET_SIGNAL_SEGV, 6, TARGET_SIGNAL_ILL, ! 7, TARGET_SIGNAL_FPE, 8, TARGET_SIGNAL_SEGV, 9, TARGET_SIGNAL_SEGV, 10, TARGET_SIGNAL_BUS, --- 345,351 ---- 4, TARGET_SIGNAL_FPE, 5, TARGET_SIGNAL_SEGV, 6, TARGET_SIGNAL_ILL, ! 7, TARGET_SIGNAL_EMT, 8, TARGET_SIGNAL_SEGV, 9, TARGET_SIGNAL_SEGV, 10, TARGET_SIGNAL_BUS,