8d9f59eb62f501216d5a4bde116ec14f5cc7cf14
[gcc.git] / libgo / go / syscall / libcall_aix.go
1 // Copyright 2017 The Go Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
4
5 // +build aix
6
7 package syscall
8
9 import (
10 "unsafe"
11 )
12
13 // For exec_unix.go.
14 const SYS_EXECVE = 0
15
16 //sys Openat(dirfd int, path string, flags int, mode uint32) (fd int, err error)
17 //open64at(dirfd _C_int, path *byte, flags _C_int, mode Mode_t) _C_int
18
19 //sys ptrace(request int, id int, addr uintptr, data int, buff uintptr) (val int)
20 //ptrace(request _C_int, id int, addr uintptr, data _C_int, buff *byte) _C_int
21
22 //sys ptrace64(request int, id int64, addr int64, data int, buff uintptr) (err error)
23 //ptrace64(request _C_int, id int64, addr int64, data _C_int, buff *byte) _C_int
24
25 func raw_ptrace(request int, pid int, addr *byte, data *byte) Errno {
26 if request == _PTRACE_TRACEME {
27 // Convert to AIX ptrace call.
28 err := ptrace64(_PT_TRACE_ME, 0, 0, 0, 0)
29 if err != nil {
30 return err.(Errno)
31 }
32 return 0
33 }
34 return ENOSYS
35 }
36
37 func ptracePeek(pid int, addr uintptr, out []byte) (count int, err error) {
38 n := 0
39 for len(out) > 0 {
40 bsize := len(out)
41 if bsize > 1024 {
42 bsize = 1024
43 }
44 err = ptrace64(_PT_READ_BLOCK, int64(pid), int64(addr), bsize, uintptr(unsafe.Pointer(&out[0])))
45 if err != nil {
46 return 0, err
47 }
48 addr += uintptr(bsize)
49 n += bsize
50 out = out[n:]
51 }
52 return n, nil
53 }
54
55 func PtracePeekText(pid int, addr uintptr, out []byte) (count int, err error) {
56 return ptracePeek(pid, addr, out)
57 }
58
59 func PtracePeekData(pid int, addr uintptr, out []byte) (count int, err error) {
60 return ptracePeek(pid, addr, out)
61 }
62
63 func ptracePoke(pid int, addr uintptr, data []byte) (count int, err error) {
64 n := 0
65 for len(data) > 0 {
66 bsize := len(data)
67 if bsize > 1024 {
68 bsize = 1024
69 }
70 err = ptrace64(_PT_WRITE_BLOCK, int64(pid), int64(addr), bsize, uintptr(unsafe.Pointer(&data[0])))
71 if err != nil {
72 return 0, err
73 }
74 addr += uintptr(bsize)
75 n += bsize
76 data = data[n:]
77 }
78 return n, nil
79 }
80
81 func PtracePokeText(pid int, addr uintptr, data []byte) (count int, err error) {
82 return ptracePoke(pid, addr, data)
83 }
84
85 func PtracePokeData(pid int, addr uintptr, data []byte) (count int, err error) {
86 return ptracePoke(pid, addr, data)
87 }
88
89 func PtraceCont(pid int, signal int) (err error) {
90 return ptrace64(_PT_CONTINUE, int64(pid), 1, signal, 0)
91 }
92
93 func PtraceSingleStep(pid int) (err error) { return ptrace64(_PT_STEP, int64(pid), 1, 0, 0) }
94
95 func PtraceAttach(pid int) (err error) { return ptrace64(_PT_ATTACH, int64(pid), 0, 0, 0) }
96
97 func PtraceDetach(pid int) (err error) { return ptrace64(_PT_DETACH, int64(pid), 0, 0, 0) }
98
99 //sys reboot(how int) (err error)
100 //__linux_reboot(how _C_int) _C_int
101 func Reboot(how int) (err error) {
102 return reboot(how)
103 }
104
105 //sys Acct(path string) (err error)
106 //acct(path *byte) _C_int
107
108 //sys Faccessat(dirfd int, path string, mode uint32, flags int) (err error)
109 //faccessat(dirfd _C_int, pathname *byte, mode _C_int, flags _C_int) _C_int
110
111 //sys Fchmodat(dirfd int, path string, mode uint32, flags int) (err error)
112 //fchmodat(dirfd _C_int, pathname *byte, mode Mode_t, flags _C_int) _C_int
113
114 //sys Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error)
115 //fchownat(dirfd _C_int, path *byte, owner Uid_t, group Gid_t, flags _C_int) _C_int
116
117 //sys Fstatfs(fd int, buf *Statfs_t) (err error)
118 //fstatfs64(fd _C_int, buf *Statfs_t) _C_int
119
120 //sys Mkdirat(dirfd int, path string, mode uint32) (err error)
121 //mkdirat(dirfd _C_int, path *byte, mode Mode_t) _C_int
122
123 //sys Mknodat(dirfd int, path string, mode uint32, dev int) (err error)
124 //mknodat(dirfd _C_int, path *byte, mode Mode_t, dev _dev_t) _C_int
125
126 //sys getdirent(fd int, buf []byte) (n int, err error)
127 //getdirent64(fd _C_int, buf *byte, nbyte Size_t) _C_int
128
129 func ReadDirent(fd int, buf []byte) (n int, err error) {
130 return getdirent(fd, buf)
131 }
132
133 //sys Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)
134 //renameat(olddirfd _C_int, oldpath *byte, newdirfd _C_int, newpath *byte) _C_int
135
136 //sys Statfs(path string, buf *Statfs_t) (err error)
137 //statfs64(path *byte, buf *Statfs_t) _C_int
138
139 //sys unlinkat(dirfd int, path string, flags int) (err error)
140 //unlinkat(dirfd _C_int, path *byte, flags _C_int) _C_int
141
142 func Unlinkat(dirfd int, path string) (err error) {
143 return unlinkat(dirfd, path, 0)
144 }
145
146 //sys Getkerninfo(op int32, where uintptr, size uintptr, arg int64) (i int32, err error)
147 //getkerninfo(op _C_int, where *byte, size *byte, arg _C_long) _C_int