mirror of
https://sourceware.org/git/glibc.git
synced 2024-12-05 03:01:05 +00:00
8e900969db
Fix the RLIM_INFINITY and RLIM64_INFINITY constants on alpha to match the kernel one and all other architectures. Change the getrlimit, getrlimit64, setrlimit, setrlimit64 into old compat symbols, and provide the Linux generic functions as GLIBC_2_27 version. Changelog: * sysdeps/unix/sysv/linux/getrlimit64.c [USE_VERSIONED_RLIMIT]: Do not define getrlimit and getrlimit64 as weak aliases of __getrlimit64. Define __GI_getrlimit64 as weak alias of __getrlimit64. [__RLIM_T_MATCHES_RLIM64_T]: Do not redefine SHLIB_COMPAT, use #elif instead. * sysdeps/unix/sysv/linux/setrlimit64.c [USE_VERSIONED_RLIMIT]: Do not define setrlimit and setrlimit64 as weak aliases of __setrlimit64. * sysdeps/unix/sysv/linux/alpha/bits/resource.h (RLIM_INFINITY, RLIM64_INFINITY): Fix values to match the kernel ones. * sysdeps/unix/sysv/linux/alpha/getrlimit64.c: Define USE_VERSIONED_RLIMIT. Rename __getrlimit64 into __old_getrlimit64 and provide it as getrlimit@@GLIBC_2_0 and getrlimit64@@GLIBC_2_1. Add a __getrlimit64 function and provide it as getrlimit@@GLIBC_2_27 and getrlimit64@@GLIBC_2_27. * sysdeps/unix/sysv/linux/alpha/setrlimit64.c: Ditto with setrlimit and setrlimit64. * sysdeps/unix/sysv/linux/alpha/libc.abilist (GLIBC_2.27): Add getrlimit, setrlimit, getrlimit64 and setrlimit64. * sysdeps/unix/sysv/linux/alpha/Versions (libc): Add getrlimit, setrlimit, getrlimit64 and setrlimit64.
57 lines
2.1 KiB
C
57 lines
2.1 KiB
C
/* Copyright (C) 2018 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
|
|
<http://www.gnu.org/licenses/>. */
|
|
|
|
#define USE_VERSIONED_RLIMIT
|
|
#include <sysdeps/unix/sysv/linux/getrlimit64.c>
|
|
versioned_symbol (libc, __getrlimit, getrlimit, GLIBC_2_27);
|
|
versioned_symbol (libc, __getrlimit64, getrlimit64, GLIBC_2_27);
|
|
|
|
#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_27)
|
|
/* RLIM64_INFINITY was supposed to be a glibc convention rather than
|
|
anything seen by the kernel, but it ended being passed to the kernel
|
|
through the prlimit64 syscall. Given that a lot of binaries with
|
|
the wrong constant value are in the wild, provide a wrapper function
|
|
fixing the value after the syscall. */
|
|
# define OLD_RLIM64_INFINITY 0x7fffffffffffffffULL
|
|
|
|
int
|
|
attribute_compat_text_section
|
|
__old_getrlimit64 (enum __rlimit_resource resource,
|
|
struct rlimit64 *rlimits)
|
|
{
|
|
struct rlimit64 krlimits;
|
|
|
|
if (__getrlimit64 (resource, &krlimits) < 0)
|
|
return -1;
|
|
|
|
if (krlimits.rlim_cur == RLIM64_INFINITY)
|
|
rlimits->rlim_cur = OLD_RLIM64_INFINITY;
|
|
else
|
|
rlimits->rlim_cur = krlimits.rlim_cur;
|
|
if (krlimits.rlim_max == RLIM64_INFINITY)
|
|
rlimits->rlim_max = OLD_RLIM64_INFINITY;
|
|
else
|
|
rlimits->rlim_max = krlimits.rlim_max;
|
|
|
|
return 0;
|
|
}
|
|
|
|
strong_alias (__old_getrlimit64, __old_getrlimit)
|
|
compat_symbol (libc, __old_getrlimit, getrlimit, GLIBC_2_0);
|
|
compat_symbol (libc, __old_getrlimit64, getrlimit64, GLIBC_2_1);
|
|
#endif
|