mirror of
https://github.com/torvalds/linux
synced 2024-11-05 18:23:50 +00:00
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: Matt Fleming <matt@console-pimps.org> Signed-off-by: Paul Mundt <lethal@linux-sh.org>
This commit is contained in:
parent
bd353861c7
commit
0b930489b8
3 changed files with 14 additions and 0 deletions
|
@ -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)
|
||||||
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:
|
||||||
* 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
|
||||||
|
|
Loading…
Reference in a new issue