arnaucube
arnaucube/mirror-to-giteaPublic Self-hosted repository
mirror-to-gitea/vendor/golang.org/x/sys/unix/syscall_linux_ppc.go
vendor/golang.org/x/sys/unix/syscall_linux_ppc.goRaw
  1// Copyright 2021 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//go:build linux && ppc
  6// +build linux
  7// +build ppc
  8
  9package unix
 10
 11import (
 12	"syscall"
 13	"unsafe"
 14)
 15
 16//sys	dup2(oldfd int, newfd int) (err error)
 17//sysnb	EpollCreate(size int) (fd int, err error)
 18//sys	EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error)
 19//sys	Fchown(fd int, uid int, gid int) (err error)
 20//sys	Fstat(fd int, stat *Stat_t) (err error) = SYS_FSTAT64
 21//sys	Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) = SYS_FSTATAT64
 22//sys	Ftruncate(fd int, length int64) (err error) = SYS_FTRUNCATE64
 23//sysnb	Getegid() (egid int)
 24//sysnb	Geteuid() (euid int)
 25//sysnb	Getgid() (gid int)
 26//sysnb	Getuid() (uid int)
 27//sysnb	InotifyInit() (fd int, err error)
 28//sys	Ioperm(from int, num int, on int) (err error)
 29//sys	Iopl(level int) (err error)
 30//sys	Lchown(path string, uid int, gid int) (err error)
 31//sys	Listen(s int, n int) (err error)
 32//sys	Lstat(path string, stat *Stat_t) (err error) = SYS_LSTAT64
 33//sys	Pause() (err error)
 34//sys	Pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64
 35//sys	Pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64
 36//sys	Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)
 37//sys	Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) = SYS__NEWSELECT
 38//sys	sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) = SYS_SENDFILE64
 39//sys	setfsgid(gid int) (prev int, err error)
 40//sys	setfsuid(uid int) (prev int, err error)
 41//sysnb	Setregid(rgid int, egid int) (err error)
 42//sysnb	Setresgid(rgid int, egid int, sgid int) (err error)
 43//sysnb	Setresuid(ruid int, euid int, suid int) (err error)
 44//sysnb	Setreuid(ruid int, euid int) (err error)
 45//sys	Shutdown(fd int, how int) (err error)
 46//sys	Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error)
 47//sys	Stat(path string, stat *Stat_t) (err error) = SYS_STAT64
 48//sys	Truncate(path string, length int64) (err error) = SYS_TRUNCATE64
 49//sys	Ustat(dev int, ubuf *Ustat_t) (err error)
 50//sys	accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error)
 51//sys	accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error)
 52//sys	bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)
 53//sys	connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)
 54//sysnb	getgroups(n int, list *_Gid_t) (nn int, err error)
 55//sysnb	setgroups(n int, list *_Gid_t) (err error)
 56//sys	getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error)
 57//sys	setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error)
 58//sysnb	socket(domain int, typ int, proto int) (fd int, err error)
 59//sysnb	socketpair(domain int, typ int, proto int, fd *[2]int32) (err error)
 60//sysnb	getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)
 61//sysnb	getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)
 62//sys	recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error)
 63//sys	sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error)
 64//sys	recvmsg(s int, msg *Msghdr, flags int) (n int, err error)
 65//sys	sendmsg(s int, msg *Msghdr, flags int) (n int, err error)
 66
 67//sys	futimesat(dirfd int, path string, times *[2]Timeval) (err error)
 68//sysnb	Gettimeofday(tv *Timeval) (err error)
 69//sysnb	Time(t *Time_t) (tt Time_t, err error)
 70//sys	Utime(path string, buf *Utimbuf) (err error)
 71//sys	utimes(path string, times *[2]Timeval) (err error)
 72
 73func Fadvise(fd int, offset int64, length int64, advice int) (err error) {
 74	_, _, e1 := Syscall6(SYS_FADVISE64_64, uintptr(fd), uintptr(advice), uintptr(offset>>32), uintptr(offset), uintptr(length>>32), uintptr(length))
 75	if e1 != 0 {
 76		err = errnoErr(e1)
 77	}
 78	return
 79}
 80
 81func seek(fd int, offset int64, whence int) (int64, syscall.Errno) {
 82	var newoffset int64
 83	offsetLow := uint32(offset & 0xffffffff)
 84	offsetHigh := uint32((offset >> 32) & 0xffffffff)
 85	_, _, err := Syscall6(SYS__LLSEEK, uintptr(fd), uintptr(offsetHigh), uintptr(offsetLow), uintptr(unsafe.Pointer(&newoffset)), uintptr(whence), 0)
 86	return newoffset, err
 87}
 88
 89func Seek(fd int, offset int64, whence int) (newoffset int64, err error) {
 90	newoffset, errno := seek(fd, offset, whence)
 91	if errno != 0 {
 92		return 0, errno
 93	}
 94	return newoffset, nil
 95}
 96
 97func Fstatfs(fd int, buf *Statfs_t) (err error) {
 98	_, _, e := Syscall(SYS_FSTATFS64, uintptr(fd), unsafe.Sizeof(*buf), uintptr(unsafe.Pointer(buf)))
 99	if e != 0 {
100		err = e
101	}
102	return
103}
104
105func Statfs(path string, buf *Statfs_t) (err error) {
106	pathp, err := BytePtrFromString(path)
107	if err != nil {
108		return err
109	}
110	_, _, e := Syscall(SYS_STATFS64, uintptr(unsafe.Pointer(pathp)), unsafe.Sizeof(*buf), uintptr(unsafe.Pointer(buf)))
111	if e != 0 {
112		err = e
113	}
114	return
115}
116
117//sys	mmap2(addr uintptr, length uintptr, prot int, flags int, fd int, pageOffset uintptr) (xaddr uintptr, err error)
118
119func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) {
120	page := uintptr(offset / 4096)
121	if offset != int64(page)*4096 {
122		return 0, EINVAL
123	}
124	return mmap2(addr, length, prot, flags, fd, page)
125}
126
127func setTimespec(sec, nsec int64) Timespec {
128	return Timespec{Sec: int32(sec), Nsec: int32(nsec)}
129}
130
131func setTimeval(sec, usec int64) Timeval {
132	return Timeval{Sec: int32(sec), Usec: int32(usec)}
133}
134
135type rlimit32 struct {
136	Cur uint32
137	Max uint32
138}
139
140//sysnb	getrlimit(resource int, rlim *rlimit32) (err error) = SYS_UGETRLIMIT
141
142const rlimInf32 = ^uint32(0)
143const rlimInf64 = ^uint64(0)
144
145func Getrlimit(resource int, rlim *Rlimit) (err error) {
146	err = prlimit(0, resource, nil, rlim)
147	if err != ENOSYS {
148		return err
149	}
150
151	rl := rlimit32{}
152	err = getrlimit(resource, &rl)
153	if err != nil {
154		return
155	}
156
157	if rl.Cur == rlimInf32 {
158		rlim.Cur = rlimInf64
159	} else {
160		rlim.Cur = uint64(rl.Cur)
161	}
162
163	if rl.Max == rlimInf32 {
164		rlim.Max = rlimInf64
165	} else {
166		rlim.Max = uint64(rl.Max)
167	}
168	return
169}
170
171//sysnb	setrlimit(resource int, rlim *rlimit32) (err error) = SYS_SETRLIMIT
172
173func Setrlimit(resource int, rlim *Rlimit) (err error) {
174	err = prlimit(0, resource, rlim, nil)
175	if err != ENOSYS {
176		return err
177	}
178
179	rl := rlimit32{}
180	if rlim.Cur == rlimInf64 {
181		rl.Cur = rlimInf32
182	} else if rlim.Cur < uint64(rlimInf32) {
183		rl.Cur = uint32(rlim.Cur)
184	} else {
185		return EINVAL
186	}
187	if rlim.Max == rlimInf64 {
188		rl.Max = rlimInf32
189	} else if rlim.Max < uint64(rlimInf32) {
190		rl.Max = uint32(rlim.Max)
191	} else {
192		return EINVAL
193	}
194
195	return setrlimit(resource, &rl)
196}
197
198func (r *PtraceRegs) PC() uint32 { return r.Nip }
199
200func (r *PtraceRegs) SetPC(pc uint32) { r.Nip = pc }
201
202func (iov *Iovec) SetLen(length int) {
203	iov.Len = uint32(length)
204}
205
206func (msghdr *Msghdr) SetControllen(length int) {
207	msghdr.Controllen = uint32(length)
208}
209
210func (msghdr *Msghdr) SetIovlen(length int) {
211	msghdr.Iovlen = uint32(length)
212}
213
214func (cmsg *Cmsghdr) SetLen(length int) {
215	cmsg.Len = uint32(length)
216}
217
218//sysnb	pipe(p *[2]_C_int) (err error)
219
220func Pipe(p []int) (err error) {
221	if len(p) != 2 {
222		return EINVAL
223	}
224	var pp [2]_C_int
225	err = pipe(&pp)
226	p[0] = int(pp[0])
227	p[1] = int(pp[1])
228	return
229}
230
231//sysnb	pipe2(p *[2]_C_int, flags int) (err error)
232
233func Pipe2(p []int, flags int) (err error) {
234	if len(p) != 2 {
235		return EINVAL
236	}
237	var pp [2]_C_int
238	err = pipe2(&pp, flags)
239	p[0] = int(pp[0])
240	p[1] = int(pp[1])
241	return
242}
243
244//sys	poll(fds *PollFd, nfds int, timeout int) (n int, err error)
245
246func Poll(fds []PollFd, timeout int) (n int, err error) {
247	if len(fds) == 0 {
248		return poll(nil, 0, timeout)
249	}
250	return poll(&fds[0], len(fds), timeout)
251}
252
253//sys	syncFileRange2(fd int, flags int, off int64, n int64) (err error) = SYS_SYNC_FILE_RANGE2
254
255func SyncFileRange(fd int, off int64, n int64, flags int) error {
256	// The sync_file_range and sync_file_range2 syscalls differ only in the
257	// order of their arguments.
258	return syncFileRange2(fd, flags, off, n)
259}
260
261//sys	kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error)
262
263func KexecFileLoad(kernelFd int, initrdFd int, cmdline string, flags int) error {
264	cmdlineLen := len(cmdline)
265	if cmdlineLen > 0 {
266		// Account for the additional NULL byte added by
267		// BytePtrFromString in kexecFileLoad. The kexec_file_load
268		// syscall expects a NULL-terminated string.
269		cmdlineLen++
270	}
271	return kexecFileLoad(kernelFd, initrdFd, cmdlineLen, cmdline, flags)
272}