From a14d2c64dc96bdde47629760372ebf098d10e976 Mon Sep 17 00:00:00 2001 From: Edoardo Spadolini Date: Thu, 27 Jun 2024 22:29:22 +0200 Subject: [PATCH 1/2] 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 b58e1383c3..181683655a 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 9e537a39e3..89090430aa 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 59542a897d..18c9c225e8 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 ccb02f240a..d630ae1452 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 8b8bb28402..3fddbb5f64 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 1b40b997b5..cc521dab5f 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 08362c1ab7..6166152ea3 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 From bc02d6d44bb64ad202c97d3525d5355e8a027a5e Mon Sep 17 00:00:00 2001 From: Edoardo Spadolini Date: Mon, 1 Jul 2024 22:15:46 +0200 Subject: [PATCH 2/2] Use the _np variant --- unix/darwin_amd64_test.go | 4 ++-- unix/darwin_arm64_test.go | 4 ++-- unix/syscall_darwin.go | 8 ++++---- unix/zsyscall_darwin_amd64.go | 16 ++++++++-------- unix/zsyscall_darwin_amd64.s | 18 +++++++++--------- unix/zsyscall_darwin_arm64.go | 16 ++++++++-------- unix/zsyscall_darwin_arm64.s | 18 +++++++++--------- 7 files changed, 42 insertions(+), 42 deletions(-) diff --git a/unix/darwin_amd64_test.go b/unix/darwin_amd64_test.go index 181683655a..ed56acca38 100644 --- a/unix/darwin_amd64_test.go +++ b/unix/darwin_amd64_test.go @@ -7,8 +7,6 @@ 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}, @@ -103,6 +101,8 @@ var darwinTests = [...]darwinTest{ {"pipe", libc_pipe_trampoline_addr}, {"poll", libc_poll_trampoline_addr}, {"pread", libc_pread_trampoline_addr}, + {"pthread_chdir_np", libc_pthread_chdir_np_trampoline_addr}, + {"pthread_fchdir_np", libc_pthread_fchdir_np_trampoline_addr}, {"ptrace", libc_ptrace_trampoline_addr}, {"pwrite", libc_pwrite_trampoline_addr}, {"read", libc_read_trampoline_addr}, diff --git a/unix/darwin_arm64_test.go b/unix/darwin_arm64_test.go index 89090430aa..3e0fb7d163 100644 --- a/unix/darwin_arm64_test.go +++ b/unix/darwin_arm64_test.go @@ -7,8 +7,6 @@ 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}, @@ -103,6 +101,8 @@ var darwinTests = [...]darwinTest{ {"pipe", libc_pipe_trampoline_addr}, {"poll", libc_poll_trampoline_addr}, {"pread", libc_pread_trampoline_addr}, + {"pthread_chdir_np", libc_pthread_chdir_np_trampoline_addr}, + {"pthread_fchdir_np", libc_pthread_fchdir_np_trampoline_addr}, {"ptrace", libc_ptrace_trampoline_addr}, {"pwrite", libc_pwrite_trampoline_addr}, {"read", libc_read_trampoline_addr}, diff --git a/unix/syscall_darwin.go b/unix/syscall_darwin.go index 18c9c225e8..4cc7b00596 100644 --- a/unix/syscall_darwin.go +++ b/unix/syscall_darwin.go @@ -542,16 +542,16 @@ func SysctlKinfoProcSlice(name string, args ...int) ([]KinfoProc, error) { } } -//sys __pthread_chdir(path string) (err error) +//sys pthread_chdir_np(path string) (err error) func PthreadChdir(path string) (err error) { - return __pthread_chdir(path) + return pthread_chdir_np(path) } -//sys __pthread_fchdir(fd int) (err error) +//sys pthread_fchdir_np(fd int) (err error) func PthreadFchdir(fd int) (err error) { - return __pthread_fchdir(fd) + return pthread_fchdir_np(fd) } //sys sendfile(infd int, outfd int, offset int64, len *int64, hdtr unsafe.Pointer, flags int) (err error) diff --git a/unix/zsyscall_darwin_amd64.go b/unix/zsyscall_darwin_amd64.go index d630ae1452..07642c308d 100644 --- a/unix/zsyscall_darwin_amd64.go +++ b/unix/zsyscall_darwin_amd64.go @@ -760,36 +760,36 @@ 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) { +func pthread_chdir_np(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) + _, _, e1 := syscall_syscall(libc_pthread_chdir_np_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } -var libc___pthread_chdir_trampoline_addr uintptr +var libc_pthread_chdir_np_trampoline_addr uintptr -//go:cgo_import_dynamic libc___pthread_chdir __pthread_chdir "/usr/lib/libSystem.B.dylib" +//go:cgo_import_dynamic libc_pthread_chdir_np pthread_chdir_np "/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) +func pthread_fchdir_np(fd int) (err error) { + _, _, e1 := syscall_syscall(libc_pthread_fchdir_np_trampoline_addr, uintptr(fd), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } -var libc___pthread_fchdir_trampoline_addr uintptr +var libc_pthread_fchdir_np_trampoline_addr uintptr -//go:cgo_import_dynamic libc___pthread_fchdir __pthread_fchdir "/usr/lib/libSystem.B.dylib" +//go:cgo_import_dynamic libc_pthread_fchdir_np pthread_fchdir_np "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT diff --git a/unix/zsyscall_darwin_amd64.s b/unix/zsyscall_darwin_amd64.s index 3fddbb5f64..923e08cb79 100644 --- a/unix/zsyscall_darwin_amd64.s +++ b/unix/zsyscall_darwin_amd64.s @@ -228,15 +228,15 @@ 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_pthread_chdir_np_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_pthread_chdir_np(SB) +GLOBL ·libc_pthread_chdir_np_trampoline_addr(SB), RODATA, $8 +DATA ·libc_pthread_chdir_np_trampoline_addr(SB)/8, $libc_pthread_chdir_np_trampoline<>(SB) + +TEXT libc_pthread_fchdir_np_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_pthread_fchdir_np(SB) +GLOBL ·libc_pthread_fchdir_np_trampoline_addr(SB), RODATA, $8 +DATA ·libc_pthread_fchdir_np_trampoline_addr(SB)/8, $libc_pthread_fchdir_np_trampoline<>(SB) TEXT libc_sendfile_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_sendfile(SB) diff --git a/unix/zsyscall_darwin_arm64.go b/unix/zsyscall_darwin_arm64.go index cc521dab5f..7d73dda647 100644 --- a/unix/zsyscall_darwin_arm64.go +++ b/unix/zsyscall_darwin_arm64.go @@ -760,36 +760,36 @@ 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) { +func pthread_chdir_np(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) + _, _, e1 := syscall_syscall(libc_pthread_chdir_np_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } -var libc___pthread_chdir_trampoline_addr uintptr +var libc_pthread_chdir_np_trampoline_addr uintptr -//go:cgo_import_dynamic libc___pthread_chdir __pthread_chdir "/usr/lib/libSystem.B.dylib" +//go:cgo_import_dynamic libc_pthread_chdir_np pthread_chdir_np "/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) +func pthread_fchdir_np(fd int) (err error) { + _, _, e1 := syscall_syscall(libc_pthread_fchdir_np_trampoline_addr, uintptr(fd), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } -var libc___pthread_fchdir_trampoline_addr uintptr +var libc_pthread_fchdir_np_trampoline_addr uintptr -//go:cgo_import_dynamic libc___pthread_fchdir __pthread_fchdir "/usr/lib/libSystem.B.dylib" +//go:cgo_import_dynamic libc_pthread_fchdir_np pthread_fchdir_np "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT diff --git a/unix/zsyscall_darwin_arm64.s b/unix/zsyscall_darwin_arm64.s index 6166152ea3..057700111e 100644 --- a/unix/zsyscall_darwin_arm64.s +++ b/unix/zsyscall_darwin_arm64.s @@ -228,15 +228,15 @@ 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_pthread_chdir_np_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_pthread_chdir_np(SB) +GLOBL ·libc_pthread_chdir_np_trampoline_addr(SB), RODATA, $8 +DATA ·libc_pthread_chdir_np_trampoline_addr(SB)/8, $libc_pthread_chdir_np_trampoline<>(SB) + +TEXT libc_pthread_fchdir_np_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_pthread_fchdir_np(SB) +GLOBL ·libc_pthread_fchdir_np_trampoline_addr(SB), RODATA, $8 +DATA ·libc_pthread_fchdir_np_trampoline_addr(SB)/8, $libc_pthread_fchdir_np_trampoline<>(SB) TEXT libc_sendfile_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_sendfile(SB)