| #ifndef __ASM_SH_BUG_H |
| #define __ASM_SH_BUG_H |
| |
| #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 <asm-generic/bug.h> |
| |
| #endif /* __ASM_SH_BUG_H */ |