aboutsummaryrefslogtreecommitdiffstats
path: root/arch/blackfin/kernel
diff options
context:
space:
mode:
authorRobin Getz <robin.getz@analog.com>2007-11-12 22:46:46 +0800
committerBryan Wu <bryan.wu@analog.com>2007-11-12 22:46:46 +0800
commit4a589e1ef67fdb2d5fa783117da8dc7cba576af4 (patch)
treedc57f195ee6d74184e086a1fee329451dfa0faf2 /arch/blackfin/kernel
parentBlackfin arch: ensure we work around ANOMALY_05000261 for null pointers (diff)
downloadlinux-dev-4a589e1ef67fdb2d5fa783117da8dc7cba576af4.tar.xz
linux-dev-4a589e1ef67fdb2d5fa783117da8dc7cba576af4.zip
Blackfin arch: fix bux - only reset the PC when necessary, otherwise gdb gets confused
Signed-off-by: Robin Getz <robin.getz@analog.com> Signed-off-by: Bryan Wu <bryan.wu@analog.com>
Diffstat (limited to 'arch/blackfin/kernel')
-rw-r--r--arch/blackfin/kernel/traps.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/arch/blackfin/kernel/traps.c b/arch/blackfin/kernel/traps.c
index aaddb724a5fb..ce9981b5339b 100644
--- a/arch/blackfin/kernel/traps.c
+++ b/arch/blackfin/kernel/traps.c
@@ -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;