summaryrefslogtreecommitdiffstats
path: root/arch/xtensa
diff options
context:
space:
mode:
authorMax Filippov <jcmvbkbc@gmail.com>2014-08-04 03:55:53 +0200
committerMax Filippov <jcmvbkbc@gmail.com>2014-08-14 09:59:30 +0200
commita83b02e9bd0c28d27b6c6e5b184585f7a1b8bf86 (patch)
tree13cec9be08c9e9d5382d7f7f886e040447cebdd5 /arch/xtensa
parentxtensa: move invalid unaligned instruction handler closer to its users (diff)
downloadlinux-a83b02e9bd0c28d27b6c6e5b184585f7a1b8bf86.tar.xz
linux-a83b02e9bd0c28d27b6c6e5b184585f7a1b8bf86.zip
xtensa: allow single-stepping through unaligned load/store
Update icount when icountlevel is non-zero but not greater than EXCM level when load/store instruction is successfully emulated. This allows single-stepping over such instruction in userspace debugger. Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
Diffstat (limited to 'arch/xtensa')
-rw-r--r--arch/xtensa/kernel/align.S8
1 files changed, 8 insertions, 0 deletions
diff --git a/arch/xtensa/kernel/align.S b/arch/xtensa/kernel/align.S
index 87d80d8c33e5..890004af03a9 100644
--- a/arch/xtensa/kernel/align.S
+++ b/arch/xtensa/kernel/align.S
@@ -421,6 +421,14 @@ ENTRY(fast_unaligned)
1: wsr a7, epc1 # skip emulated instruction
+ /* Update icount if we're single-stepping in userspace. */
+ rsr a4, icountlevel
+ beqz a4, 1f
+ bgeui a4, LOCKLEVEL + 1, 1f
+ rsr a4, icount
+ addi a4, a4, 1
+ wsr a4, icount
+1:
movi a4, 0
rsr a3, excsave1
s32i a4, a3, EXC_TABLE_FIXUP