//go:cgo_import_dynamic libc_ioctl ioctl "libc.so"
 //go:cgo_import_dynamic libc_setgid setgid "libc.so"
 //go:cgo_import_dynamic libc_setgroups setgroups "libc.so"
+//go:cgo_import_dynamic libc_setrlimit setrlimit "libc.so"
 //go:cgo_import_dynamic libc_setsid setsid "libc.so"
 //go:cgo_import_dynamic libc_setuid setuid "libc.so"
 //go:cgo_import_dynamic libc_setpgid setpgid "libc.so"
 //go:linkname libc_ioctl libc_ioctl
 //go:linkname libc_setgid libc_setgid
 //go:linkname libc_setgroups libc_setgroups
+//go:linkname libc_setrlimit libc_setrlimit
 //go:linkname libc_setsid libc_setsid
 //go:linkname libc_setuid libc_setuid
 //go:linkname libc_setpgid libc_setpgid
 
 //go:cgo_import_dynamic libc_ioctl ioctl "libc.a/shr_64.o"
 //go:cgo_import_dynamic libc_setgid setgid "libc.a/shr_64.o"
 //go:cgo_import_dynamic libc_setgroups setgroups "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_setrlimit setrlimit "libc.a/shr_64.o"
 //go:cgo_import_dynamic libc_setsid setsid "libc.a/shr_64.o"
 //go:cgo_import_dynamic libc_setuid setuid "libc.a/shr_64.o"
 //go:cgo_import_dynamic libc_setpgid setpgid "libc.a/shr_64.o"
 //go:linkname libc_ioctl libc_ioctl
 //go:linkname libc_setgid libc_setgid
 //go:linkname libc_setgroups libc_setgroups
+//go:linkname libc_setrlimit libc_setrlimit
 //go:linkname libc_setsid libc_setsid
 //go:linkname libc_setuid libc_setuid
 //go:linkname libc_setpgid libc_setpgid
        libc_ioctl,
        libc_setgid,
        libc_setgroups,
+       libc_setrlimit,
        libc_setsid,
        libc_setuid,
        libc_setpgid libFunc
        return
 }
 
+//go:linkname syscall_setrlimit1 syscall.setrlimit1
+//go:nosplit
+func syscall_setrlimit1(which uintptr, lim unsafe.Pointer) (err uintptr) {
+       _, err = syscall2(&libc_setrlimit, which, uintptr(lim))
+       return
+}
+
 //go:linkname syscall_setsid syscall.setsid
 //go:nosplit
 func syscall_setsid() (pid, err uintptr) {
 
        libc_ioctl,
        libc_setgid,
        libc_setgroups,
+       libc_setrlimit,
        libc_setsid,
        libc_setuid,
        libc_setpgid,
        return call.err
 }
 
+//go:nosplit
+//go:linkname syscall_setrlimit
+//go:cgo_unsafe_args
+func syscall_setrlimit(which uintptr, lim unsafe.Pointer) (err uintptr) {
+       call := libcall{
+               fn:   uintptr(unsafe.Pointer(&libc_setrlimit)),
+               n:    2,
+               args: uintptr(unsafe.Pointer(&which)),
+       }
+       asmcgocall(unsafe.Pointer(&asmsysvicall6x), unsafe.Pointer(&call))
+       return call.err
+}
+
 //go:nosplit
 //go:linkname syscall_setsid
 func syscall_setsid() (pid, err uintptr) {
 
 TEXT ·setgroups1(SB),NOSPLIT,$0
        JMP     runtime·syscall_setgroups(SB)
 
+TEXT ·setrlimit1(SB),NOSPLIT,$0
+       JMP     runtime·syscall_setrlimit(SB)
+
 TEXT ·setsid(SB),NOSPLIT,$0
        JMP     runtime·syscall_setsid(SB)
 
 
                ngroups, groups uintptr
        )
 
+       rlim, rlimOK := origRlimitNofile.Load().(Rlimit)
+
        // guard against side effects of shuffling fds below.
        // Make sure that nextfd is beyond any currently open files so
        // that we can't run the risk of overwriting any of them.
                }
        }
 
+       // Restore original rlimit.
+       if rlimOK && rlim.Cur != 0 {
+               RawSyscall(SYS_SETRLIMIT, uintptr(RLIMIT_NOFILE), uintptr(unsafe.Pointer(&rlim)), 0)
+       }
+
        // Time to exec.
        _, _, err1 = RawSyscall(SYS_EXECVE,
                uintptr(unsafe.Pointer(argv0)),
 
                upid            uintptr
        )
 
