internal,net,os,runtime,syscall: fixes for AIX following update to go1.9
authorIan Lance Taylor <ian@gcc.gnu.org>
Wed, 20 Sep 2017 14:59:39 +0000 (14:59 +0000)
committerIan Lance Taylor <ian@gcc.gnu.org>
Wed, 20 Sep 2017 14:59:39 +0000 (14:59 +0000)
    Reviewed-on: https://go-review.googlesource.com/64551

From-SVN: r253016

17 files changed:
gcc/go/gofrontend/MERGE
libgo/go/cmd/go/internal/base/signal_unix.go
libgo/go/internal/poll/export_posix_test.go
libgo/go/internal/poll/fd_poll_runtime.go
libgo/go/internal/poll/fd_posix.go
libgo/go/internal/poll/fd_posix_test.go
libgo/go/internal/poll/fd_unix.go
libgo/go/internal/poll/hook_unix.go
libgo/go/internal/poll/sockopt.go
libgo/go/internal/poll/sockoptip.go
libgo/go/internal/poll/sys_cloexec.go
libgo/go/net/error_posix.go
libgo/go/os/user/cgo_lookup_unix.go
libgo/go/runtime/export_unix_test.go
libgo/go/runtime/netpoll_aix.go
libgo/go/syscall/forkpipe_bsd.go
libgo/go/syscall/libcall_aix.go

index f6b5361a004dacdda2e49ba2e8f78e7ca64d5d5d..cca4a16e7eca7e1244639be075f91545c43f8ca8 100644 (file)
@@ -1,4 +1,4 @@
-5fb74cd7192123a9ea06dcae0d5d8d0b3538db8f
+90fe3da36d904b62d47c00ee40eef4fd2693a5da
 
 The first line of this file holds the git revision number of the last
 merge done from the gofrontend repository.
index 4ca3da99226f8e141fd3b20af3282233a4d1c81c..b90f3a2f191c44fdc3eb43b01b0cc7c7b5923f97 100644 (file)
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build darwin dragonfly freebsd linux nacl netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd linux nacl netbsd openbsd solaris
 
 package base
 
index 73b2c11e1e0994f2075b3d0eae631bfb4cfae925..6b9bb8b7d0dfd44e204cb1a3f9c1a87d660c6505 100644 (file)
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build darwin dragonfly freebsd linux nacl netbsd openbsd solaris windows
+// +build aix darwin dragonfly freebsd linux nacl netbsd openbsd solaris windows
 
 // Export guts for testing on posix.
 // Since testing imports os and os imports internal/poll,
index bfbe3c7de46960e21fcfd91d3734246de19bb2a9..9de8af1598dd39fd39e7dd96978d37dfcf736a11 100644 (file)
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build darwin dragonfly freebsd linux netbsd openbsd windows solaris
+// +build aix darwin dragonfly freebsd linux netbsd openbsd windows solaris
 
 package poll
 
index e0e634cdb290073abf60fdf27b31496070967afa..4e6e355728d24ec6c527f0f05dff2beb141dc713 100644 (file)
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build darwin dragonfly freebsd linux nacl netbsd openbsd solaris windows
+// +build aix darwin dragonfly freebsd linux nacl netbsd openbsd solaris windows
 
 package poll
 
index cbe015edbd1205aec6ab2973f6144ee902669c3d..246d4989e1cf83a315a626060e0a3a840dcad7a4 100644 (file)
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build darwin dragonfly freebsd linux nacl netbsd openbsd solaris windows
+// +build aix darwin dragonfly freebsd linux nacl netbsd openbsd solaris windows
 
 package poll_test
 
index c40c701f59c69da9b1aef2f656b400b28cb6c10d..0b43a19590b514cff4a9a93c3ca264e1decba690 100644 (file)
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build darwin dragonfly freebsd linux nacl netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd linux nacl netbsd openbsd solaris
 
 package poll
 
index 85e102dd73e0fec10b252af3625b39ec82d933d5..4cf36cc6c09c7b31d02233aebbbb1c4623eb670c 100644 (file)
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build darwin dragonfly freebsd linux nacl netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd linux nacl netbsd openbsd solaris
 
 package poll
 
index f86ce707a123aef486af92d3e908344a5ca4ed07..bb5ea02c0a658897530e9f52b87c4cd867d5d604 100644 (file)
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build darwin dragonfly freebsd linux netbsd openbsd solaris windows
+// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris windows
 
 package poll
 
index 5d5dff6ebc935083b542e2f389ce694117f24fb3..ae59b0c762729095f1e40511309e4660acb32d8f 100644 (file)
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build darwin dragonfly freebsd linux netbsd openbsd windows
+// +build aix darwin dragonfly freebsd linux netbsd openbsd windows
 
 package poll
 
