18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 28c2ecf20Sopenharmony_ci#ifndef _ASM_S390_BUG_H 38c2ecf20Sopenharmony_ci#define _ASM_S390_BUG_H 48c2ecf20Sopenharmony_ci 58c2ecf20Sopenharmony_ci#include <linux/compiler.h> 68c2ecf20Sopenharmony_ci 78c2ecf20Sopenharmony_ci#ifdef CONFIG_BUG 88c2ecf20Sopenharmony_ci 98c2ecf20Sopenharmony_ci#ifdef CONFIG_DEBUG_BUGVERBOSE 108c2ecf20Sopenharmony_ci 118c2ecf20Sopenharmony_ci#define __EMIT_BUG(x) do { \ 128c2ecf20Sopenharmony_ci asm_inline volatile( \ 138c2ecf20Sopenharmony_ci "0: mc 0,0\n" \ 148c2ecf20Sopenharmony_ci ".section .rodata.str,\"aMS\",@progbits,1\n" \ 158c2ecf20Sopenharmony_ci "1: .asciz \""__FILE__"\"\n" \ 168c2ecf20Sopenharmony_ci ".previous\n" \ 178c2ecf20Sopenharmony_ci ".section __bug_table,\"awM\",@progbits,%2\n" \ 188c2ecf20Sopenharmony_ci "2: .long 0b-2b,1b-2b\n" \ 198c2ecf20Sopenharmony_ci " .short %0,%1\n" \ 208c2ecf20Sopenharmony_ci " .org 2b+%2\n" \ 218c2ecf20Sopenharmony_ci ".previous\n" \ 228c2ecf20Sopenharmony_ci : : "i" (__LINE__), \ 238c2ecf20Sopenharmony_ci "i" (x), \ 248c2ecf20Sopenharmony_ci "i" (sizeof(struct bug_entry))); \ 258c2ecf20Sopenharmony_ci} while (0) 268c2ecf20Sopenharmony_ci 278c2ecf20Sopenharmony_ci#else /* CONFIG_DEBUG_BUGVERBOSE */ 288c2ecf20Sopenharmony_ci 298c2ecf20Sopenharmony_ci#define __EMIT_BUG(x) do { \ 308c2ecf20Sopenharmony_ci asm_inline volatile( \ 318c2ecf20Sopenharmony_ci "0: mc 0,0\n" \ 328c2ecf20Sopenharmony_ci ".section __bug_table,\"awM\",@progbits,%1\n" \ 338c2ecf20Sopenharmony_ci "1: .long 0b-1b\n" \ 348c2ecf20Sopenharmony_ci " .short %0\n" \ 358c2ecf20Sopenharmony_ci " .org 1b+%1\n" \ 368c2ecf20Sopenharmony_ci ".previous\n" \ 378c2ecf20Sopenharmony_ci : : "i" (x), \ 388c2ecf20Sopenharmony_ci "i" (sizeof(struct bug_entry))); \ 398c2ecf20Sopenharmony_ci} while (0) 408c2ecf20Sopenharmony_ci 418c2ecf20Sopenharmony_ci#endif /* CONFIG_DEBUG_BUGVERBOSE */ 428c2ecf20Sopenharmony_ci 438c2ecf20Sopenharmony_ci#define BUG() do { \ 448c2ecf20Sopenharmony_ci __EMIT_BUG(0); \ 458c2ecf20Sopenharmony_ci unreachable(); \ 468c2ecf20Sopenharmony_ci} while (0) 478c2ecf20Sopenharmony_ci 488c2ecf20Sopenharmony_ci#define __WARN_FLAGS(flags) do { \ 498c2ecf20Sopenharmony_ci __EMIT_BUG(BUGFLAG_WARNING|(flags)); \ 508c2ecf20Sopenharmony_ci} while (0) 518c2ecf20Sopenharmony_ci 528c2ecf20Sopenharmony_ci#define WARN_ON(x) ({ \ 538c2ecf20Sopenharmony_ci int __ret_warn_on = !!(x); \ 548c2ecf20Sopenharmony_ci if (__builtin_constant_p(__ret_warn_on)) { \ 558c2ecf20Sopenharmony_ci if (__ret_warn_on) \ 568c2ecf20Sopenharmony_ci __WARN(); \ 578c2ecf20Sopenharmony_ci } else { \ 588c2ecf20Sopenharmony_ci if (unlikely(__ret_warn_on)) \ 598c2ecf20Sopenharmony_ci __WARN(); \ 608c2ecf20Sopenharmony_ci } \ 618c2ecf20Sopenharmony_ci unlikely(__ret_warn_on); \ 628c2ecf20Sopenharmony_ci}) 638c2ecf20Sopenharmony_ci 648c2ecf20Sopenharmony_ci#define HAVE_ARCH_BUG 658c2ecf20Sopenharmony_ci#define HAVE_ARCH_WARN_ON 668c2ecf20Sopenharmony_ci#endif /* CONFIG_BUG */ 678c2ecf20Sopenharmony_ci 688c2ecf20Sopenharmony_ci#include <asm-generic/bug.h> 698c2ecf20Sopenharmony_ci 708c2ecf20Sopenharmony_ci#endif /* _ASM_S390_BUG_H */ 71