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-x86_64 / bug.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-08-11  |  847 b   |  35 lines

  1. #ifndef __ASM_X8664_BUG_H
  2. #define __ASM_X8664_BUG_H 1
  3.  
  4. #include <linux/stringify.h>
  5.  
  6. /*
  7.  * Tell the user there is some problem.  The exception handler decodes 
  8.  * this frame.
  9.  */
  10. struct bug_frame {
  11.     unsigned char ud2[2];
  12.     unsigned char push;
  13.     signed int filename;
  14.     unsigned char ret;
  15.     unsigned short line;
  16. } __attribute__((packed));
  17.  
  18. #ifdef CONFIG_BUG
  19. #define HAVE_ARCH_BUG
  20. /* We turn the bug frame into valid instructions to not confuse
  21.    the disassembler. Thanks to Jan Beulich & Suresh Siddha
  22.    for nice instruction selection.
  23.    The magic numbers generate mov $64bitimm,%eax ; ret $offset. */
  24. #define BUG()                                 \
  25.     asm volatile(                            \
  26.     "ud2 ; pushq $%c1 ; ret $%c0" ::                 \
  27.              "i"(__LINE__), "i" (__FILE__))
  28. void out_of_line_bug(void);
  29. #else
  30. static inline void out_of_line_bug(void) { }
  31. #endif
  32.  
  33. #include <asm-generic/bug.h>
  34. #endif
  35.