+       rlim, rlimOK := origRlimitNofile.Load().(Rlimit)
+
        // Record parent PID so child can test if it has died.
        ppid, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0)
 
                }
        }
 
+       // Restore original rlimit.
+       if rlimOK && rlim.Cur != 0 {
+               RawSyscall(SYS_SETRLIMIT, uintptr(RLIMIT_NOFILE), uintptr(unsafe.Pointer(&rlim)), 0)
+       }
+
        // Time to exec.
        _, _, err1 = RawSyscall(SYS_EXECVE,
                uintptr(unsafe.Pointer(argv0)),
 
 func ioctl(fd uintptr, req uintptr, arg uintptr) (err Errno)
 func setgid(gid uintptr) (err Errno)
 func setgroups1(ngid uintptr, gid uintptr) (err Errno)
+func setrlimit1(which uintptr, lim unsafe.Pointer) (err Errno)
 func setsid() (pid uintptr, err Errno)
 func setuid(uid uintptr) (err Errno)
 func setpgid(pid uintptr, pgid uintptr) (err Errno)
                ngroups, groups uintptr
        )
 
+       rlim, rlimOK := origRlimitNofile.Load().(Rlimit)
+
        // guard against side effects of shuffling fds below.
        // Make sure that nextfd is beyond any currently open files so
        // that we can't run the risk of overwriting any of them.
                }
        }
 
+       // Restore original rlimit.
+       if rlimOK && rlim.Cur != 0 {
+               setrlimit1(RLIMIT_NOFILE, unsafe.Pointer(&rlim))
+       }
+
        // Time to exec.
        err1 = execve(
                uintptr(unsafe.Pointer(argv0)),
 
                ngroups, groups uintptr
        )
 
+       rlim, rlimOK := origRlimitNofile.Load().(Rlimit)
+
        // guard against side effects of shuffling fds below.
        // Make sure that nextfd is beyond any currently open files so
        // that we can't run the risk of overwriting any of them.
                }
        }
 
+       // Restore original rlimit.
+       if rlimOK && rlim.Cur != 0 {
+               rawSyscall(abi.FuncPCABI0(libc_setrlimit_trampoline), uintptr(RLIMIT_NOFILE), uintptr(unsafe.Pointer(&rlim)), 0)
+       }
+
        // Time to exec.
        _, _, err1 = rawSyscall(abi.FuncPCABI0(libc_execve_trampoline),
                uintptr(unsafe.Pointer(argv0)),
 
                c                         uintptr
        )
 
+       rlim, rlimOK := origRlimitNofile.Load().(Rlimit)
+
        if sys.UidMappings != nil {
                puid = []byte("/proc/self/uid_map\000")
                uidmap = formatIDMappings(sys.UidMappings)
                }
        }
 
+       // Restore original rlimit.
+       if rlimOK && rlim.Cur != 0 {
+               rawSetrlimit(RLIMIT_NOFILE, &rlim)
+       }
+
        // Enable tracing if requested.
        // Do this right before exec so that we don't unnecessarily trace the runtime
        // setting up after the fork. See issue #21428.
 
        }
        runtime_BeforeExec()
 
