bug.h 1.8 KB
Newer Older
L
Linus Torvalds 已提交
1 2 3
#ifndef _PARISC_BUG_H
#define _PARISC_BUG_H

H
Helge Deller 已提交
4 5 6 7 8
/*
 * Tell the user there is some problem.
 * The offending file and line are encoded in the __bug_table section.
 */

M
Matt Mackall 已提交
9
#ifdef CONFIG_BUG
L
Linus Torvalds 已提交
10
#define HAVE_ARCH_BUG
H
Helge Deller 已提交
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
#define HAVE_ARCH_WARN_ON

/* the break instruction is used as BUG() marker.  */
#define	PARISC_BUG_BREAK_ASM	"break 0x1f, 0x1fff"
#define	PARISC_BUG_BREAK_INSN	0x03ffe01f  /* PARISC_BUG_BREAK_ASM */

#ifdef CONFIG_64BIT
#define ASM_ULONG_INSN		".dword"
#else
#define ASM_ULONG_INSN		".word"
#endif

#ifdef CONFIG_DEBUG_BUGVERBOSE
#define BUG()								\
	do {								\
		asm volatile("\n"					\
			     "1:\t" PARISC_BUG_BREAK_ASM "\n"		\
			     "\t.pushsection __bug_table,\"a\"\n"	\
			     "2:\t" ASM_ULONG_INSN " 1b, %c0\n"		\
			     "\t.short %c1, %c2\n"			\
			     "\t.org 2b+%c3\n"				\
			     "\t.popsection"				\
			     : : "i" (__FILE__), "i" (__LINE__),	\
			     "i" (0), "i" (sizeof(struct bug_entry)) ); \
		for(;;) ;						\
	} while(0)

#else
#define BUG()								\
	do {								\
		asm volatile(PARISC_BUG_BREAK_ASM : : );		\
		for(;;) ;						\
	} while(0)
#endif

#define __WARN()							\
	do {								\
		asm volatile("\n"					\
			     "1:\t" PARISC_BUG_BREAK_ASM "\n"		\
			     "\t.pushsection __bug_table,\"a\"\n"	\
			     "2:\t" ASM_ULONG_INSN " 1b, %c0\n"		\
			     "\t.short %c1, %c2\n"			\
			     "\t.org 2b+%c3\n"				\
			     "\t.popsection"				\
			     : : "i" (__FILE__), "i" (__LINE__),	\
			     "i" (BUGFLAG_WARNING),			\
			     "i" (sizeof(struct bug_entry)) );		\
	} while(0)


#define WARN_ON(x) ({						\
	typeof(x) __ret_warn_on = (x);				\
	if (__builtin_constant_p(__ret_warn_on)) {		\
		if (__ret_warn_on)				\
			__WARN();				\
	} else {						\
		if (unlikely(__ret_warn_on))			\
			__WARN();				\
	}							\
	unlikely(__ret_warn_on);				\
})

M
Matt Mackall 已提交
73
#endif
L
Linus Torvalds 已提交
74 75 76

#include <asm-generic/bug.h>
#endif
H
Helge Deller 已提交
77