X-Git-Url: https://git.openpandora.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=include%2Fasm-x86_64%2Fbug.h;h=80ac1fe966ac13ec3be908b2ec94bfaccefb40cc;hb=b219e3ac66183fc9771b94af931fb5fd41d586ec;hp=3d2a666a5dd536f95239f2637c1ee87c4bb48376;hpb=105adfc63f921a9976c5abc4ff079e9fec197ed7;p=pandora-kernel.git diff --git a/include/asm-x86_64/bug.h b/include/asm-x86_64/bug.h index 3d2a666a5dd5..80ac1fe966ac 100644 --- a/include/asm-x86_64/bug.h +++ b/include/asm-x86_64/bug.h @@ -8,18 +8,23 @@ * this frame. */ struct bug_frame { - unsigned char ud2[2]; - /* should use 32bit offset instead, but the assembler doesn't - like it */ - char *filename; + unsigned char ud2[2]; + unsigned char push; + signed int 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" :: \ - "i"(__LINE__), "i" (__stringify(__FILE__))) +/* 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 ; pushq $%c1 ; ret $%c0" :: \ + "i"(__LINE__), "i" (__FILE__)) void out_of_line_bug(void); #else static inline void out_of_line_bug(void) { }