Logo Search packages:      
Sourcecode: linux version File versions  Download package

bug.h

#ifndef __ASM_SH_BUG_H
#define __ASM_SH_BUG_H

#define TRAPA_BUG_OPCODE      0xc33e      /* trapa #0x3e */

#ifdef CONFIG_GENERIC_BUG
#define HAVE_ARCH_BUG
#define HAVE_ARCH_WARN_ON

/**
 * _EMIT_BUG_ENTRY
 * %1 - __FILE__
 * %2 - __LINE__
 * %3 - trap type
 * %4 - sizeof(struct bug_entry)
 *
 * The trapa opcode itself sits in %0.
 * The %O notation is used to avoid # generation.
 *
 * The offending file and line are encoded in the __bug_table section.
 */
#ifdef CONFIG_DEBUG_BUGVERBOSE
#define _EMIT_BUG_ENTRY                   \
      "\t.pushsection __bug_table,\"a\"\n"      \
      "2:\t.long 1b, %O1\n"               \
      "\t.short %O2, %O3\n"               \
      "\t.org 2b+%O4\n"             \
      "\t.popsection\n"
#else
#define _EMIT_BUG_ENTRY                   \
      "\t.pushsection __bug_table,\"a\"\n"      \
      "2:\t.long 1b\n"              \
      "\t.short %O3\n"              \
      "\t.org 2b+%O4\n"             \
      "\t.popsection\n"
#endif

#define BUG()                                   \
do {                                      \
      __asm__ __volatile__ (                    \
            "1:\t.short %O0\n"                  \
            _EMIT_BUG_ENTRY                     \
             :                            \
             : "n" (TRAPA_BUG_OPCODE),          \
               "i" (__FILE__),                  \
               "i" (__LINE__), "i" (0),         \
               "i" (sizeof(struct bug_entry))); \
} while (0)

#define __WARN()                          \
do {                                      \
      __asm__ __volatile__ (                    \
            "1:\t.short %O0\n"                  \
             _EMIT_BUG_ENTRY              \
             :                            \
             : "n" (TRAPA_BUG_OPCODE),          \
               "i" (__FILE__),                  \
               "i" (__LINE__),                  \
               "i" (BUGFLAG_WARNING),           \
               "i" (sizeof(struct bug_entry))); \
} while (0)

#define WARN_ON(x) ({                                 \
      int __ret_warn_on = !!(x);                      \
      if (__builtin_constant_p(__ret_warn_on)) {            \
            if (__ret_warn_on)                        \
                  __WARN();                     \
      } else {                                  \
            if (unlikely(__ret_warn_on))              \
                  __WARN();                     \
      }                                         \
      unlikely(__ret_warn_on);                        \
})

#endif /* CONFIG_GENERIC_BUG */

#include <asm-generic/bug.h>

#endif /* __ASM_SH_BUG_H */

Generated by  Doxygen 1.6.0   Back to index