Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/contrib/llvm-project/compiler-rt/lib/xray/xray_trampoline_mips64.S
35264 views
1
//===-- xray_trampoline_mips64.s --------------------------------*- ASM -*-===//
2
//
3
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4
// See https://llvm.org/LICENSE.txt for license information.
5
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6
//
7
//===----------------------------------------------------------------------===//
8
//
9
// This file is a part of XRay, a dynamic runtime instrumentation system.
10
//
11
// This implements the MIPS64-specific assembler for the trampolines.
12
//
13
//===----------------------------------------------------------------------===//
14
15
.text
16
.file "xray_trampoline_mips64.S"
17
.globl __xray_FunctionEntry
18
.p2align 2
19
.type __xray_FunctionEntry,@function
20
__xray_FunctionEntry:
21
.cfi_startproc
22
// Save argument registers before doing any actual work.
23
.cfi_def_cfa_offset 144
24
daddiu $sp, $sp, -144
25
sd $ra, 136($sp)
26
.cfi_offset 31, -8
27
sd $gp, 128($sp)
28
sd $a7, 120($sp)
29
sd $a6, 112($sp)
30
sd $a5, 104($sp)
31
sd $a4, 96($sp)
32
sd $a3, 88($sp)
33
sd $a2, 80($sp)
34
sd $a1, 72($sp)
35
sd $a0, 64($sp)
36
sdc1 $f19, 56($sp)
37
sdc1 $f18, 48($sp)
38
sdc1 $f17, 40($sp)
39
sdc1 $f16, 32($sp)
40
sdc1 $f15, 24($sp)
41
sdc1 $f14, 16($sp)
42
sdc1 $f13, 8($sp)
43
sdc1 $f12, 0($sp)
44
45
lui $gp, %hi(%neg(%gp_rel(__xray_FunctionEntry)))
46
daddu $gp, $gp, $t9
47
daddiu $gp ,$gp, %lo(%neg(%gp_rel(__xray_FunctionEntry)))
48
49
dla $t9, _ZN6__xray19XRayPatchedFunctionE
50
ld $t9, 0($t9)
51
52
beqz $t9, FunctionEntry_restore
53
54
// a1=0 means that we are tracing an entry event
55
move $a1, $zero
56
// Function ID is in t0 (the first parameter).
57
move $a0, $t0
58
jalr $t9
59
60
FunctionEntry_restore:
61
// Restore argument registers
62
ldc1 $f12, 0($sp)
63
ldc1 $f13, 8($sp)
64
ldc1 $f14, 16($sp)
65
ldc1 $f15, 24($sp)
66
ldc1 $f16, 32($sp)
67
ldc1 $f17, 40($sp)
68
ldc1 $f18, 48($sp)
69
ldc1 $f19, 56($sp)
70
ld $a0, 64($sp)
71
ld $a1, 72($sp)
72
ld $a2, 80($sp)
73
ld $a3, 88($sp)
74
ld $a4, 96($sp)
75
ld $a5, 104($sp)
76
ld $a6, 112($sp)
77
ld $a7, 120($sp)
78
ld $gp, 128($sp)
79
ld $ra, 136($sp)
80
daddiu $sp, $sp, 144
81
jr $ra
82
FunctionEntry_end:
83
.size __xray_FunctionEntry, FunctionEntry_end-__xray_FunctionEntry
84
.cfi_endproc
85
86
.text
87
.globl __xray_FunctionExit
88
.p2align 2
89
.type __xray_FunctionExit,@function
90
__xray_FunctionExit:
91
.cfi_startproc
92
// Save return registers before doing any actual work.
93
.cfi_def_cfa_offset 64
94
daddiu $sp, $sp, -64
95
sd $ra, 56($sp)
96
.cfi_offset 31, -8
97
sd $gp, 48($sp)
98
sd $a0, 40($sp)
99
sd $v1, 32($sp)
100
sd $v0, 24($sp)
101
sdc1 $f2, 16($sp)
102
sdc1 $f1, 8($sp)
103
sdc1 $f0, 0($sp)
104
105
lui $gp, %hi(%neg(%gp_rel(__xray_FunctionExit)))
106
daddu $gp, $gp, $t9
107
daddiu $gp ,$gp, %lo(%neg(%gp_rel(__xray_FunctionExit)))
108
109
dla $t9, _ZN6__xray19XRayPatchedFunctionE
110
ld $t9, 0($t9)
111
112
beqz $t9, FunctionExit_restore
113
114
// a1=1 means that we are tracing an exit event
115
li $a1, 1
116
// Function ID is in t0 (the first parameter).
117
move $a0, $t0
118
jalr $t9
119
120
FunctionExit_restore:
121
// Restore return registers
122
ldc1 $f0, 0($sp)
123
ldc1 $f1, 8($sp)
124
ldc1 $f2, 16($sp)
125
ld $v0, 24($sp)
126
ld $v1, 32($sp)
127
ld $a0, 40($sp)
128
ld $gp, 48($sp)
129
ld $ra, 56($sp)
130
daddiu $sp, $sp, 64
131
jr $ra
132
133
FunctionExit_end:
134
.size __xray_FunctionExit, FunctionExit_end-__xray_FunctionExit
135
.cfi_endproc
136
137