/* SPDX-License-Identifier: GPL-2.0 */
/*
 * Copyright (C) 2000 Anton Blanchard (anton@linuxcare.com)
 *
 * This file implements mcount(), which is used to collect profiling data.
 * This can also be tweaked for kernel stack overflow detection.
 */

#include <linux/export.h>
#include <linux/linkage.h>

/*
 * This is the main variant and is called by C code.  GCC's -pg option
 * automatically instruments every C function with a call to this.
 */

	.text
	.align		32
	.globl		_mcount
	.type		_mcount,#function
	EXPORT_SYMBOL(_mcount)
	.globl		mcount
	.type		mcount,#function
_mcount:
mcount:
#ifdef CONFIG_FUNCTION_TRACER
#ifdef CONFIG_DYNAMIC_FTRACE
	/* Do nothing, the retl/nop below is all we need.  */
#else
	sethi		%hi(ftrace_trace_function), %g1
	sethi		%hi(ftrace_stub), %g2
	ldx		[%g1 + %lo(ftrace_trace_function)], %g1
	or		%g2, %lo(ftrace_stub), %g2
	cmp		%g1, %g2
	be,pn		%icc, 1f
	 mov		%i7, %g3
	save		%sp, -176, %sp
	mov		%g3, %o1
	jmpl		%g1, %o7
	 mov		%i7, %o0
	ret
	 restore
	/* not reached */
1:
#ifdef CONFIG_FUNCTION_GRAPH_TRACER
	sethi		%hi(ftrace_graph_return), %g1
	ldx		[%g1 + %lo(ftrace_graph_return)], %g3
	cmp		%g2, %g3
	bne,pn		%xcc, 5f
	 sethi		%hi(ftrace_graph_entry_stub), %g2
	sethi		%hi(ftrace_graph_entry), %g1
	or		%g2, %lo(ftrace_graph_entry_stub), %g2
	ldx		[%g1 + %lo(ftrace_graph_entry)], %g1
	cmp		%g1, %g2
	be,pt		%xcc, 2f
	 nop
5:	mov		%i7, %g2
	mov		%fp, %g3
	save		%sp, -176, %sp
	mov		%g2, %l0
	ba,pt		%xcc, ftrace_graph_caller
	 mov		%g3, %l1
#endif
2:
#endif
#endif
	retl
	 nop
	.size		_mcount,.-_mcount
	.size		mcount,.-mcount

#ifdef CONFIG_FUNCTION_TRACER
	.globl		ftrace_stub
	.type		ftrace_stub,#function
ftrace_stub:
	retl
	 nop
	.size		ftrace_stub,.-ftrace_stub
#ifdef CONFIG_DYNAMIC_FTRACE
	.globl		ftrace_caller
	.type		ftrace_caller,#function
ftrace_caller:
	mov		%i7, %g2
	mov		%fp, %g3
	save		%sp, -176, %sp
	mov		%g2, %o1
	mov		%g2, %l0
	mov		%g3, %l1
	.globl		ftrace_call
ftrace_call:
	call		ftrace_stub
	 mov		%i7, %o0
#ifdef CONFIG_FUNCTION_GRAPH_TRACER
	.globl		ftrace_graph_call
ftrace_graph_call:
	call		ftrace_stub
	 nop
#endif
	ret
	 restore
#ifdef CONFIG_FUNCTION_GRAPH_TRACER
	.size		ftrace_graph_call,.-ftrace_graph_call
#endif
	.size		ftrace_call,.-ftrace_call
	.size		ftrace_caller,.-ftrace_caller
#endif
#endif

#ifdef CONFIG_FUNCTION_GRAPH_TRACER
ENTRY(ftrace_graph_caller)
	mov		%l0, %o0
	mov		%i7, %o1
	call		prepare_ftrace_return
	 mov		%l1, %o2
	ret
	 restore	%o0, -8, %i7
END(ftrace_graph_caller)

ENTRY(return_to_handler)
	save		%sp, -176, %sp
	call		ftrace_return_to_handler
	 mov		%fp, %o0
	jmpl		%o0 + 8, %g0
	 restore
END(return_to_handler)
#endif
