|
@@ -1,27 +1,70 @@
|
|
|
-#ifndef _S390_BUG_H
|
|
|
-#define _S390_BUG_H
|
|
|
+#ifndef _ASM_S390_BUG_H
|
|
|
+#define _ASM_S390_BUG_H
|
|
|
|
|
|
#include <linux/kernel.h>
|
|
|
|
|
|
#ifdef CONFIG_BUG
|
|
|
|
|
|
-static inline __attribute__((noreturn)) void __do_illegal_op(void)
|
|
|
-{
|
|
|
-#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3)
|
|
|
- __builtin_trap();
|
|
|
+#ifdef CONFIG_64BIT
|
|
|
+#define S390_LONG ".quad"
|
|
|
#else
|
|
|
- asm volatile(".long 0");
|
|
|
+#define S390_LONG ".long"
|
|
|
#endif
|
|
|
-}
|
|
|
|
|
|
-#define BUG() do { \
|
|
|
- printk("kernel BUG at %s:%d!\n", __FILE__, __LINE__); \
|
|
|
- __do_illegal_op(); \
|
|
|
+#ifdef CONFIG_DEBUG_BUGVERBOSE
|
|
|
+
|
|
|
+#define __EMIT_BUG(x) do { \
|
|
|
+ asm volatile( \
|
|
|
+ "0: j 0b+2\n" \
|
|
|
+ "1:\n" \
|
|
|
+ ".section .rodata.str,\"aMS\",@progbits,1\n" \
|
|
|
+ "2: .asciz \""__FILE__"\"\n" \
|
|
|
+ ".previous\n" \
|
|
|
+ ".section __bug_table,\"a\"\n" \
|
|
|
+ "3:\t" S390_LONG "\t1b,2b\n" \
|
|
|
+ " .short %0,%1\n" \
|
|
|
+ " .org 3b+%2\n" \
|
|
|
+ ".previous\n" \
|
|
|
+ : : "i" (__LINE__), \
|
|
|
+ "i" (x), \
|
|
|
+ "i" (sizeof(struct bug_entry))); \
|
|
|
} while (0)
|
|
|
|
|
|
+#else /* CONFIG_DEBUG_BUGVERBOSE */
|
|
|
+
|
|
|
+#define __EMIT_BUG(x) do { \
|
|
|
+ asm volatile( \
|
|
|
+ "0: j 0b+2\n" \
|
|
|
+ "1:\n" \
|
|
|
+ ".section __bug_table,\"a\"\n" \
|
|
|
+ "2:\t" S390_LONG "\t1b\n" \
|
|
|
+ " .short %0\n" \
|
|
|
+ " .org 2b+%1\n" \
|
|
|
+ ".previous\n" \
|
|
|
+ : : "i" (x), \
|
|
|
+ "i" (sizeof(struct bug_entry))); \
|
|
|
+} while (0)
|
|
|
+
|
|
|
+#endif /* CONFIG_DEBUG_BUGVERBOSE */
|
|
|
+
|
|
|
+#define BUG() __EMIT_BUG(0)
|
|
|
+
|
|
|
+#define WARN_ON(x) ({ \
|
|
|
+ typeof(x) __ret_warn_on = (x); \
|
|
|
+ if (__builtin_constant_p(__ret_warn_on)) { \
|
|
|
+ if (__ret_warn_on) \
|
|
|
+ __EMIT_BUG(BUGFLAG_WARNING); \
|
|
|
+ } else { \
|
|
|
+ if (unlikely(__ret_warn_on)) \
|
|
|
+ __EMIT_BUG(BUGFLAG_WARNING); \
|
|
|
+ } \
|
|
|
+ unlikely(__ret_warn_on); \
|
|
|
+})
|
|
|
+
|
|
|
#define HAVE_ARCH_BUG
|
|
|
-#endif
|
|
|
+#define HAVE_ARCH_WARN_ON
|
|
|
+#endif /* CONFIG_BUG */
|
|
|
|
|
|
#include <asm-generic/bug.h>
|
|
|
|
|
|
-#endif
|
|
|
+#endif /* _ASM_S390_BUG_H */
|