...

Source file src/runtime/cgo.go

Documentation: runtime

		 1  // Copyright 2014 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  package runtime
		 6  
		 7  import "unsafe"
		 8  
		 9  //go:cgo_export_static main
		10  
		11  // Filled in by runtime/cgo when linked into binary.
		12  
		13  //go:linkname _cgo_init _cgo_init
		14  //go:linkname _cgo_thread_start _cgo_thread_start
		15  //go:linkname _cgo_sys_thread_create _cgo_sys_thread_create
		16  //go:linkname _cgo_notify_runtime_init_done _cgo_notify_runtime_init_done
		17  //go:linkname _cgo_callers _cgo_callers
		18  //go:linkname _cgo_set_context_function _cgo_set_context_function
		19  //go:linkname _cgo_yield _cgo_yield
		20  
		21  var (
		22  	_cgo_init										 unsafe.Pointer
		23  	_cgo_thread_start						 unsafe.Pointer
		24  	_cgo_sys_thread_create				unsafe.Pointer
		25  	_cgo_notify_runtime_init_done unsafe.Pointer
		26  	_cgo_callers									unsafe.Pointer
		27  	_cgo_set_context_function		 unsafe.Pointer
		28  	_cgo_yield										unsafe.Pointer
		29  )
		30  
		31  // iscgo is set to true by the runtime/cgo package
		32  var iscgo bool
		33  
		34  // cgoHasExtraM is set on startup when an extra M is created for cgo.
		35  // The extra M must be created before any C/C++ code calls cgocallback.
		36  var cgoHasExtraM bool
		37  
		38  // cgoUse is called by cgo-generated code (using go:linkname to get at
		39  // an unexported name). The calls serve two purposes:
		40  // 1) they are opaque to escape analysis, so the argument is considered to
		41  // escape to the heap.
		42  // 2) they keep the argument alive until the call site; the call is emitted after
		43  // the end of the (presumed) use of the argument by C.
		44  // cgoUse should not actually be called (see cgoAlwaysFalse).
		45  func cgoUse(interface{}) { throw("cgoUse should not be called") }
		46  
		47  // cgoAlwaysFalse is a boolean value that is always false.
		48  // The cgo-generated code says if cgoAlwaysFalse { cgoUse(p) }.
		49  // The compiler cannot see that cgoAlwaysFalse is always false,
		50  // so it emits the test and keeps the call, giving the desired
		51  // escape analysis result. The test is cheaper than the call.
		52  var cgoAlwaysFalse bool
		53  
		54  var cgo_yield = &_cgo_yield
		55  

View as plain text