+       rlim, rlimOK := origRlimitNofile.Load().(Rlimit)
+       if rlimOK && rlim.Cur != 0 {
+               Setrlimit(RLIMIT_NOFILE, &rlim)
+       }
+
        var err1 error
        if runtime.GOOS == "solaris" || runtime.GOOS == "illumos" || runtime.GOOS == "aix" {
                // RawSyscall should never be used on Solaris, illumos, or AIX.
 
 package syscall_test
 
 import (
+       "bytes"
+       "fmt"
        "internal/testenv"
        "io"
        "math/rand"
        "os"
        "os/exec"
        "os/signal"
+       "strconv"
        "syscall"
        "testing"
        "time"
 
        t.Error("syscall.Exec returned")
 }
+
+// Test that rlimit values are restored by exec.
+func TestRlimitRestored(t *testing.T) {
+       if os.Getenv("GO_WANT_HELPER_PROCESS") != "" {
+               fmt.Println(syscall.OrigRlimitNofile().Cur)
+               os.Exit(0)
+       }
+
+       orig := syscall.OrigRlimitNofile()
+       if orig.Cur == 0 {
+               t.Skip("skipping test because rlimit not adjusted at startup")
+       }
+
+       executable, err := os.Executable()
+       if err != nil {
+               executable = os.Args[0]
+       }
+
+       cmd := testenv.Command(t, executable, "-test.run=TestRlimitRestored")
+       cmd = testenv.CleanCmdEnv(cmd)
+       cmd.Env = append(cmd.Env, "GO_WANT_HELPER_PROCESS=1")
+
+       out, err := cmd.CombinedOutput()
+       if len(out) > 0 {
+               t.Logf("%s", out)
+       }
+       if err != nil {
+               t.Fatalf("subprocess failed: %v", err)
+       }
+       s := string(bytes.TrimSpace(out))
+       v, err := strconv.ParseUint(s, 10, 64)
+       if err != nil {
+               t.Fatalf("could not parse %q as number: %v", s, v)
+       }
+
+       if v != uint64(orig.Cur) {
+               t.Errorf("exec rlimit = %d, want %d", v, orig)
+       }
+}
 
--- /dev/null
+// Copyright 2023 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+//go:build unix
+
+package syscall
+
+func OrigRlimitNofile() Rlimit {
+       if rlim, ok := origRlimitNofile.Load().(Rlimit); ok {
+               return rlim
+       }
+       return Rlimit{0, 0}
+}
 
 
 package syscall
 
+import (
+       "sync/atomic"
+)
+
+// origRlimitNofile, if not {0, 0}, is the original soft RLIMIT_NOFILE.
+// When we can assume that we are bootstrapping with Go 1.19,
+// this can be atomic.Pointer[Rlimit].
+var origRlimitNofile atomic.Value // of Rlimit
+
 // Some systems set an artificially low soft limit on open file count, for compatibility
 // with code that uses select and its hard-coded maximum file descriptor
 // (limited by the size of fd_set).
 func init() {
        var lim Rlimit
        if err := Getrlimit(RLIMIT_NOFILE, &lim); err == nil && lim.Cur != lim.Max {
+               origRlimitNofile.Store(lim)
                lim.Cur = lim.Max
                adjustFileLimit(&lim)
-               Setrlimit(RLIMIT_NOFILE, &lim)
+               setrlimit(RLIMIT_NOFILE, &lim)
+       }
+}
+
+func Setrlimit(resource int, rlim *Rlimit) error {
+       err := setrlimit(resource, rlim)
+       if err == nil && resource == RLIMIT_NOFILE {
+               // Store zeroes in origRlimitNofile to tell StartProcess
+               // to not adjust the rlimit in the child process.
+               origRlimitNofile.Store(Rlimit{0, 0})
        }
+       return err
 }
 
 //sys  Setpriority(which int, who int, prio int) (err error)
 //sysnb        Setregid(rgid int, egid int) (err error)
 //sysnb        Setreuid(ruid int, euid int) (err error)
-//sysnb        Setrlimit(which int, lim *Rlimit) (err error)
+//sysnb        setrlimit(which int, lim *Rlimit) (err error)
 //sys  Stat(path string, stat *Stat_t) (err error)
 //sys  Statfs(path string, buf *Statfs_t) (err error)
 //sys  Symlink(path string, link string) (err error)
 
 //sys  Setprivexec(flag int) (err error)
 //sysnb        Setregid(rgid int, egid int) (err error)
 //sysnb        Setreuid(ruid int, euid int) (err error)
-//sysnb        Setrlimit(which int, lim *Rlimit) (err error)
+//sysnb        setrlimit(which int, lim *Rlimit) (err error)
 //sysnb        Setsid() (pid int, err error)
 //sysnb        Settimeofday(tp *Timeval) (err error)
 //sysnb        Setuid(uid int) (err error)
 
 //sys  Setpriority(which int, who int, prio int) (err error)
 //sysnb        Setregid(rgid int, egid int) (err error)
 //sysnb        Setreuid(ruid int, euid int) (err error)
-//sysnb        Setrlimit(which int, lim *Rlimit) (err error)
+//sysnb        setrlimit(which int, lim *Rlimit) (err error)
 //sysnb        Setsid() (pid int, err error)
 //sysnb        Settimeofday(tp *Timeval) (err error)
 //sysnb        Setuid(uid int) (err error)
 
 //sys  Setpriority(which int, who int, prio int) (err error)
 //sysnb        Setregid(rgid int, egid int) (err error)
 //sysnb        Setreuid(ruid int, euid int) (err error)
-//sysnb        Setrlimit(which int, lim *Rlimit) (err error)
+//sysnb        setrlimit(which int, lim *Rlimit) (err error)
 //sysnb        Setsid() (pid int, err error)
 //sysnb        Settimeofday(tp *Timeval) (err error)
 //sysnb        Setuid(uid int) (err error)
 
 //sys  Mknodat(dirfd int, path string, mode uint32, dev int) (err error)
 //sys  Nanosleep(time *Timespec, leftover *Timespec) (err error)
 //sys  PivotRoot(newroot string, putold string) (err error) = SYS_PIVOT_ROOT
-//sysnb prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) = SYS_PRLIMIT64
+//sysnb prlimit1(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) = SYS_PRLIMIT64
 //sys  read(fd int, p []byte) (n int, err error)
 //sys  Removexattr(path string, attr string) (err error)
 //sys  Setdomainname(p []byte) (err error)
 //sys  Munlock(b []byte) (err error)
 //sys  Mlockall(flags int) (err error)
 //sys  Munlockall() (err error)
+
+// prlimit changes a resource limit. We use a single definition so that
+// we can tell StartProcess to not restore the original NOFILE limit.
+// This is unexported but can be called from x/sys/unix.
+func prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) {
+       err = prlimit1(pid, resource, newlimit, old)
+       if err == nil && newlimit != nil && resource == RLIMIT_NOFILE {
+               origRlimitNofile.Store(Rlimit{0, 0})
+       }
+       return err
+}
 
        return
 }
 
