Linux kernel mirror (for testing)
git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel
os
linux
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