summaryrefslogtreecommitdiffstats
path: root/arch/arc
diff options
context:
space:
mode:
authorVineet Gupta <vgupta@synopsys.com>2013-04-06 13:41:58 +0200
committerVineet Gupta <vgupta@synopsys.com>2013-05-07 10:13:55 +0200
commitce147c7445c28fcf38813f62b2a2bb1266db9ef4 (patch)
tree6c55d139cd6b38ba3368e18b326c0304216f6f4a /arch/arc
parentARC: unaligned access emulation error handling consolidation (diff)
downloadlinux-ce147c7445c28fcf38813f62b2a2bb1266db9ef4.tar.xz
linux-ce147c7445c28fcf38813f62b2a2bb1266db9ef4.zip
ARC: unaligned access emulation broken if callee-reg dest of LD/ST
The fixup code correctly updates the callee-regs on stack, but fails to unwind it into actual register file. Thus userspace won't see the update. Reported-by: Noam Camus <noamc@ezchip.com> Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
Diffstat (limited to 'arch/arc')
-rw-r--r--arch/arc/kernel/entry.S4
1 files changed, 3 insertions, 1 deletions
diff --git a/arch/arc/kernel/entry.S b/arch/arc/kernel/entry.S
index 666a486f1e7b..0c6d664d4a83 100644
--- a/arch/arc/kernel/entry.S
+++ b/arch/arc/kernel/entry.S
@@ -396,7 +396,9 @@ ARC_ENTRY EV_TLBProtV
bl do_misaligned_access
- DISCARD_CALLEE_SAVED_USER
+ ; TBD: optimize - do this only if a callee reg was involved
+ ; either a dst of emulated LD/ST or src with address-writeback
+ RESTORE_CALLEE_SAVED_USER
#else
bl do_misaligned_error
#endif