index 9ed35bdaf41e76eedfd995038cb70b9fcbf6141f..fb5f2bcd32a48449efc3b2eadf9080d62fae338d 100644 (file)
@@ -5,7 +5,7 @@
 // This file implements sysSocket and accept for platforms that do not
 // provide a fast path for setting SetNonblock and CloseOnExec.
 
-// +build darwin nacl netbsd openbsd solaris
+// +build aix darwin nacl netbsd openbsd solaris
 
 package poll
 
index dd9754c841aa5ac0430d49db0ff45e7db42feb78..d0ffaaeba70a52f2be195a065961b55fa727154f 100644 (file)
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build darwin dragonfly freebsd linux nacl netbsd openbsd solaris windows
+// +build aix darwin dragonfly freebsd linux nacl netbsd openbsd solaris windows
 
 package net
 
index 8881366cf9f5432dd6da6afa37852e8ca011e036..9670ada49425d15d14907eeb1c114097becde27f 100644 (file)
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build darwin dragonfly freebsd !android,linux netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd !android,linux netbsd openbsd solaris
 // +build cgo
 
 package user
index 54d577072ec915431be7e70be3db6f787cc824ee..eecdfb7eb2216e4dfd85860062587badfa71587e 100644 (file)
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build darwin dragonfly freebsd linux netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris
 
 package runtime
 
