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 (C) 2006 Atmel Corporation
3  *
4  * This program is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License version 2 as
6  * published by the Free Software Foundation.
7  */
8 #ifndef __ASM_AVR32_BUG_H
9 #define __ASM_AVR32_BUG_H
10 
11 #ifdef CONFIG_BUG
12 
13 /*
14  * According to our Chief Architect, this compact opcode is very
15  * unlikely to ever be implemented.
16  */
17 #define AVR32_BUG_OPCODE 0x5df0
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"(AVR32_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"(AVR32_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 /* CONFIG_BUG */
70 
71 #include <asm-generic/bug.h>
72 
73 struct pt_regs;
74 void die(const char *str, struct pt_regs *regs, long err);
75 void _exception(long signr, struct pt_regs *regs, int code,
76  unsigned long addr);
77 
78 #endif /* __ASM_AVR32_BUG_H */