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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



reduce x86-64 bug frame by 4 bytes

From: Jan Beulich <[email protected]>

(Note: Patch also attached because the inline version is certain to
get
line wrapped.)

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: Jan Beulich <[email protected]>

diff -Npru 2.6.13/arch/x86_64/kernel/traps.c
2.6.13-x86_64-bug-reduction/arch/x86_64/kernel/traps.c
--- 2.6.13/arch/x86_64/kernel/traps.c	2005-08-29 01:41:01.000000000
+0200
+++
2.6.13-x86_64-bug-reduction/arch/x86_64/kernel/traps.c	2005-09-09
11:48:11.009725672 +0200
@@ -323,13 +323,13 @@ void handle_BUG(struct pt_regs *regs)
 	if (__copy_from_user(&f, (struct bug_frame *) regs->rip, 
 			     sizeof(struct bug_frame)))
 		return; 
-	if ((unsigned long)f.filename < __PAGE_OFFSET || 
+	if (f.filename >= 0 || 
 	    f.ud2[0] != 0x0f || f.ud2[1] != 0x0b) 
 		return;
-	if (__get_user(tmp, f.filename))
-		f.filename = "unmapped filename"; 
+	if (__get_user(tmp, (char *)(long)f.filename))
+		f.filename = (int)(long)"unmapped filename"; 
 	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
diff -Npru 2.6.13/include/asm-x86_64/bug.h
2.6.13-x86_64-bug-reduction/include/asm-x86_64/bug.h
--- 2.6.13/include/asm-x86_64/bug.h	2005-08-29 01:41:01.000000000
+0200
+++
2.6.13-x86_64-bug-reduction/include/asm-x86_64/bug.h	2005-09-09
11:31:11.611697728 +0200
@@ -9,10 +9,8 @@
  */
 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 push;
+	signed int filename;
 	unsigned char ret;
 	unsigned short line;
 } __attribute__((packed));
@@ -25,8 +23,8 @@ struct bug_frame {
    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__)))
+	"ud2 ; pushq $%c1 ; ret $%c0" ::
				\
+		     "i"(__LINE__), "i" (__FILE__))
 void out_of_line_bug(void);
 #else
 static inline void out_of_line_bug(void) { }

Attachment: linux-2.6.13-x86_64-bug-reduction.patch
Description: Binary data


[Index of Archives]     [Kernel Newbies]     [Netfilter]     [Bugtraq]     [Photo]     [Gimp]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Video 4 Linux]     [Linux for the blind]
  Powered by Linux