• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2004-2009 Analog Devices Inc.
3  *
4  * Licensed under the GPL-2 or later.
5  */
6 
7 #ifndef _BLACKFIN_BUG_H
8 #define _BLACKFIN_BUG_H
9 
10 #ifdef CONFIG_BUG
11 
12 /*
13  * This can be any undefined 16-bit opcode, meaning
14  * ((opcode & 0xc000) != 0xc000)
15  * Anything from 0x0001 to 0x000A (inclusive) will work
16  */
17 #define BFIN_BUG_OPCODE	0x0001
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"(BFIN_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"(BFIN_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
70 
71 #include <asm-generic/bug.h>
72 
73 #endif
74