-//sysnb setrlimit(resource int, rlim *rlimit32) (err error) = SYS_SETRLIMIT
+//sysnb setrlimit1(resource int, rlim *rlimit32) (err error) = SYS_SETRLIMIT
 
-func Setrlimit(resource int, rlim *Rlimit) (err error) {
+func setrlimit(resource int, rlim *Rlimit) (err error) {
        err = prlimit(0, resource, rlim, nil)
        if err != ENOSYS {
                return err
                return EINVAL
        }
 
-       return setrlimit(resource, &rl)
+       return setrlimit1(resource, &rl)
+}
+
+//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
+       }
+
+       rl := rlimit32{}
+       if rlim.Cur == rlimInf64 {
+               rl.Cur = rlimInf32
+       } else if rlim.Cur < uint64(rlimInf32) {
+               rl.Cur = uint32(rlim.Cur)
+       } else {
+               return EINVAL
+       }
+       if rlim.Max == rlimInf64 {
+               rl.Max = rlimInf32
+       } else if rlim.Max < uint64(rlimInf32) {
+               rl.Max = uint32(rlim.Max)
+       } else {
+               return EINVAL
+       }
+
+       _, _, errno = RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0)
+       return errno
 }
 
 // Underlying system call writes to newoffset via pointer.
 
 
 package syscall
 
+import (
+       "unsafe"
+)
+
 const (
        _SYS_setgroups  = SYS_SETGROUPS
        _SYS_clone3     = 435
 //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        setrlimit(resource int, rlim *Rlimit) (err error) = SYS_SETRLIMIT
 //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)
 //sys  Statfs(path string, buf *Statfs_t) (err error)
 //sys  Utime(path string, buf *Utimbuf) (err error)
 //sys  utimes(path string, times *[2]Timeval) (err error)
 
+//go:nosplit
+func rawSetrlimit(resource int, rlim *Rlimit) Errno {
+       _, _, errno := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0)
+       return errno
+}
+
 func setTimespec(sec, nsec int64) Timespec {
        return Timespec{Sec: sec, Nsec: nsec}
 }
 
        return
 }
 
-//sysnb setrlimit(resource int, rlim *rlimit32) (err error) = SYS_SETRLIMIT
+//sysnb setrlimit1(resource int, rlim *rlimit32) (err error) = SYS_SETRLIMIT
 
-func Setrlimit(resource int, rlim *Rlimit) (err error) {
+func setrlimit(resource int, rlim *Rlimit) (err error) {
        err = prlimit(0, resource, rlim, nil)
        if err != ENOSYS {
                return err
                return EINVAL
        }
 
-       return setrlimit(resource, &rl)
+       return setrlimit1(resource, &rl)
+}
+
+//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
+       }
+
+       rl := rlimit32{}
+       if rlim.Cur == rlimInf64 {
+               rl.Cur = rlimInf32
+       } else if rlim.Cur < uint64(rlimInf32) {
+               rl.Cur = uint32(rlim.Cur)
+       } else {
+               return EINVAL
+       }
+       if rlim.Max == rlimInf64 {
+               rl.Max = rlimInf32
+       } else if rlim.Max < uint64(rlimInf32) {
+               rl.Max = uint32(rlim.Max)
+       } else {
+               return EINVAL
+       }
+
+       _, _, errno = RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0)
+       return errno
 }
 
 func (r *PtraceRegs) PC() uint64 { return uint64(r.Uregs[15]) }
 
 //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)
 
        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 }
 
        return prlimit(0, resource, nil, rlim)
 }
 
