| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | #ifndef __ASM_SH_BUG_H
 | 
					
						
							|  |  |  | #define __ASM_SH_BUG_H
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-05-08 12:14:54 +09:00
										 |  |  | #define TRAPA_BUG_OPCODE	0xc33e	/* trapa #0x3e */
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-11-08 18:58:00 +09:00
										 |  |  | #ifdef CONFIG_GENERIC_BUG
 | 
					
						
							| 
									
										
										
										
											2007-03-08 19:41:21 +09:00
										 |  |  | #define HAVE_ARCH_BUG
 | 
					
						
							|  |  |  | #define HAVE_ARCH_WARN_ON
 | 
					
						
							| 
									
										
										
										
											2006-12-08 17:41:43 +09:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-03-08 19:41:21 +09:00
										 |  |  | /**
 | 
					
						
							|  |  |  |  * _EMIT_BUG_ENTRY | 
					
						
							|  |  |  |  * %1 - __FILE__ | 
					
						
							|  |  |  |  * %2 - __LINE__ | 
					
						
							|  |  |  |  * %3 - trap type | 
					
						
							|  |  |  |  * %4 - sizeof(struct bug_entry) | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * The trapa opcode itself sits in %0. | 
					
						
							|  |  |  |  * The %O notation is used to avoid # generation. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * The offending file and line are encoded in the __bug_table section. | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2006-12-08 17:41:43 +09:00
										 |  |  | #ifdef CONFIG_DEBUG_BUGVERBOSE
 | 
					
						
							| 
									
										
										
										
											2007-03-08 19:41:21 +09:00
										 |  |  | #define _EMIT_BUG_ENTRY				\
 | 
					
						
							|  |  |  | 	"\t.pushsection __bug_table,\"a\"\n"	\ | 
					
						
							|  |  |  | 	"2:\t.long 1b, %O1\n"			\ | 
					
						
							|  |  |  | 	"\t.short %O2, %O3\n"			\ | 
					
						
							|  |  |  | 	"\t.org 2b+%O4\n"			\ | 
					
						
							|  |  |  | 	"\t.popsection\n" | 
					
						
							|  |  |  | #else
 | 
					
						
							|  |  |  | #define _EMIT_BUG_ENTRY				\
 | 
					
						
							|  |  |  | 	"\t.pushsection __bug_table,\"a\"\n"	\ | 
					
						
							|  |  |  | 	"2:\t.long 1b\n"			\ | 
					
						
							|  |  |  | 	"\t.short %O3\n"			\ | 
					
						
							|  |  |  | 	"\t.org 2b+%O4\n"			\ | 
					
						
							|  |  |  | 	"\t.popsection\n" | 
					
						
							|  |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2006-12-08 17:41:43 +09:00
										 |  |  | 
 | 
					
						
							|  |  |  | #define BUG()						\
 | 
					
						
							|  |  |  | do {							\ | 
					
						
							|  |  |  | 	__asm__ __volatile__ (				\ | 
					
						
							| 
									
										
										
										
											2007-03-08 19:41:21 +09:00
										 |  |  | 		"1:\t.short %O0\n"			\ | 
					
						
							|  |  |  | 		_EMIT_BUG_ENTRY				\ | 
					
						
							|  |  |  | 		 :					\ | 
					
						
							|  |  |  | 		 : "n" (TRAPA_BUG_OPCODE),		\ | 
					
						
							|  |  |  | 		   "i" (__FILE__),			\ | 
					
						
							|  |  |  | 		   "i" (__LINE__), "i" (0),		\ | 
					
						
							|  |  |  | 		   "i" (sizeof(struct bug_entry)));	\ | 
					
						
							| 
									
										
										
										
											2006-12-08 17:41:43 +09:00
										 |  |  | } while (0) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-03-08 19:41:21 +09:00
										 |  |  | #define __WARN()					\
 | 
					
						
							|  |  |  | do {							\ | 
					
						
							|  |  |  | 	__asm__ __volatile__ (				\ | 
					
						
							|  |  |  | 		"1:\t.short %O0\n"			\ | 
					
						
							|  |  |  | 		 _EMIT_BUG_ENTRY			\ | 
					
						
							|  |  |  | 		 :					\ | 
					
						
							|  |  |  | 		 : "n" (TRAPA_BUG_OPCODE),		\ | 
					
						
							|  |  |  | 		   "i" (__FILE__),			\ | 
					
						
							|  |  |  | 		   "i" (__LINE__),			\ | 
					
						
							|  |  |  | 		   "i" (BUGFLAG_WARNING),		\ | 
					
						
							|  |  |  | 		   "i" (sizeof(struct bug_entry)));	\ | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | } while (0) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-03-08 19:41:21 +09:00
										 |  |  | #define WARN_ON(x) ({						\
 | 
					
						
							| 
									
										
										
										
											2007-08-02 00:18:38 +02:00
										 |  |  | 	int __ret_warn_on = !!(x);				\ | 
					
						
							| 
									
										
										
										
											2007-03-08 19:41:21 +09:00
										 |  |  | 	if (__builtin_constant_p(__ret_warn_on)) {		\ | 
					
						
							|  |  |  | 		if (__ret_warn_on)				\ | 
					
						
							|  |  |  | 			__WARN();				\ | 
					
						
							|  |  |  | 	} else {						\ | 
					
						
							|  |  |  | 		if (unlikely(__ret_warn_on))			\ | 
					
						
							|  |  |  | 			__WARN();				\ | 
					
						
							|  |  |  | 	}							\ | 
					
						
							|  |  |  | 	unlikely(__ret_warn_on);				\ | 
					
						
							|  |  |  | }) | 
					
						
							| 
									
										
										
										
											2006-12-08 17:41:43 +09:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-11-08 18:58:00 +09:00
										 |  |  | #endif /* CONFIG_GENERIC_BUG */
 | 
					
						
							| 
									
										
										
										
											2005-05-01 08:59:01 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | #include <asm-generic/bug.h>
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-12-08 17:41:43 +09:00
										 |  |  | #endif /* __ASM_SH_BUG_H */
 |