summaryrefslogtreecommitdiffstats
path: root/arch/cris/include/arch-v32/arch/bug.h
blob: fb59faaaae0af41ff8e0908a776bdbc3edcd5ab8 (plain)
1
2
3
4
5
6
7
8
9
10
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
#ifndef __ASM_CRISv32_ARCH_BUG_H
#define __ASM_CRISv32_ARCH_BUG_H

#include <linux/stringify.h>

#ifdef CONFIG_BUG
#ifdef CONFIG_DEBUG_BUGVERBOSE
/*
 * The penalty for the in-band code path will be the size of break 14.
 * All other stuff is done out-of-band with exception handlers.
 */
#define BUG()								\
do {									\
	__asm__ __volatile__ ("0: break 14\n\t"				\
			      ".section .fixup,\"ax\"\n"		\
			      "1:\n\t"					\
			      "move.d %0, $r10\n\t"			\
			      "move.d %1, $r11\n\t"			\
			      "jump do_BUG\n\t"				\
			      "nop\n\t"					\
			      ".previous\n\t"				\
			      ".section __ex_table,\"a\"\n\t"		\
			      ".dword 0b, 1b\n\t"			\
			      ".previous\n\t"				\
			      : : "ri" (__FILE__), "i" (__LINE__));	\
	unreachable();				\
} while (0)
#else
#define BUG() 					\
do {						\
	__asm__ __volatile__ ("break 14\n\t");	\
	unreachable();				\
} while (0)
#endif

#define HAVE_ARCH_BUG
#endif

#include <asm-generic/bug.h>
#endif