mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-10 18:20:51 +08:00
internal,net,os,runtime,syscall: fixes for AIX following update to go1.9
Reviewed-on: https://go-review.googlesource.com/64551 From-SVN: r253016
This commit is contained in:
parent
cace2309d4
commit
7ba0b15a7e
@ -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.
|
||||
|
@ -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
|
||||
|
||||
|
@ -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,
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
}
|
||||
|
@ -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
|
||||
|
||||
|
@ -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)
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user