Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

3 Commits   0 Branches   0 Tags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   1) /* SPDX-License-Identifier: GPL-2.0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   2)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   3)  * arch/sh/lib/mcount.S
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   4)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   5)  *  Copyright (C) 2008, 2009  Paul Mundt
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   6)  *  Copyright (C) 2008, 2009  Matt Fleming
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   7)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   8) #include <asm/ftrace.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   9) #include <asm/thread_info.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  10) #include <asm/asm-offsets.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  11) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  12) #define MCOUNT_ENTER()		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  13) 	mov.l	r4, @-r15;	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  14) 	mov.l	r5, @-r15;	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  15) 	mov.l	r6, @-r15;	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  16) 	mov.l	r7, @-r15;	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  17) 	sts.l	pr, @-r15;	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  18) 				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  19) 	mov.l	@(20,r15),r4;	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  20) 	sts	pr, r5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  21) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  22) #define MCOUNT_LEAVE()		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  23) 	lds.l	@r15+, pr;	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  24) 	mov.l	@r15+, r7;	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  25) 	mov.l	@r15+, r6;	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  26) 	mov.l	@r15+, r5;	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  27) 	rts;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  28) 	 mov.l	@r15+, r4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  29) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  30) #ifdef CONFIG_STACK_DEBUG
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  31) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  32)  * Perform diagnostic checks on the state of the kernel stack.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  33)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  34)  * Check for stack overflow. If there is less than 1KB free
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  35)  * then it has overflowed.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  36)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  37)  * Make sure the stack pointer contains a valid address. Valid
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  38)  * addresses for kernel stacks are anywhere after the bss
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  39)  * (after __bss_stop) and anywhere in init_thread_union (init_stack).
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  40)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  41) #define STACK_CHECK()					\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  42) 	mov	#(THREAD_SIZE >> 10), r0;		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  43) 	shll8	r0;					\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  44) 	shll2	r0;					\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  45) 							\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  46) 	/* r1 = sp & (THREAD_SIZE - 1) */		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  47) 	mov	#-1, r1;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  48) 	add	r0, r1;					\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  49) 	and	r15, r1;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  50) 							\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  51) 	mov	#TI_SIZE, r3;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  52) 	mov	#(STACK_WARN >> 8), r2;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  53) 	shll8	r2;					\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  54) 	add	r3, r2;					\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  55) 							\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  56) 	/* Is the stack overflowing? */			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  57) 	cmp/hi	r2, r1;					\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  58) 	bf	stack_panic;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  59) 							\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  60) 	/* If sp > __bss_stop then we're OK. */		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  61) 	mov.l	.L_ebss, r1;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  62) 	cmp/hi	r1, r15;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  63) 	bt	1f;					\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  64) 							\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  65) 	/* If sp < init_stack, we're not OK. */		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  66) 	mov.l	.L_init_thread_union, r1;		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  67) 	cmp/hs	r1, r15;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  68) 	bf	stack_panic;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  69) 							\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  70) 	/* If sp > init_stack && sp < __bss_stop, not OK. */	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  71) 	add	r0, r1;					\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  72) 	cmp/hs	r1, r15;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  73) 	bt	stack_panic;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  74) 1:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  75) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  76) #define STACK_CHECK()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  77) #endif /* CONFIG_STACK_DEBUG */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  78) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  79) 	.align 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  80) 	.globl	_mcount
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  81) 	.type	_mcount,@function
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  82) 	.globl	mcount
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  83) 	.type	mcount,@function
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  84) _mcount:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  85) mcount:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  86) 	STACK_CHECK()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  87) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  88) #ifndef CONFIG_FUNCTION_TRACER
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  89) 	rts
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  90) 	 nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  91) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  92) 	MCOUNT_ENTER()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  93) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  94) #ifdef CONFIG_DYNAMIC_FTRACE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  95) 	.globl	mcount_call
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  96) mcount_call:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  97) 	mov.l	.Lftrace_stub, r6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  98) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  99) 	mov.l	.Lftrace_trace_function, r6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) 	mov.l	ftrace_stub, r7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) 	cmp/eq	r6, r7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) 	bt	skip_trace
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) 	mov.l	@r6, r6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) 	jsr	@r6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) 	 nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) #ifdef CONFIG_FUNCTION_GRAPH_TRACER
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) 	mov.l   .Lftrace_graph_return, r6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) 	mov.l   .Lftrace_stub, r7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) 	cmp/eq  r6, r7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) 	bt      1f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) 	mov.l   .Lftrace_graph_caller, r0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) 	jmp     @r0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) 	 nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) 1:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) 	mov.l	.Lftrace_graph_entry, r6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) 	mov.l	.Lftrace_graph_entry_stub, r7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) 	cmp/eq	r6, r7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) 	bt	skip_trace
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) 	mov.l   .Lftrace_graph_caller, r0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) 	jmp	@r0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) 	 nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) 	.align 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) .Lftrace_graph_return:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) 	.long   ftrace_graph_return
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) .Lftrace_graph_entry:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) 	.long   ftrace_graph_entry
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) .Lftrace_graph_entry_stub:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) 	.long   ftrace_graph_entry_stub
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) .Lftrace_graph_caller:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) 	.long   ftrace_graph_caller
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) #endif /* CONFIG_FUNCTION_GRAPH_TRACER */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) 	.globl skip_trace
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) skip_trace:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) 	MCOUNT_LEAVE()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) 	.align 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) .Lftrace_trace_function:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) 	.long   ftrace_trace_function
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) #ifdef CONFIG_DYNAMIC_FTRACE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) #ifdef CONFIG_FUNCTION_GRAPH_TRACER
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151)  * NOTE: Do not move either ftrace_graph_call or ftrace_caller
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152)  * as this will affect the calculation of GRAPH_INSN_OFFSET.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) 	.globl ftrace_graph_call
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) ftrace_graph_call:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) 	mov.l	.Lskip_trace, r0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) 	jmp	@r0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) 	 nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) 	.align 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) .Lskip_trace:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) 	.long	skip_trace
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) #endif /* CONFIG_FUNCTION_GRAPH_TRACER */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) 	.globl ftrace_caller
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) ftrace_caller:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) 	MCOUNT_ENTER()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) 	.globl ftrace_call
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) ftrace_call:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) 	mov.l	.Lftrace_stub, r6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) 	jsr	@r6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) 	 nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) #ifdef CONFIG_FUNCTION_GRAPH_TRACER
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) 	bra	ftrace_graph_call
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) 	 nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179) 	MCOUNT_LEAVE()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) #endif /* CONFIG_FUNCTION_GRAPH_TRACER */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) #endif /* CONFIG_DYNAMIC_FTRACE */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183) 	.align 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186)  * NOTE: From here on the locations of the .Lftrace_stub label and
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187)  * ftrace_stub itself are fixed. Adding additional data here will skew
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188)  * the displacement for the memory table and break the block replacement.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189)  * Place new labels either after the ftrace_stub body, or before
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190)  * ftrace_caller. You have been warned.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) .Lftrace_stub:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193) 	.long	ftrace_stub
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) 	.globl	ftrace_stub
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) ftrace_stub:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197) 	rts
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198) 	 nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200) #ifdef CONFIG_FUNCTION_GRAPH_TRACER
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) 	.globl	ftrace_graph_caller
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) ftrace_graph_caller:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203) 	mov.l	2f, r1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204) 	jmp	@r1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205) 	 nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206) 1:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208) 	 * MCOUNT_ENTER() pushed 5 registers onto the stack, so
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209) 	 * the stack address containing our return address is
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210) 	 * r15 + 20.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212) 	mov	#20, r0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213) 	add	r15, r0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214) 	mov	r0, r4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216) 	mov.l	.Lprepare_ftrace_return, r0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217) 	jsr	@r0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218) 	 nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 220) 	MCOUNT_LEAVE()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 221) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 222) 	.align 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 223) 2:	.long	skip_trace
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 224) .Lprepare_ftrace_return:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 225) 	.long	prepare_ftrace_return
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 226) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 227) 	.globl	return_to_handler
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 228) return_to_handler:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 229) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 230) 	 * Save the return values.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 231) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 232) 	mov.l	r0, @-r15
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 233) 	mov.l	r1, @-r15
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 234) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 235) 	mov	#0, r4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 236) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 237) 	mov.l	.Lftrace_return_to_handler, r0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 238) 	jsr	@r0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 239) 	 nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 240) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 241) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 242) 	 * The return value from ftrace_return_handler has the real
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 243) 	 * address that we should return to.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 244) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 245) 	lds	r0, pr
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 246) 	mov.l	@r15+, r1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 247) 	rts
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 248) 	 mov.l	@r15+, r0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 249) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 250) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 251) 	.align 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 252) .Lftrace_return_to_handler:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 253) 	.long	ftrace_return_to_handler
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 254) #endif /* CONFIG_FUNCTION_GRAPH_TRACER */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 255) #endif /* CONFIG_FUNCTION_TRACER */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 256) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 257) #ifdef CONFIG_STACK_DEBUG
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 258) 	.globl	stack_panic
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 259) stack_panic:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 260) 	mov.l	.Ldump_stack, r0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 261) 	jsr	@r0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 262) 	 nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 263) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 264) 	mov.l	.Lpanic, r0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 265) 	jsr	@r0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 266) 	 mov.l	.Lpanic_s, r4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 267) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 268) 	rts
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 269) 	 nop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 270) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 271) 	.align 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 272) .L_init_thread_union:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 273) 	.long	init_thread_union
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 274) .L_ebss:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 275) 	.long	__bss_stop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 276) .Lpanic:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 277) 	.long	panic
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 278) .Lpanic_s:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 279) 	.long	.Lpanic_str
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 280) .Ldump_stack:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 281) 	.long	dump_stack
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 282) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 283) 	.section	.rodata
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 284) 	.align 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 285) .Lpanic_str:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 286) 	.string "Stack error"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 287) #endif /* CONFIG_STACK_DEBUG */