[ARM] pxa: don't rely on r2 being preserved over a function call
authorRussell King <rmk@dyn-67.arm.linux.org.uk>
Fri, 11 Jan 2008 12:23:58 +0000 (12:23 +0000)
committerRussell King <rmk+kernel@arm.linux.org.uk>
Sun, 20 Jan 2008 10:09:59 +0000 (10:09 +0000)
r2 is not guaranteed to be preserved over a function call, so relying
on it to store the link register over the call to sleep_phys_sp() is
unreliable.  Store the link register on the stack instead.

Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
arch/arm/mach-pxa/sleep.S

index aff71fec618ac7468cd3aca861873d86edb578a1..d0447723b73a111ea9b8edf5a531edfa36a473be 100644 (file)
@@ -43,11 +43,11 @@ pxa_cpu_save_cp:
 pxa_cpu_save_sp:
        @ preserve phys address of stack
        mov     r0, sp
-       mov     r2, lr
+       str     lr, [sp, #-4]!
        bl      sleep_phys_sp
        ldr     r1, =sleep_save_sp
        str     r0, [r1]
-       mov     pc, r2
+       ldr     pc, [sp], #4
 
 /*
  * pxa27x_cpu_suspend()
@@ -270,5 +270,3 @@ resume_after_mmu:
        mar     acc0, r2, r3
 #endif
        ldmfd   sp!, {r4 - r12, pc}             @ return to caller
-
-