From 4077eac8398345d3500be794190eec83852135ba Mon Sep 17 00:00:00 2001 From: Boris Gjenero Date: Thu, 23 May 2013 19:31:33 -0400 Subject: 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 --- lib/unwarminder/safe_read.S | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 -- cgit v1.2.3