mirror of
https://sourceware.org/git/glibc.git
synced 2025-07-29 11:41:21 +03:00
Assume prlimit64 is available.
This patch makes sysdeps/unix/sysv/linux code assume the prlimit64 syscall is always available, given the minimum of a 3.2 kernel. __ASSUME_PRLIMIT64, which in fact was no longer used, is removed. Code conditional on __NR_prlimit64 being defined is made unconditional. Fallback code for the case where prlimit64 produces an ENOSYS error is removed, substantially simplifying some functions. Tested for x86_64 and x86. * sysdeps/unix/sysv/linux/kernel-features.h (__ASSUME_PRLIMIT64): Remove macro. * sysdeps/unix/sysv/linux/getrlimit64.c (__getrlimit64): Assume prlimit64 is always available and does not give an ENOSYS error. * sysdeps/unix/sysv/linux/prlimit.c [__NR_prlimit64]: Make code unconditional. [!__NR_prlimit64]: Remove conditional code. * sysdeps/unix/sysv/linux/setrlimit.c (__setrlimit): Assume prlimit64 is always available and does not give an ENOSYS error. * sysdeps/unix/sysv/linux/setrlimit64.c (__setrlimit64): Likewise.
This commit is contained in:
13
ChangeLog
13
ChangeLog
@ -1,3 +1,16 @@
|
|||||||
|
2017-05-09 Joseph Myers <joseph@codesourcery.com>
|
||||||
|
|
||||||
|
* sysdeps/unix/sysv/linux/kernel-features.h (__ASSUME_PRLIMIT64):
|
||||||
|
Remove macro.
|
||||||
|
* sysdeps/unix/sysv/linux/getrlimit64.c (__getrlimit64): Assume
|
||||||
|
prlimit64 is always available and does not give an ENOSYS error.
|
||||||
|
* sysdeps/unix/sysv/linux/prlimit.c [__NR_prlimit64]: Make code
|
||||||
|
unconditional.
|
||||||
|
[!__NR_prlimit64]: Remove conditional code.
|
||||||
|
* sysdeps/unix/sysv/linux/setrlimit.c (__setrlimit): Assume
|
||||||
|
prlimit64 is always available and does not give an ENOSYS error.
|
||||||
|
* sysdeps/unix/sysv/linux/setrlimit64.c (__setrlimit64): Likewise.
|
||||||
|
|
||||||
2017-05-09 Zack Weinberg <zackw@panix.com>
|
2017-05-09 Zack Weinberg <zackw@panix.com>
|
||||||
|
|
||||||
* sunrpc/tst-xdrmem2.c: Include stdint.h.
|
* sunrpc/tst-xdrmem2.c: Include stdint.h.
|
||||||
|
@ -35,40 +35,7 @@
|
|||||||
int
|
int
|
||||||
__getrlimit64 (enum __rlimit_resource resource, struct rlimit64 *rlimits)
|
__getrlimit64 (enum __rlimit_resource resource, struct rlimit64 *rlimits)
|
||||||
{
|
{
|
||||||
#ifdef __NR_prlimit64
|
return INLINE_SYSCALL_CALL (prlimit64, 0, resource, NULL, rlimits);
|
||||||
int res = INLINE_SYSCALL_CALL (prlimit64, 0, resource, NULL, rlimits);
|
|
||||||
if (res == 0 || errno != ENOSYS)
|
|
||||||
return res;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* The fallback code only makes sense if the platform supports either
|
|
||||||
__NR_ugetrlimit and/or __NR_getrlimit. */
|
|
||||||
#if defined (__NR_ugetrlimit) || defined (__NR_getrlimit)
|
|
||||||
# ifndef __NR_ugetrlimit
|
|
||||||
# define __NR_ugetrlimit __NR_getrlimit
|
|
||||||
# endif
|
|
||||||
# if __RLIM_T_MATCHES_RLIM64_T
|
|
||||||
# define rlimits32 (*rlimits)
|
|
||||||
# else
|
|
||||||
struct rlimit rlimits32;
|
|
||||||
# endif
|
|
||||||
|
|
||||||
if (INLINE_SYSCALL_CALL (ugetrlimit, resource, &rlimits32) < 0)
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
# if !__RLIM_T_MATCHES_RLIM64_T
|
|
||||||
if (rlimits32.rlim_cur == RLIM_INFINITY)
|
|
||||||
rlimits->rlim_cur = RLIM64_INFINITY;
|
|
||||||
else
|
|
||||||
rlimits->rlim_cur = rlimits32.rlim_cur;
|
|
||||||
if (rlimits32.rlim_max == RLIM_INFINITY)
|
|
||||||
rlimits->rlim_max = RLIM64_INFINITY;
|
|
||||||
else
|
|
||||||
rlimits->rlim_max = rlimits32.rlim_max;
|
|
||||||
# endif /* !__RLIM_T_MATCHES_RLIM64_T */
|
|
||||||
#endif /* defined (__NR_ugetrlimit) || defined (__NR_getrlimit) */
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
libc_hidden_def (__getrlimit64)
|
libc_hidden_def (__getrlimit64)
|
||||||
|
|
||||||
|
@ -103,11 +103,6 @@
|
|||||||
# define __ASSUME_STATFS_F_FLAGS 1
|
# define __ASSUME_STATFS_F_FLAGS 1
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* prlimit64 is available in 2.6.36. */
|
|
||||||
#if __LINUX_KERNEL_VERSION >= 0x020624
|
|
||||||
# define __ASSUME_PRLIMIT64 1
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Support for sendmmsg functionality was added in 3.0. The macros
|
/* Support for sendmmsg functionality was added in 3.0. The macros
|
||||||
defined correspond to those for accept4 and recvmmsg. */
|
defined correspond to those for accept4 and recvmmsg. */
|
||||||
#if __LINUX_KERNEL_VERSION >= 0x030000
|
#if __LINUX_KERNEL_VERSION >= 0x030000
|
||||||
|
@ -20,7 +20,6 @@
|
|||||||
#include <sys/syscall.h>
|
#include <sys/syscall.h>
|
||||||
|
|
||||||
|
|
||||||
#ifdef __NR_prlimit64
|
|
||||||
int
|
int
|
||||||
prlimit (__pid_t pid, enum __rlimit_resource resource,
|
prlimit (__pid_t pid, enum __rlimit_resource resource,
|
||||||
const struct rlimit *new_rlimit, struct rlimit *old_rlimit)
|
const struct rlimit *new_rlimit, struct rlimit *old_rlimit)
|
||||||
@ -73,12 +72,3 @@ prlimit (__pid_t pid, enum __rlimit_resource resource,
|
|||||||
|
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
#else
|
|
||||||
int
|
|
||||||
prlimit (__pid_t pid, enum __rlimit_resource resource,
|
|
||||||
const struct rlimit *new_rlimit, struct rlimit *old_rlimit)
|
|
||||||
{
|
|
||||||
return INLINE_SYSCALL_ERROR_RETURN_VALUE (ENOSYS);
|
|
||||||
}
|
|
||||||
stub_warning (prlimit)
|
|
||||||
#endif
|
|
||||||
|
@ -34,7 +34,6 @@
|
|||||||
int
|
int
|
||||||
__setrlimit (enum __rlimit_resource resource, const struct rlimit *rlim)
|
__setrlimit (enum __rlimit_resource resource, const struct rlimit *rlim)
|
||||||
{
|
{
|
||||||
# ifdef __NR_prlimit64
|
|
||||||
struct rlimit64 rlim64;
|
struct rlimit64 rlim64;
|
||||||
|
|
||||||
if (rlim->rlim_cur == RLIM_INFINITY)
|
if (rlim->rlim_cur == RLIM_INFINITY)
|
||||||
@ -46,11 +45,7 @@ __setrlimit (enum __rlimit_resource resource, const struct rlimit *rlim)
|
|||||||
else
|
else
|
||||||
rlim64.rlim_max = rlim->rlim_max;
|
rlim64.rlim_max = rlim->rlim_max;
|
||||||
|
|
||||||
int res = INLINE_SYSCALL_CALL (prlimit64, 0, resource, &rlim64, NULL);
|
return INLINE_SYSCALL_CALL (prlimit64, 0, resource, &rlim64, NULL);
|
||||||
if (res == 0 || errno != ENOSYS)
|
|
||||||
return res;
|
|
||||||
# endif
|
|
||||||
return INLINE_SYSCALL_CALL (setrlimit, resource, rlim);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_2)
|
# if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_2)
|
||||||
|
@ -36,36 +36,7 @@
|
|||||||
int
|
int
|
||||||
__setrlimit64 (enum __rlimit_resource resource, const struct rlimit64 *rlimits)
|
__setrlimit64 (enum __rlimit_resource resource, const struct rlimit64 *rlimits)
|
||||||
{
|
{
|
||||||
int res;
|
return INLINE_SYSCALL_CALL (prlimit64, 0, resource, rlimits, NULL);
|
||||||
|
|
||||||
#ifdef __NR_prlimit64
|
|
||||||
res = INLINE_SYSCALL_CALL (prlimit64, 0, resource, rlimits, NULL);
|
|
||||||
if (res == 0 || errno != ENOSYS)
|
|
||||||
return res;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* The fallback code only makes sense if the platform supports
|
|
||||||
__NR_setrlimit. */
|
|
||||||
#ifdef __NR_setrlimit
|
|
||||||
# if !__RLIM_T_MATCHES_RLIM64_T
|
|
||||||
struct rlimit rlimits32;
|
|
||||||
|
|
||||||
if (rlimits->rlim_cur >= RLIM_INFINITY)
|
|
||||||
rlimits32.rlim_cur = RLIM_INFINITY;
|
|
||||||
else
|
|
||||||
rlimits32.rlim_cur = rlimits->rlim_cur;
|
|
||||||
if (rlimits->rlim_max >= RLIM_INFINITY)
|
|
||||||
rlimits32.rlim_max = RLIM_INFINITY;
|
|
||||||
else
|
|
||||||
rlimits32.rlim_max = rlimits->rlim_max;
|
|
||||||
# else
|
|
||||||
# define rlimits32 (*rlimits)
|
|
||||||
# endif
|
|
||||||
|
|
||||||
res = INLINE_SYSCALL_CALL (setrlimit, resource, &rlimits32);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return res;
|
|
||||||
}
|
}
|
||||||
weak_alias (__setrlimit64, setrlimit64)
|
weak_alias (__setrlimit64, setrlimit64)
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user