mirror of https://github.com/golang/go.git
43 lines
940 B
ArmAsm
43 lines
940 B
ArmAsm
// Copyright 2019 The Go Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
// +build libfuzzer
|
|
|
|
#include "go_asm.h"
|
|
#include "go_tls.h"
|
|
#include "textflag.h"
|
|
|
|
// Based on race_amd64.s; see commentary there.
|
|
|
|
#ifdef GOOS_windows
|
|
#define RARG0 CX
|
|
#define RARG1 DX
|
|
#else
|
|
#define RARG0 DI
|
|
#define RARG1 SI
|
|
#endif
|
|
|
|
// void runtime·libfuzzerCall(fn, arg0, arg1 uintptr)
|
|
// Calls C function fn from libFuzzer and passes 2 arguments to it.
|
|
TEXT runtime·libfuzzerCall(SB), NOSPLIT, $0-24
|
|
MOVQ fn+0(FP), AX
|
|
MOVQ arg0+8(FP), RARG0
|
|
MOVQ arg1+16(FP), RARG1
|
|
|
|
get_tls(R12)
|
|
MOVQ g(R12), R14
|
|
MOVQ g_m(R14), R13
|
|
|
|
// Switch to g0 stack.
|
|
MOVQ SP, R12 // callee-saved, preserved across the CALL
|
|
MOVQ m_g0(R13), R10
|
|
CMPQ R10, R14
|
|
JE call // already on g0
|
|
MOVQ (g_sched+gobuf_sp)(R10), SP
|
|
call:
|
|
ANDQ $~15, SP // alignment for gcc ABI
|
|
CALL AX
|
|
MOVQ R12, SP
|
|
RET
|