91768d6c2b
This makes i386 use the generic BUG machinery. There are no functional changes from the old i386 implementation. The main advantage in using the generic BUG machinery for i386 is that the inlined overhead of BUG is just the ud2a instruction; the file+line(+function) information are no longer inlined into the instruction stream. This reduces cache pollution, and makes disassembly work properly. Signed-off-by: Jeremy Fitzhardinge <jeremy@goop.org> Cc: Andi Kleen <ak@muc.de> Cc: Hugh Dickens <hugh@veritas.com> Cc: Michael Ellerman <michael@ellerman.id.au> Cc: Paul Mackerras <paulus@samba.org> Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org> Cc: Rusty Russell <rusty@rustcorp.com.au> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
37 lines
758 B
C
37 lines
758 B
C
#ifndef _I386_BUG_H
|
|
#define _I386_BUG_H
|
|
|
|
|
|
/*
|
|
* Tell the user there is some problem.
|
|
* The offending file and line are encoded encoded in the __bug_table section.
|
|
*/
|
|
|
|
#ifdef CONFIG_BUG
|
|
#define HAVE_ARCH_BUG
|
|
|
|
#ifdef CONFIG_DEBUG_BUGVERBOSE
|
|
#define BUG() \
|
|
do { \
|
|
asm volatile("1:\tud2\n" \
|
|
".pushsection __bug_table,\"a\"\n" \
|
|
"2:\t.long 1b, %c0\n" \
|
|
"\t.word %c1, 0\n" \
|
|
"\t.org 2b+%c2\n" \
|
|
".popsection" \
|
|
: : "i" (__FILE__), "i" (__LINE__), \
|
|
"i" (sizeof(struct bug_entry))); \
|
|
for(;;) ; \
|
|
} while(0)
|
|
|
|
#else
|
|
#define BUG() \
|
|
do { \
|
|
asm volatile("ud2"); \
|
|
for(;;) ; \
|
|
} while(0)
|
|
#endif
|
|
#endif
|
|
|
|
#include <asm-generic/bug.h>
|
|
#endif
|