mirror of
https://github.com/golang/go
synced 2024-10-03 16:41:28 -06:00
f0d44dbeaf
makeFuncStub and methodValueStub are used by reflect as generic function implementations. Each call might have different arguments. Extract those arguments from the closure data instead of assuming it is the same each time. Because the argument map is now being extracted from the function itself, we don't need the special cases in reflect.Call anymore, so delete those. Fixes an occasional crash seen when stack copying does not update makeFuncStub's arguments correctly. Will also help make it safe to require stack maps in the garbage collector. Derived from CL 142000044 by khr. LGTM=khr R=khr CC=golang-codereviews https://golang.org/cl/143890044
31 lines
978 B
ArmAsm
31 lines
978 B
ArmAsm
// Copyright 2012 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.
|
|
|
|
#include "textflag.h"
|
|
#include "funcdata.h"
|
|
|
|
// makeFuncStub is the code half of the function returned by MakeFunc.
|
|
// See the comment on the declaration of makeFuncStub in makefunc.go
|
|
// for more details.
|
|
// No arg size here; runtime pulls arg map out of the func value.
|
|
TEXT ·makeFuncStub(SB),(NOSPLIT|WRAPPER),$16
|
|
NO_LOCAL_POINTERS
|
|
MOVQ DX, 0(SP)
|
|
LEAQ argframe+0(FP), CX
|
|
MOVQ CX, 8(SP)
|
|
CALL ·callReflect(SB)
|
|
RET
|
|
|
|
// methodValueCall is the code half of the function returned by makeMethodValue.
|
|
// See the comment on the declaration of methodValueCall in makefunc.go
|
|
// for more details.
|
|
// No arg size here; runtime pulls arg map out of the func value.
|
|
TEXT ·methodValueCall(SB),(NOSPLIT|WRAPPER),$16
|
|
NO_LOCAL_POINTERS
|
|
MOVQ DX, 0(SP)
|
|
LEAQ argframe+0(FP), CX
|
|
MOVQ CX, 8(SP)
|
|
CALL ·callMethod(SB)
|
|
RET
|