xref: /aosp_15_r20/external/libtraceevent/include/asm/bug.h (revision 436bf2bcd5202612ffffe471bbcc1f277cc8d28e)
1*436bf2bcSAndroid Build Coastguard Worker /* SPDX-License-Identifier: GPL-2.0 */
2*436bf2bcSAndroid Build Coastguard Worker #ifndef _TOOLS_ASM_BUG_H
3*436bf2bcSAndroid Build Coastguard Worker #define _TOOLS_ASM_BUG_H
4*436bf2bcSAndroid Build Coastguard Worker 
5*436bf2bcSAndroid Build Coastguard Worker #include <linux/compiler.h>
6*436bf2bcSAndroid Build Coastguard Worker #include <stdio.h>
7*436bf2bcSAndroid Build Coastguard Worker 
8*436bf2bcSAndroid Build Coastguard Worker #define __WARN_printf(arg...)	do { fprintf(stderr, arg); fprintf(stderr, "\n");} while (0)
9*436bf2bcSAndroid Build Coastguard Worker 
10*436bf2bcSAndroid Build Coastguard Worker #define WARN(condition, format...) ({		\
11*436bf2bcSAndroid Build Coastguard Worker 	int __ret_warn_on = !!(condition);	\
12*436bf2bcSAndroid Build Coastguard Worker 	if (unlikely(__ret_warn_on))		\
13*436bf2bcSAndroid Build Coastguard Worker 		__WARN_printf(format);		\
14*436bf2bcSAndroid Build Coastguard Worker 	unlikely(__ret_warn_on);		\
15*436bf2bcSAndroid Build Coastguard Worker })
16*436bf2bcSAndroid Build Coastguard Worker 
17*436bf2bcSAndroid Build Coastguard Worker #define WARN_ON(condition) ({					\
18*436bf2bcSAndroid Build Coastguard Worker 	int __ret_warn_on = !!(condition);			\
19*436bf2bcSAndroid Build Coastguard Worker 	if (unlikely(__ret_warn_on))				\
20*436bf2bcSAndroid Build Coastguard Worker 		__WARN_printf("assertion failed at %s:%d\n",	\
21*436bf2bcSAndroid Build Coastguard Worker 				__FILE__, __LINE__);		\
22*436bf2bcSAndroid Build Coastguard Worker 	unlikely(__ret_warn_on);				\
23*436bf2bcSAndroid Build Coastguard Worker })
24*436bf2bcSAndroid Build Coastguard Worker 
25*436bf2bcSAndroid Build Coastguard Worker #define WARN_ON_ONCE(condition) ({			\
26*436bf2bcSAndroid Build Coastguard Worker 	static int __warned;				\
27*436bf2bcSAndroid Build Coastguard Worker 	int __ret_warn_once = !!(condition);		\
28*436bf2bcSAndroid Build Coastguard Worker 							\
29*436bf2bcSAndroid Build Coastguard Worker 	if (unlikely(__ret_warn_once && !__warned)) {	\
30*436bf2bcSAndroid Build Coastguard Worker 		__warned = true;			\
31*436bf2bcSAndroid Build Coastguard Worker 		WARN_ON(1);				\
32*436bf2bcSAndroid Build Coastguard Worker 	}						\
33*436bf2bcSAndroid Build Coastguard Worker 	unlikely(__ret_warn_once);			\
34*436bf2bcSAndroid Build Coastguard Worker })
35*436bf2bcSAndroid Build Coastguard Worker 
36*436bf2bcSAndroid Build Coastguard Worker #define WARN_ONCE(condition, format...)	({	\
37*436bf2bcSAndroid Build Coastguard Worker 	static int __warned;			\
38*436bf2bcSAndroid Build Coastguard Worker 	int __ret_warn_once = !!(condition);	\
39*436bf2bcSAndroid Build Coastguard Worker 						\
40*436bf2bcSAndroid Build Coastguard Worker 	if (unlikely(__ret_warn_once))		\
41*436bf2bcSAndroid Build Coastguard Worker 		if (WARN(!__warned, format)) 	\
42*436bf2bcSAndroid Build Coastguard Worker 			__warned = 1;		\
43*436bf2bcSAndroid Build Coastguard Worker 	unlikely(__ret_warn_once);		\
44*436bf2bcSAndroid Build Coastguard Worker })
45*436bf2bcSAndroid Build Coastguard Worker 
46*436bf2bcSAndroid Build Coastguard Worker #endif /* _TOOLS_ASM_BUG_H */
47