X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;ds=inline;f=include%2Fasm-sh%2Fbug.h;h=2f89dd06d0cdbb140adf5d518e895af28a971e7f;hb=97bf2856c6014879bd04983a3e9dfcdac1e7fe85;hp=ea41e17bb9593deb712ec75e93fd8a59ac33655c;hpb=c7b5ebbddf7bcd3651947760f423e3783bbe6573;p=linux-2.6.git diff --git a/include/asm-sh/bug.h b/include/asm-sh/bug.h index ea41e17bb..2f89dd06d 100644 --- a/include/asm-sh/bug.h +++ b/include/asm-sh/bug.h @@ -1,17 +1,54 @@ #ifndef __ASM_SH_BUG_H #define __ASM_SH_BUG_H -#include - -/* - * Tell the user there is some problem. - */ -#define BUG() do { \ - printk("kernel BUG at %s:%d!\n", __FILE__, __LINE__); \ - asm volatile("nop"); \ +#ifdef CONFIG_BUG + +struct bug_frame { + unsigned short opcode; + unsigned short line; + const char *file; + const char *func; +}; + +struct pt_regs; + +extern void handle_BUG(struct pt_regs *); + +#define TRAPA_BUG_OPCODE 0xc33e /* trapa #0x3e */ + +#ifdef CONFIG_DEBUG_BUGVERBOSE + +#define BUG() \ +do { \ + __asm__ __volatile__ ( \ + ".align 2\n\t" \ + ".short %O0\n\t" \ + ".short %O1\n\t" \ + ".long %O2\n\t" \ + ".long %O3\n\t" \ + : \ + : "n" (TRAPA_BUG_OPCODE), \ + "i" (__LINE__), "X" (__FILE__), \ + "X" (__FUNCTION__)); \ } while (0) +#else + +#define BUG() \ +do { \ + __asm__ __volatile__ ( \ + ".align 2\n\t" \ + ".short %O0\n\t" \ + : \ + : "n" (TRAPA_BUG_OPCODE)); \ +} while (0) + +#endif /* CONFIG_DEBUG_BUGVERBOSE */ + #define HAVE_ARCH_BUG + +#endif /* CONFIG_BUG */ + #include -#endif +#endif /* __ASM_SH_BUG_H */