Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
at v2.6.18 34 lines 847 B view raw
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 */ 10struct 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__)) 28void out_of_line_bug(void); 29#else 30static inline void out_of_line_bug(void) { } 31#endif 32 33#include <asm-generic/bug.h> 34#endif