Commit 7ba0b15a by Ian Lance Taylor

internal,net,os,runtime,syscall: fixes for AIX following update to go1.9

    
    Reviewed-on: https://go-review.googlesource.com/64551

From-SVN: r253016
parent cace2309
5fb74cd7192123a9ea06dcae0d5d8d0b3538db8f 90fe3da36d904b62d47c00ee40eef4fd2693a5da
The first line of this file holds the git revision number of the last The first line of this file holds the git revision number of the last
merge done from the gofrontend repository. merge done from the gofrontend repository.
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style // Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file. // 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 package base
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style // Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file. // 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. // Export guts for testing on posix.
// Since testing imports os and os imports internal/poll, // Since testing imports os and os imports internal/poll,
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style // Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file. // 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 package poll
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style // Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file. // 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 package poll
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style // Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file. // 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 package poll_test
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style // Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file. // 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 package poll
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style // Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file. // 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 package poll
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style // Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file. // 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 package poll
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style // Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file. // 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 package poll
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
// This file implements sysSocket and accept for platforms that do not // This file implements sysSocket and accept for platforms that do not
// provide a fast path for setting SetNonblock and CloseOnExec. // provide a fast path for setting SetNonblock and CloseOnExec.
// +build darwin nacl netbsd openbsd solaris // +build aix darwin nacl netbsd openbsd solaris
package poll package poll
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style // Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file. // 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 package net
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style // Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file. // 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 // +build cgo
package user package user
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style // Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file. // 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 package runtime
......
...@@ -64,14 +64,14 @@ func netpollinit() { ...@@ -64,14 +64,14 @@ func netpollinit() {
var p [2]int32 var p [2]int32
if ps = pollset_create(-1); ps < 0 { 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 // It is not possible to add or remove descriptors from
// the pollset while pollset_poll is active. // the pollset while pollset_poll is active.
// We use a pipe to wakeup pollset_poll when the pollset // We use a pipe to wakeup pollset_poll when the pollset
// needs to be updated. // needs to be updated.
if err := libc_pipe(&p[0]); err < 0 { if err := libc_pipe(&p[0]); err < 0 {
throw("netpollinit: failed to create pipe") throw("runtime: netpollinit failed to create pipe")
} }
rdwake = p[0] rdwake = p[0]
wrwake = p[1] wrwake = p[1]
...@@ -90,12 +90,17 @@ func netpollinit() { ...@@ -90,12 +90,17 @@ func netpollinit() {
pctl.fd = rdwake pctl.fd = rdwake
pctl.events = _POLLIN pctl.events = _POLLIN
if pollset_ctl(ps, &pctl, 1) != 0 { 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) 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 { func netpollopen(fd uintptr, pd *pollDesc) int32 {
// pollset_ctl will block if pollset_poll is active // pollset_ctl will block if pollset_poll is active
// so wakeup pollset_poll first. // so wakeup pollset_poll first.
...@@ -144,7 +149,7 @@ func netpollclose(fd uintptr) int32 { ...@@ -144,7 +149,7 @@ func netpollclose(fd uintptr) int32 {
} }
func netpollarm(pd *pollDesc, mode int) { func netpollarm(pd *pollDesc, mode int) {
throw("unused") throw("runtime: unused")
} }
func netpoll(block bool) *g { func netpoll(block bool) *g {
...@@ -168,7 +173,7 @@ retry: ...@@ -168,7 +173,7 @@ retry:
if nfound < 0 { if nfound < 0 {
e := errno() e := errno()
if e != _EINTR { if e != _EINTR {
throw("pollset_poll failed") throw("runtime: pollset_poll failed")
} }
goto retry goto retry
} }
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style // Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file. // license that can be found in the LICENSE file.
// +build darwin dragonfly netbsd openbsd solaris // +build aix darwin dragonfly netbsd openbsd solaris
package syscall package syscall
......
...@@ -6,6 +6,136 @@ ...@@ -6,6 +6,136 @@
package syscall 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 { 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 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)
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment