Commit 0b930489 authored by Matt Fleming's avatar Matt Fleming Committed by Paul Mundt

sh: Setup the frame register in asm code

In order to use DWARF unwinder info the frame register has to contain a
valid value. Whilst GCC takes care of this for C code, we have to do it
ourselves for assembly.
Signed-off-by: default avatarMatt Fleming <matt@console-pimps.org>
Signed-off-by: default avatarPaul Mundt <lethal@linux-sh.org>
parent bd353861
...@@ -108,3 +108,15 @@ ...@@ -108,3 +108,15 @@
#else #else
# define PREF(x) nop # define PREF(x) nop
#endif #endif
/*
* Macro for use within assembly. Because the DWARF unwinder
* needs to use the frame register to unwind the stack, we
* need to setup r14 with the value of the stack pointer as
* the return address is usually on the stack somewhere.
*/
.macro setup_frame_reg
#ifdef CONFIG_DWARF_UNWINDER
mov r15, r14
#endif
.endm
...@@ -137,6 +137,7 @@ ENTRY(tlb_protection_violation_store) ...@@ -137,6 +137,7 @@ ENTRY(tlb_protection_violation_store)
mov #1, r5 mov #1, r5
call_dpf: call_dpf:
setup_frame_reg
mov.l 1f, r0 mov.l 1f, r0
mov r5, r8 mov r5, r8
mov.l @r0, r6 mov.l @r0, r6
......
...@@ -285,6 +285,7 @@ ret_from_fork: ...@@ -285,6 +285,7 @@ ret_from_fork:
* system calls and debug traps through their respective jump tables. * system calls and debug traps through their respective jump tables.
*/ */
ENTRY(system_call) ENTRY(system_call)
setup_frame_reg
#if !defined(CONFIG_CPU_SH2) #if !defined(CONFIG_CPU_SH2)
mov.l 1f, r9 mov.l 1f, r9
mov.l @r9, r8 ! Read from TRA (Trap Address) Register mov.l @r9, r8 ! Read from TRA (Trap Address) Register
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment