summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorBoris Gjenero <boris.gjenero@gmail.com>2013-05-23 19:31:33 -0400
committerBoris Gjenero <boris.gjenero@gmail.com>2013-05-23 19:51:19 -0400
commit4077eac8398345d3500be794190eec83852135ba (patch)
tree6bd984a3cd967250b212b804c4e8b4d793b002df /lib
parent9b65f8e658768b14ae917341f57d774f729447fe (diff)
downloadrockbox-4077eac8398345d3500be794190eec83852135ba.tar.gz
rockbox-4077eac8398345d3500be794190eec83852135ba.tar.bz2
rockbox-4077eac8398345d3500be794190eec83852135ba.zip
Fix return address when data_abort_handler skips faulting instruction.
When writing a value to PC, execution continues at that location, so subtracting 4 returns to the next instruction. Previously, two instructions after the faulting instruction were being skipped, causing safe_read functions to return true even if a data abort happened. Change-Id: I3fd02d54646323ea2050d0504e38f6d22f09c749
Diffstat (limited to 'lib')
-rw-r--r--lib/unwarminder/safe_read.S2
1 files changed, 1 insertions, 1 deletions
diff --git a/lib/unwarminder/safe_read.S b/lib/unwarminder/safe_read.S
index d18bf49c04..1969c7e0c6 100644
--- a/lib/unwarminder/safe_read.S
+++ b/lib/unwarminder/safe_read.S
@@ -137,6 +137,6 @@ data_abort_handler:
@ restore registers
ldmfd sp!, {r0-r1}
@ restore mode and jump back to the *next* instruction
- subs pc, lr, #-4
+ subs pc, lr, #4
.size data_abort_handler, . - data_abort_handler
#endif