From c9762b8a7ec852d96ea040c28c5f65b1104ec844 Mon Sep 17 00:00:00 2001 From: Keith Randall Date: Wed, 7 Nov 2018 15:27:16 -0800 Subject: syscall: move uses of Syscall to libSystem on darwin Miscellaneous additional conversions from raw syscalls to using their libc equivalent. Update #17490 Change-Id: If9ab22cc1d676c1f20fb161ebf02b0c28f71585d Reviewed-on: https://go-review.googlesource.com/c/148257 Run-TryBot: Keith Randall TryBot-Result: Gobot Gobot Reviewed-by: Brad Fitzpatrick Reviewed-by: Ian Lance Taylor --- src/syscall/exec_unix.go | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'src/syscall/exec_unix.go') diff --git a/src/syscall/exec_unix.go b/src/syscall/exec_unix.go index 3b84256b8e..997ccab07e 100644 --- a/src/syscall/exec_unix.go +++ b/src/syscall/exec_unix.go @@ -248,7 +248,8 @@ func runtime_AfterExec() // execveLibc is non-nil on OS using libc syscall, set to execve in exec_libc.go; this // avoids a build dependency for other platforms. -var execveLibc func(path uintptr, argv uintptr, envp uintptr) (err Errno) +var execveLibc func(path uintptr, argv uintptr, envp uintptr) Errno +var execveDarwin func(path *byte, argv **byte, envp **byte) error // Exec invokes the execve(2) system call. func Exec(argv0 string, argv []string, envv []string) (err error) { @@ -266,13 +267,16 @@ func Exec(argv0 string, argv []string, envv []string) (err error) { } runtime_BeforeExec() - var err1 Errno + var err1 error if runtime.GOOS == "solaris" || runtime.GOOS == "aix" { // RawSyscall should never be used on Solaris or AIX. err1 = execveLibc( uintptr(unsafe.Pointer(argv0p)), uintptr(unsafe.Pointer(&argvp[0])), uintptr(unsafe.Pointer(&envvp[0]))) + } else if runtime.GOOS == "darwin" { + // Similarly on Darwin. + err1 = execveDarwin(argv0p, &argvp[0], &envvp[0]) } else { _, _, err1 = RawSyscall(SYS_EXECVE, uintptr(unsafe.Pointer(argv0p)), -- cgit v1.3-5-g9baa