mirror of
https://github.com/golang/go
synced 2024-11-19 18:44:41 -07:00
519474451a
This is a subset of https://golang.org/cl/20022 with only the copyright header lines, so the next CL will be smaller and more reviewable. Go policy has been single space after periods in comments for some time. The copyright header template at: https://golang.org/doc/contribute.html#copyright also uses a single space. Make them all consistent. Change-Id: Icc26c6b8495c3820da6b171ca96a74701b4a01b0 Reviewed-on: https://go-review.googlesource.com/20111 Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org> Reviewed-by: Matthew Dempsky <mdempsky@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org>
51 lines
1.9 KiB
Go
51 lines
1.9 KiB
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_malloc _cgo_malloc
|
|
//go:linkname _cgo_free _cgo_free
|
|
//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
|
|
|
|
var (
|
|
_cgo_init unsafe.Pointer
|
|
_cgo_malloc unsafe.Pointer
|
|
_cgo_free unsafe.Pointer
|
|
_cgo_thread_start unsafe.Pointer
|
|
_cgo_sys_thread_create unsafe.Pointer
|
|
_cgo_notify_runtime_init_done 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
|