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:
Родитель
bd353861c7
Коммит
0b930489b8
|
@ -108,3 +108,15 @@
|
|||
#else
|
||||
# define PREF(x) nop
|
||||
#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
|
||||
|
||||
call_dpf:
|
||||
setup_frame_reg
|
||||
mov.l 1f, r0
|
||||
mov r5, r8
|
||||
mov.l @r0, r6
|
||||
|
|
|
@ -285,6 +285,7 @@ ret_from_fork:
|
|||
* system calls and debug traps through their respective jump tables.
|
||||
*/
|
||||
ENTRY(system_call)
|
||||
setup_frame_reg
|
||||
#if !defined(CONFIG_CPU_SH2)
|
||||
mov.l 1f, r9
|
||||
mov.l @r9, r8 ! Read from TRA (Trap Address) Register
|
||||
|
|
Загрузка…
Ссылка в новой задаче