2007-04-27 16:01:42 +02:00
# ifndef _ASM_S390_BUG_H
# define _ASM_S390_BUG_H
2005-04-16 15:20:36 -07:00
# include <linux/kernel.h>
2005-05-01 08:59:01 -07:00
# ifdef CONFIG_BUG
2006-03-24 03:15:16 -08:00
2007-04-27 16:01:42 +02:00
# 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 " \
2010-02-26 22:37:44 +01:00
" 3: .long 1b-3b,2b-3b \n " \
2007-04-27 16:01:42 +02:00
" .short %0,%1 \n " \
" .org 3b+%2 \n " \
" .previous \n " \
: : " i " ( __LINE__ ) , \
" i " ( x ) , \
" i " ( sizeof ( struct bug_entry ) ) ) ; \
2005-04-16 15:20:36 -07:00
} while ( 0 )
2007-04-27 16:01:42 +02:00
# else /* CONFIG_DEBUG_BUGVERBOSE */
# define __EMIT_BUG(x) do { \
asm volatile ( \
" 0: j 0b+2 \n " \
" 1: \n " \
" .section __bug_table, \" a \" \n " \
2010-02-26 22:37:44 +01:00
" 2: .long 1b-2b \n " \
2007-04-27 16:01:42 +02:00
" .short %0 \n " \
" .org 2b+%1 \n " \
" .previous \n " \
: : " i " ( x ) , \
" i " ( sizeof ( struct bug_entry ) ) ) ; \
} while ( 0 )
# endif /* CONFIG_DEBUG_BUGVERBOSE */
2008-12-25 13:39:17 +01:00
# define BUG() do { \
__EMIT_BUG ( 0 ) ; \
2009-12-04 17:44:53 -08:00
unreachable ( ) ; \
2008-12-25 13:39:17 +01:00
} while ( 0 )
2007-04-27 16:01:42 +02:00
2010-04-03 19:34:56 +01:00
# define __WARN_TAINT(taint) do { \
__EMIT_BUG ( BUGFLAG_TAINT ( taint ) ) ; \
2010-01-13 20:44:38 +01:00
} while ( 0 )
2007-04-27 16:01:42 +02:00
# define WARN_ON(x) ({ \
2007-08-02 00:18:38 +02:00
int __ret_warn_on = ! ! ( x ) ; \
2007-04-27 16:01:42 +02:00
if ( __builtin_constant_p ( __ret_warn_on ) ) { \
if ( __ret_warn_on ) \
2010-04-03 19:34:56 +01:00
__WARN ( ) ; \
2007-04-27 16:01:42 +02:00
} else { \
if ( unlikely ( __ret_warn_on ) ) \
2010-04-03 19:34:56 +01:00
__WARN ( ) ; \
2007-04-27 16:01:42 +02:00
} \
unlikely ( __ret_warn_on ) ; \
} )
2005-04-16 15:20:36 -07:00
# define HAVE_ARCH_BUG
2007-04-27 16:01:42 +02:00
# define HAVE_ARCH_WARN_ON
# endif /* CONFIG_BUG */
2005-05-01 08:59:01 -07:00
2005-04-16 15:20:36 -07:00
# include <asm-generic/bug.h>
2007-04-27 16:01:42 +02:00
# endif /* _ASM_S390_BUG_H */