xref: /openbmc/linux/arch/parisc/include/asm/bug.h (revision 5bdd0ced)
1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */
2deae26bfSKyle McMartin #ifndef _PARISC_BUG_H
3deae26bfSKyle McMartin #define _PARISC_BUG_H
4deae26bfSKyle McMartin 
5f1ea8b66SJames Bottomley #include <linux/kernel.h>	/* for BUGFLAG_TAINT */
6f1ea8b66SJames Bottomley 
7deae26bfSKyle McMartin /*
8deae26bfSKyle McMartin  * Tell the user there is some problem.
9deae26bfSKyle McMartin  * The offending file and line are encoded in the __bug_table section.
10deae26bfSKyle McMartin  */
11deae26bfSKyle McMartin 
12deae26bfSKyle McMartin #ifdef CONFIG_BUG
13deae26bfSKyle McMartin #define HAVE_ARCH_BUG
14deae26bfSKyle McMartin #define HAVE_ARCH_WARN_ON
15deae26bfSKyle McMartin 
16deae26bfSKyle McMartin /* the break instruction is used as BUG() marker.  */
17deae26bfSKyle McMartin #define	PARISC_BUG_BREAK_ASM	"break 0x1f, 0x1fff"
18deae26bfSKyle McMartin #define	PARISC_BUG_BREAK_INSN	0x03ffe01f  /* PARISC_BUG_BREAK_ASM */
19deae26bfSKyle McMartin 
2016496064SHelge Deller #ifdef CONFIG_GENERIC_BUG_RELATIVE_POINTERS
2116496064SHelge Deller # define __BUG_REL(val) ".word " __stringify(val) " - ."
22deae26bfSKyle McMartin #else
2316496064SHelge Deller # define __BUG_REL(val) ".word " __stringify(val)
24deae26bfSKyle McMartin #endif
25deae26bfSKyle McMartin 
2616496064SHelge Deller 
27deae26bfSKyle McMartin #ifdef CONFIG_DEBUG_BUGVERBOSE
28deae26bfSKyle McMartin #define BUG()								\
29deae26bfSKyle McMartin 	do {								\
30deae26bfSKyle McMartin 		asm volatile("\n"					\
31deae26bfSKyle McMartin 			     "1:\t" PARISC_BUG_BREAK_ASM "\n"		\
32d68cafc2SHelge Deller 			     "\t.pushsection __bug_table,\"a\"\n"	\
3316496064SHelge Deller 			     "\t.align 4\n"				\
3416496064SHelge Deller 			     "2:\t" __BUG_REL(1b) "\n"			\
3516496064SHelge Deller 			     "\t" __BUG_REL(%c0)  "\n"			\
36d68cafc2SHelge Deller 			     "\t.short %1, %2\n"			\
3716496064SHelge Deller 			     "\t.blockz %3-2*4-2*2\n"			\
38deae26bfSKyle McMartin 			     "\t.popsection"				\
39deae26bfSKyle McMartin 			     : : "i" (__FILE__), "i" (__LINE__),	\
4016496064SHelge Deller 			     "i" (0), "i" (sizeof(struct bug_entry)) );	\
4105920797SDavid Daney 		unreachable();						\
42deae26bfSKyle McMartin 	} while(0)
43deae26bfSKyle McMartin 
44deae26bfSKyle McMartin #else
45deae26bfSKyle McMartin #define BUG()								\
46deae26bfSKyle McMartin 	do {								\
47deae26bfSKyle McMartin 		asm volatile(PARISC_BUG_BREAK_ASM : : );		\
4805920797SDavid Daney 		unreachable();						\
49deae26bfSKyle McMartin 	} while(0)
50deae26bfSKyle McMartin #endif
51deae26bfSKyle McMartin 
52deae26bfSKyle McMartin #ifdef CONFIG_DEBUG_BUGVERBOSE
5319d43626SPeter Zijlstra #define __WARN_FLAGS(flags)						\
54deae26bfSKyle McMartin 	do {								\
55deae26bfSKyle McMartin 		asm volatile("\n"					\
56deae26bfSKyle McMartin 			     "1:\t" PARISC_BUG_BREAK_ASM "\n"		\
57d68cafc2SHelge Deller 			     "\t.pushsection __bug_table,\"a\"\n"	\
5816496064SHelge Deller 			     "\t.align 4\n"				\
5916496064SHelge Deller 			     "2:\t" __BUG_REL(1b) "\n"			\
6016496064SHelge Deller 			     "\t" __BUG_REL(%c0)  "\n"			\
61d68cafc2SHelge Deller 			     "\t.short %1, %2\n"			\
6216496064SHelge Deller 			     "\t.blockz %3-2*4-2*2\n"			\
63deae26bfSKyle McMartin 			     "\t.popsection"				\
64deae26bfSKyle McMartin 			     : : "i" (__FILE__), "i" (__LINE__),	\
6519d43626SPeter Zijlstra 			     "i" (BUGFLAG_WARNING|(flags)),		\
6616496064SHelge Deller 			     "i" (sizeof(struct bug_entry)) );		\
67deae26bfSKyle McMartin 	} while(0)
68deae26bfSKyle McMartin #else
6919d43626SPeter Zijlstra #define __WARN_FLAGS(flags)						\
70deae26bfSKyle McMartin 	do {								\
71deae26bfSKyle McMartin 		asm volatile("\n"					\
72deae26bfSKyle McMartin 			     "1:\t" PARISC_BUG_BREAK_ASM "\n"		\
73d68cafc2SHelge Deller 			     "\t.pushsection __bug_table,\"a\"\n"	\
74*5bdd0cedSHelge Deller 			     "\t.align 4\n"				\
7516496064SHelge Deller 			     "2:\t" __BUG_REL(1b) "\n"			\
76d68cafc2SHelge Deller 			     "\t.short %0\n"				\
7716496064SHelge Deller 			     "\t.blockz %1-4-2\n"			\
78deae26bfSKyle McMartin 			     "\t.popsection"				\
7919d43626SPeter Zijlstra 			     : : "i" (BUGFLAG_WARNING|(flags)),		\
8016496064SHelge Deller 			     "i" (sizeof(struct bug_entry)) );		\
81deae26bfSKyle McMartin 	} while(0)
82deae26bfSKyle McMartin #endif
83deae26bfSKyle McMartin 
84deae26bfSKyle McMartin 
85deae26bfSKyle McMartin #define WARN_ON(x) ({						\
86deae26bfSKyle McMartin 	int __ret_warn_on = !!(x);				\
87deae26bfSKyle McMartin 	if (__builtin_constant_p(__ret_warn_on)) {		\
88deae26bfSKyle McMartin 		if (__ret_warn_on)				\
89deae26bfSKyle McMartin 			__WARN();				\
90deae26bfSKyle McMartin 	} else {						\
91deae26bfSKyle McMartin 		if (unlikely(__ret_warn_on))			\
92deae26bfSKyle McMartin 			__WARN();				\
93deae26bfSKyle McMartin 	}							\
94deae26bfSKyle McMartin 	unlikely(__ret_warn_on);				\
95deae26bfSKyle McMartin })
96deae26bfSKyle McMartin 
97deae26bfSKyle McMartin #endif
98deae26bfSKyle McMartin 
99deae26bfSKyle McMartin #include <asm-generic/bug.h>
100deae26bfSKyle McMartin #endif
101deae26bfSKyle McMartin 
102