Blackfin arch: fix bux - only reset the PC when necessary, otherwise gdb gets confused
authorRobin Getz <robin.getz@analog.com>
Mon, 12 Nov 2007 14:46:46 +0000 (22:46 +0800)
committerBryan Wu <bryan.wu@analog.com>
Mon, 12 Nov 2007 14:46:46 +0000 (22:46 +0800)
Signed-off-by: Robin Getz <robin.getz@analog.com>
Signed-off-by: Bryan Wu <bryan.wu@analog.com>
arch/blackfin/kernel/traps.c

index aaddb72..ce9981b 100644 (file)
@@ -158,7 +158,7 @@ static void decode_address(char *buf, unsigned long address)
        }
 
        /* we were unable to find this address anywhere */
-       sprintf(buf, "[<0x%p>]", (void *)address);
+       sprintf(buf, "<0x%p> /* unknown address */", (void *)address);
 
 done:
        write_unlock_irqrestore(&tasklist_lock, flags);
@@ -467,7 +467,8 @@ asmlinkage void trap_c(struct pt_regs *fp)
                /* Ensure that bad return addresses don't end up in an infinite
                 * loop, due to speculative loads/reads
                 */
-               fp->pc = SAFE_USER_INSTRUCTION;
+               if (trapnr == VEC_CPLB_I_M)
+                       fp->pc = SAFE_USER_INSTRUCTION;
        }
        info.si_signo = sig;
        info.si_errno = 0;