]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
linux: Add prlimit64 C implementation
authorAdhemerval Zanella <adhemerval.zanella@linaro.org>
Thu, 11 Jun 2020 20:41:16 +0000 (17:41 -0300)
committerAdhemerval Zanella <adhemerval.zanella@linaro.org>
Tue, 30 Nov 2021 16:13:03 +0000 (13:13 -0300)
The LFS prlimit64 requires a arch-specific implementation in
syscalls.list.  Instead add a generic one that handles the
required symbol alias for __RLIM_T_MATCHES_RLIM64_T.

HPPA is the only outlier which requires a different default
symbol.

Checked on x86_64-linux-gnu and with build for the affected ABIs.

18 files changed:
sysdeps/unix/sysv/linux/Makefile
sysdeps/unix/sysv/linux/arm/syscalls.list
sysdeps/unix/sysv/linux/generic/wordsize-32/syscalls.list [deleted file]
sysdeps/unix/sysv/linux/hppa/prlimit64.c [new file with mode: 0644]
sysdeps/unix/sysv/linux/hppa/syscalls.list
sysdeps/unix/sysv/linux/i386/syscalls.list
sysdeps/unix/sysv/linux/m68k/syscalls.list
sysdeps/unix/sysv/linux/microblaze/syscalls.list
sysdeps/unix/sysv/linux/mips/mips32/syscalls.list [deleted file]
sysdeps/unix/sysv/linux/mips/mips64/n32/syscalls.list
sysdeps/unix/sysv/linux/mips/mips64/n64/syscalls.list
sysdeps/unix/sysv/linux/powerpc/powerpc32/syscalls.list
sysdeps/unix/sysv/linux/prlimit.c
sysdeps/unix/sysv/linux/prlimit64.c [new file with mode: 0644]
sysdeps/unix/sysv/linux/s390/s390-32/syscalls.list
sysdeps/unix/sysv/linux/sh/syscalls.list
sysdeps/unix/sysv/linux/sparc/sparc32/syscalls.list
sysdeps/unix/sysv/linux/wordsize-64/syscalls.list

index 695535716a7793248b57ed0a8c771193c1cf5aa4..e8574f3c6fda48deb6d7c2632b9bc915c158a0af 100644 (file)
@@ -56,7 +56,7 @@ endif
 ifeq ($(subdir),misc)
 sysdep_routines += adjtimex clone umount umount2 readahead sysctl \
                   setfsuid setfsgid epoll_pwait signalfd \
-                  eventfd eventfd_read eventfd_write prlimit \
+                  eventfd eventfd_read eventfd_write prlimit prlimit64 \
                   personality epoll_wait tee vmsplice splice \
                   open_by_handle_at mlock2 pkey_mprotect pkey_set pkey_get \
                   timerfd_gettime timerfd_settime prctl \
index fa26876f903d882b1d9908427aee9f471c183fdb..55fb065893fd905c7795b4e8f62930c93fe27e9b 100644 (file)
@@ -15,8 +15,6 @@ getgroups     -       getgroups32     i:ip    __getgroups     getgroups
 setfsgid       -       setfsgid32      Ei:i    setfsgid
 setfsuid       -       setfsuid32      Ei:i    setfsuid
 
-prlimit64      EXTRA   prlimit64       i:iipp  prlimit64
-
 personality    EXTRA   personality     Ei:i    __personality   personality
 
 # proper socket implementations:
diff --git a/sysdeps/unix/sysv/linux/generic/wordsize-32/syscalls.list b/sysdeps/unix/sysv/linux/generic/wordsize-32/syscalls.list
deleted file mode 100644 (file)
index 736edbe..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-# File name    Caller  Syscall name    # args  Strong name     Weak names
-
-# rlimit APIs
-prlimit64      EXTRA   prlimit64       i:iipp  prlimit64
diff --git a/sysdeps/unix/sysv/linux/hppa/prlimit64.c b/sysdeps/unix/sysv/linux/hppa/prlimit64.c
new file mode 100644 (file)
index 0000000..4554c81
--- /dev/null
@@ -0,0 +1,2 @@
+#define VERSION_prlimit64 GLIBC_2_17
+#include <sysdeps/unix/sysv/linux/prlimit64.c>
index cc5305a585bbd411aa3e1f9eddd37281e13246ab..12e4adeccc78144df5e3a207f120e837d0f20a65 100644 (file)
@@ -9,5 +9,4 @@ shutdown        -       shutdown        i:ii    __shutdown      shutdown
 socket         -       socket          i:iii   __socket        socket
 socketpair     -       socketpair      i:iiif  __socketpair    socketpair
 
