Source file src/vendor/golang.org/x/sys/cpu/syscall_darwin_arm64_gc.go

     1  // Copyright 2024 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  // Minimal copy from internal/cpu and runtime to make sysctl calls.
     6  
     7  //go:build darwin && arm64 && gc
     8  
     9  package cpu
    10  
    11  import (
    12  	"syscall"
    13  	"unsafe"
    14  )
    15  
    16  type Errno = syscall.Errno
    17  
    18  // adapted from internal/cpu/cpu_arm64_darwin.go
    19  func darwinSysctlEnabled(name []byte) bool {
    20  	out := int32(0)
    21  	nout := unsafe.Sizeof(out)
    22  	if ret := sysctlbyname(&name[0], (*byte)(unsafe.Pointer(&out)), &nout, nil, 0); ret != nil {
    23  		return false
    24  	}
    25  	return out > 0
    26  }
    27  
    28  //go:cgo_import_dynamic libc_sysctl sysctl "/usr/lib/libSystem.B.dylib"
    29  
    30  var libc_sysctlbyname_trampoline_addr uintptr
    31  
    32  // adapted from runtime/sys_darwin.go in the pattern of sysctl() above, as defined in x/sys/unix
    33  func sysctlbyname(name *byte, old *byte, oldlen *uintptr, new *byte, newlen uintptr) error {
    34  	if _, _, err := syscall_syscall6(
    35  		libc_sysctlbyname_trampoline_addr,
    36  		uintptr(unsafe.Pointer(name)),
    37  		uintptr(unsafe.Pointer(old)),
    38  		uintptr(unsafe.Pointer(oldlen)),
    39  		uintptr(unsafe.Pointer(new)),
    40  		uintptr(newlen),
    41  		0,
    42  	); err != 0 {
    43  		return err
    44  	}
    45  
    46  	return nil
    47  }
    48  
    49  //go:cgo_import_dynamic libc_sysctlbyname sysctlbyname "/usr/lib/libSystem.B.dylib"
    50  
    51  // Implemented in the runtime package (runtime/sys_darwin.go)
    52  func syscall_syscall6(fn, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno)
    53  
    54  //go:linkname syscall_syscall6 syscall.syscall6
    55  

View as plain text