diff options
Diffstat (limited to 'include/asm-i386/bug.h')
-rw-r--r-- | include/asm-i386/bug.h | 28 |
1 files changed, 20 insertions, 8 deletions
diff --git a/include/asm-i386/bug.h b/include/asm-i386/bug.h index 8062cdbf2587..b0fd78ca2619 100644 --- a/include/asm-i386/bug.h +++ b/include/asm-i386/bug.h | |||
@@ -4,20 +4,32 @@ | |||
4 | 4 | ||
5 | /* | 5 | /* |
6 | * Tell the user there is some problem. | 6 | * Tell the user there is some problem. |
7 | * The offending file and line are encoded after the "officially | 7 | * The offending file and line are encoded encoded in the __bug_table section. |
8 | * undefined" opcode for parsing in the trap handler. | ||
9 | */ | 8 | */ |
10 | 9 | ||
11 | #ifdef CONFIG_BUG | 10 | #ifdef CONFIG_BUG |
12 | #define HAVE_ARCH_BUG | 11 | #define HAVE_ARCH_BUG |
12 | |||
13 | #ifdef CONFIG_DEBUG_BUGVERBOSE | 13 | #ifdef CONFIG_DEBUG_BUGVERBOSE |
14 | #define BUG() \ | 14 | #define BUG() \ |
15 | __asm__ __volatile__( "ud2\n" \ | 15 | do { \ |
16 | "\t.word %c0\n" \ | 16 | asm volatile("1:\tud2\n" \ |
17 | "\t.long %c1\n" \ | 17 | ".pushsection __bug_table,\"a\"\n" \ |
18 | : : "i" (__LINE__), "i" (__FILE__)) | 18 | "2:\t.long 1b, %c0\n" \ |
19 | "\t.word %c1, 0\n" \ | ||
20 | "\t.org 2b+%c2\n" \ | ||
21 | ".popsection" \ | ||
22 | : : "i" (__FILE__), "i" (__LINE__), \ | ||
23 | "i" (sizeof(struct bug_entry))); \ | ||
24 | for(;;) ; \ | ||
25 | } while(0) | ||
26 | |||
19 | #else | 27 | #else |
20 | #define BUG() __asm__ __volatile__("ud2\n") | 28 | #define BUG() \ |
29 | do { \ | ||
30 | asm volatile("ud2"); \ | ||
31 | for(;;) ; \ | ||
32 | } while(0) | ||
21 | #endif | 33 | #endif |
22 | #endif | 34 | #endif |
23 | 35 | ||