12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- /* SPDX-License-Identifier: GPL-2.0 */
- #ifndef __ASM_BUG_H
- #define __ASM_BUG_H
- #include <asm/break.h>
- #include <linux/stringify.h>
- #ifndef CONFIG_DEBUG_BUGVERBOSE
- #define _BUGVERBOSE_LOCATION(file, line)
- #else
- #define __BUGVERBOSE_LOCATION(file, line) \
- .pushsection .rodata.str, "aMS", @progbits, 1; \
- 10002: .string file; \
- .popsection; \
- \
- .long 10002b - .; \
- .short line;
- #define _BUGVERBOSE_LOCATION(file, line) __BUGVERBOSE_LOCATION(file, line)
- #endif
- #ifndef CONFIG_GENERIC_BUG
- #define __BUG_ENTRY(flags)
- #else
- #define __BUG_ENTRY(flags) \
- .pushsection __bug_table, "aw"; \
- .align 2; \
- 10000: .long 10001f - .; \
- _BUGVERBOSE_LOCATION(__FILE__, __LINE__) \
- .short flags; \
- .popsection; \
- 10001:
- #endif
- #define ASM_BUG_FLAGS(flags) \
- __BUG_ENTRY(flags) \
- break BRK_BUG
- #define ASM_BUG() ASM_BUG_FLAGS(0)
- #define __BUG_FLAGS(flags) \
- asm_inline volatile (__stringify(ASM_BUG_FLAGS(flags)));
- #define __WARN_FLAGS(flags) \
- do { \
- instrumentation_begin(); \
- __BUG_FLAGS(BUGFLAG_WARNING|(flags)); \
- instrumentation_end(); \
- } while (0)
- #define BUG() \
- do { \
- instrumentation_begin(); \
- __BUG_FLAGS(0); \
- unreachable(); \
- } while (0)
- #define HAVE_ARCH_BUG
- #include <asm-generic/bug.h>
- #endif /* __ASM_BUG_H */
|