-// Setrlimit prefers the prlimit64 system call.
-func Setrlimit(resource int, rlim *Rlimit) error {
+// setrlimit prefers the prlimit64 system call.
+func setrlimit(resource int, rlim *Rlimit) error {
        return prlimit(0, resource, rlim, nil)
 }
 
+//go:nosplit
+func rawSetrlimit(resource int, rlim *Rlimit) Errno {
+       _, _, errno := RawSyscall6(SYS_PRLIMIT64, 0, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0, 0, 0)
+       return errno
+}
+
 func (r *PtraceRegs) GetEra() uint64 { return r.Era }
 
 func (r *PtraceRegs) SetEra(era uint64) { r.Era = era }
 
 
 package syscall
 
+import (
+       "unsafe"
+)
+
 const (
        _SYS_setgroups  = SYS_SETGROUPS
        _SYS_clone3     = 5435
 //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        setrlimit(resource int, rlim *Rlimit) (err error) = SYS_SETRLIMIT
 //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)
 //sys  Statfs(path string, buf *Statfs_t) (err error)
 //sys  Utime(path string, buf *Utimbuf) (err error)
 //sys  utimes(path string, times *[2]Timeval) (err error)
 
+//go:nosplit
+func rawSetrlimit(resource int, rlim *Rlimit) Errno {
+       _, _, errno := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0)
+       return errno
+}
+
 func setTimespec(sec, nsec int64) Timespec {
        return Timespec{Sec: sec, Nsec: nsec}
 }
 
        return
 }
 
-//sysnb setrlimit(resource int, rlim *rlimit32) (err error) = SYS_SETRLIMIT
+//sysnb setrlimit1(resource int, rlim *rlimit32) (err error) = SYS_SETRLIMIT
 
-func Setrlimit(resource int, rlim *Rlimit) (err error) {
+func setrlimit(resource int, rlim *Rlimit) (err error) {
        err = prlimit(0, resource, rlim, nil)
        if err != ENOSYS {
                return err
                return EINVAL
        }
 
-       return setrlimit(resource, &rl)
+       return setrlimit1(resource, &rl)
+}
+
+//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
+       }
+
+       rl := rlimit32{}
+       if rlim.Cur == rlimInf64 {
+               rl.Cur = rlimInf32
+       } else if rlim.Cur < uint64(rlimInf32) {
+               rl.Cur = uint32(rlim.Cur)
+       } else {
+               return EINVAL
+       }
+       if rlim.Max == rlimInf64 {
+               rl.Max = rlimInf32
+       } else if rlim.Max < uint64(rlimInf32) {
+               rl.Max = uint32(rlim.Max)
+       } else {
+               return EINVAL
+       }
+
+       _, _, errno = RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0)
+       return errno
 }
 
 func (r *PtraceRegs) PC() uint64 { return uint64(r.Regs[64]) }
 
 
 package syscall
 
+import (
+       "unsafe"
+)
+
 const (
        _SYS_setgroups  = SYS_SETGROUPS
        _SYS_clone3     = 435
 //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        setrlimit(resource int, rlim *Rlimit) (err error) = SYS_SETRLIMIT
 //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)
 //sys  Stat(path string, stat *Stat_t) (err error)
 //sys  Utime(path string, buf *Utimbuf) (err error)
 //sys  utimes(path string, times *[2]Timeval) (err error)
 
+//go:nosplit
+func rawSetrlimit(resource int, rlim *Rlimit) Errno {
+       _, _, errno := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0)
+       return errno
+}
+
 func setTimespec(sec, nsec int64) Timespec {
        return Timespec{Sec: sec, Nsec: nsec}
 }
 
 //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        setrlimit(resource int, rlim *Rlimit) (err error) = SYS_SETRLIMIT
 //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)
 
        return utimensat(_AT_FDCWD, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0)
 }
 
+//go:nosplit
+func rawSetrlimit(resource int, rlim *Rlimit) Errno {
+       _, _, errno := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0)
+       return errno
+}
+
 func (r *PtraceRegs) PC() uint64 { return r.Pc }
 
 func (r *PtraceRegs) SetPC(pc uint64) { r.Pc = pc }
 
 //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        setrlimit(resource int, rlim *Rlimit) (err error) = SYS_SETRLIMIT
 //sys  Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error)
 //sys  Stat(path string, stat *Stat_t) (err error)
 //sys  Statfs(path string, buf *Statfs_t) (err error)
        return
 }
 
