From ce2cc3139670b8351d913cd501612ae1ba7b11b0 Mon Sep 17 00:00:00 2001 From: visualfc Date: Wed, 22 Jul 2026 11:08:27 +0800 Subject: [PATCH] runtime/internal/lib/runtime: add synctest missing func --- runtime/internal/lib/runtime/os_darwin.go | 31 +++++++++++++++++++ runtime/internal/lib/runtime/synctest_llgo.go | 14 +++++++++ 2 files changed, 45 insertions(+) create mode 100644 runtime/internal/lib/runtime/os_darwin.go diff --git a/runtime/internal/lib/runtime/os_darwin.go b/runtime/internal/lib/runtime/os_darwin.go new file mode 100644 index 0000000000..e0f3fa16bb --- /dev/null +++ b/runtime/internal/lib/runtime/os_darwin.go @@ -0,0 +1,31 @@ +package runtime + +import "unsafe" + +func sysctlbynameInt32(name []byte) (int32, int32) { + out := int32(0) + nout := unsafe.Sizeof(out) + ret := sysctlbyname(&name[0], (*byte)(unsafe.Pointer(&out)), &nout, nil, 0) + return ret, out +} + +//go:linkname internal_cpu_getsysctlbyname internal/cpu.getsysctlbyname +func internal_cpu_getsysctlbyname(name []byte) (int32, int32) { + return sysctlbynameInt32(name) +} + +var libc_sysctlbyname_trampoline_addr uintptr + +// adapted from runtime/sys_darwin.go in the pattern of sysctl() above, as defined in x/sys/unix +func sysctlbyname(name *byte, old *byte, oldlen *uintptr, new *byte, newlen uintptr) int32 { + r, _, _ := llgo_rawSyscall6( + libc_sysctlbyname_trampoline_addr, + uintptr(unsafe.Pointer(name)), + uintptr(unsafe.Pointer(old)), + uintptr(unsafe.Pointer(oldlen)), + uintptr(unsafe.Pointer(new)), + uintptr(newlen), + 0, + ) + return int32(r) +} diff --git a/runtime/internal/lib/runtime/synctest_llgo.go b/runtime/internal/lib/runtime/synctest_llgo.go index 3707509f61..4d1a89d8d5 100644 --- a/runtime/internal/lib/runtime/synctest_llgo.go +++ b/runtime/internal/lib/runtime/synctest_llgo.go @@ -23,3 +23,17 @@ func synctest_disassociate(_ unsafe.Pointer) {} func synctest_isAssociated(_ unsafe.Pointer) bool { return false } + +//go:linkname synctest_acquire internal/synctest.acquire +func synctest_acquire() any { + return nil +} + +//go:linkname synctest_release internal/synctest.release +func synctest_release(bubble any) { +} + +//go:linkname synctest_inBubble internal/synctest.inBubble +func synctest_inBubble(bubble any, f func()) { + f() +}