Browse Source

Blackfin arch: update printk to use KERN_EMERG and reformat crash output

to look like:

return address: [0x0357fcc4]; contents of:
0x0357fca0:  fcbc  0357  fe20  0357  0009  0000  6a8c  0345
0x0357fcb0:  000e  0000  fcc4  0357  fd44  0357  e128  00ad
0x0357fcc0:  00a0  0000 [000e] 0000  0000  0000  0080  0000
0x0357fcd0:  0000  0000  0000  0000  00a0  0000  000e  0000

instruction in [] is the offending instruction

Signed-off-by: Robin Getz <robin.getz@analog.com>
Signed-off-by: Bryan Wu <bryan.wu@analog.com>
Robin Getz 18 years ago
parent
commit
c5d88d9e25
1 changed files with 86 additions and 55 deletions
  1. 86 55
      arch/blackfin/kernel/traps.c

+ 86 - 55
arch/blackfin/kernel/traps.c

@@ -148,8 +148,15 @@ asmlinkage void trap_c(struct pt_regs *fp)
 	unsigned long trapnr = fp->seqstat & SEQSTAT_EXCAUSE;
 
 #ifdef CONFIG_KGDB
-# define CHK_DEBUGGER_TRAP() do { CHK_DEBUGGER(trapnr, sig, info.si_code, fp,); } while (0)
-# define CHK_DEBUGGER_TRAP_MAYBE() do { if (kgdb_connected) CHK_DEBUGGER_TRAP(); } while (0)
+# define CHK_DEBUGGER_TRAP() \
+	do { \
+		CHK_DEBUGGER(trapnr, sig, info.si_code, fp); \
+	} while (0)
+# define CHK_DEBUGGER_TRAP_MAYBE() \
+	do { \
+		if (kgdb_connected) \
+			CHK_DEBUGGER_TRAP(); \
+	} while (0)
 #else
 # define CHK_DEBUGGER_TRAP() do { } while (0)
 # define CHK_DEBUGGER_TRAP_MAYBE() do { } while (0)
@@ -297,7 +304,8 @@ asmlinkage void trap_c(struct pt_regs *fp)
 		info.si_code = ILL_CPLB_MULHIT;
 #ifdef CONFIG_DEBUG_HUNT_FOR_ZERO
 		sig = SIGSEGV;
-		printk(KERN_EMERG "\n\nNULL pointer access (probably)\n");
+		printk(KERN_EMERG "\n"
+			KERN_EMERG "NULL pointer access (probably)\n");
 #else
 		sig = SIGILL;
 		printk(KERN_EMERG EXC_0x27);
@@ -418,7 +426,9 @@ asmlinkage void trap_c(struct pt_regs *fp)
 		if (current->mm) {
 			fp->pc = current->mm->start_code;
 		} else {
-			printk(KERN_EMERG "I can't return to memory that doesn't exist - bad things happen\n");
+			printk(KERN_EMERG
+				"I can't return to memory that doesn't exist"
+				" - bad things happen\n");
 			panic("Help - I've fallen and can't get up\n");
 		}
 	}
