Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
bug.h
Go to the documentation of this file.
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