|
2 | 2 | #ifndef _ASM_S390_BUG_H |
3 | 3 | #define _ASM_S390_BUG_H |
4 | 4 |
|
5 | | -#include <linux/compiler.h> |
6 | | - |
7 | | -#ifdef CONFIG_BUG |
8 | | - |
9 | | -#ifdef CONFIG_DEBUG_BUGVERBOSE |
10 | | - |
11 | | -#define __EMIT_BUG(x) do { \ |
12 | | - asm_inline volatile( \ |
13 | | - "0: mc 0,0\n" \ |
14 | | - ".section .rodata.str,\"aMS\",@progbits,1\n" \ |
15 | | - "1: .asciz \""__FILE__"\"\n" \ |
16 | | - ".previous\n" \ |
17 | | - ".section __bug_table,\"aw\"\n" \ |
18 | | - "2: .long 0b-.\n" \ |
19 | | - " .long 1b-.\n" \ |
20 | | - " .short %0,%1\n" \ |
21 | | - " .org 2b+%2\n" \ |
22 | | - ".previous\n" \ |
23 | | - : : "i" (__LINE__), \ |
24 | | - "i" (x), \ |
25 | | - "i" (sizeof(struct bug_entry))); \ |
26 | | -} while (0) |
27 | | - |
28 | | -#else /* CONFIG_DEBUG_BUGVERBOSE */ |
29 | | - |
30 | | -#define __EMIT_BUG(x) do { \ |
31 | | - asm_inline volatile( \ |
32 | | - "0: mc 0,0\n" \ |
33 | | - ".section __bug_table,\"aw\"\n" \ |
34 | | - "1: .long 0b-.\n" \ |
35 | | - " .short %0\n" \ |
36 | | - " .org 1b+%1\n" \ |
37 | | - ".previous\n" \ |
38 | | - : : "i" (x), \ |
39 | | - "i" (sizeof(struct bug_entry))); \ |
| 5 | +#include <linux/stringify.h> |
| 6 | + |
| 7 | +#ifndef CONFIG_DEBUG_BUGVERBOSE |
| 8 | +#define _BUGVERBOSE_LOCATION(file, line) |
| 9 | +#else |
| 10 | +#define __BUGVERBOSE_LOCATION(file, line) \ |
| 11 | + .pushsection .rodata.str, "aMS", @progbits, 1; \ |
| 12 | + 10002: .ascii file "\0"; \ |
| 13 | + .popsection; \ |
| 14 | + \ |
| 15 | + .long 10002b - .; \ |
| 16 | + .short line; |
| 17 | +#define _BUGVERBOSE_LOCATION(file, line) __BUGVERBOSE_LOCATION(file, line) |
| 18 | +#endif |
| 19 | + |
| 20 | +#ifndef CONFIG_GENERIC_BUG |
| 21 | +#define __BUG_ENTRY(cond_str, flags) |
| 22 | +#else |
| 23 | +#define __BUG_ENTRY(cond_str, flags) \ |
| 24 | + .pushsection __bug_table, "aw"; \ |
| 25 | + .align 4; \ |
| 26 | + 10000: .long 10001f - .; \ |
| 27 | + _BUGVERBOSE_LOCATION(WARN_CONDITION_STR(cond_str) __FILE__, __LINE__) \ |
| 28 | + .short flags; \ |
| 29 | + .popsection; \ |
| 30 | + 10001: |
| 31 | +#endif |
| 32 | + |
| 33 | +#define ASM_BUG_FLAGS(cond_str, flags) \ |
| 34 | + __BUG_ENTRY(cond_str, flags) \ |
| 35 | + mc 0,0 |
| 36 | + |
| 37 | +#define ASM_BUG() ASM_BUG_FLAGS("", 0) |
| 38 | + |
| 39 | +#define __BUG_FLAGS(cond_str, flags) \ |
| 40 | + asm_inline volatile(__stringify(ASM_BUG_FLAGS(cond_str, flags))); |
| 41 | + |
| 42 | +#define __WARN_FLAGS(cond_str, flags) \ |
| 43 | +do { \ |
| 44 | + __BUG_FLAGS(cond_str, BUGFLAG_WARNING|(flags)); \ |
40 | 45 | } while (0) |
41 | 46 |
|
42 | | -#endif /* CONFIG_DEBUG_BUGVERBOSE */ |
43 | | - |
44 | | -#define BUG() do { \ |
45 | | - __EMIT_BUG(0); \ |
46 | | - unreachable(); \ |
| 47 | +#define BUG() \ |
| 48 | +do { \ |
| 49 | + __BUG_FLAGS("", 0); \ |
| 50 | + unreachable(); \ |
47 | 51 | } while (0) |
48 | 52 |
|
49 | | -#define __WARN_FLAGS(flags) do { \ |
50 | | - __EMIT_BUG(BUGFLAG_WARNING|(flags)); \ |
51 | | -} while (0) |
52 | | - |
53 | | -#define WARN_ON(x) ({ \ |
54 | | - int __ret_warn_on = !!(x); \ |
55 | | - if (__builtin_constant_p(__ret_warn_on)) { \ |
56 | | - if (__ret_warn_on) \ |
57 | | - __WARN(); \ |
58 | | - } else { \ |
59 | | - if (unlikely(__ret_warn_on)) \ |
60 | | - __WARN(); \ |
61 | | - } \ |
62 | | - unlikely(__ret_warn_on); \ |
63 | | -}) |
64 | | - |
65 | 53 | #define HAVE_ARCH_BUG |
66 | | -#define HAVE_ARCH_WARN_ON |
67 | | -#endif /* CONFIG_BUG */ |
68 | 54 |
|
69 | 55 | #include <asm-generic/bug.h> |
70 | 56 |
|
|
0 commit comments