Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b6a68a16 authored by Andi Kleen's avatar Andi Kleen Committed by Linus Torvalds
Browse files

[PATCH] x86_64: Turn BUG data into valid instruction



This avoids confusing the disassembler. Costs 2 bytes per BUG.

Thanks to Suresh Siddha and Jan Beulich for suggesting suitable instructions.

Signed-off-by: default avatarAndi Kleen <ak@suse.de>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 2275cfa8
Loading
Loading
Loading
Loading
+10 −3
Original line number Diff line number Diff line
@@ -9,16 +9,23 @@
 */
struct bug_frame {
	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
/* 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 ; .quad %c1 ; .short %c0" :: \
	asm volatile(							\
	"ud2 ; .byte 0xa3 ; .quad %c1 ; .byte 0xc2 ; .short %c0" :: 	\
		     "i"(__LINE__), "i" (__stringify(__FILE__)))
void out_of_line_bug(void);
#else