From: Frank Rowand <frank.rowand@xxxxxxxxxxx> Add hooks so that the host can connect to KGDB or asynchronously invoke an already connected KGDB via a magic sysrq. This should work for most MIPS targets that support KGDB, though it has only been tested on the Toshiba RBTX4927. This can be useful to invoke an already connected KGDB for some types of system hang. It also allows normally booting without connecting to KGDB, then later connecting to KGDB if kernel debugging is desired. This functionality exists for PowerPC and sh. Signed-off-by: Frank Rowand <frank.rowand@xxxxxxxxxxx> --- arch/mips/kernel/gdb-stub.c | 26 26 + 0 - 0 ! 1 files changed, 26 insertions(+) Index: linux-2.6.24-rc7/arch/mips/kernel/gdb-stub.c =================================================================== --- linux-2.6.24-rc7.orig/arch/mips/kernel/gdb-stub.c +++ linux-2.6.24-rc7/arch/mips/kernel/gdb-stub.c @@ -131,6 +131,7 @@ #include <linux/spinlock.h> #include <linux/slab.h> #include <linux/reboot.h> +#include <linux/sysrq.h> #include <asm/asm.h> #include <asm/cacheflush.h> @@ -1154,3 +1155,28 @@ static int __init register_gdb_console(v console_initcall(register_gdb_console); #endif + +#ifdef CONFIG_MAGIC_SYSRQ +static void sysrq_handle_gdb(int key, struct tty_struct *tty) +{ + if (!initialized) { + printk(KERN_ALERT "Wait for gdb client connection ...\n"); + set_debug_traps(); + } + + breakpoint(); +} +static struct sysrq_key_op sysrq_gdb_op = { + .handler = sysrq_handle_gdb, + .help_msg = "Gdb", + .action_msg = "GDB", +}; + +static int gdb_register_sysrq(void) +{ + printk(KERN_INFO "Registering GDB sysrq handler\n"); + register_sysrq_key('g', &sysrq_gdb_op); + return 0; +} +module_init(gdb_register_sysrq); +#endif