1 /*
2  * Copyright (C) 2006 Atmel Corporation
3  *
4  * This program is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License version 2 as
6  * published by the Free Software Foundation.
7  */
8 #ifndef __ASM_AVR32_BUG_H
9 #define __ASM_AVR32_BUG_H
10 
11 #ifdef CONFIG_BUG
12 
13 /*
14  * According to our Chief Architect, this compact opcode is very
15  * unlikely to ever be implemented.
16  */
17 #define AVR32_BUG_OPCODE	0x5df0
18 
19 #ifdef CONFIG_DEBUG_BUGVERBOSE
20 
21 #define _BUG_OR_WARN(flags)						\
22 	asm volatile(							\
23 		"1:	.hword	%0\n"					\
24 		"	.section __bug_table,\"a\",@progbits\n"		\
25 		"2:	.long	1b\n"					\
26 		"	.long	%1\n"					\
27 		"	.short	%2\n"					\
28 		"	.short	%3\n"					\
29 		"	.org	2b + %4\n"				\
30 		"	.previous"					\
31 		:							\
32 		: "i"(AVR32_BUG_OPCODE), "i"(__FILE__),			\
33 		  "i"(__LINE__), "i"(flags),				\
34 		  "i"(sizeof(struct bug_entry)))
35 
36 #else
37 
38 #define _BUG_OR_WARN(flags)						\
39 	asm volatile(							\
40 		"1:	.hword	%0\n"					\
41 		"	.section __bug_table,\"a\",@progbits\n"		\
42 		"2:	.long	1b\n"					\
43 		"	.short	%1\n"					\
44 		"	.org	2b + %2\n"				\
45 		"	.previous"					\
46 		:							\
47 		: "i"(AVR32_BUG_OPCODE), "i"(flags),			\
48 		  "i"(sizeof(struct bug_entry)))
49 
50 #endif /* CONFIG_DEBUG_BUGVERBOSE */
51 
52 #define BUG()								\
53 	do {								\
54 		_BUG_OR_WARN(0);					\
55 		unreachable();						\
56 	} while (0)
57 
58 #define WARN_ON(condition)							\
59 	({								\
60 		int __ret_warn_on = !!(condition);			\
61 		if (unlikely(__ret_warn_on))				\
62 			_BUG_OR_WARN(BUGFLAG_WARNING);			\
63 		unlikely(__ret_warn_on);				\
64 	})
65 
66 #define HAVE_ARCH_BUG
67 #define HAVE_ARCH_WARN_ON
68 
69 #endif /* CONFIG_BUG */
70 
71 #include <asm-generic/bug.h>
72 
73 struct pt_regs;
74 void die(const char *str, struct pt_regs *regs, long err);
75 void _exception(long signr, struct pt_regs *regs, int code,
76 		unsigned long addr);
77 
78 #endif /* __ASM_AVR32_BUG_H */
79