home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / src / linux-headers-2.6.17-6 / include / asm-powerpc / bug.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-08-11  |  2.4 KB  |  99 lines

  1. #ifndef _ASM_POWERPC_BUG_H
  2. #define _ASM_POWERPC_BUG_H
  3. #ifdef __KERNEL__
  4.  
  5. #include <asm/asm-compat.h>
  6. /*
  7.  * Define an illegal instr to trap on the bug.
  8.  * We don't use 0 because that marks the end of a function
  9.  * in the ELF ABI.  That's "Boo Boo" in case you wonder...
  10.  */
  11. #define BUG_OPCODE .long 0x00b00b00  /* For asm */
  12. #define BUG_ILLEGAL_INSTR "0x00b00b00" /* For BUG macro */
  13.  
  14. #ifndef __ASSEMBLY__
  15.  
  16. struct bug_entry {
  17.     unsigned long    bug_addr;
  18.     long        line;
  19.     const char    *file;
  20.     const char    *function;
  21. };
  22.  
  23. struct bug_entry *find_bug(unsigned long bugaddr);
  24.  
  25. /*
  26.  * If this bit is set in the line number it means that the trap
  27.  * is for WARN_ON rather than BUG or BUG_ON.
  28.  */
  29. #define BUG_WARNING_TRAP    0x1000000
  30.  
  31. #ifdef CONFIG_BUG
  32.  
  33. /*
  34.  * BUG_ON() and WARN_ON() do their best to cooperate with compile-time
  35.  * optimisations. However depending on the complexity of the condition
  36.  * some compiler versions may not produce optimal results.
  37.  */
  38.  
  39. #define BUG() do {                             \
  40.     __asm__ __volatile__(                         \
  41.         "1:    twi 31,0,0\n"                     \
  42.         ".section __bug_table,\"a\"\n"                 \
  43.         "\t"PPC_LONG"    1b,%0,%1,%2\n"                 \
  44.         ".previous"                         \
  45.         : : "i" (__LINE__), "i" (__FILE__), "i" (__FUNCTION__)); \
  46. } while (0)
  47.  
  48. #define BUG_ON(x) do {                        \
  49.     if (__builtin_constant_p(x)) {                \
  50.         if (x)                        \
  51.             BUG();                    \
  52.     } else {                        \
  53.         __asm__ __volatile__(                \
  54.         "1:    "PPC_TLNEI"    %0,0\n"            \
  55.         ".section __bug_table,\"a\"\n"            \
  56.         "\t"PPC_LONG"    1b,%1,%2,%3\n"            \
  57.         ".previous"                    \
  58.         : : "r" ((long)(x)), "i" (__LINE__),        \
  59.             "i" (__FILE__), "i" (__FUNCTION__));    \
  60.     }                            \
  61. } while (0)
  62.  
  63. #define __WARN() do {                        \
  64.     __asm__ __volatile__(                    \
  65.         "1:    twi 31,0,0\n"                \
  66.         ".section __bug_table,\"a\"\n"            \
  67.         "\t"PPC_LONG"    1b,%0,%1,%2\n"            \
  68.         ".previous"                    \
  69.         : : "i" (__LINE__ + BUG_WARNING_TRAP),        \
  70.             "i" (__FILE__), "i" (__FUNCTION__));    \
  71. } while (0)
  72.  
  73. #define WARN_ON(x) do {                        \
  74.     if (__builtin_constant_p(x)) {                \
  75.         if (x)                        \
  76.             __WARN();                \
  77.     } else {                        \
  78.         __asm__ __volatile__(                \
  79.         "1:    "PPC_TLNEI"    %0,0\n"            \
  80.         ".section __bug_table,\"a\"\n"            \
  81.         "\t"PPC_LONG"    1b,%1,%2,%3\n"            \
  82.         ".previous"                    \
  83.         : : "r" ((long)(x)),                \
  84.             "i" (__LINE__ + BUG_WARNING_TRAP),        \
  85.             "i" (__FILE__), "i" (__FUNCTION__));    \
  86.     }                            \
  87. } while (0)
  88.  
  89. #define HAVE_ARCH_BUG
  90. #define HAVE_ARCH_BUG_ON
  91. #define HAVE_ARCH_WARN_ON
  92. #endif /* CONFIG_BUG */
  93. #endif /* __ASSEMBLY __ */
  94.  
  95. #include <asm-generic/bug.h>
  96.  
  97. #endif /* __KERNEL__ */
  98. #endif /* _ASM_POWERPC_BUG_H */
  99.