Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+12 −0
Original line number Diff line number Diff line
@@ -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
+1 −0
Original line number Diff line number Diff line
@@ -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
+1 −0
Original line number Diff line number Diff line
@@ -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