| // 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 |