]>
Commit | Line | Data |
---|---|---|
1da177e4 LT |
1 | #ifndef _ASMARM_BUG_H |
2 | #define _ASMARM_BUG_H | |
3 | ||
1da177e4 | 4 | |
c8538a7a | 5 | #ifdef CONFIG_BUG |
1da177e4 | 6 | |
87e040b6 SG |
7 | /* |
8 | * Use a suitable undefined instruction to use for ARM/Thumb2 bug handling. | |
9 | * We need to be careful not to conflict with those used by other modules and | |
10 | * the register_undef_hook() system. | |
11 | */ | |
12 | #ifdef CONFIG_THUMB2_KERNEL | |
13 | #define BUG_INSTR_VALUE 0xde02 | |
14 | #define BUG_INSTR_TYPE ".hword " | |
1da177e4 | 15 | #else |
87e040b6 SG |
16 | #define BUG_INSTR_VALUE 0xe7f001f2 |
17 | #define BUG_INSTR_TYPE ".word " | |
18 | #endif | |
1da177e4 | 19 | |
1da177e4 | 20 | |
87e040b6 SG |
21 | #define BUG() _BUG(__FILE__, __LINE__, BUG_INSTR_VALUE) |
22 | #define _BUG(file, line, value) __BUG(file, line, value) | |
23 | ||
24 | #ifdef CONFIG_DEBUG_BUGVERBOSE | |
25 | ||
26 | /* | |
27 | * The extra indirection is to ensure that the __FILE__ string comes through | |
28 | * OK. Many version of gcc do not support the asm %c parameter which would be | |
29 | * preferable to this unpleasantness. We use mergeable string sections to | |
30 | * avoid multiple copies of the string appearing in the kernel image. | |
31 | */ | |
32 | ||
33 | #define __BUG(__file, __line, __value) \ | |
34 | do { \ | |
87e040b6 SG |
35 | asm volatile("1:\t" BUG_INSTR_TYPE #__value "\n" \ |
36 | ".pushsection .rodata.str, \"aMS\", %progbits, 1\n" \ | |
37 | "2:\t.asciz " #__file "\n" \ | |
38 | ".popsection\n" \ | |
39 | ".pushsection __bug_table,\"a\"\n" \ | |
40 | "3:\t.word 1b, 2b\n" \ | |
41 | "\t.hword " #__line ", 0\n" \ | |
42 | ".popsection"); \ | |
43 | unreachable(); \ | |
44 | } while (0) | |
45 | ||
46 | #else /* not CONFIG_DEBUG_BUGVERBOSE */ | |
47 | ||
48 | #define __BUG(__file, __line, __value) \ | |
49 | do { \ | |
50 | asm volatile(BUG_INSTR_TYPE #__value); \ | |
51 | unreachable(); \ | |
52 | } while (0) | |
53 | #endif /* CONFIG_DEBUG_BUGVERBOSE */ | |
1da177e4 LT |
54 | |
55 | #define HAVE_ARCH_BUG | |
87e040b6 | 56 | #endif /* CONFIG_BUG */ |
c8538a7a | 57 | |
1da177e4 LT |
58 | #include <asm-generic/bug.h> |
59 | ||
60 | #endif |