Loading arch/microblaze/include/asm/exceptions.h +8 −16 Original line number Diff line number Diff line /* * Preliminary support for HW exception handing for Microblaze * * Copyright (C) 2008 Michal Simek * Copyright (C) 2008 PetaLogix * Copyright (C) 2008-2009 Michal Simek <monstr@monstr.eu> * Copyright (C) 2008-2009 PetaLogix * Copyright (C) 2005 John Williams <jwilliams@itee.uq.edu.au> * * This file is subject to the terms and conditions of the GNU General Loading Loading @@ -64,21 +64,13 @@ asmlinkage void full_exception(struct pt_regs *regs, unsigned int type, void die(const char *str, struct pt_regs *fp, long err); void _exception(int signr, struct pt_regs *regs, int code, unsigned long addr); #if defined(CONFIG_XMON) extern void xmon(struct pt_regs *regs); extern int xmon_bpt(struct pt_regs *regs); extern int xmon_sstep(struct pt_regs *regs); extern int xmon_iabr_match(struct pt_regs *regs); extern int xmon_dabr_match(struct pt_regs *regs); extern void (*xmon_fault_handler)(struct pt_regs *regs); #ifdef CONFIG_MMU void __bug(const char *file, int line, void *data); int bad_trap(int trap_num, struct pt_regs *regs); int debug_trap(struct pt_regs *regs); #endif /* CONFIG_MMU */ void (*debugger)(struct pt_regs *regs) = xmon; int (*debugger_bpt)(struct pt_regs *regs) = xmon_bpt; int (*debugger_sstep)(struct pt_regs *regs) = xmon_sstep; int (*debugger_iabr_match)(struct pt_regs *regs) = xmon_iabr_match; int (*debugger_dabr_match)(struct pt_regs *regs) = xmon_dabr_match; void (*debugger_fault_handler)(struct pt_regs *regs); #elif defined(CONFIG_KGDB) #if defined(CONFIG_KGDB) void (*debugger)(struct pt_regs *regs); int (*debugger_bpt)(struct pt_regs *regs); int (*debugger_sstep)(struct pt_regs *regs); Loading arch/microblaze/kernel/traps.c +34 −0 Original line number Diff line number Diff line Loading @@ -97,3 +97,37 @@ void dump_stack(void) show_stack(NULL, NULL); } EXPORT_SYMBOL(dump_stack); #ifdef CONFIG_MMU void __bug(const char *file, int line, void *data) { if (data) printk(KERN_CRIT "kernel BUG at %s:%d (data = %p)!\n", file, line, data); else printk(KERN_CRIT "kernel BUG at %s:%d!\n", file, line); machine_halt(); } int bad_trap(int trap_num, struct pt_regs *regs) { printk(KERN_CRIT "unimplemented trap %d called at 0x%08lx, pid %d!\n", trap_num, regs->pc, current->pid); return -ENOSYS; } int debug_trap(struct pt_regs *regs) { int i; printk(KERN_CRIT "debug trap\n"); for (i = 0; i < 32; i++) { /* printk("r%i:%08X\t",i,regs->gpr[i]); */ if ((i % 4) == 3) printk(KERN_CRIT "\n"); } printk(KERN_CRIT "pc:%08lX\tmsr:%08lX\n", regs->pc, regs->msr); return -ENOSYS; } #endif Loading
arch/microblaze/include/asm/exceptions.h +8 −16 Original line number Diff line number Diff line /* * Preliminary support for HW exception handing for Microblaze * * Copyright (C) 2008 Michal Simek * Copyright (C) 2008 PetaLogix * Copyright (C) 2008-2009 Michal Simek <monstr@monstr.eu> * Copyright (C) 2008-2009 PetaLogix * Copyright (C) 2005 John Williams <jwilliams@itee.uq.edu.au> * * This file is subject to the terms and conditions of the GNU General Loading Loading @@ -64,21 +64,13 @@ asmlinkage void full_exception(struct pt_regs *regs, unsigned int type, void die(const char *str, struct pt_regs *fp, long err); void _exception(int signr, struct pt_regs *regs, int code, unsigned long addr); #if defined(CONFIG_XMON) extern void xmon(struct pt_regs *regs); extern int xmon_bpt(struct pt_regs *regs); extern int xmon_sstep(struct pt_regs *regs); extern int xmon_iabr_match(struct pt_regs *regs); extern int xmon_dabr_match(struct pt_regs *regs); extern void (*xmon_fault_handler)(struct pt_regs *regs); #ifdef CONFIG_MMU void __bug(const char *file, int line, void *data); int bad_trap(int trap_num, struct pt_regs *regs); int debug_trap(struct pt_regs *regs); #endif /* CONFIG_MMU */ void (*debugger)(struct pt_regs *regs) = xmon; int (*debugger_bpt)(struct pt_regs *regs) = xmon_bpt; int (*debugger_sstep)(struct pt_regs *regs) = xmon_sstep; int (*debugger_iabr_match)(struct pt_regs *regs) = xmon_iabr_match; int (*debugger_dabr_match)(struct pt_regs *regs) = xmon_dabr_match; void (*debugger_fault_handler)(struct pt_regs *regs); #elif defined(CONFIG_KGDB) #if defined(CONFIG_KGDB) void (*debugger)(struct pt_regs *regs); int (*debugger_bpt)(struct pt_regs *regs); int (*debugger_sstep)(struct pt_regs *regs); Loading
arch/microblaze/kernel/traps.c +34 −0 Original line number Diff line number Diff line Loading @@ -97,3 +97,37 @@ void dump_stack(void) show_stack(NULL, NULL); } EXPORT_SYMBOL(dump_stack); #ifdef CONFIG_MMU void __bug(const char *file, int line, void *data) { if (data) printk(KERN_CRIT "kernel BUG at %s:%d (data = %p)!\n", file, line, data); else printk(KERN_CRIT "kernel BUG at %s:%d!\n", file, line); machine_halt(); } int bad_trap(int trap_num, struct pt_regs *regs) { printk(KERN_CRIT "unimplemented trap %d called at 0x%08lx, pid %d!\n", trap_num, regs->pc, current->pid); return -ENOSYS; } int debug_trap(struct pt_regs *regs) { int i; printk(KERN_CRIT "debug trap\n"); for (i = 0; i < 32; i++) { /* printk("r%i:%08X\t",i,regs->gpr[i]); */ if ((i % 4) == 3) printk(KERN_CRIT "\n"); } printk(KERN_CRIT "pc:%08lX\tmsr:%08lX\n", regs->pc, regs->msr); return -ENOSYS; } #endif