github.com/comwrg/go/src@v0.0.0-20220319063731-c238d0440370/runtime/libfuzzer_arm64.s (about) 1 // Copyright 2019 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 libfuzzer 6 // +build libfuzzer 7 8 #include "go_asm.h" 9 #include "textflag.h" 10 11 // Based on race_arm64.s; see commentary there. 12 13 // func runtime·libfuzzerCall(fn, arg0, arg1 uintptr) 14 // Calls C function fn from libFuzzer and passes 2 arguments to it. 15 TEXT runtime·libfuzzerCall(SB), NOSPLIT, $0-24 16 MOVD fn+0(FP), R9 17 MOVD arg0+8(FP), R0 18 MOVD arg1+16(FP), R1 19 20 MOVD g_m(g), R10 21 22 // Switch to g0 stack. 23 MOVD RSP, R19 // callee-saved, preserved across the CALL 24 MOVD m_g0(R10), R11 25 CMP R11, g 26 BEQ call // already on g0 27 MOVD (g_sched+gobuf_sp)(R11), R12 28 MOVD R12, RSP 29 call: 30 BL R9 31 MOVD R19, RSP 32 RET