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.
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
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
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
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)
37 func ptracePeek(pid
int, addr
uintptr, out
[]byte) (count
int, err error
) {
44 err
= ptrace64(_PT_READ_BLOCK
, int64(pid
), int64(addr
), bsize
, uintptr(unsafe
.Pointer(&out
[0])))
48 addr
+= uintptr(bsize
)
55 func PtracePeekText(pid
int, addr
uintptr, out
[]byte) (count
int, err error
) {
56 return ptracePeek(pid
, addr
, out
)
59 func PtracePeekData(pid
int, addr
uintptr, out
[]byte) (count
int, err error
) {
60 return ptracePeek(pid
, addr
, out
)
63 func ptracePoke(pid
int, addr
uintptr, data
[]byte) (count
int, err error
) {
70 err
= ptrace64(_PT_WRITE_BLOCK
, int64(pid
), int64(addr
), bsize
, uintptr(unsafe
.Pointer(&data
[0])))
74 addr
+= uintptr(bsize
)
81 func PtracePokeText(pid
int, addr
uintptr, data
[]byte) (count
int, err error
) {
82 return ptracePoke(pid
, addr
, data
)
85 func PtracePokeData(pid
int, addr
uintptr, data
[]byte) (count
int, err error
) {
86 return ptracePoke(pid
, addr
, data
)
89 func PtraceCont(pid
int, signal
int) (err error
) {
90 return ptrace64(_PT_CONTINUE
, int64(pid
), 1, signal
, 0)
93 func PtraceSingleStep(pid
int) (err error
) { return ptrace64(_PT_STEP
, int64(pid
), 1, 0, 0) }
95 func PtraceAttach(pid
int) (err error
) { return ptrace64(_PT_ATTACH
, int64(pid
), 0, 0, 0) }
97 func PtraceDetach(pid
int) (err error
) { return ptrace64(_PT_DETACH
, int64(pid
), 0, 0, 0) }
99 //sys reboot(how int) (err error)
100 //__linux_reboot(how _C_int) _C_int
101 func Reboot(how
int) (err error
) {
105 //sys Acct(path string) (err error)
106 //acct(path *byte) _C_int
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
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
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
117 //sys Fstatfs(fd int, buf *Statfs_t) (err error)
118 //fstatfs64(fd _C_int, buf *Statfs_t) _C_int
120 //sys Mkdirat(dirfd int, path string, mode uint32) (err error)
121 //mkdirat(dirfd _C_int, path *byte, mode Mode_t) _C_int
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
126 //sys getdirent(fd int, buf []byte) (n int, err error)
127 //getdirent64(fd _C_int, buf *byte, nbyte Size_t) _C_int
129 func ReadDirent(fd
int, buf
[]byte) (n
int, err error
) {
130 return getdirent(fd
, buf
)
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
136 //sys Statfs(path string, buf *Statfs_t) (err error)
137 //statfs64(path *byte, buf *Statfs_t) _C_int
139 //sys unlinkat(dirfd int, path string, flags int) (err error)
140 //unlinkat(dirfd _C_int, path *byte, flags _C_int) _C_int
142 func Unlinkat(dirfd
int, path
string) (err error
) {
143 return unlinkat(dirfd
, path
, 0)
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