linux/arch/parisc/include/asm/bug.h
<<
>>
Prefs
   1#ifndef _PARISC_BUG_H
   2#define _PARISC_BUG_H
   3
   4/*
   5 * Tell the user there is some problem.
   6 * The offending file and line are encoded in the __bug_table section.
   7 */
   8
   9#ifdef CONFIG_BUG
  10#define HAVE_ARCH_BUG
  11#define HAVE_ARCH_WARN_ON
  12
  13/* the break instruction is used as BUG() marker.  */
  14#define PARISC_BUG_BREAK_ASM    "break 0x1f, 0x1fff"
  15#define PARISC_BUG_BREAK_INSN   0x03ffe01f  /* PARISC_BUG_BREAK_ASM */
  16
  17#if defined(CONFIG_64BIT)
  18#define ASM_WORD_INSN           ".dword\t"
  19#else
  20#define ASM_WORD_INSN           ".word\t"
  21#endif
  22
  23#ifdef CONFIG_DEBUG_BUGVERBOSE
  24#define BUG()                                                           \
  25        do {                                                            \
  26                asm volatile("\n"                                       \
  27                             "1:\t" PARISC_BUG_BREAK_ASM "\n"           \
  28                             "\t.pushsection __bug_table,\"a\"\n"       \
  29                             "2:\t" ASM_WORD_INSN "1b, %c0\n"           \
  30                             "\t.short %c1, %c2\n"                      \
  31                             "\t.org 2b+%c3\n"                          \
  32                             "\t.popsection"                            \
  33                             : : "i" (__FILE__), "i" (__LINE__),        \
  34                             "i" (0), "i" (sizeof(struct bug_entry)) ); \
  35                unreachable();                                          \
  36        } while(0)
  37
  38#else
  39#define BUG()                                                           \
  40        do {                                                            \
  41                asm volatile(PARISC_BUG_BREAK_ASM : : );                \
  42                unreachable();                                          \
  43        } while(0)
  44#endif
  45
  46#ifdef CONFIG_DEBUG_BUGVERBOSE
  47#define __WARN_TAINT(taint)                                             \
  48        do {                                                            \
  49                asm volatile("\n"                                       \
  50                             "1:\t" PARISC_BUG_BREAK_ASM "\n"           \
  51                             "\t.pushsection __bug_table,\"a\"\n"       \
  52                             "2:\t" ASM_WORD_INSN "1b, %c0\n"           \
  53                             "\t.short %c1, %c2\n"                      \
  54                             "\t.org 2b+%c3\n"                          \
  55                             "\t.popsection"                            \
  56                             : : "i" (__FILE__), "i" (__LINE__),        \
  57                             "i" (BUGFLAG_TAINT(taint)),                \
  58                             "i" (sizeof(struct bug_entry)) );          \
  59        } while(0)
  60#else
  61#define __WARN_TAINT(taint)                                             \
  62        do {                                                            \
  63                asm volatile("\n"                                       \
  64                             "1:\t" PARISC_BUG_BREAK_ASM "\n"           \
  65                             "\t.pushsection __bug_table,\"a\"\n"       \
  66                             "2:\t" ASM_WORD_INSN "1b\n"                \
  67                             "\t.short %c0\n"                           \
  68                             "\t.org 2b+%c1\n"                          \
  69                             "\t.popsection"                            \
  70                             : : "i" (BUGFLAG_TAINT(taint)),            \
  71                             "i" (sizeof(struct bug_entry)) );          \
  72        } while(0)
  73#endif
  74
  75
  76#define WARN_ON(x) ({                                           \
  77        int __ret_warn_on = !!(x);                              \
  78        if (__builtin_constant_p(__ret_warn_on)) {              \
  79                if (__ret_warn_on)                              \
  80                        __WARN();                               \
  81        } else {                                                \
  82                if (unlikely(__ret_warn_on))                    \
  83                        __WARN();                               \
  84        }                                                       \
  85        unlikely(__ret_warn_on);                                \
  86})
  87
  88#endif
  89
  90#include <asm-generic/bug.h>
  91#endif
  92
  93