index 8c8e1882219f2cb87aac7ca561b932791aeb5c5a..b4962cc65900f07ffd6be05a78e521799cd627f9 100644 (file)
@@ -64,14 +64,14 @@ func netpollinit() {
        var p [2]int32
 
        if ps = pollset_create(-1); ps < 0 {
-               throw("netpollinit: failed to create pollset")
+               throw("runtime: netpollinit failed to create pollset")
        }
        // It is not possible to add or remove descriptors from
        // the pollset while pollset_poll is active.
        // We use a pipe to wakeup pollset_poll when the pollset
        // needs to be updated.
        if err := libc_pipe(&p[0]); err < 0 {
-               throw("netpollinit: failed to create pipe")
+               throw("runtime: netpollinit failed to create pipe")
        }
        rdwake = p[0]
        wrwake = p[1]
@@ -90,12 +90,17 @@ func netpollinit() {
        pctl.fd = rdwake
        pctl.events = _POLLIN
        if pollset_ctl(ps, &pctl, 1) != 0 {
-               throw("netpollinit: failed to register pipe")
+               throw("runtime: netpollinit failed to register pipe")
        }
 
        mpfds = make(map[int32]*pollDesc)
 }
 
+func netpolldescriptor() uintptr {
+       // ps is not a real file descriptor.
+       return ^uintptr(0)
+}
+
 func netpollopen(fd uintptr, pd *pollDesc) int32 {
        // pollset_ctl will block if pollset_poll is active
        // so wakeup pollset_poll first.
@@ -144,7 +149,7 @@ func netpollclose(fd uintptr) int32 {
 }
 
 func netpollarm(pd *pollDesc, mode int) {
-       throw("unused")
+       throw("runtime: unused")
 }
 
 func netpoll(block bool) *g {
@@ -168,7 +173,7 @@ retry:
        if nfound < 0 {
                e := errno()
                if e != _EINTR {
-                       throw("pollset_poll failed")
+                       throw("runtime: pollset_poll failed")
                }
                goto retry
        }
index 28897bfd79052036a1a65cbaac5f7e7442addd0e..d479284340714e7619858aa8e0f71cd43472c977 100644 (file)
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build darwin dragonfly netbsd openbsd solaris
+// +build aix darwin dragonfly netbsd openbsd solaris
 
 package syscall
 
index 992eeb4d46f4d01139b9dd72de8772f641d69dd8..072f92a8151551a961975c222dccb089715afd86 100644 (file)
@@ -6,6 +6,136 @@
 
 package syscall
 
+import (
+       "unsafe"
+)
+
+//sys  Openat(dirfd int, path string, flags int, mode uint32) (fd int, err error)
+//open64at(dirfd _C_int, path *byte, flags _C_int, mode Mode_t) _C_int
+
+//sys  ptrace(request int, id int, addr uintptr, data int, buff uintptr) (val int)
+//ptrace(request _C_int, id int, addr uintptr, data _C_int, buff *byte) _C_int
+
+//sys  ptrace64(request int, id int64, addr int64, data int, buff uintptr) (err error)
+//ptrace64(request _C_int, id int64, addr int64, data _C_int, buff *byte) _C_int
+
 func raw_ptrace(request int, pid int, addr *byte, data *byte) Errno {
+       if request == _PTRACE_TRACEME {
+               // Convert to AIX ptrace call.
+               err := ptrace64(_PT_TRACE_ME, 0, 0, 0, 0)
+               if err != nil {
+                       return err.(Errno)
+               }
+               return 0
+       }
        return ENOSYS
 }
+
+func ptracePeek(pid int, addr uintptr, out []byte) (count int, err error) {
+       n := 0
+       for len(out) > 0 {
+               bsize := len(out)
+               if bsize > 1024 {
+                       bsize = 1024
+               }
+               err = ptrace64(_PT_READ_BLOCK, int64(pid), int64(addr), bsize, uintptr(unsafe.Pointer(&out[0])))
+               if err != nil {
+                       return 0, err
+               }
+               addr += uintptr(bsize)
+               n += bsize
+               out = out[n:]
+       }
+       return n, nil
+}
+
+func PtracePeekText(pid int, addr uintptr, out []byte) (count int, err error) {
+       return ptracePeek(pid, addr, out)
+}
+
+func PtracePeekData(pid int, addr uintptr, out []byte) (count int, err error) {
+       return ptracePeek(pid, addr, out)
+}
+
+func ptracePoke(pid int, addr uintptr, data []byte) (count int, err error) {
+       n := 0
+       for len(data) > 0 {
+               bsize := len(data)
+               if bsize > 1024 {
+                       bsize = 1024
+               }
+               err = ptrace64(_PT_WRITE_BLOCK, int64(pid), int64(addr), bsize, uintptr(unsafe.Pointer(&data[0])))
+               if err != nil {
+                       return 0, err
+               }
+               addr += uintptr(bsize)
+               n += bsize
+               data = data[n:]
+       }
+       return n, nil
+}
+
+func PtracePokeText(pid int, addr uintptr, data []byte) (count int, err error) {
+       return ptracePoke(pid, addr, data)
+}
+
+func PtracePokeData(pid int, addr uintptr, data []byte) (count int, err error) {
+       return ptracePoke(pid, addr, data)
+}
+
+func PtraceCont(pid int, signal int) (err error) {
+       return ptrace64(_PT_CONTINUE, int64(pid), 1, signal, 0)
+}
+
+func PtraceSingleStep(pid int) (err error) { return ptrace64(_PT_STEP, int64(pid), 1, 0, 0) }
+
+func PtraceAttach(pid int) (err error) { return ptrace64(_PT_ATTACH, int64(pid), 0, 0, 0) }
+
+func PtraceDetach(pid int) (err error) { return ptrace64(_PT_DETACH, int64(pid), 0, 0, 0) }
+
+//sys  reboot(how int) (err error)
+//__linux_reboot(how _C_int) _C_int
+func Reboot(how int) (err error) {
+       return reboot(how)
+}
+
+//sys  Acct(path string) (err error)
+//acct(path *byte) _C_int
+
+//sys  Faccessat(dirfd int, path string, mode uint32, flags int) (err error)
+//faccessat(dirfd _C_int, pathname *byte, mode _C_int, flags _C_int) _C_int
+
+//sys  Fchmodat(dirfd int, path string, mode uint32, flags int) (err error)
+//fchmodat(dirfd _C_int, pathname *byte, mode Mode_t, flags _C_int) _C_int
+
+//sys  Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error)
+//fchownat(dirfd _C_int, path *byte, owner Uid_t, group Gid_t, flags _C_int) _C_int
+
+//sys  Fstatfs(fd int, buf *Statfs_t) (err error)
+//fstatfs64(fd _C_int, buf *Statfs_t) _C_int
+
+//sys  Mkdirat(dirfd int, path string, mode uint32) (err error)
+//mkdirat(dirfd _C_int, path *byte, mode Mode_t) _C_int
+
+//sys  Mknodat(dirfd int, path string, mode uint32, dev int) (err error)
+//mknodat(dirfd _C_int, path *byte, mode Mode_t, dev _dev_t) _C_int
+
+//sys  getdirent(fd int, buf []byte) (n int, err error)
+//getdirent64(fd _C_int, buf *byte, nbyte Size_t) _C_int
+
+func ReadDirent(fd int, buf []byte) (n int, err error) {
+       return getdirent(fd, buf)
+}
+
+//sys  Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)
+//renameat(olddirfd _C_int, oldpath *byte, newdirfd _C_int, newpath *byte) _C_int
+
+//sys  Statfs(path string, buf *Statfs_t) (err error)
+//statfs64(path *byte, buf *Statfs_t) _C_int
+
+//sys  unlinkat(dirfd int, path string, flags int) (err error)
+//unlinkat(dirfd _C_int, path *byte, flags _C_int) _C_int
+
+func Unlinkat(dirfd int, path string) (err error) {
+       return unlinkat(dirfd, path, 0)
+}