runtime: Use the clone system call on GNU/Linux.
authorIan Lance Taylor <ian@gcc.gnu.org>
Fri, 5 Sep 2014 15:24:36 +0000 (15:24 +0000)
committerIan Lance Taylor <ian@gcc.gnu.org>
Fri, 5 Sep 2014 15:24:36 +0000 (15:24 +0000)
Without this we weren't supporting the standard Cloneflags
field of SysProcAttr.

From-SVN: r214972

libgo/go/syscall/exec_linux.go

index 5d14ec385a4856b62bdd4fa2165f5bb4621f6cc9..6a92163206b0c9b201f70704bfe105d5a1692c8b 100644 (file)
@@ -43,7 +43,7 @@ func forkAndExecInChild(argv0 *byte, argv, envv []*byte, chroot, dir *byte, attr
        // Declare all variables at top in case any
        // declarations require heap allocation (e.g., err1).
        var (
-               r1     Pid_t
+               r1     uintptr
                err1   Errno
                nextfd int
                i      int
@@ -65,7 +65,7 @@ func forkAndExecInChild(argv0 *byte, argv, envv []*byte, chroot, dir *byte, attr
        // About to call fork.
        // No more allocation or calls of non-assembly functions.
        runtime_BeforeFork()
-       r1, err1 = raw_fork()
+       r1, _, err1 = RawSyscall6(SYS_CLONE, uintptr(SIGCHLD)|sys.Cloneflags, 0, 0, 0, 0, 0)
        if err1 != 0 {
                runtime_AfterFork()
                return 0, err1