linux/arch/blackfin/include/asm/bug.h
<<
>>
Prefs
   1/*
   2 * Copyright 2004-2009 Analog Devices Inc.
   3 *
   4 * Licensed under the GPL-2 or later.
   5 */
   6
   7#ifndef _BLACKFIN_BUG_H
   8#define _BLACKFIN_BUG_H
   9
  10#ifdef CONFIG_BUG
  11
  12/*
  13 * This can be any undefined 16-bit opcode, meaning
  14 * ((opcode & 0xc000) != 0xc000)
  15 * Anything from 0x0001 to 0x000A (inclusive) will work
  16 */
  17#define BFIN_BUG_OPCODE 0x0001
  18
  19#ifdef CONFIG_DEBUG_BUGVERBOSE
  20
  21#define _BUG_OR_WARN(flags)                                             \
  22        asm volatile(                                                   \
  23                "1:     .hword  %0\n"                                   \
  24                "       .section __bug_table,\"a\",@progbits\n"         \
  25                "2:     .long   1b\n"                                   \
  26                "       .long   %1\n"                                   \
  27                "       .short  %2\n"                                   \
  28                "       .short  %3\n"                                   \
  29                "       .org    2b + %4\n"                              \
  30                "       .previous"                                      \
  31                :                                                       \
  32                : "i"(BFIN_BUG_OPCODE), "i"(__FILE__),                  \
  33                  "i"(__LINE__), "i"(flags),                            \
  34                  "i"(sizeof(struct bug_entry)))
  35
  36#else
  37
  38#define _BUG_OR_WARN(flags)                                             \
  39        asm volatile(                                                   \
  40                "1:     .hword  %0\n"                                   \
  41                "       .section __bug_table,\"a\",@progbits\n"         \
  42                "2:     .long   1b\n"                                   \
  43                "       .short  %1\n"                                   \
  44                "       .org    2b + %2\n"                              \
  45                "       .previous"                                      \
  46                :                                                       \
  47                : "i"(BFIN_BUG_OPCODE), "i"(flags),                     \
  48                  "i"(sizeof(struct bug_entry)))
  49
  50#endif /* CONFIG_DEBUG_BUGVERBOSE */
  51
  52#define BUG()                                                           \
  53        do {                                                            \
  54                _BUG_OR_WARN(0);                                        \
  55                unreachable();                                          \
  56        } while (0)
  57
  58#define WARN_ON(condition)                                                      \
  59        ({                                                              \
  60                int __ret_warn_on = !!(condition);                      \
  61                if (unlikely(__ret_warn_on))                            \
  62                        _BUG_OR_WARN(BUGFLAG_WARNING);                  \
  63                unlikely(__ret_warn_on);                                \
  64        })
  65
  66#define HAVE_ARCH_BUG
  67#define HAVE_ARCH_WARN_ON
  68
  69#endif
  70
  71#include <asm-generic/bug.h>
  72
  73#endif
  74