-prlimit64      EXTRA   prlimit64       i:iipp  __prlimit64     prlimit64@@GLIBC_2.17
 personality    EXTRA   personality     Ei:i    __personality   personality
index d3eaabe61b8aabc83765d26ec42a55d84b8f5cc9..c0ec1af8f3adbd15fd8f608ec364075afdde2676 100644 (file)
@@ -19,6 +19,4 @@ modify_ldt    EXTRA   modify_ldt      i:ipi   __modify_ldt    modify_ldt
 vm86old                EXTRA   vm86old         i:p     __vm86old       vm86@GLIBC_2.0
 vm86           -       vm86            i:ip    __vm86          vm86@@GLIBC_2.3.4
 
-prlimit64      EXTRA   prlimit64       i:iipp  prlimit64
-
 personality    EXTRA   personality     Ei:i    __personality   personality
index 44c84bf626e26c501933037704cb7577e22ec679..0fc117886c6068921f107ad02b85df78653d5cba 100644 (file)
@@ -16,5 +16,4 @@ setfsgid      -       setfsgid32      Ei:i    setfsgid
 setfsuid       -       setfsuid32      Ei:i    setfsuid
 
 cacheflush     EXTRA   cacheflush      i:iiii  __cacheflush    cacheflush
-prlimit64      EXTRA   prlimit64       i:iipp  prlimit64
 personality    EXTRA   personality     Ei:i    __personality   personality
index 0abdc38bf34095d7e7c326c7a7cdae5db0611102..878ce7e6a2b19b5485a0101e7157e54ef91fee63 100644 (file)
@@ -2,5 +2,4 @@
 
 cacheflush     EXTRA   cacheflush      i:iiii  __cacheflush    cacheflush
 
-prlimit64      EXTRA   prlimit64       i:iipp  prlimit64
 personality    EXTRA   personality     Ei:i    __personality   personality
diff --git a/sysdeps/unix/sysv/linux/mips/mips32/syscalls.list b/sysdeps/unix/sysv/linux/mips/mips32/syscalls.list
deleted file mode 100644 (file)
index dbeb184..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-# File name    Caller  Syscall name    # args  Strong name     Weak names
-
-prlimit64      EXTRA   prlimit64       i:iipp  prlimit64
index 848028f12516e72a63353392ca4c510e220d6dd4..c737eeadc5c0b948c79b0e56e33237badf8276aa 100644 (file)
@@ -4,6 +4,4 @@
 # return value.
 lseek64                -       lseek           i:iii   __lseek64       __libc_lseek64 lseek64@@GLIBC_2.2 llseek@GLIBC_2.0:GLIBC_2.28
 
-prlimit64      EXTRA   prlimit64       i:iipp  prlimit64
-
 personality    EXTRA   personality     Ei:i    __personality   personality
index 84f348c8e5c6c5274c9bdee56aca7d20d6a28e6a..0924f245d45dc7e3c5d545ccdae205f1806f6fdc 100644 (file)
@@ -1,5 +1,3 @@
 # File name    Caller  Syscall name    # args  Strong name     Weak names
 
-prlimit                EXTRA   prlimit64       i:iipp  prlimit         prlimit64
-
 sendfile       -       sendfile        i:iipi  sendfile        sendfile64
index d31303250d89b004a48588b85abc9ad3614f1582..5231da94b278436457c77df5fb39d2025b9dbd8b 100644 (file)
@@ -2,5 +2,3 @@
 
 chown          -       chown           i:sii   __chown         chown@@GLIBC_2.1
 lchown         -       lchown          i:sii   __lchown        lchown@@GLIBC_2.0 chown@GLIBC_2.0