+//go:nosplit
+func rawSetrlimit(resource int, rlim *Rlimit) Errno {
+       _, _, errno := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0)
+       return errno
+}
+
 func (r *PtraceRegs) PC() uint64 { return r.Psw.Addr }
 
 func (r *PtraceRegs) SetPC(pc uint64) { r.Psw.Addr = pc }
 
 //sys  Setpriority(which int, who int, prio int) (err error)
 //sysnb        Setregid(rgid int, egid int) (err error)
 //sysnb        Setreuid(ruid int, euid int) (err error)
-//sysnb        Setrlimit(which int, lim *Rlimit) (err error)
+//sysnb        setrlimit(which int, lim *Rlimit) (err error)
 //sysnb        Setsid() (pid int, err error)
 //sysnb        Settimeofday(tp *Timeval) (err error)
 //sysnb        Setuid(uid int) (err error)
 
 //sys  Setpriority(which int, who int, prio int) (err error)
 //sysnb        Setregid(rgid int, egid int) (err error)
 //sysnb        Setreuid(ruid int, euid int) (err error)
-//sysnb        Setrlimit(which int, lim *Rlimit) (err error)
+//sysnb        setrlimit(which int, lim *Rlimit) (err error)
 //sysnb        Setsid() (pid int, err error)
 //sysnb        Settimeofday(tp *Timeval) (err error)
 //sysnb        Setuid(uid int) (err error)
 
 //sys  Setpriority(which int, who int, prio int) (err error)
 //sysnb        Setregid(rgid int, egid int) (err error)
 //sysnb        Setreuid(ruid int, euid int) (err error)
