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>
This commit is contained in:
parent
4bf3f3cbb6
commit
c5d88d9e25
1 changed files with 82 additions and 51 deletions
|
@ -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(KERN_EMERG
|
||||
"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(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("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(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("\nUSP: %08lx ASTAT: %08lx\n", rdusp(), fp->astat);
|
||||
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");
|
||||
|
|
Loading…
Reference in a new issue