iwUN(ʻHZ VhV2M ;xML#28io(6lZuv%(MUHdѱYRȬdSE}jL>f)"hGO+,O{T#nb
#3՚s}(W7aRb_7Q|]:Xuy 2A`Z!''n(/y~"2+)?g4vz,U}u?e)55[fO'0b.\yZb[@P~^~Lo:!ټ	6VnH_!އ.:fAd W$5vovFXQ=X1YfQ.!cQb2MҟoE#g4%@
kax;w_ly,2\,y+/)̎8h_B쁙qpJK-:Z'g!R^kfNv8wnE=U5 7fN}o>7[N+!ek(ADQD7fN wjjr W*
Aޛ uP-z_*R3`Bb$L#lfM+,C]gWhDf:мPꅤW&u2bn\v79ˀQ|ZV~^,'N=yh_u[+O%~`\]	/;Js7g<S|K*x[AihlIte6uFtOy`5tt{2q=mxh8Rvۺ!*`L	F H-0
 W.T0\zCP ޿̇pGb^Q)tyBjMIќ첁O$s1f5T0G"D%@h6vp,D.FC_l^='v6ɺbBo`P^h+ܪH%8>\ͪ_Qw9Z02hj⿝FONR3yx`;#%ljq 2hiDnQb*)oLL\F<El
x6
(d^"ox#w2UP "_X:D4/΂>n޸n8J^:eln:PL|z:N^mHҷ<`dbZdBpOU 3/B&RM7֘Ȯ/T*@uX"FÈ$n<}A&[u6<0F:ly袻HO)1vZ"8	:ǁqo_vf6$ܡU~3L.rVBga쥕&RW|ܙFJҘ7TC?<\VP"!P "=n2X Vd%B\|7l^fp{drz՟Ma&rܭf ff 21 e0 55 89 e5 57 56 53 8b 00 81 b8 e4 01 00 00 0f 27 00 00 75 08 <0f> 0b 22 03 85 18 2f c0 8b 45 08 50 e8 30 d4 00 00 89 c7 83 c4 


>>EIP; c014fedf No symbols available   <=====

Trace; c0109213 No symbols available

This architecture has variable length instructions, decoding before eip
is unreliable, take these instructions with a pinch of salt.

Code;  c014feb4 No symbols available
00000000 <_EIP>:
Code;  c014feb4 No symbols available
   0:   14 98                     adc    $0x98,%al
Code;  c014feb6 No symbols available
   2:   f0 81 41 04 00 00 00      lock addl $0x1000000,0x4(%ecx)
Code;  c014febd No symbols available
   9:   01 
Code;  c014febe No symbols available
   a:   5b                        pop    %ebx
Code;  c014febf No symbols available
   b:   89 ec                     mov    %ebp,%esp
Code;  c014fec1 No symbols available
   d:   5d                        pop    %ebp
Code;  c014fec2 No symbols available
   e:   c3                        ret    
Code;  c014fec3 No symbols available
   f:   90                        nop    
Code;  c014fec4 No symbols available
  10:   b8 00 e0 ff ff            mov    $0xffffe000,%eax
Code;  c014fec9 No symbols available
  15:   21 e0                     and    %esp,%eax
Code;  c014fecb No symbols available
  17:   55                        push   %ebp
Code;  c014fecc No symbols available
  18:   89 e5                     mov    %esp,%ebp
Code;  c014fece No symbols available
  1a:   57                        push   %edi
Code;  c014fecf No symbols available
  1b:   56                        push   %esi
Code;  c014fed0 No symbols available
  1c:   53                        push   %ebx
Code;  c014fed1 No symbols available
  1d:   8b 00                     mov    (%eax),%eax
Code;  c014fed3 No symbols available
  1f:   81 b8 e4 01 00 00 0f      cmpl   $0x270f,0x1e4(%eax)
Code;  c014feda No symbols available
  26:   27 00 00 
Code;  c014fedd No symbols available
  29:   75 08                     jne    33 <_EIP+0x33> c014fee7 No symbols available

This decode from eip onwards should be reliable

Code;  c014fedf No symbols available
00000000 <_EIP>:
Code;  c014fedf No symbols available   <=====
   0:   0f 0b                     ud2a      <=====
Code;  c014fee1 No symbols available
   2:   22 03                     and    (%ebx),%al
Code;  c014fee3 No symbols available
   4:   85 18                     test   %ebx,(%eax)
Code;  c014fee5 No symbols available
   6:   2f                        das    
Code;  c014fee6 No symbols available
   7:   c0 8b 45 08 50 e8 30      rorb   $0x30,0xe8500845(%ebx)
Code;  c014feed No symbols available
   e:   d4 00                     aam    $0x0
Code;  c014feef No symbols available
  10:   00                        .byte 0x0
Code;  c014fef0 No symbols available
  11:   89 c7                     mov    %eax,%edi
Code;  c014fef2 No symbols available
  13:   83                        .byte 0x83
Code;  c014fef3 No symbols available
  14:   c4                        .byte 0xc4




---

 25-akpm/arch/i386/kernel/traps.c |   18 ++++++++++--------
 1 files changed, 10 insertions(+), 8 deletions(-)

diff -puN arch/i386/kernel/traps.c~oops-dump-preceding-code arch/i386/kernel/traps.c
--- 25/arch/i386/kernel/traps.c~oops-dump-preceding-code	Wed Mar 10 15:47:34 2004
+++ 25-akpm/arch/i386/kernel/traps.c	Wed Mar 10 15:48:20 2004
@@ -210,7 +210,7 @@ void show_registers(struct pt_regs *regs
 		ss = regs->xss & 0xffff;
 	}
 	print_modules();
-	printk("CPU:    %d\nEIP:    %04x:[<%08lx>]    %s\nEFLAGS: %08lx"
+	printk("CPU:    %d\nEIP:    %04x:[<%08lx>]    %s VLI\nEFLAGS: %08lx"
 			"   (%s) \n",
 		smp_processor_id(), 0xffff & regs->xcs, regs->eip,
 		print_tainted(), regs->eflags, UTS_RELEASE);
@@ -228,23 +228,25 @@ void show_registers(struct pt_regs *regs
 	 * time of the fault..
 	 */
 	if (in_kernel) {
+		u8 *eip;
 
 		printk("\nStack: ");
 		show_stack(NULL, (unsigned long*)esp);
 
 		printk("Code: ");
-		if(regs->eip < PAGE_OFFSET)
-			goto bad;
 
-		for(i=0;i<20;i++)
-		{
+		eip = (u8 *)regs->eip - 43;
+		for (i = 0; i < 64; i++, eip++) {
 			unsigned char c;
-			if(__get_user(c, &((unsigned char*)regs->eip)[i])) {
-bad:
+
+			if (eip < (u8 *)PAGE_OFFSET || __get_user(c, eip)) {
 				printk(" Bad EIP value.");
 				break;
 			}
-			printk("%02x ", c);
+			if (eip == (u8 *)regs->eip)
+				printk("<%02x> ", c);
+			else
+				printk("%02x ", c);
 		}
 	}
 	printk("\n");

_
