From a14d2c64dc96bdde47629760372ebf098d10e976 Mon Sep 17 00:00:00 2001 From: Edoardo Spadolini Date: Thu, 27 Jun 2024 22:29:22 +0200 Subject: [PATCH] unix: add PthreadChdir and PthreadFchdir on darwin Fixes golang/go#68226 --- unix/darwin_amd64_test.go | 2 ++ unix/darwin_arm64_test.go | 2 ++ unix/syscall_darwin.go | 12 ++++++++++++ unix/zsyscall_darwin_amd64.go | 33 +++++++++++++++++++++++++++++++++ unix/zsyscall_darwin_amd64.s | 10 ++++++++++ unix/zsyscall_darwin_arm64.go | 33 +++++++++++++++++++++++++++++++++ unix/zsyscall_darwin_arm64.s | 10 ++++++++++ 7 files changed, 102 insertions(+) diff --git a/unix/darwin_amd64_test.go b/unix/darwin_amd64_test.go index b58e1383c..181683655 100644 --- a/unix/darwin_amd64_test.go +++ b/unix/darwin_amd64_test.go @@ -7,6 +7,8 @@ package unix // All the _trampoline functions in zsyscall_darwin_amd64.s. var darwinTests = [...]darwinTest{ + {"__pthread_chdir", libc___pthread_chdir_trampoline_addr}, + {"__pthread_fchdir", libc___pthread_fchdir_trampoline_addr}, {"accept", libc_accept_trampoline_addr}, {"access", libc_access_trampoline_addr}, {"adjtime", libc_adjtime_trampoline_addr}, diff --git a/unix/darwin_arm64_test.go b/unix/darwin_arm64_test.go index 9e537a39e..89090430a 100644 --- a/unix/darwin_arm64_test.go +++ b/unix/darwin_arm64_test.go @@ -7,6 +7,8 @@ package unix // All the _trampoline functions in zsyscall_darwin_arm64.s. var darwinTests = [...]darwinTest{ + {"__pthread_chdir", libc___pthread_chdir_trampoline_addr}, + {"__pthread_fchdir", libc___pthread_fchdir_trampoline_addr}, {"accept", libc_accept_trampoline_addr}, {"access", libc_access_trampoline_addr}, {"adjtime", libc_adjtime_trampoline_addr}, diff --git a/unix/syscall_darwin.go b/unix/syscall_darwin.go index 59542a897..18c9c225e 100644 --- a/unix/syscall_darwin.go +++ b/unix/syscall_darwin.go @@ -542,6 +542,18 @@ func SysctlKinfoProcSlice(name string, args ...int) ([]KinfoProc, error) { } } +//sys __pthread_chdir(path string) (err error) + +func PthreadChdir(path string) (err error) { + return __pthread_chdir(path) +} + +//sys __pthread_fchdir(fd int) (err error) + +func PthreadFchdir(fd int) (err error) { + return __pthread_fchdir(fd) +} + //sys sendfile(infd int, outfd int, offset int64, len *int64, hdtr unsafe.Pointer, flags int) (err error) //sys shmat(id int, addr uintptr, flag int) (ret uintptr, err error) diff --git a/unix/zsyscall_darwin_amd64.go b/unix/zsyscall_darwin_amd64.go index ccb02f240..d630ae145 100644 --- a/unix/zsyscall_darwin_amd64.go +++ b/unix/zsyscall_darwin_amd64.go @@ -760,6 +760,39 @@ var libc_sysctl_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func __pthread_chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := syscall_syscall(libc___pthread_chdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc___pthread_chdir_trampoline_addr uintptr + +//go:cgo_import_dynamic libc___pthread_chdir __pthread_chdir "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func __pthread_fchdir(fd int) (err error) { + _, _, e1 := syscall_syscall(libc___pthread_fchdir_trampoline_addr, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc___pthread_fchdir_trampoline_addr uintptr + +//go:cgo_import_dynamic libc___pthread_fchdir __pthread_fchdir "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func sendfile(infd int, outfd int, offset int64, len *int64, hdtr unsafe.Pointer, flags int) (err error) { _, _, e1 := syscall_syscall6(libc_sendfile_trampoline_addr, uintptr(infd), uintptr(outfd), uintptr(offset), uintptr(unsafe.Pointer(len)), uintptr(hdtr), uintptr(flags)) if e1 != 0 { diff --git a/unix/zsyscall_darwin_amd64.s b/unix/zsyscall_darwin_amd64.s index 8b8bb2840..3fddbb5f6 100644 --- a/unix/zsyscall_darwin_amd64.s +++ b/unix/zsyscall_darwin_amd64.s @@ -228,6 +228,16 @@ TEXT libc_sysctl_trampoline<>(SB),NOSPLIT,$0-0 GLOBL ·libc_sysctl_trampoline_addr(SB), RODATA, $8 DATA ·libc_sysctl_trampoline_addr(SB)/8, $libc_sysctl_trampoline<>(SB) +TEXT libc___pthread_chdir_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc___pthread_chdir(SB) +GLOBL ·libc___pthread_chdir_trampoline_addr(SB), RODATA, $8 +DATA ·libc___pthread_chdir_trampoline_addr(SB)/8, $libc___pthread_chdir_trampoline<>(SB) + +TEXT libc___pthread_fchdir_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc___pthread_fchdir(SB) +GLOBL ·libc___pthread_fchdir_trampoline_addr(SB), RODATA, $8 +DATA ·libc___pthread_fchdir_trampoline_addr(SB)/8, $libc___pthread_fchdir_trampoline<>(SB) + TEXT libc_sendfile_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_sendfile(SB) GLOBL ·libc_sendfile_trampoline_addr(SB), RODATA, $8 diff --git a/unix/zsyscall_darwin_arm64.go b/unix/zsyscall_darwin_arm64.go index 1b40b997b..cc521dab5 100644 --- a/unix/zsyscall_darwin_arm64.go +++ b/unix/zsyscall_darwin_arm64.go @@ -760,6 +760,39 @@ var libc_sysctl_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func __pthread_chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := syscall_syscall(libc___pthread_chdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc___pthread_chdir_trampoline_addr uintptr + +//go:cgo_import_dynamic libc___pthread_chdir __pthread_chdir "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func __pthread_fchdir(fd int) (err error) { + _, _, e1 := syscall_syscall(libc___pthread_fchdir_trampoline_addr, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc___pthread_fchdir_trampoline_addr uintptr + +//go:cgo_import_dynamic libc___pthread_fchdir __pthread_fchdir "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func sendfile(infd int, outfd int, offset int64, len *int64, hdtr unsafe.Pointer, flags int) (err error) { _, _, e1 := syscall_syscall6(libc_sendfile_trampoline_addr, uintptr(infd), uintptr(outfd), uintptr(offset), uintptr(unsafe.Pointer(len)), uintptr(hdtr), uintptr(flags)) if e1 != 0 { diff --git a/unix/zsyscall_darwin_arm64.s b/unix/zsyscall_darwin_arm64.s index 08362c1ab..6166152ea 100644 --- a/unix/zsyscall_darwin_arm64.s +++ b/unix/zsyscall_darwin_arm64.s @@ -228,6 +228,16 @@ TEXT libc_sysctl_trampoline<>(SB),NOSPLIT,$0-0 GLOBL ·libc_sysctl_trampoline_addr(SB), RODATA, $8 DATA ·libc_sysctl_trampoline_addr(SB)/8, $libc_sysctl_trampoline<>(SB) +TEXT libc___pthread_chdir_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc___pthread_chdir(SB) +GLOBL ·libc___pthread_chdir_trampoline_addr(SB), RODATA, $8 +DATA ·libc___pthread_chdir_trampoline_addr(SB)/8, $libc___pthread_chdir_trampoline<>(SB) + +TEXT libc___pthread_fchdir_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc___pthread_fchdir(SB) +GLOBL ·libc___pthread_fchdir_trampoline_addr(SB), RODATA, $8 +DATA ·libc___pthread_fchdir_trampoline_addr(SB)/8, $libc___pthread_fchdir_trampoline<>(SB) + TEXT libc_sendfile_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_sendfile(SB) GLOBL ·libc_sendfile_trampoline_addr(SB), RODATA, $8