-
-prlimit64      EXTRA   prlimit64       i:iipp  prlimit64
index c12de526933fa698a82d6eb4ef93c34a65d72d74..d4e0b73bce4238abb0bec935542760099ea41926 100644 (file)
 #include <sys/resource.h>
 #include <sysdep.h>
 
+/* For ports that support the 64-bit ABI we do not need to define prlimit
+   and instead prlimit aliases to prlimit64.  See the prlimit64
+   implementation.  */
+#if !__RLIM_T_MATCHES_RLIM64_T
 int
 prlimit (__pid_t pid, enum __rlimit_resource resource,
         const struct rlimit *new_rlimit, struct rlimit *old_rlimit)
@@ -73,3 +77,4 @@ prlimit (__pid_t pid, enum __rlimit_resource resource,
 
   return res;
 }
+#endif /* __RLIM_T_MATCHES_RLIM64_T  */
diff --git a/sysdeps/unix/sysv/linux/prlimit64.c b/sysdeps/unix/sysv/linux/prlimit64.c
new file mode 100644 (file)
index 0000000..1565b84
--- /dev/null
@@ -0,0 +1,39 @@
+/* Get/set resource limits.  Linux specific syscall.
+   Copyright (C) 2021 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <https://www.gnu.org/licenses/>.  */
+
+#define prlimit __redirect_prlimit
+#include <sys/resource.h>
+#undef prlimit
+#include <sysdep.h>
+
+int
+__prlimit64 (pid_t pid, enum __rlimit_resource resource,
+            const struct rlimit64 *new_rlimit, struct rlimit64 *old_rlimit)
+{
+  return INLINE_SYSCALL_CALL (prlimit64, pid, resource, new_rlimit,
+                             old_rlimit);
+}
+#ifdef VERSION_prlimit64
+# include <shlib-compat.h>
+versioned_symbol (libc, __prlimit64, prlimit64, VERSION_prlimit64);
+#else
+strong_alias (__prlimit64, prlimit64)
+# if __RLIM_T_MATCHES_RLIM64_T
+strong_alias (prlimit64, prlimit)
+# endif
+#endif
index 8e9b7c4b715cc8ca18b9fd0d6b85be9b5d6c6283..91d78d91effb13f437cc73c71d4e1ec26822593f 100644 (file)
@@ -15,5 +15,4 @@ getgroups     -       getgroups32     i:ip    __getgroups     getgroups
 setfsgid       -       setfsgid32      Ei:i    setfsgid
 setfsuid       -       setfsuid32      Ei:i    setfsuid
 
-prlimit64      EXTRA   prlimit64       i:iipp  prlimit64
 personality    EXTRA   personality     Ei:i    __personality   personality
index 6ff3e8eb8ae076af4c776d4639f96169feb05080..78b2348c059b7229f74af7bdb9e49cd6fa5e3175 100644 (file)
@@ -15,6 +15,4 @@ getgroups     -       getgroups32     i:ip    __getgroups     getgroups
 setfsgid       -       setfsgid32      Ei:i    setfsgid
 setfsuid       -       setfsuid32      Ei:i    setfsuid
 
-prlimit64      EXTRA   prlimit64       i:iipp  prlimit64
-
 personality    EXTRA   personality     Ei:i    __personality   personality
index 4fcae654519a0d3b7eb1adc11b272e422f0bccb4..9e4eb0a1656e0bb6869d45b549a4c6558e796c88 100644 (file)
@@ -14,5 +14,3 @@ getgroups     -       getgroups32     i:ip    __getgroups     getgroups
 
 setfsgid       -       setfsgid32      Ei:i    setfsgid
 setfsuid       -       setfsuid32      Ei:i    setfsuid
-
-prlimit64      EXTRA   prlimit64       i:iipp  prlimit64
index 8d97a32344369f0d7ee851e34b48710142187516..3232f11f519f32a3b56751e3c2d51d2f1079b962 100644 (file)
@@ -1,5 +1,4 @@
 # File name    Caller  Syscall name    # args  Strong name     Weak names
 
 sendfile       -       sendfile        i:iipi  sendfile        sendfile64
-prlimit                EXTRA   prlimit64       i:iipp  prlimit         prlimit64
 personality    EXTRA   personality     i:i     __personality   personality