| // Copyright 2026 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. | |
| //go:build unix | |
| package cgo | |
| import _ "unsafe" // for go:linkname | |
| // We need to reference the addresses of the C functions in Go code, | |
| // but we don't want to reference them directly in text. Otherwise it | |
| // may cause dynamic relocations in the text segment, or even build | |
| // failures in some settings, e.g. linking with -Bsymbolic-functions. | |
| // Reference them via variables with an extra level of indirection to | |
| // avoid that. | |
| //go:cgo_import_static x_cgo_init | |
| //go:linkname x_cgo_init x_cgo_init | |
| //go:linkname _cgo_init _cgo_init | |
| var x_cgo_init byte | |
| var _cgo_init = &x_cgo_init | |
| //go:cgo_import_static x_cgo_thread_start | |
| //go:linkname x_cgo_thread_start x_cgo_thread_start | |
| //go:linkname _cgo_thread_start _cgo_thread_start | |
| var x_cgo_thread_start byte | |
| var _cgo_thread_start = &x_cgo_thread_start | |
| // Creates a new system thread without updating any Go state. | |
| // | |
| // This method is invoked during shared library loading to create a new OS | |
| // thread to perform the runtime initialization. This method is similar to | |
| // x_cgo_thread_start except that it doesn't update any Go state. | |
| //go:cgo_import_static x_cgo_sys_thread_create | |
| //go:linkname x_cgo_sys_thread_create x_cgo_sys_thread_create | |
| //go:linkname _cgo_sys_thread_create _cgo_sys_thread_create | |
| var x_cgo_sys_thread_create byte | |
| var _cgo_sys_thread_create = &x_cgo_sys_thread_create | |
| // Store the g into the thread-specific value. | |
| // So that pthread_key_destructor will dropm when the thread is exiting. | |
| //go:cgo_import_static x_cgo_bindm | |
| //go:linkname x_cgo_bindm x_cgo_bindm | |
| //go:linkname _cgo_bindm _cgo_bindm | |
| var x_cgo_bindm byte | |
| var _cgo_bindm = &x_cgo_bindm | |
| // x_cgo_getstackbound gets the thread's C stack size and | |
| // set the G's stack bound based on the stack size. | |
| //go:cgo_import_static x_cgo_getstackbound | |
| //go:linkname x_cgo_getstackbound x_cgo_getstackbound | |
| //go:linkname _cgo_getstackbound _cgo_getstackbound | |
| var x_cgo_getstackbound byte | |
| var _cgo_getstackbound = &x_cgo_getstackbound |