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 runtime

import 
go:cgo_export_static main
Filled in by runtime/cgo when linked into binary.
go:linkname _cgo_init _cgo_initgo:linkname _cgo_thread_start _cgo_thread_startgo:linkname _cgo_sys_thread_create _cgo_sys_thread_creatego:linkname _cgo_notify_runtime_init_done _cgo_notify_runtime_init_donego:linkname _cgo_callers _cgo_callersgo:linkname _cgo_set_context_function _cgo_set_context_functiongo:linkname _cgo_yield _cgo_yield
iscgo is set to true by the runtime/cgo package
var 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.
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.