github.com/comwrg/go/src@v0.0.0-20220319063731-c238d0440370/runtime/sys_openbsd.go (about)

     1  // Copyright 2020 The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  //go:build openbsd && !mips64
     6  // +build openbsd,!mips64
     7  
     8  package runtime
     9  
    10  import "unsafe"
    11  
    12  // The *_trampoline functions convert from the Go calling convention to the C calling convention
    13  // and then call the underlying libc function. These are defined in sys_openbsd_$ARCH.s.
    14  
    15  //go:nosplit
    16  //go:cgo_unsafe_args
    17  func pthread_attr_init(attr *pthreadattr) int32 {
    18  	ret := libcCall(unsafe.Pointer(funcPC(pthread_attr_init_trampoline)), unsafe.Pointer(&attr))
    19  	KeepAlive(attr)
    20  	return ret
    21  }
    22  func pthread_attr_init_trampoline()
    23  
    24  //go:nosplit
    25  //go:cgo_unsafe_args
    26  func pthread_attr_destroy(attr *pthreadattr) int32 {
    27  	ret := libcCall(unsafe.Pointer(funcPC(pthread_attr_destroy_trampoline)), unsafe.Pointer(&attr))
    28  	KeepAlive(attr)
    29  	return ret
    30  }
    31  func pthread_attr_destroy_trampoline()
    32  
    33  //go:nosplit
    34  //go:cgo_unsafe_args
    35  func pthread_attr_getstacksize(attr *pthreadattr, size *uintptr) int32 {
    36  	ret := libcCall(unsafe.Pointer(funcPC(pthread_attr_getstacksize_trampoline)), unsafe.Pointer(&attr))
    37  	KeepAlive(attr)
    38  	KeepAlive(size)
    39  	return ret
    40  }
    41  func pthread_attr_getstacksize_trampoline()
    42  
    43  //go:nosplit
    44  //go:cgo_unsafe_args
    45  func pthread_attr_setdetachstate(attr *pthreadattr, state int) int32 {
    46  	ret := libcCall(unsafe.Pointer(funcPC(pthread_attr_setdetachstate_trampoline)), unsafe.Pointer(&attr))
    47  	KeepAlive(attr)
    48  	return ret
    49  }
    50  func pthread_attr_setdetachstate_trampoline()
    51  
    52  //go:nosplit
    53  //go:cgo_unsafe_args
    54  func pthread_create(attr *pthreadattr, start uintptr, arg unsafe.Pointer) int32 {
    55  	ret := libcCall(unsafe.Pointer(funcPC(pthread_create_trampoline)), unsafe.Pointer(&attr))
    56  	KeepAlive(attr)
    57  	KeepAlive(arg) // Just for consistency. Arg of course needs to be kept alive for the start function.
    58  	return ret
    59  }
    60  func pthread_create_trampoline()
    61  
    62  // Tell the linker that the libc_* functions are to be found
    63  // in a system library, with the libc_ prefix missing.
    64  
    65  //go:cgo_import_dynamic libc_pthread_attr_init pthread_attr_init "libpthread.so"
    66  //go:cgo_import_dynamic libc_pthread_attr_destroy pthread_attr_destroy "libpthread.so"
    67  //go:cgo_import_dynamic libc_pthread_attr_getstacksize pthread_attr_getstacksize "libpthread.so"
    68  //go:cgo_import_dynamic libc_pthread_attr_setdetachstate pthread_attr_setdetachstate "libpthread.so"
    69  //go:cgo_import_dynamic libc_pthread_create pthread_create "libpthread.so"
    70  //go:cgo_import_dynamic libc_pthread_sigmask pthread_sigmask "libpthread.so"
    71  
    72  //go:cgo_import_dynamic _ _ "libpthread.so"
    73  //go:cgo_import_dynamic _ _ "libc.so"