Source File
sys_darwin_arm64.go
Belonging Package
runtime
// Copyright 2020 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 runtimeimport ()// libc function wrappers. Must run on system stack.//go:nosplit//go:cgo_unsafe_argsfunc ( *pthreadkey, uintptr) int32 {return asmcgocall(unsafe.Pointer(funcPC(pthread_key_create_trampoline)), unsafe.Pointer(&))}func ()//go:nosplit//go:cgo_unsafe_argsfunc ( pthreadkey, uintptr) int32 {return asmcgocall(unsafe.Pointer(funcPC(pthread_setspecific_trampoline)), unsafe.Pointer(&))}func ()//go:cgo_import_dynamic libc_pthread_key_create pthread_key_create "/usr/lib/libSystem.B.dylib"//go:cgo_import_dynamic libc_pthread_setspecific pthread_setspecific "/usr/lib/libSystem.B.dylib"// tlsinit allocates a thread-local storage slot for g.//// It finds the first available slot using pthread_key_create and uses// it as the offset value for runtime.tlsg.//// This runs at startup on g0 stack, but before g is set, so it must// not split stack (transitively). g is expected to be nil, so things// (e.g. asmcgocall) will skip saving or reading g.////go:nosplitfunc ( *uintptr, *[_PTHREAD_KEYS_MAX]uintptr) {var pthreadkey:= g0_pthread_key_create(&, 0)if != 0 {abort()}const = 0xc476c475c47957= g0_pthread_setspecific(, )if != 0 {abort()}for , := range {if == {* = uintptr( * sys.PtrSize)g0_pthread_setspecific(, 0)return}}abort()}
The pages are generated with Golds v0.2.8-preview. (GOOS=darwin GOARCH=arm64)