Source File
cgo.go
Belonging Package
runtime
// Copyright 2014 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.package runtimeimport//go:cgo_export_static main// Filled in by runtime/cgo when linked into binary.//go:linkname _cgo_init _cgo_init//go:linkname _cgo_thread_start _cgo_thread_start//go:linkname _cgo_sys_thread_create _cgo_sys_thread_create//go:linkname _cgo_notify_runtime_init_done _cgo_notify_runtime_init_done//go:linkname _cgo_callers _cgo_callers//go:linkname _cgo_set_context_function _cgo_set_context_function//go:linkname _cgo_yield _cgo_yieldvar (_cgo_init unsafe.Pointer_cgo_thread_start unsafe.Pointer_cgo_sys_thread_create unsafe.Pointer_cgo_notify_runtime_init_done unsafe.Pointer_cgo_callers unsafe.Pointer_cgo_set_context_function unsafe.Pointer_cgo_yield unsafe.Pointer)// iscgo is set to true by the runtime/cgo packagevar iscgo bool// cgoHasExtraM is set on startup when an extra M is created for cgo.// The extra M must be created before any C/C++ code calls cgocallback.var cgoHasExtraM bool// cgoUse is called by cgo-generated code (using go:linkname to get at// an unexported name). The calls serve two purposes:// 1) they are opaque to escape analysis, so the argument is considered to// escape to the heap.// 2) they keep the argument alive until the call site; the call is emitted after// the end of the (presumed) use of the argument by C.// cgoUse should not actually be called (see cgoAlwaysFalse).func (interface{}) { throw("cgoUse should not be called") }// cgoAlwaysFalse is a boolean value that is always false.// The cgo-generated code says if cgoAlwaysFalse { cgoUse(p) }.// The compiler cannot see that cgoAlwaysFalse is always false,// so it emits the test and keeps the call, giving the desired// escape analysis result. The test is cheaper than the call.var cgoAlwaysFalse boolvar cgo_yield = &_cgo_yield