All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 2.6.26 2/25] mdb: Merkey's Kernel Debugger
@ 2008-08-04  2:10 jmerkey
  2008-08-06  1:35 ` Andi Kleen
  0 siblings, 1 reply; 5+ messages in thread
From: jmerkey @ 2008-08-04  2:10 UTC (permalink / raw)
  To: linux-kernel

Netware Style Debugger for Linux written by Jeffrey Vernon Merkey

--- linux-2.6.26/arch/x86/kernel/traps_32.c	2008-07-13
15:51:29.000000000 -0600
+++ linux-2.6.26-mdb/arch/x86/kernel/traps_32.c	2008-08-03
12:49:01.000000000 -0600
@@ -45,6 +45,16 @@
 #include <linux/edac.h>
 #endif

+#ifdef CONFIG_MDB
+#define DEBUGGER_EXCEPTION        1
+#define NMI_EXCEPTION             2
+#define BREAKPOINT_EXCEPTION      3
+#define SOFTWARE_EXCEPTION       22
+
+extern unsigned char *mdb_oops;
+extern int mdb(int reason, int error, void *frame);
+#endif
+
 #include <asm/arch_hooks.h>
 #include <asm/stacktrace.h>
 #include <asm/processor.h>
@@ -467,6 +477,10 @@
 	die.lock_owner = -1;
 	add_taint(TAINT_DIE);
 	__raw_spin_unlock(&die.lock);
+#ifdef	CONFIG_MDB
+        mdb_oops = (unsigned char *)str;
+        mdb(SOFTWARE_EXCEPTION, err, regs);
+#endif
 	raw_local_irq_restore(flags);

 	if (!regs)
@@ -592,7 +606,7 @@
 }

 DO_VM86_ERROR_INFO(0, SIGFPE,  "divide error", divide_error, FPE_INTDIV,
regs->ip)
-#ifndef CONFIG_KPROBES
+#if !defined(CONFIG_KPROBES) && !defined(CONFIG_MDB)
 DO_VM86_ERROR(3, SIGTRAP, "int3", int3)
 #endif
 DO_VM86_ERROR(4, SIGSEGV, "overflow", overflow)
@@ -733,6 +747,9 @@
 {
 	if (notify_die(DIE_NMIUNKNOWN, "nmi", regs, reason, 2, SIGINT) ==
NOTIFY_STOP)
 		return;
+#ifdef	CONFIG_MDB
+        mdb(NMI_EXCEPTION, reason, regs); // nmi is code 2
+#endif
 #ifdef CONFIG_MCA
 	/*
 	 * Might actually be able to figure out what the guilty party
@@ -771,6 +788,9 @@
 	printk(" on CPU%d, ip %08lx, registers:\n",
 		smp_processor_id(), regs->ip);
 	show_registers(regs);
+#ifdef	CONFIG_MDB
+        mdb(NMI_EXCEPTION, 0, regs); // nmi is code 2
+#endif
 	console_silent();
 	spin_unlock(&nmi_print_lock);
 	bust_spinlocks(0);
@@ -795,6 +815,10 @@
 	if (!smp_processor_id())
 		reason = get_nmi_reason();

+#if defined(CONFIG_SMP) && defined(CONFIG_MDB)
+        if (mdb(NMI_EXCEPTION, 0, regs))
+           return;
+#endif
 	if (!(reason & 0xc0)) {
 		if (notify_die(DIE_NMI_IPI, "nmi_ipi", regs, reason, 2, SIGINT)
 							== NOTIFY_STOP)
@@ -860,6 +884,10 @@
 #ifdef CONFIG_KPROBES
 void __kprobes do_int3(struct pt_regs *regs, long error_code)
 {
+#ifdef	CONFIG_MDB
+        if (mdb(BREAKPOINT_EXCEPTION, error_code, regs))
+           return;
+#endif
 	trace_hardirqs_fixup();

 	if (notify_die(DIE_INT3, "int3", regs, error_code, 3, SIGTRAP)
@@ -875,6 +903,16 @@
 }
 #endif

+#if defined(CONFIG_MDB) && !defined(CONFIG_KPROBES)
+fastcall void do_int3(struct pt_regs * regs, long error_code)
+{
+#ifdef	CONFIG_MDB
+        if (mdb(BREAKPOINT_EXCEPTION, error_code, regs))
+           return;
+#endif
+	do_trap(3, SIGTRAP, "int3", 1, regs, error_code, NULL);
+}
+#endif	/* CONFIG_KDB && !CONFIG_KPROBES */
 /*
  * Our handling of the processor debug registers is non-trivial.
  * We do not clear them on entry and exit from the kernel. Therefore
@@ -905,6 +943,10 @@
 	trace_hardirqs_fixup();

 	get_debugreg(condition, 6);
+#ifdef	CONFIG_MDB
+        if (mdb(DEBUGGER_EXCEPTION, error_code, regs))
+           return;
+#endif

 	/*
 	 * The processor cleared BTF, so don't mark that we need it set.

By making a contribution to this project, I certify that the contribution
was created in whole or in part by me and I have the right to submit it
under the open source license indicated in the file

Jeffrey Vernon Merkey






^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH 2.6.26 2/25] mdb: Merkey's Kernel Debugger
  2008-08-06  1:35 ` Andi Kleen
@ 2008-08-06  1:24   ` jmerkey
  2008-08-06  2:01     ` Andi Kleen
  0 siblings, 1 reply; 5+ messages in thread
