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

Commit 049cdefe authored by Jan Beulich's avatar Jan Beulich Committed by Linus Torvalds
Browse files

[PATCH] x86-64: reduce x86-64 bug frame by 4 bytes



As mentioned before, the size of the bug frame can be further reduced while
continuing to use instructions to encode the information.

Signed-off-by: default avatarJan Beulich <jbeulich@novell.com>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent c47a3167
Loading
Loading
Loading
Loading
+4 −4
Original line number Original line Diff line number Diff line
@@ -321,13 +321,13 @@ void handle_BUG(struct pt_regs *regs)
	if (__copy_from_user(&f, (struct bug_frame *) regs->rip, 
	if (__copy_from_user(&f, (struct bug_frame *) regs->rip, 
			     sizeof(struct bug_frame)))
			     sizeof(struct bug_frame)))
		return; 
		return; 
	if ((unsigned long)f.filename < __PAGE_OFFSET || 
	if (f.filename >= 0 ||
	    f.ud2[0] != 0x0f || f.ud2[1] != 0x0b) 
	    f.ud2[0] != 0x0f || f.ud2[1] != 0x0b) 
		return;
		return;
	if (__get_user(tmp, f.filename))
	if (__get_user(tmp, (char *)(long)f.filename))
		f.filename = "unmapped filename"; 
		f.filename = (int)(long)"unmapped filename";
	printk("----------- [cut here ] --------- [please bite here ] ---------\n");
	printk("----------- [cut here ] --------- [please bite here ] ---------\n");
	printk(KERN_ALERT "Kernel BUG at %.50s:%d\n", f.filename, f.line);
	printk(KERN_ALERT "Kernel BUG at %.50s:%d\n", (char *)(long)f.filename, f.line);
} 
} 


#ifdef CONFIG_BUG
#ifdef CONFIG_BUG
+4 −6
Original line number Original line Diff line number Diff line
@@ -9,10 +9,8 @@
 */
 */
struct bug_frame {
struct bug_frame {
	unsigned char ud2[2];
	unsigned char ud2[2];
	unsigned char mov;
	unsigned char push;
	/* should use 32bit offset instead, but the assembler doesn't 
	signed int filename;
	   like it */
	char *filename;
	unsigned char ret;
	unsigned char ret;
	unsigned short line;
	unsigned short line;
} __attribute__((packed));
} __attribute__((packed));
@@ -25,8 +23,8 @@ struct bug_frame {
   The magic numbers generate mov $64bitimm,%eax ; ret $offset. */
   The magic numbers generate mov $64bitimm,%eax ; ret $offset. */
#define BUG() 								\
#define BUG() 								\
	asm volatile(							\
	asm volatile(							\
	"ud2 ; .byte 0xa3 ; .quad %c1 ; .byte 0xc2 ; .short %c0" :: 	\
	"ud2 ; pushq $%c1 ; ret $%c0" :: 				\
		     "i"(__LINE__), "i" (__stringify(__FILE__)))
		     "i"(__LINE__), "i" (__FILE__))
void out_of_line_bug(void);
void out_of_line_bug(void);
#else
#else
static inline void out_of_line_bug(void) { }
static inline void out_of_line_bug(void) { }