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