From 844b471984d4eb9d9e8b81154985da2d9b5ae4db Mon Sep 17 00:00:00 2001 From: Andi Kleen Date: Thu, 28 Jul 2005 21:15:45 -0700 Subject: [PATCH] --- yaml --- r: 5391 b: refs/heads/master c: b6a68a16dc15c65fe76acb7502a806ae415cd3e4 h: refs/heads/master i: 5389: 34aa4423fdce9f84bbacf3ef4abde67d5a8bed32 5387: d960a388ef17a7ec1f9d6ffc5eaebc168d80a2b2 5383: ac07ef5f1b7134958234d0b50094385e5fd05992 5375: 7e47747ab8fade628bb65fae39d5643f92556781 v: v3 --- [refs] | 2 +- trunk/include/asm-x86_64/bug.h | 13 ++++++++++--- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/[refs] b/[refs] index 5659c3660f64..535bf1348432 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 2275cfa8bcb833cdac7dcc616d11306ca35eec58 +refs/heads/master: b6a68a16dc15c65fe76acb7502a806ae415cd3e4 diff --git a/trunk/include/asm-x86_64/bug.h b/trunk/include/asm-x86_64/bug.h index 3d2a666a5dd5..eed785667289 100644 --- a/trunk/include/asm-x86_64/bug.h +++ b/trunk/include/asm-x86_64/bug.h @@ -8,17 +8,24 @@ * this frame. */ struct bug_frame { - unsigned char ud2[2]; + unsigned char ud2[2]; + unsigned char mov; /* should use 32bit offset instead, but the assembler doesn't like it */ char *filename; + unsigned char ret; unsigned short line; } __attribute__((packed)); #ifdef CONFIG_BUG #define HAVE_ARCH_BUG -#define BUG() \ - asm volatile("ud2 ; .quad %c1 ; .short %c0" :: \ +/* We turn the bug frame into valid instructions to not confuse + the disassembler. Thanks to Jan Beulich & Suresh Siddha + for nice instruction selection. + The magic numbers generate mov $64bitimm,%eax ; ret $offset. */ +#define BUG() \ + asm volatile( \ + "ud2 ; .byte 0xa3 ; .quad %c1 ; .byte 0xc2 ; .short %c0" :: \ "i"(__LINE__), "i" (__stringify(__FILE__))) void out_of_line_bug(void); #else