-//sysnb        Setrlimit(which int, lim *Rlimit) (err error)
+//sysnb        setrlimit(which int, lim *Rlimit) (err error)
 //sysnb        Setsid() (pid int, err error)
 //sysnb        Setuid(uid int) (err error)
 //sys  Shutdown(s int, how int) (err error) = libsocket.shutdown
 
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
-func Setrlimit(which int, lim *Rlimit) (err error) {
+func setrlimit(which int, lim *Rlimit) (err error) {
        _, _, e1 := rawSyscall6(uintptr(unsafe.Pointer(&libc_Setrlimit)), 2, uintptr(which), uintptr(unsafe.Pointer(lim)), 0, 0, 0, 0)
        if e1 != 0 {
                err = errnoErr(e1)
 
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
-func Setrlimit(which int, lim *Rlimit) (err error) {
+func setrlimit(which int, lim *Rlimit) (err error) {
        _, _, e1 := rawSyscall(abi.FuncPCABI0(libc_setrlimit_trampoline), uintptr(which), uintptr(unsafe.Pointer(lim)), 0)
        if e1 != 0 {
                err = errnoErr(e1)
 
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
-func Setrlimit(which int, lim *Rlimit) (err error) {
+func setrlimit(which int, lim *Rlimit) (err error) {
        _, _, e1 := rawSyscall(abi.FuncPCABI0(libc_setrlimit_trampoline), uintptr(which), uintptr(unsafe.Pointer(lim)), 0)
        if e1 != 0 {
                err = errnoErr(e1)
 
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
-func Setrlimit(which int, lim *Rlimit) (err error) {
+func setrlimit(which int, lim *Rlimit) (err error) {
        _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)
        if e1 != 0 {
                err = errnoErr(e1)
 
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
-func Setrlimit(which int, lim *Rlimit) (err error) {
+func setrlimit(which int, lim *Rlimit) (err error) {
        _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)
        if e1 != 0 {
                err = errnoErr(e1)
 
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
-func Setrlimit(which int, lim *Rlimit) (err error) {
+func setrlimit(which int, lim *Rlimit) (err error) {
        _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)
        if e1 != 0 {
                err = errnoErr(e1)
 
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
-func Setrlimit(which int, lim *Rlimit) (err error) {
+func setrlimit(which int, lim *Rlimit) (err error) {
        _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)
        if e1 != 0 {
                err = errnoErr(e1)
 
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
-func Setrlimit(which int, lim *Rlimit) (err error) {
+func setrlimit(which int, lim *Rlimit) (err error) {
        _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)
        if e1 != 0 {
                err = errnoErr(e1)
 
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
-func Setrlimit(which int, lim *Rlimit) (err error) {
+func setrlimit(which int, lim *Rlimit) (err error) {
        _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)
        if e1 != 0 {
                err = errnoErr(e1)
 
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
-func prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) {
+func prlimit1(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) {
        _, _, e1 := RawSyscall6(SYS_PRLIMIT64, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(newlimit)), uintptr(unsafe.Pointer(old)), 0, 0)
        if e1 != 0 {
                err = errnoErr(e1)
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
-func setrlimit(resource int, rlim *rlimit32) (err error) {
+func setrlimit1(resource int, rlim *rlimit32) (err error) {
        _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0)
        if e1 != 0 {
                err = errnoErr(e1)
 
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
-func prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) {
+func prlimit1(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) {
        _, _, e1 := RawSyscall6(SYS_PRLIMIT64, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(newlimit)), uintptr(unsafe.Pointer(old)), 0, 0)
        if e1 != 0 {
                err = errnoErr(e1)
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
-func Setrlimit(resource int, rlim *Rlimit) (err error) {
+func setrlimit(resource int, rlim *Rlimit) (err error) {
        _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0)
        if e1 != 0 {
                err = errnoErr(e1)
 
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
-func prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) {
+func prlimit1(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) {
        _, _, e1 := RawSyscall6(SYS_PRLIMIT64, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(newlimit)), uintptr(unsafe.Pointer(old)), 0, 0)
        if e1 != 0 {
                err = errnoErr(e1)
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
-func setrlimit(resource int, rlim *rlimit32) (err error) {
+func setrlimit1(resource int, rlim *rlimit32) (err error) {
        _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0)
        if e1 != 0 {
                err = errnoErr(e1)
 
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
-func prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) {
+func prlimit1(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) {
        _, _, e1 := RawSyscall6(SYS_PRLIMIT64, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(newlimit)), uintptr(unsafe.Pointer(old)), 0, 0)
        if e1 != 0 {
                err = errnoErr(e1)
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
-func setrlimit(resource int, rlim *Rlimit) (err error) {
+func setrlimit1(resource int, rlim *Rlimit) (err error) {
        _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0)
        if e1 != 0 {
                err = errnoErr(e1)
 
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
-func prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) {
+func prlimit1(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) {
        _, _, e1 := RawSyscall6(SYS_PRLIMIT64, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(newlimit)), uintptr(unsafe.Pointer(old)), 0, 0)
        if e1 != 0 {
                err = errnoErr(e1)
 
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
-func prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) {
+func prlimit1(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) {
        _, _, e1 := RawSyscall6(SYS_PRLIMIT64, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(newlimit)), uintptr(unsafe.Pointer(old)), 0, 0)
        if e1 != 0 {
                err = errnoErr(e1)
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
-func setrlimit(resource int, rlim *rlimit32) (err error) {
+func setrlimit1(resource int, rlim *rlimit32) (err error) {
        _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0)
        if e1 != 0 {
                err = errnoErr(e1)
 
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
-func prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) {
+func prlimit1(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) {
        _, _, e1 := RawSyscall6(SYS_PRLIMIT64, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(newlimit)), uintptr(unsafe.Pointer(old)), 0, 0)
        if e1 != 0 {
                err = errnoErr(e1)
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
-func Setrlimit(resource int, rlim *Rlimit) (err error) {
+func setrlimit(resource int, rlim *Rlimit) (err error) {
        _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0)
        if e1 != 0 {
                err = errnoErr(e1)
 
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
-func prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) {
+func prlimit1(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) {
        _, _, e1 := RawSyscall6(SYS_PRLIMIT64, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(newlimit)), uintptr(unsafe.Pointer(old)), 0, 0)
        if e1 != 0 {
                err = errnoErr(e1)
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
-func Setrlimit(resource int, rlim *Rlimit) (err error) {
+func setrlimit(resource int, rlim *Rlimit) (err error) {
        _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0)
        if e1 != 0 {
                err = errnoErr(e1)
 
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
-func prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) {
+func prlimit1(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) {
        _, _, e1 := RawSyscall6(SYS_PRLIMIT64, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(newlimit)), uintptr(unsafe.Pointer(old)), 0, 0)
        if e1 != 0 {
                err = errnoErr(e1)
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
-func setrlimit(resource int, rlim *rlimit32) (err error) {
+func setrlimit1(resource int, rlim *rlimit32) (err error) {
        _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0)
        if e1 != 0 {
                err = errnoErr(e1)
 
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
-func prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) {
+func prlimit1(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) {
        _, _, e1 := RawSyscall6(SYS_PRLIMIT64, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(newlimit)), uintptr(unsafe.Pointer(old)), 0, 0)
        if e1 != 0 {
                err = errnoErr(e1)
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
-func Setrlimit(resource int, rlim *Rlimit) (err error) {
+func setrlimit(resource int, rlim *Rlimit) (err error) {
        _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0)
        if e1 != 0 {
                err = errnoErr(e1)
 
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
-func prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) {
+func prlimit1(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) {
        _, _, e1 := RawSyscall6(SYS_PRLIMIT64, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(newlimit)), uintptr(unsafe.Pointer(old)), 0, 0)
        if e1 != 0 {
                err = errnoErr(e1)
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
-func Setrlimit(resource int, rlim *Rlimit) (err error) {
+func setrlimit(resource int, rlim *Rlimit) (err error) {
        _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0)
        if e1 != 0 {
                err = errnoErr(e1)
 
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
-func prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) {
+func prlimit1(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) {
        _, _, e1 := RawSyscall6(SYS_PRLIMIT64, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(newlimit)), uintptr(unsafe.Pointer(old)), 0, 0)
        if e1 != 0 {
                err = errnoErr(e1)
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
-func Setrlimit(resource int, rlim *Rlimit) (err error) {
+func setrlimit(resource int, rlim *Rlimit) (err error) {
        _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0)
        if e1 != 0 {
                err = errnoErr(e1)
 
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
-func prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) {
+func prlimit1(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) {
        _, _, e1 := RawSyscall6(SYS_PRLIMIT64, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(newlimit)), uintptr(unsafe.Pointer(old)), 0, 0)
        if e1 != 0 {
                err = errnoErr(e1)
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
-func Setrlimit(resource int, rlim *Rlimit) (err error) {
+func setrlimit(resource int, rlim *Rlimit) (err error) {
        _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0)
        if e1 != 0 {
                err = errnoErr(e1)
 
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
-func Setrlimit(which int, lim *Rlimit) (err error) {
+func setrlimit(which int, lim *Rlimit) (err error) {
        _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)
        if e1 != 0 {
                err = errnoErr(e1)
 
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
-func Setrlimit(which int, lim *Rlimit) (err error) {
+func setrlimit(which int, lim *Rlimit) (err error) {
        _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)
        if e1 != 0 {
                err = errnoErr(e1)
 
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
-func Setrlimit(which int, lim *Rlimit) (err error) {
+func setrlimit(which int, lim *Rlimit) (err error) {
        _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)
        if e1 != 0 {
                err = errnoErr(e1)
 
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
-func Setrlimit(which int, lim *Rlimit) (err error) {
+func setrlimit(which int, lim *Rlimit) (err error) {
        _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)
        if e1 != 0 {
                err = errnoErr(e1)
 
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
-func Setrlimit(which int, lim *Rlimit) (err error) {
+func setrlimit(which int, lim *Rlimit) (err error) {
        _, _, e1 := rawSyscall(abi.FuncPCABI0(libc_setrlimit_trampoline), uintptr(which), uintptr(unsafe.Pointer(lim)), 0)
        if e1 != 0 {
                err = errnoErr(e1)
 
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
-func Setrlimit(which int, lim *Rlimit) (err error) {
+func setrlimit(which int, lim *Rlimit) (err error) {
        _, _, e1 := rawSyscall(abi.FuncPCABI0(libc_setrlimit_trampoline), uintptr(which), uintptr(unsafe.Pointer(lim)), 0)
        if e1 != 0 {
                err = errnoErr(e1)
 
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
-func Setrlimit(which int, lim *Rlimit) (err error) {
+func setrlimit(which int, lim *Rlimit) (err error) {
        _, _, e1 := rawSyscall(abi.FuncPCABI0(libc_setrlimit_trampoline), uintptr(which), uintptr(unsafe.Pointer(lim)), 0)
        if e1 != 0 {
                err = errnoErr(e1)
 
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
-func Setrlimit(which int, lim *Rlimit) (err error) {
+func setrlimit(which int, lim *Rlimit) (err error) {
        _, _, e1 := rawSyscall(abi.FuncPCABI0(libc_setrlimit_trampoline), uintptr(which), uintptr(unsafe.Pointer(lim)), 0)
        if e1 != 0 {
                err = errnoErr(e1)
 
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
-func Setrlimit(which int, lim *Rlimit) (err error) {
+func setrlimit(which int, lim *Rlimit) (err error) {
        _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)
        if e1 != 0 {
                err = errnoErr(e1)
 
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
-func Setrlimit(which int, lim *Rlimit) (err error) {
+func setrlimit(which int, lim *Rlimit) (err error) {
        _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&libc_Setrlimit)), 2, uintptr(which), uintptr(unsafe.Pointer(lim)), 0, 0, 0, 0)
        if e1 != 0 {
                err = errnoErr(e1)