@@ -522,15 +532,19 @@ EXPORT_SYMBOL(dump_stack);
 void dump_bfin_regs(struct pt_regs *fp, void *retaddr)
 {
 	if (current->pid) {
-		printk("\nCURRENT PROCESS:\n\n");
-		printk("COMM=%s PID=%d\n", current->comm, current->pid);
+		printk(KERN_EMERG "\n" KERN_EMERG "CURRENT PROCESS:\n"
+			KERN_EMERG "\n");
+		printk(KERN_EMERG "COMM=%s PID=%d\n",
+			current->comm, current->pid);
 	} else {
 		printk
-		    ("\nNo Valid pid - Either things are really messed up, or you are in the kernel\n");
+		    (KERN_EMERG "\n" KERN_EMERG
+		     "No Valid pid - Either things are really messed up,"
+		     " or you are in the kernel\n");
 	}
 
 	if (current->mm) {
-		printk("TEXT = 0x%p-0x%p  DATA = 0x%p-0x%p\n"
+		printk(KERN_EMERG "TEXT = 0x%p-0x%p  DATA = 0x%p-0x%p\n"
 		       "BSS = 0x%p-0x%p   USER-STACK = 0x%p\n\n",
 		       (void*)current->mm->start_code,
 		       (void*)current->mm->end_code,
@@ -541,7 +555,7 @@ void dump_bfin_regs(struct pt_regs *fp, void *retaddr)
 		       (void*)current->mm->start_stack);
 	}
 
-	printk("return address: 0x%p; contents of [PC-16...PC+8]:\n", retaddr);
+	printk(KERN_EMERG "return address: [0x%p]; contents of:", retaddr);
 	if (retaddr != 0 && retaddr <= (void*)physical_mem_end
 #if L1_CODE_LENGTH != 0
 	    /* FIXME: Copy the code out of L1 Instruction SRAM through dma
@@ -550,10 +564,15 @@ void dump_bfin_regs(struct pt_regs *fp, void *retaddr)
 	         && retaddr < (void*)(L1_CODE_START + L1_CODE_LENGTH))
 #endif
 	) {
-		int i = 0;
+		int i = ((unsigned int)retaddr & 0xFFFFFFF0) - 32;
 		unsigned short x = 0;
-		for (i = -16; i < 8; i++) {
-			if (get_user(x, (unsigned short *)retaddr + i))
+		for (; i < ((unsigned int)retaddr & 0xFFFFFFF0 ) + 32 ;
+			i += 2) {
+			if ( !(i & 0xF) )
+				printk(KERN_EMERG "\n" KERN_EMERG
+					"0x%08x: ", i);
+
+			if (get_user(x, (unsigned short *)i))
 				break;
 #ifndef CONFIG_DEBUG_HWERR
 			/* If one of the last few instructions was a STI
@@ -561,53 +580,65 @@ void dump_bfin_regs(struct pt_regs *fp, void *retaddr)
 			 * and we just noticed
 			 */
 			if (x >= 0x0040 && x <= 0x0047 && i <= 0)
-				panic("\n\nWARNING : You should reconfigure the kernel to turn on\n"
-					" 'Hardware error interrupt debugging'\n"
-					" The rest of this error is meanless\n");
+				panic("\n\nWARNING : You should reconfigure"
+					" the kernel to turn on\n"
+					" 'Hardware error interrupt"
+					" debugging'\n"
+					" The rest of this error"
+					" is meanless\n");
 #endif
-
-			if (i == -8)
-				printk("\n");
-			if (i == 0)
-				printk("X\n");
-			printk("%04x ", x);
+			if ( i == (unsigned int)retaddr )
+				printk("[%04x]", x);
+			else
+				printk(" %04x ", x);
 		}
+		printk("\n" KERN_EMERG "\n");
 	} else
-		printk("Cannot look at the [PC] for it is in unreadable L1 SRAM - sorry\n");
-
-	printk("\n\n");
-
-	printk("RETE:  %08lx  RETN: %08lx  RETX: %08lx  RETS: %08lx\n",
-	       fp->rete, fp->retn, fp->retx, fp->rets);
-	printk("IPEND: %04lx  SYSCFG: %04lx\n", fp->ipend, fp->syscfg);
-	printk("SEQSTAT: %08lx    SP: %08lx\n", (long)fp->seqstat, (long)fp);
-	printk("R0: %08lx    R1: %08lx    R2: %08lx    R3: %08lx\n",
-	       fp->r0, fp->r1, fp->r2, fp->r3);
-	printk("R4: %08lx    R5: %08lx    R6: %08lx    R7: %08lx\n",
-	       fp->r4, fp->r5, fp->r6, fp->r7);
-	printk("P0: %08lx    P1: %08lx    P2: %08lx    P3: %08lx\n",
-	       fp->p0, fp->p1, fp->p2, fp->p3);
-	printk("P4: %08lx    P5: %08lx    FP: %08lx\n", fp->p4, fp->p5, fp->fp);
-	printk("A0.w: %08lx    A0.x: %08lx    A1.w: %08lx    A1.x: %08lx\n",
-	       fp->a0w, fp->a0x, fp->a1w, fp->a1x);
-
-	printk("LB0: %08lx  LT0: %08lx  LC0: %08lx\n", fp->lb0, fp->lt0,
-	       fp->lc0);
-	printk("LB1: %08lx  LT1: %08lx  LC1: %08lx\n", fp->lb1, fp->lt1,
-	       fp->lc1);
-	printk("B0: %08lx  L0: %08lx  M0: %08lx  I0: %08lx\n", fp->b0, fp->l0,
-	       fp->m0, fp->i0);
-	printk("B1: %08lx  L1: %08lx  M1: %08lx  I1: %08lx\n", fp->b1, fp->l1,
-	       fp->m1, fp->i1);
-	printk("B2: %08lx  L2: %08lx  M2: %08lx  I2: %08lx\n", fp->b2, fp->l2,
-	       fp->m2, fp->i2);
-	printk("B3: %08lx  L3: %08lx  M3: %08lx  I3: %08lx\n", fp->b3, fp->l3,
-	       fp->m3, fp->i3);
-
-	printk("\nUSP: %08lx   ASTAT: %08lx\n", rdusp(), fp->astat);
+		printk(KERN_EMERG
+			"Cannot look at the [PC] for it is"
+			"in unreadable L1 SRAM - sorry\n");
+
+
+	printk(KERN_EMERG
+		"RETE:  %08lx  RETN: %08lx  RETX: %08lx  RETS: %08lx\n",
+		fp->rete, fp->retn, fp->retx, fp->rets);
+	printk(KERN_EMERG "IPEND: %04lx  SYSCFG: %04lx\n",
+		fp->ipend, fp->syscfg);
+	printk(KERN_EMERG "SEQSTAT: %08lx    SP: %08lx\n",
+		(long)fp->seqstat, (long)fp);
+	printk(KERN_EMERG "R0: %08lx    R1: %08lx    R2: %08lx    R3: %08lx\n",
+		fp->r0, fp->r1, fp->r2, fp->r3);
+	printk(KERN_EMERG "R4: %08lx    R5: %08lx    R6: %08lx    R7: %08lx\n",
+		fp->r4, fp->r5, fp->r6, fp->r7);
+	printk(KERN_EMERG "P0: %08lx    P1: %08lx    P2: %08lx    P3: %08lx\n",
+		fp->p0, fp->p1, fp->p2, fp->p3);
+	printk(KERN_EMERG
+		"P4: %08lx    P5: %08lx    FP: %08lx\n",
+		fp->p4, fp->p5, fp->fp);
+	printk(KERN_EMERG
+		"A0.w: %08lx    A0.x: %08lx    A1.w: %08lx    A1.x: %08lx\n",
+		fp->a0w, fp->a0x, fp->a1w, fp->a1x);
+
+	printk(KERN_EMERG "LB0: %08lx  LT0: %08lx  LC0: %08lx\n",
+		fp->lb0, fp->lt0, fp->lc0);
+	printk(KERN_EMERG "LB1: %08lx  LT1: %08lx  LC1: %08lx\n",
+		fp->lb1, fp->lt1, fp->lc1);
+	printk(KERN_EMERG "B0: %08lx  L0: %08lx  M0: %08lx  I0: %08lx\n",
+		fp->b0, fp->l0, fp->m0, fp->i0);
+	printk(KERN_EMERG "B1: %08lx  L1: %08lx  M1: %08lx  I1: %08lx\n",
+		fp->b1, fp->l1, fp->m1, fp->i1);
+	printk(KERN_EMERG "B2: %08lx  L2: %08lx  M2: %08lx  I2: %08lx\n",
+		fp->b2, fp->l2, fp->m2, fp->i2);
+	printk(KERN_EMERG "B3: %08lx  L3: %08lx  M3: %08lx  I3: %08lx\n",
+		fp->b3, fp->l3, fp->m3, fp->i3);
+
+	printk(KERN_EMERG "\n" KERN_EMERG "USP: %08lx   ASTAT: %08lx\n",
+		rdusp(), fp->astat);
 	if ((long)fp->seqstat & SEQSTAT_EXCAUSE) {
-		printk(KERN_EMERG "DCPLB_FAULT_ADDR=%p\n", (void*)bfin_read_DCPLB_FAULT_ADDR());
-		printk(KERN_EMERG "ICPLB_FAULT_ADDR=%p\n", (void*)bfin_read_ICPLB_FAULT_ADDR());
+		printk(KERN_EMERG "DCPLB_FAULT_ADDR=%p\n",
+			(void *)bfin_read_DCPLB_FAULT_ADDR());
+		printk(KERN_EMERG "ICPLB_FAULT_ADDR=%p\n",
+			(void *)bfin_read_ICPLB_FAULT_ADDR());
 	}
 
 	printk("\n\n");