...
Run Format

Source file src/runtime/cgo.go

  // 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 "unsafe"
  
  //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
  
  var (
  	_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
  )
  
  // 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.
  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 cgoUse(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 bool
  

View as plain text