diff options
Diffstat (limited to 'src/syscall/syscall_linux_arm64.go')
-rw-r--r-- | src/syscall/syscall_linux_arm64.go | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/src/syscall/syscall_linux_arm64.go b/src/syscall/syscall_linux_arm64.go index ef935f3a63..f73f33dcec 100644 --- a/src/syscall/syscall_linux_arm64.go +++ b/src/syscall/syscall_linux_arm64.go @@ -35,7 +35,7 @@ func EpollCreate(size int) (fd int, err error) { //sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) //sys Setfsgid(gid int) (err error) //sys Setfsuid(uid int) (err error) -//sysnb setrlimit(resource int, rlim *Rlimit) (err error) +//sysnb setrlimit1(resource int, rlim *Rlimit) (err error) //sys Shutdown(fd int, how int) (err error) //sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) @@ -147,13 +147,23 @@ func Getrlimit(resource int, rlim *Rlimit) error { return getrlimit(resource, rlim) } -// Setrlimit prefers the prlimit64 system call. See issue 38604. -func Setrlimit(resource int, rlim *Rlimit) error { +// setrlimit prefers the prlimit64 system call. See issue 38604. +func setrlimit(resource int, rlim *Rlimit) error { err := prlimit(0, resource, rlim, nil) if err != ENOSYS { return err } - return setrlimit(resource, rlim) + return setrlimit1(resource, rlim) +} + +//go:nosplit +func rawSetrlimit(resource int, rlim *Rlimit) Errno { + _, _, errno := RawSyscall6(SYS_PRLIMIT64, 0, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0, 0, 0) + if errno != ENOSYS { + return errno + } + _, _, errno = RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + return errno } func (r *PtraceRegs) PC() uint64 { return r.Pc } |