I solved the GPF problem I mentioned in an earlier e-mail (see the information below the first patch).
The patch below is needed so the single step exception bits are cleared. It was easiest to use the predefined handler exception routine to do the work of executing the continue if the KGDB is request to step from kernel->user space. If there are no objections, I'll apply this patch after the review period. Signed-off-by: Jason Wessel <[EMAIL PROTECTED]> Index: linux-2.6.21/arch/i386/kernel/kgdb.c =================================================================== --- linux-2.6.21.orig/arch/i386/kernel/kgdb.c +++ linux-2.6.21/arch/i386/kernel/kgdb.c @@ -273,6 +273,7 @@ static int kgdb_notify(struct notifier_b * eat the exception and continue the process */ printk(KERN_ERR "KGDB: trap/step from kernel to user space, resuming...\n"); + kgdb_arch_handle_exception(args->trapnr, args->signr, args->err, "c","",regs); return NOTIFY_STOP; } else if (cmd == DIE_NMI_IPI || cmd == DIE_NMI || user_mode(regs) || (cmd == DIE_DEBUG && atomic_read(&debugger_active))) Index: linux-2.6.21/arch/x86_64/kernel/kgdb.c =================================================================== --- linux-2.6.21.orig/arch/x86_64/kernel/kgdb.c +++ linux-2.6.21/arch/x86_64/kernel/kgdb.c @@ -295,6 +295,7 @@ static int kgdb_notify(struct notifier_b * eat the exception and continue the process */ printk(KERN_ERR "KGDB: trap/step from kernel to user space, resuming...\n"); + kgdb_arch_handle_exception(args->trapnr, args->signr, args->err, "c","",regs); return NOTIFY_STOP; } else if (cmd == DIE_PAGE_FAULT || user_mode(regs) || cmd == DIE_NMI_IPI || (cmd == DIE_DEBUG && The real source of the GPF problem was a defect in gdb. If you execute a "next" operation that needs to single step out of the current frame and it results in a continue inside KGDB, the next breakpoint that is hit will not have the EIP decremented by 1 properly. gdb will continue single stepping because it is still looking for the end of the frame. Ultimately you will have some random fault. In my case it was a GPF due to the instruction addresses being off by 1 and the "random code" was accessing the machine in a bad way. The following is not really the right way to fix gdb, but it the patch illustrates the problem going away and that it is in fact gdb's fault. Another way to fix this in gdb would be to calculate the next instruction when single stepping and compare it with where the target actually stopped and then check the breakpoint list. No signed-off-by here because this is an example... Index: gdb-6.6/gdb/infrun.c =================================================================== --- gdb-6.6.orig/gdb/infrun.c +++ gdb-6.6/gdb/infrun.c @@ -1222,8 +1222,7 @@ adjust_pc_after_break (struct execution_ single-stepping in this case. */ if (ptid_equal (ecs->ptid, inferior_ptid) && currently_stepping (ecs)) { - if (prev_pc == breakpoint_pc - && software_breakpoint_inserted_here_p (breakpoint_pc)) + if (software_breakpoint_inserted_here_p (breakpoint_pc)) /* Hardware single-stepped a software breakpoint (as occures when the inferior is resumed with PC pointing at not-yet-hit software breakpoint). Since the ------------------------------------------------------------------------- This SF.net email is sponsored by DB2 Express Download DB2 Express C - the FREE version of DB2 express and take control of your XML. No limits. Just data. Click to get it now. http://sourceforge.net/powerbar/db2/ _______________________________________________ Kgdb-bugreport mailing list Kgdb-bugreport@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/kgdb-bugreport