unix: add PthreadChdir and PthreadFchdir on darwin

Fixes golang/go#68226
This commit is contained in:
Edoardo Spadolini
2024-06-27 22:29:22 +02:00
committed by Edoardo Spadolini
parent c892bb7ec2
commit a14d2c64dc
7 changed files with 102 additions and 0 deletions

View File

@@ -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},

View File

@@ -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},

View File

@@ -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)

View File

@@ -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 {

View File

@@ -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

View File

@@ -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 {

View File

@@ -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