aboutsummaryrefslogtreecommitdiff
path: root/arch/metag/kernel/ftrace_stub.S
blob: e70bff745bdd1af9f8b0d8833846d96d9b5736bf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
/*
 * Copyright (C) 2008 Imagination Technologies Ltd.
 * Licensed under the GPL
 *
 */

#include <asm/ftrace.h>

	.text
#ifdef CONFIG_DYNAMIC_FTRACE
	.global	_mcount_wrapper
	.type	_mcount_wrapper,function
_mcount_wrapper:
	MOV	PC,D0.4

	.global _ftrace_caller
	.type	_ftrace_caller,function
_ftrace_caller:
	MOVT    D0Re0,#HI(_function_trace_stop)
	ADD	D0Re0,D0Re0,#LO(_function_trace_stop)
	GETD	D0Re0,[D0Re0]
	CMP	D0Re0,#0
	BEQ	$Lcall_stub
	MOV	PC,D0.4
$Lcall_stub:
	MSETL   [A0StP], D0Ar6, D0Ar4, D0Ar2, D0.4
	MOV     D1Ar1, D0.4
	MOV     D0Ar2, D1RtP
	SUB	D1Ar1,D1Ar1,#MCOUNT_INSN_SIZE

	.global _ftrace_call
_ftrace_call:
	MOVT	D1RtP,#HI(_ftrace_stub)
	CALL	D1RtP,#LO(_ftrace_stub)
	GETL    D0.4,  D1RtP, [A0StP++#(-8)]
	GETL    D0Ar2, D1Ar1, [A0StP++#(-8)]
	GETL    D0Ar4, D1Ar3, [A0StP++#(-8)]
	GETL    D0Ar6, D1Ar5, [A0StP++#(-8)]
	MOV     PC, D0.4
#else

	.global	_mcount_wrapper
	.type	_mcount_wrapper,function
_mcount_wrapper:
	MOVT    D0Re0,#HI(_function_trace_stop)
	ADD	D0Re0,D0Re0,#LO(_function_trace_stop)
	GETD	D0Re0,[D0Re0]
	CMP	D0Re0,#0
	BEQ	$Lcall_mcount
	MOV	PC,D0.4
$Lcall_mcount:
	MSETL   [A0StP], D0Ar6, D0Ar4, D0Ar2, D0.4
	MOV     D1Ar1, D0.4
	MOV     D0Ar2, D1RtP
	MOVT    D0Re0,#HI(_ftrace_trace_function)
	ADD	D0Re0,D0Re0,#LO(_ftrace_trace_function)
	GET	D1Ar3,[D0Re0]
	MOVT	D1Re0,#HI(_ftrace_stub)
	ADD	D1Re0,D1Re0,#LO(_ftrace_stub)
	CMP	D1Ar3,D1Re0
	BEQ	$Ltrace_exit
	MOV	D1RtP,D1Ar3
	SUB	D1Ar1,D1Ar1,#MCOUNT_INSN_SIZE
	SWAP	PC,D1RtP
$Ltrace_exit:
	GETL    D0.4,  D1RtP, [A0StP++#(-8)]
	GETL    D0Ar2, D1Ar1, [A0StP++#(-8)]
	GETL    D0Ar4, D1Ar3, [A0StP++#(-8)]
	GETL    D0Ar6, D1Ar5, [A0StP++#(-8)]
	MOV     PC, D0.4

#endif	/* CONFIG_DYNAMIC_FTRACE */

	.global _ftrace_stub
_ftrace_stub:
	MOV 	PC,D1RtP