1// Copyright 2022 The Go Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style
3// license that can be found in the LICENSE file.
4
5//go:build asan
6
7#include "go_asm.h"
8#include "textflag.h"
9
10// Called from instrumented code.
11// func runtime·doasanread(addr unsafe.Pointer, sz, sp, pc uintptr)
12TEXT	runtime·doasanread(SB), NOSPLIT, $0-32
13	MOV	addr+0(FP), X10
14	MOV	sz+8(FP), X11
15	MOV	sp+16(FP), X12
16	MOV	pc+24(FP), X13
17	// void __asan_read_go(void *addr, uintptr_t sz);
18	MOV	$__asan_read_go(SB), X14
19	JMP	asancall<>(SB)
20
21// func runtime·doasanwrite(addr unsafe.Pointer, sz, sp, pc uintptr)
22TEXT	runtime·doasanwrite(SB), NOSPLIT, $0-32
23	MOV	addr+0(FP), X10
24	MOV	sz+8(FP), X11
25	MOV	sp+16(FP), X12
26	MOV	pc+24(FP), X13
27	// void __asan_write_go(void *addr, uintptr_t sz);
28	MOV	$__asan_write_go(SB), X14
29	JMP	asancall<>(SB)
30
31// func runtime·asanunpoison(addr unsafe.Pointer, sz uintptr)
32TEXT	runtime·asanunpoison(SB), NOSPLIT, $0-16
33	MOV	addr+0(FP), X10
34	MOV	sz+8(FP), X11
35	// void __asan_unpoison_go(void *addr, uintptr_t sz);
36	MOV	$__asan_unpoison_go(SB), X14
37	JMP	asancall<>(SB)
38
39// func runtime·asanpoison(addr unsafe.Pointer, sz uintptr)
40TEXT	runtime·asanpoison(SB), NOSPLIT, $0-16
41	MOV	addr+0(FP), X10
42	MOV	sz+8(FP), X11
43	// void __asan_poison_go(void *addr, uintptr_t sz);
44	MOV	$__asan_poison_go(SB), X14
45	JMP	asancall<>(SB)
46
47// func runtime·asanregisterglobals(addr unsafe.Pointer, n uintptr)
48TEXT	runtime·asanregisterglobals(SB), NOSPLIT, $0-16
49	MOV	addr+0(FP), X10
50	MOV	n+8(FP), X11
51	// void __asan_register_globals_go(void *addr, uintptr_t n);
52	MOV	$__asan_register_globals_go(SB), X14
53	JMP	asancall<>(SB)
54
55// Switches SP to g0 stack and calls (X14). Arguments already set.
56TEXT	asancall<>(SB), NOSPLIT, $0-0
57	MOV	X2, X8		// callee-saved
58	BEQZ	g, g0stack	// no g, still on a system stack
59	MOV	g_m(g), X21
60	MOV	m_g0(X21), X21
61	BEQ	X21, g, g0stack
62
63	MOV	(g_sched+gobuf_sp)(X21), X2
64
65g0stack:
66	JALR	RA, X14
67	MOV	X8, X2
68	RET
69