From: jmerkey @ 2008-08-06  1:24 UTC (permalink / raw)
  To: Andi Kleen; +Cc: jmerkey, linux-kernel


I'll post some patches with these changes and submit it as a module.  I
will of course need to patch the kernel to introduce the die notifiers
where
they are not and there's the issue of cross call NMI to stop other
processors on SMP.

That's the real issues, Andi, is the xcall stuff for IPC to control all
the processors.

Jeff


> jmerkey@wolfmountaingroup.com writes:
>> regs->ip)
>> -#ifndef CONFIG_KPROBES
>> +#if !defined(CONFIG_KPROBES) && !defined(CONFIG_MDB)
>>  DO_VM86_ERROR(3, SIGTRAP, "int3", int3)
>>  #endif
>>  DO_VM86_ERROR(4, SIGSEGV, "overflow", overflow)
>> @@ -733,6 +747,9 @@
>>  {
>>  	if (notify_die(DIE_NMIUNKNOWN, "nmi", regs, reason, 2, SIGINT) ==
>> NOTIFY_STOP)
>>  		return;
>> +#ifdef	CONFIG_MDB
>> +        mdb(NMI_EXCEPTION, reason, regs); // nmi is code 2
>> +#endif
>
> This should be all using die notifiers (register_die etc.) like the
> other kernel debuggers, not own hooks. As you can see there is already
> a notify_die call around basically all the places you put in a mdb()
> call, and you can just hook in there. If your other interfaces to the core
> kernel are clean enough this would even allow to use your debugger as a
> module.
>
> -Andi
>



^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH 2.6.26 2/25] mdb: Merkey's Kernel Debugger
  2008-08-04  2:10 [PATCH 2.6.26 2/25] mdb: Merkey's Kernel Debugger jmerkey
@ 2008-08-06  1:35 ` Andi Kleen
  2008-08-06  1:24   ` jmerkey
  0 siblings, 1 reply; 5+ messages in thread
From: Andi Kleen @ 2008-08-06  1:35 UTC (permalink / raw)
  To: jmerkey; +Cc: linux-kernel

jmerkey@wolfmountaingroup.com writes:
> regs->ip)
> -#ifndef CONFIG_KPROBES
> +#if !defined(CONFIG_KPROBES) && !defined(CONFIG_MDB)
>  DO_VM86_ERROR(3, SIGTRAP, "int3", int3)
>  #endif
>  DO_VM86_ERROR(4, SIGSEGV, "overflow", overflow)
> @@ -733,6 +747,9 @@
>  {
>  	if (notify_die(DIE_NMIUNKNOWN, "nmi", regs, reason, 2, SIGINT) ==
> NOTIFY_STOP)
>  		return;
> +#ifdef	CONFIG_MDB
> +        mdb(NMI_EXCEPTION, reason, regs); // nmi is code 2
> +#endif

This should be all using die notifiers (register_die etc.) like the 
other kernel debuggers, not own hooks. As you can see there is already
a notify_die call around basically all the places you put in a mdb()
call, and you can just hook in there. If your other interfaces to the core 
kernel are clean enough this would even allow to use your debugger as a module.

-Andi

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH 2.6.26 2/25] mdb: Merkey's Kernel Debugger
  2008-08-06  2:01     ` Andi Kleen
@ 2008-08-06  1:45       ` jmerkey
  0 siblings, 0 replies; 5+ messages in thread
From: jmerkey @ 2008-08-06  1:45 UTC (permalink / raw)
  To: Andi Kleen; +Cc: jmerkey, Andi Kleen, linux-kernel

> On Tue, Aug 05, 2008 at 07:24:20PM -0600, jmerkey@wolfmountaingroup.com
> wrote:
>>
>> I'll post some patches with these changes and submit it as a module.  I
>> will of course need to patch the kernel to introduce the die notifiers
>> where
>> they are not and there's the issue of cross call NMI to stop other
>> processors on SMP.
>>
>> That's the real issues, Andi, is the xcall stuff for IPC to control all
>> the processors.
>
> NMIs have die notifiers too. That said a cleaner way would be to
> generalize
> the synchronization code already in kdump and reuse that.
>
> -Andi
>

I can get that done.  debuggers as modules makes more sense anyway.

Jeff





^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH 2.6.26 2/25] mdb: Merkey's Kernel Debugger
  2008-08-06  1:24   ` jmerkey
@ 2008-08-06  2:01     ` Andi Kleen
  2008-08-06  1:45       ` jmerkey
  0 siblings, 1 reply; 5+ messages in thread
From: Andi Kleen @ 2008-08-06  2:01 UTC (permalink / raw)
  To: jmerkey; +Cc: Andi Kleen, linux-kernel

On Tue, Aug 05, 2008 at 07:24:20PM -0600, jmerkey@wolfmountaingroup.com wrote:
> 
> I'll post some patches with these changes and submit it as a module.  I
> will of course need to patch the kernel to introduce the die notifiers
> where
> they are not and there's the issue of cross call NMI to stop other
> processors on SMP.
> 
> That's the real issues, Andi, is the xcall stuff for IPC to control all
> the processors.

NMIs have die notifiers too. That said a cleaner way would be to generalize
the synchronization code already in kdump and reuse that.

-Andi

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2008-08-06  2:21 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-08-04  2:10 [PATCH 2.6.26 2/25] mdb: Merkey's Kernel Debugger jmerkey
2008-08-06  1:35 ` Andi Kleen
2008-08-06  1:24   ` jmerkey
2008-08-06  2:01     ` Andi Kleen
2008-08-06  1:45       ` jmerkey

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.