This is the mail archive of the glibc-cvs@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

GNU C Library master sources branch master updated. glibc-2.24-384-g045c13d


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".

The branch, master has been updated
       via  045c13d18554ae626dfc62f392afb33856c6321d (commit)
      from  c440d5d58ddef2975d0630bcb0e757d7e697496e (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=045c13d18554ae626dfc62f392afb33856c6321d

commit 045c13d18554ae626dfc62f392afb33856c6321d
Author: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Date:   Tue Oct 18 09:41:56 2016 -0200

    Consolidate Linux setrlimit and getrlimit implementation
    
    This patch consolidates all Linux setrlimit and getrlimit on the default
    sysdeps/unix/sysv/linux/{set,get}rlimit{64}.c.  It contains two exceptions:
    
      1. mips32 and mips64n32 which requires a versioned symbol for GLIBC 2.19
         and higher due a broken RLIM64_INFINITY constant.
      2. sparc32 does not define a compat symbol for getrlimit64 for old 2GB
         limit. I am not sure if it is required, but a RLIM_INFINITY fix [1]
         change its definition without adding a compat symbol.  This patch does
         not aim to address this possible issue, it follow current symbol
         export.
    
    The default implementation uses prlimit64 for 64 bit rlim_t ({set,get}rlimit64)
    and if it fails with ENOSYS it fall back to {get,set}rlimit syscall.  This
    code path is only used on kernel older than 2.6.36 (basically now only x86)
    and I avoid to user __ASSUME_PRLIMTI64 to simplify the implementation.  Once
    x86 moves to be on par with other architectures regarding minimum kernel
    supported we can get rid of using old syscalls and default path.
    
    A new type size define is added, __RLIM_T_MATCHES_RLIM64_T, where is set as
    default for 64 bits ports.  This allows the default implementation to avoid
    {get,set}rlimit building and alias {get,set}rlimit64 to {get,set}rlimit.
    
    Checked on x86_64, i386, armhf, aarch64, and powerpc64le.  I also did a
    sanity build plus check-abi on all other supported architectures.
    
    [1] Commit 9c96ff23858b0759e12ad69e3c4599931c90bee8
    
    	Adhemerval Zanella  <adhemerval.zanella@linaro.org>
    	Yury Norov  <ynorov@caviumnetworks.com>
    
    	* bits/typesizes.h (__RLIM_T_MATCHES_RLIM64_T): define.
    	* sysdeps/unix/sysv/linux/alpha/bits/typesizes.h
    	(__RLIM_T_MATCHES_RLIM64_T): Likewise.
    	* sysdeps/unix/sysv/linux/generic/bits/typesizes.h
    	(__RLIM_T_MATCHES_RLIM64_T): Likewise.
    	* sysdeps/unix/sysv/linux/s390/bits/typesizes.h [__s390x__]
    	(__RLIM_T_MATCHES_RLIM64_T): Likewise.
    	* sysdeps/unix/sysv/linux/sparc/bits/typesizes.h
    	[__arch64__ || __sparcv9] (__RLIM_T_MATCHES_RLIM64_T): Likewise.
    	* sysdeps/unix/sysv/linux/x86/bits/typesizes.h [__86_64__]
    	(__RLIM_T_MATCHES_RLIM64_T): Likewise.
    	* sysdeps/unix/sysv/linux/arm/Makefile [$(subdir) = resource]
    	(sysdep_routines): Remove oldgetrlimit64.
    	* sysdeps/unix/sysv/linux/i386/Makefile [$(subdir) = resource]
    	(sysdep_routines): Likewise.
    	* sysdeps/unix/sysv/linux/m68k/Makefile [$(subdir) = resource]
    	(sysdep_routines): Likewise.
    	* sysdeps/unix/sysv/linux/powerpc/powerpc32/Makefile
    	[$(subdir) = resource] (sysdep_routines): Likewise.
    	* sysdeps/unix/sysv/linux/s390/s390-32/Makefile
    	[$(subdir) = resource] (sysdep_routines): Likewise.
    	* sysdeps/unix/sysv/linux/arm/getrlimit64.c: Remove file.
    	* sysdeps/unix/sysv/linux/arm/oldgetrlimit64.c: Likewise.
    	* sysdeps/unix/sysv/linux/hppa/getrlimit64.c: Likewise.
    	* sysdeps/unix/sysv/linux/i386/getrlimit64.c: Likewise.
    	* sysdeps/unix/sysv/linux/i386/oldgetrlimit64.c: Likewise.
    	* sysdeps/unix/sysv/linux/m68k/getrlimit64.c: Likewise.
    	* sysdeps/unix/sysv/linux/m68k/oldgetrlimit64.c: Likewise.
    	* sysdeps/unix/sysv/linux/powerpc/getrlimit64.c: Likewise.
    	* sysdeps/unix/sysv/linux/powerpc/oldgetrlimit64.c: Likewise.
    	* sysdeps/unix/sysv/linux/s390/s390-32/getrlimit64.c: Likewise.
    	* sysdeps/unix/sysv/linux/s390/s390-32/oldgetrlimit64.c: Likewise.
    	* sysdeps/unix/sysv/linux/sh/getrlimit64.c: Likewise.
    	* sysdeps/unix/sysv/linux/wordsize-64/getrlimit64.c: Likewise.
    	* sysdeps/unix/sysv/linux/wordsize-64/setrlimit64.c: Likewise.
    	* sysdeps/sysv/linux/generic/wordsize-32/syscalls.list: Remove
    	setrlimit and getrlimit.
    	* sysdeps/unix/sysv/linux/hppa/syscalls.list: Likewise.
    	* sysdeps/unix/sysv/linux/i386/syscalls.list: Likewise.
    	* sysdeps/unix/sysv/linux/m68k/m680x0/syscalls.list: Likewise.
    	* sysdeps/unix/sysv/linux/powerpc/powerpc32/syscalls.list: Likewise.
    	* sysdeps/unix/sysv/linux/powerpc/powerpc64/syscalls.list: Likewise.
    	* sysdeps/unix/sysv/linux/s390/s390-32/syscalls.list: Likewise.
    	* sysdeps/unix/sysv/linux/sparc/sparc32/syscalls.list: Likewise.
    	* sysdeps/unix/sysv/linux/syscalls.list: Likewise.
    	* sysdeps/unix/sysv/linux/wordsize-64/syscalls.list: Likewise.
    	* sysdeps/unix/sysv/linux/getrlimit.c: New file.
    	* sysdeps/unix/sysv/linux/sparc/getrlimit64.c: Likewise.
    	* sysdeps/unix/sysv/linux/setrlimit.c: Likewise.
    	* sysdeps/unix/sysv/linux/getrlimit64.c (__getrlimit64): Handle
    	__RLIM_T_MATCHES_RLIM64_T and add alias if defined.
    	(__old_getrlimit64): Add compatibility symbol.
    	* sysdeps/unix/sysv/linux/setrlimit64.c (__setrlimit): Likewise.

diff --git a/ChangeLog b/ChangeLog
index 721ea68..330a631 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,62 @@
+2016-11-17  Adhemerval Zanella  <adhemerval.zanella@linaro.org>
+	    Yury Norov  <ynorov@caviumnetworks.com>
+
+	* bits/typesizes.h (__RLIM_T_MATCHES_RLIM64_T): define.
+	* sysdeps/unix/sysv/linux/alpha/bits/typesizes.h
+	(__RLIM_T_MATCHES_RLIM64_T): Likewise.
+	* sysdeps/unix/sysv/linux/generic/bits/typesizes.h
+	(__RLIM_T_MATCHES_RLIM64_T): Likewise.
+	* sysdeps/unix/sysv/linux/s390/bits/typesizes.h [__s390x__]
+	(__RLIM_T_MATCHES_RLIM64_T): Likewise.
+	* sysdeps/unix/sysv/linux/sparc/bits/typesizes.h
+	[__arch64__ || __sparcv9] (__RLIM_T_MATCHES_RLIM64_T): Likewise.
+	* sysdeps/unix/sysv/linux/x86/bits/typesizes.h [__86_64__]
+	(__RLIM_T_MATCHES_RLIM64_T): Likewise.
+	* sysdeps/unix/sysv/linux/arm/Makefile [$(subdir) = resource]
+	(sysdep_routines): Remove oldgetrlimit64.
+	* sysdeps/unix/sysv/linux/i386/Makefile [$(subdir) = resource]
+	(sysdep_routines): Likewise.
+	* sysdeps/unix/sysv/linux/m68k/Makefile [$(subdir) = resource]
+	(sysdep_routines): Likewise.
+	* sysdeps/unix/sysv/linux/powerpc/powerpc32/Makefile
+	[$(subdir) = resource] (sysdep_routines): Likewise.
+	* sysdeps/unix/sysv/linux/s390/s390-32/Makefile
+	[$(subdir) = resource] (sysdep_routines): Likewise.
+	* sysdeps/unix/sysv/linux/arm/getrlimit64.c: Remove file.
+	* sysdeps/unix/sysv/linux/arm/oldgetrlimit64.c: Likewise.
+	* sysdeps/unix/sysv/linux/arm/oldgetrlimit.c: Likewise.
+	* sysdeps/unix/sysv/linux/arm/oldsetrlimit.c: Likewise.
+	* sysdeps/unix/sysv/linux/hppa/getrlimit64.c: Likewise.
+	* sysdeps/unix/sysv/linux/i386/getrlimit64.c: Likewise.
+	* sysdeps/unix/sysv/linux/i386/oldgetrlimit64.c: Likewise.
+	* sysdeps/unix/sysv/linux/m68k/getrlimit64.c: Likewise.
+	* sysdeps/unix/sysv/linux/m68k/oldgetrlimit64.c: Likewise.
+	* sysdeps/unix/sysv/linux/powerpc/getrlimit64.c: Likewise.
+	* sysdeps/unix/sysv/linux/powerpc/oldgetrlimit64.c: Likewise.
+	* sysdeps/unix/sysv/linux/s390/s390-32/getrlimit64.c: Likewise.
+	* sysdeps/unix/sysv/linux/s390/s390-32/oldgetrlimit64.c: Likewise.
+	* sysdeps/unix/sysv/linux/sh/getrlimit64.c: Likewise.
+	* sysdeps/unix/sysv/linux/wordsize-64/getrlimit64.c: Likewise.
+	* sysdeps/unix/sysv/linux/wordsize-64/setrlimit64.c: Likewise.
+	* sysdeps/sysv/linux/generic/wordsize-32/syscalls.list: Remove
+	setrlimit and getrlimit.
+	* sysdeps/unix/sysv/linux/hppa/syscalls.list: Likewise.
+	* sysdeps/unix/sysv/linux/i386/syscalls.list: Likewise.
+	* sysdeps/unix/sysv/linux/m68k/m680x0/syscalls.list: Likewise.
+	* sysdeps/unix/sysv/linux/powerpc/powerpc32/syscalls.list: Likewise.
+	* sysdeps/unix/sysv/linux/powerpc/powerpc64/syscalls.list: Likewise.
+	* sysdeps/unix/sysv/linux/s390/s390-32/syscalls.list: Likewise.
+	* sysdeps/unix/sysv/linux/sparc/sparc32/syscalls.list: Likewise.
+	* sysdeps/unix/sysv/linux/syscalls.list: Likewise.
+	* sysdeps/unix/sysv/linux/wordsize-64/syscalls.list: Likewise.
+	* sysdeps/unix/sysv/linux/getrlimit.c: New file.
+	* sysdeps/unix/sysv/linux/sparc/getrlimit64.c: Likewise.
+	* sysdeps/unix/sysv/linux/setrlimit.c: Likewise.
+	* sysdeps/unix/sysv/linux/getrlimit64.c (__getrlimit64): Handle
+	__RLIM_T_MATCHES_RLIM64_T and add alias if defined.
+	(__old_getrlimit64): Add compatibility symbol.
+	* sysdeps/unix/sysv/linux/setrlimit64.c (__setrlimit): Likewise.
+
 2016-11-17  Joseph Myers  <joseph@codesourcery.com>
 
 	* scripts/build-many-glibcs.py (Config.build_gcc): Configure with
diff --git a/bits/typesizes.h b/bits/typesizes.h
index 53047b8..ff20601 100644
--- a/bits/typesizes.h
+++ b/bits/typesizes.h
@@ -69,6 +69,11 @@
 
 /* Same for ino_t and ino64_t.  */
 # define __INO_T_MATCHES_INO64_T	1
+
+/* And for rlim_t and rlim64_t.  */
+# define __RLIM_T_MATCHES_RLIM64_T	1
+#else
+# define __RLIM_T_MATCHES_RLIM64_T	0
 #endif
 
 /* Number of descriptors that can fit in an `fd_set'.  */
diff --git a/sysdeps/unix/sysv/linux/alpha/bits/typesizes.h b/sysdeps/unix/sysv/linux/alpha/bits/typesizes.h
index 3cfd887..ce96501 100644
--- a/sysdeps/unix/sysv/linux/alpha/bits/typesizes.h
+++ b/sysdeps/unix/sysv/linux/alpha/bits/typesizes.h
@@ -66,6 +66,9 @@
    for C type-checking purposes.  */
 #define __OFF_T_MATCHES_OFF64_T	1
 
+/* And for __rlim_t and __rlim64_t.  */
+#define __RLIM_T_MATCHES_RLIM64_T 1
+
 /* Number of descriptors that can fit in an `fd_set'.  */
 #define	__FD_SETSIZE		1024
 
diff --git a/sysdeps/unix/sysv/linux/arm/Makefile b/sysdeps/unix/sysv/linux/arm/Makefile
index 270cb73..b9b8f71 100644
--- a/sysdeps/unix/sysv/linux/arm/Makefile
+++ b/sysdeps/unix/sysv/linux/arm/Makefile
@@ -12,10 +12,6 @@ ifeq ($(subdir),signal)
 sysdep_routines += sigrestorer
 endif
 
-ifeq ($(subdir),resource)
-sysdep_routines += oldgetrlimit64
-endif
-
 ifeq ($(subdir),stdlib)
 gen-as-const-headers += ucontext_i.sym
 endif
diff --git a/sysdeps/unix/sysv/linux/arm/getrlimit64.c b/sysdeps/unix/sysv/linux/arm/getrlimit64.c
deleted file mode 100644
index fef018f..0000000
--- a/sysdeps/unix/sysv/linux/arm/getrlimit64.c
+++ /dev/null
@@ -1 +0,0 @@
-#include <sysdeps/unix/sysv/linux/i386/getrlimit64.c>
diff --git a/sysdeps/unix/sysv/linux/arm/oldgetrlimit.c b/sysdeps/unix/sysv/linux/arm/oldgetrlimit.c
deleted file mode 100644
index 6e25b02..0000000
--- a/sysdeps/unix/sysv/linux/arm/oldgetrlimit.c
+++ /dev/null
@@ -1 +0,0 @@
-/* Empty.  */
diff --git a/sysdeps/unix/sysv/linux/arm/oldgetrlimit64.c b/sysdeps/unix/sysv/linux/arm/oldgetrlimit64.c
deleted file mode 100644
index 4c27e95..0000000
--- a/sysdeps/unix/sysv/linux/arm/oldgetrlimit64.c
+++ /dev/null
@@ -1 +0,0 @@
-#include <sysdeps/unix/sysv/linux/i386/oldgetrlimit64.c>
diff --git a/sysdeps/unix/sysv/linux/arm/oldsetrlimit.c b/sysdeps/unix/sysv/linux/arm/oldsetrlimit.c
deleted file mode 100644
index 6e25b02..0000000
--- a/sysdeps/unix/sysv/linux/arm/oldsetrlimit.c
+++ /dev/null
@@ -1 +0,0 @@
-/* Empty.  */
diff --git a/sysdeps/unix/sysv/linux/generic/bits/typesizes.h b/sysdeps/unix/sysv/linux/generic/bits/typesizes.h
index c31bba2..f7766c7 100644
--- a/sysdeps/unix/sysv/linux/generic/bits/typesizes.h
+++ b/sysdeps/unix/sysv/linux/generic/bits/typesizes.h
@@ -70,6 +70,11 @@
 
 /* Same for ino_t and ino64_t.  */
 # define __INO_T_MATCHES_INO64_T	1
+
+/* And for __rlim_t and __rlim64_t.  */
+# define __RLIM_T_MATCHES_RLIM64_T	1
+#else
+# define __RLIM_T_MATCHES_RLIM64_T	0
 #endif
 
 /* Number of descriptors that can fit in an `fd_set'.  */
diff --git a/sysdeps/unix/sysv/linux/generic/wordsize-32/syscalls.list b/sysdeps/unix/sysv/linux/generic/wordsize-32/syscalls.list
index f055c68..b775008 100644
--- a/sysdeps/unix/sysv/linux/generic/wordsize-32/syscalls.list
+++ b/sysdeps/unix/sysv/linux/generic/wordsize-32/syscalls.list
@@ -1,7 +1,5 @@
 # File name	Caller	Syscall name	# args	Strong name	Weak names
 
 # rlimit APIs
-getrlimit	-	getrlimit	i:ip	__getrlimit	getrlimit
-setrlimit	-	setrlimit	i:ip	__setrlimit	setrlimit
 prlimit64	EXTRA	prlimit64	i:iipp	prlimit64
 fanotify_mark	EXTRA	fanotify_mark	i:iiiiis	fanotify_mark
diff --git a/sysdeps/unix/sysv/linux/getrlimit.c b/sysdeps/unix/sysv/linux/getrlimit.c
new file mode 100644
index 0000000..bd340fb
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/getrlimit.c
@@ -0,0 +1,56 @@
+/* Linux getrlimit implementation (32 bits rlim_t).
+   Copyright (C) 2016 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/>.  */
+
+#include <errno.h>
+#include <sys/resource.h>
+#include <sys/types.h>
+#include <shlib-compat.h>
+
+#if !__RLIM_T_MATCHES_RLIM64_T
+
+/* The __NR_getrlimit compatibility implementation is required iff
+   __NR_ugetrlimit is also defined (meaning an old broken RLIM_INFINITY
+   definition).  */
+# ifndef __NR_ugetrlimit
+#  define __NR_ugetrlimit __NR_getrlimit
+#  undef SHLIB_COMPAT
+#  define SHLIB_COMPAT(a, b, c) 0
+# endif
+
+int
+__new_getrlimit (enum __rlimit_resource resource, struct rlimit *rlim)
+{
+  return INLINE_SYSCALL_CALL (ugetrlimit, resource, rlim);
+}
+weak_alias (__new_getrlimit, __getrlimit)
+hidden_weak (__getrlimit)
+
+# if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_2)
+/* Back compatible 2Gig limited rlimit.  */
+int
+__old_getrlimit (enum __rlimit_resource resource, struct rlimit *rlim)
+{
+  return INLINE_SYSCALL_CALL (getrlimit, resource, rlim);
+}
+compat_symbol (libc, __old_getrlimit, getrlimit, GLIBC_2_0);
+versioned_symbol (libc, __new_getrlimit, getrlimit, GLIBC_2_2);
+# else
+weak_alias (__new_getrlimit, getrlimit)
+# endif
+
+#endif /* __RLIM_T_MATCHES_RLIM64_T  */
diff --git a/sysdeps/unix/sysv/linux/getrlimit64.c b/sysdeps/unix/sysv/linux/getrlimit64.c
index d055a7f..cb3d008 100644
--- a/sysdeps/unix/sysv/linux/getrlimit64.c
+++ b/sysdeps/unix/sysv/linux/getrlimit64.c
@@ -1,4 +1,5 @@
-/* Copyright (C) 2010-2016 Free Software Foundation, Inc.
+/* Linux getrlimit64 implementation (64 bits rlim_t).
+   Copyright (C) 2010-2016 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
@@ -16,29 +17,46 @@
    <http://www.gnu.org/licenses/>.  */
 
 #include <errno.h>
-#include <sys/resource.h>
 #include <sys/types.h>
-#include <sysdep.h>
-#include <kernel-features.h>
+#include <shlib-compat.h>
+
+/* Add this redirection so the strong_alias for __RLIM_T_MATCHES_RLIM64_T
+   linking getlimit64 to {__}getrlimit does not throw a type error.  */
+#undef getrlimit
+#undef __getrlimit
+#define getrlimit getrlimit_redirect
+#define __getrlimit __getrlimit_redirect
+#include <sys/resource.h>
+#undef getrlimit
+#undef __getrlimit
 
 /* Put the soft and hard limits for RESOURCE in *RLIMITS.
    Returns 0 if successful, -1 if not (and sets errno).  */
 int
 __getrlimit64 (enum __rlimit_resource resource, struct rlimit64 *rlimits)
 {
-#ifdef __ASSUME_PRLIMIT64
-  return INLINE_SYSCALL (prlimit64, 4, 0, resource, NULL, rlimits);
-#else
-# ifdef __NR_prlimit64
-  int res = INLINE_SYSCALL (prlimit64, 4, 0, resource, NULL, rlimits);
+#ifdef __NR_prlimit64
+  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 (__getrlimit (resource, &rlimits32) < 0)
+  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
@@ -47,12 +65,56 @@ __getrlimit64 (enum __rlimit_resource resource, struct rlimit64 *rlimits)
     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;
-#endif
 }
 libc_hidden_def (__getrlimit64)
-#ifndef getrlimit64
+
+#if __RLIM_T_MATCHES_RLIM64_T
+/* If both rlim_t and rlimt64_t are essentially the same type we can use
+   alias both interfaces.  */
+strong_alias (__getrlimit64, __GI_getrlimit)
+strong_alias (__getrlimit64, __GI___getrlimit)
+strong_alias (__getrlimit64, __getrlimit)
+weak_alias (__getrlimit64, getrlimit)
+/* And there is no need for compat symbols.  */
+# undef SHLIB_COMPAT
+# define SHLIB_COMPAT(a, b, c) 0
+#endif
+
+#if SHLIB_COMPAT (libc, GLIBC_2_1, GLIBC_2_2)
+/* Back compatible 2GiB limited rlimit.  */
+extern int __new_getrlimit (enum __rlimit_resource, struct rlimit *);
+
+int
+attribute_compat_text_section
+__old_getrlimit64 (enum __rlimit_resource resource, struct rlimit64 *rlimits)
+{
+# if __RLIM_T_MATCHES_RLIM64_T
+#  define rlimits32 (*rlimits)
+# else
+  struct rlimit rlimits32;
+# endif
+
+  if (__new_getrlimit (resource, &rlimits32) < 0)
+    return -1;
+
+  if (rlimits32.rlim_cur == RLIM_INFINITY)
+    rlimits->rlim_cur = RLIM64_INFINITY >> 1;
+  else
+    rlimits->rlim_cur = rlimits32.rlim_cur;
+  if (rlimits32.rlim_max == RLIM_INFINITY)
+    rlimits->rlim_max = RLIM64_INFINITY >> 1;
+  else
+    rlimits->rlim_max = rlimits32.rlim_max;
+
+  return 0;
+}
+versioned_symbol (libc, __getrlimit64, getrlimit64, GLIBC_2_2);
+compat_symbol (libc, __old_getrlimit64, getrlimit64, GLIBC_2_1);
+#else
 weak_alias (__getrlimit64, getrlimit64)
 libc_hidden_weak (getrlimit64)
 #endif
diff --git a/sysdeps/unix/sysv/linux/hppa/getrlimit64.c b/sysdeps/unix/sysv/linux/hppa/getrlimit64.c
deleted file mode 100644
index fef018f..0000000
--- a/sysdeps/unix/sysv/linux/hppa/getrlimit64.c
+++ /dev/null
@@ -1 +0,0 @@
-#include <sysdeps/unix/sysv/linux/i386/getrlimit64.c>
diff --git a/sysdeps/unix/sysv/linux/hppa/syscalls.list b/sysdeps/unix/sysv/linux/hppa/syscalls.list
index 1f3dfb0..a95c3dd 100644
--- a/sysdeps/unix/sysv/linux/hppa/syscalls.list
+++ b/sysdeps/unix/sysv/linux/hppa/syscalls.list
@@ -31,8 +31,6 @@ shutdown	-	shutdown	i:ii	__shutdown	shutdown
 socket		-	socket		i:iii	__socket	socket
 socketpair	-	socketpair	i:iiif	__socketpair	socketpair
 
-setrlimit	-	setrlimit	i:ip	__setrlimit	setrlimit
-getrlimit	-	getrlimit	i:ip	__getrlimit	getrlimit
 prlimit64	EXTRA	prlimit64	i:iipp	__prlimit64	prlimit64@@GLIBC_2.17
 fanotify_mark	EXTRA	fanotify_mark	i:iiiiis	__fanotify_mark	fanotify_mark@@GLIBC_2.19
 personality	EXTRA	personality	Ei:i	__personality	personality
diff --git a/sysdeps/unix/sysv/linux/i386/Makefile b/sysdeps/unix/sysv/linux/i386/Makefile
index 2596cdf..9609752 100644
--- a/sysdeps/unix/sysv/linux/i386/Makefile
+++ b/sysdeps/unix/sysv/linux/i386/Makefile
@@ -49,10 +49,6 @@ libpthread-sysdep_routines += libc-do-syscall
 libpthread-shared-only-routines += libc-do-syscall
 endif
 
-ifeq ($(subdir),resource)
-sysdep_routines += oldgetrlimit64
-endif
-
 ifeq ($(subdir),stdlib)
 gen-as-const-headers += ucontext_i.sym
 endif
diff --git a/sysdeps/unix/sysv/linux/i386/oldgetrlimit64.c b/sysdeps/unix/sysv/linux/i386/oldgetrlimit64.c
deleted file mode 100644
index ad86a07..0000000
--- a/sysdeps/unix/sysv/linux/i386/oldgetrlimit64.c
+++ /dev/null
@@ -1,57 +0,0 @@
-/* Copyright (C) 1991-2016 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/>.  */
-
-/* This is a compatibility file.  If we don't build the libc with
-   versioning don't compile this file.  */
-#include <shlib-compat.h>
-#if SHLIB_COMPAT (libc, GLIBC_2_1, GLIBC_2_2)
-
-#include <errno.h>
-#include <sys/resource.h>
-#include <sys/types.h>
-
-extern int __new_getrlimit (enum __rlimit_resource, struct rlimit *);
-extern int __old_getrlimit64 (enum __rlimit_resource resource,
-			      struct rlimit64 *rlimits);
-
-
-/* Put the soft and hard limits for RESOURCE in *RLIMITS.
-   Returns 0 if successful, -1 if not (and sets errno).  */
-int
-attribute_compat_text_section
-__old_getrlimit64 (enum __rlimit_resource resource, struct rlimit64 *rlimits)
-{
-  struct rlimit rlimits32;
-
-  if (__new_getrlimit (resource, &rlimits32) < 0)
-    return -1;
-
-  if (rlimits32.rlim_cur == RLIM_INFINITY)
-    rlimits->rlim_cur = RLIM64_INFINITY >> 1;
-  else
-    rlimits->rlim_cur = rlimits32.rlim_cur;
-  if (rlimits32.rlim_max == RLIM_INFINITY)
-    rlimits->rlim_max = RLIM64_INFINITY >> 1;
-  else
-    rlimits->rlim_max = rlimits32.rlim_max;
-
-  return 0;
-}
-
-compat_symbol (libc, __old_getrlimit64, getrlimit64, GLIBC_2_1);
-
-#endif /* SHLIB_COMPAT */
diff --git a/sysdeps/unix/sysv/linux/i386/syscalls.list b/sysdeps/unix/sysv/linux/i386/syscalls.list
index 6282ff8..145393f 100644
--- a/sysdeps/unix/sysv/linux/i386/syscalls.list
+++ b/sysdeps/unix/sysv/linux/i386/syscalls.list
@@ -18,8 +18,6 @@ setfsuid	-	setfsuid32	Ei:i	setfsuid
 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
-oldgetrlimit	EXTRA	getrlimit	i:ip	__old_getrlimit	getrlimit@GLIBC_2.0
-setrlimit	-	setrlimit	i:ip	__setrlimit	setrlimit@GLIBC_2.0 setrlimit@@GLIBC_2.2
 waitpid		-	waitpid		Ci:ipi	__waitpid	waitpid
 
 prlimit64	EXTRA	prlimit64	i:iipp	prlimit64
diff --git a/sysdeps/unix/sysv/linux/m68k/Makefile b/sysdeps/unix/sysv/linux/m68k/Makefile
index 61c355a..5c50ce6 100644
--- a/sysdeps/unix/sysv/linux/m68k/Makefile
+++ b/sysdeps/unix/sysv/linux/m68k/Makefile
@@ -18,7 +18,3 @@ sysdep-rtld-routines += m68k-vdso
 sysdep-others += lddlibc4
 install-bin += lddlibc4
 endif
-
-ifeq ($(subdir),resource)
-sysdep_routines += oldgetrlimit64
-endif
diff --git a/sysdeps/unix/sysv/linux/m68k/getrlimit64.c b/sysdeps/unix/sysv/linux/m68k/getrlimit64.c
deleted file mode 100644
index fef018f..0000000
--- a/sysdeps/unix/sysv/linux/m68k/getrlimit64.c
+++ /dev/null
@@ -1 +0,0 @@
-#include <sysdeps/unix/sysv/linux/i386/getrlimit64.c>
diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/syscalls.list b/sysdeps/unix/sysv/linux/m68k/m680x0/syscalls.list
deleted file mode 100644
index b0ad689..0000000
--- a/sysdeps/unix/sysv/linux/m68k/m680x0/syscalls.list
+++ /dev/null
@@ -1,4 +0,0 @@
-# File name	Caller	Syscall name	Args	Strong name	Weak names
-
-oldgetrlimit	EXTRA	getrlimit	i:ip	__old_getrlimit	getrlimit@GLIBC_2.0
-setrlimit	-	setrlimit	i:ip	__setrlimit	setrlimit@GLIBC_2.0 setrlimit@@GLIBC_2.2
diff --git a/sysdeps/unix/sysv/linux/m68k/oldgetrlimit64.c b/sysdeps/unix/sysv/linux/m68k/oldgetrlimit64.c
deleted file mode 100644
index 4c27e95..0000000
--- a/sysdeps/unix/sysv/linux/m68k/oldgetrlimit64.c
+++ /dev/null
@@ -1 +0,0 @@
-#include <sysdeps/unix/sysv/linux/i386/oldgetrlimit64.c>
diff --git a/sysdeps/unix/sysv/linux/powerpc/getrlimit64.c b/sysdeps/unix/sysv/linux/powerpc/getrlimit64.c
deleted file mode 100644
index fef018f..0000000
--- a/sysdeps/unix/sysv/linux/powerpc/getrlimit64.c
+++ /dev/null
@@ -1 +0,0 @@
-#include <sysdeps/unix/sysv/linux/i386/getrlimit64.c>
diff --git a/sysdeps/unix/sysv/linux/powerpc/oldgetrlimit64.c b/sysdeps/unix/sysv/linux/powerpc/oldgetrlimit64.c
deleted file mode 100644
index 4c27e95..0000000
--- a/sysdeps/unix/sysv/linux/powerpc/oldgetrlimit64.c
+++ /dev/null
@@ -1 +0,0 @@
-#include <sysdeps/unix/sysv/linux/i386/oldgetrlimit64.c>
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/Makefile b/sysdeps/unix/sysv/linux/powerpc/powerpc32/Makefile
index 84324aa..3d6c150 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/Makefile
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/Makefile
@@ -1,6 +1,2 @@
 # See Makeconfig regarding the use of default-abi.
 default-abi := 32
-
-ifeq ($(subdir),resource)
-sysdep_routines += oldgetrlimit64
-endif
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/syscalls.list b/sysdeps/unix/sysv/linux/powerpc/powerpc32/syscalls.list
index 451d508..9313747 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/syscalls.list
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/syscalls.list
@@ -3,10 +3,6 @@
 chown		-	chown		i:sii	__chown		chown@@GLIBC_2.1
 lchown		-	lchown		i:sii	__lchown	lchown@@GLIBC_2.0 chown@GLIBC_2.0
 
-# System calls with wrappers.
-oldgetrlimit	EXTRA	getrlimit	i:ip	__old_getrlimit	getrlimit@GLIBC_2.0
-setrlimit	-	setrlimit	i:ip	__setrlimit	setrlimit@GLIBC_2.0 setrlimit@@GLIBC_2.2
-
 # Due to 64bit alignment there is a dummy second parameter
 readahead	-	readahead	i:iiiii	__readahead	readahead
 
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/syscalls.list b/sysdeps/unix/sysv/linux/powerpc/powerpc64/syscalls.list
deleted file mode 100644
index 6ba6f9b..0000000
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/syscalls.list
+++ /dev/null
@@ -1,3 +0,0 @@
-# File name	Caller	Syscall name	# args	Strong name	Weak names
-
-getrlimit	-	ugetrlimit	i:ip	__getrlimit	getrlimit getrlimit64 __getrlimit64
diff --git a/sysdeps/unix/sysv/linux/s390/bits/typesizes.h b/sysdeps/unix/sysv/linux/s390/bits/typesizes.h
index 7ee0cef..62b2418 100644
--- a/sysdeps/unix/sysv/linux/s390/bits/typesizes.h
+++ b/sysdeps/unix/sysv/linux/s390/bits/typesizes.h
@@ -75,6 +75,11 @@
 
 /* Same for ino_t and ino64_t.  */
 # define __INO_T_MATCHES_INO64_T	1
+
+/* And for __rlim_t and __rlim64_t.  */
+# define __RLIM_T_MATCHES_RLIM64_T	1
+#else
+# define __RLIM_T_MATCHES_RLIM64_T	0
 #endif
 
 /* Number of descriptors that can fit in an `fd_set'.  */
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/Makefile b/sysdeps/unix/sysv/linux/s390/s390-32/Makefile
index 626a96f..da3b3c7 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-32/Makefile
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/Makefile
@@ -10,10 +10,6 @@ ifeq ($(subdir),misc)
 sysdep_headers += sys/elf.h
 endif
 
-ifeq ($(subdir),resource)
-sysdep_routines += oldgetrlimit64
-endif
-
 ifeq ($(subdir),elf)
 ifeq (yes,$(build-shared))
 # This is needed to support g++ v2 and v3.
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/getrlimit64.c b/sysdeps/unix/sysv/linux/s390/s390-32/getrlimit64.c
deleted file mode 100644
index fef018f..0000000
--- a/sysdeps/unix/sysv/linux/s390/s390-32/getrlimit64.c
+++ /dev/null
@@ -1 +0,0 @@
-#include <sysdeps/unix/sysv/linux/i386/getrlimit64.c>
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/oldgetrlimit64.c b/sysdeps/unix/sysv/linux/s390/s390-32/oldgetrlimit64.c
deleted file mode 100644
index 4c27e95..0000000
--- a/sysdeps/unix/sysv/linux/s390/s390-32/oldgetrlimit64.c
+++ /dev/null
@@ -1 +0,0 @@
-#include <sysdeps/unix/sysv/linux/i386/oldgetrlimit64.c>
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/syscalls.list b/sysdeps/unix/sysv/linux/s390/s390-32/syscalls.list
index 141b165..300b13d 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-32/syscalls.list
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/syscalls.list
@@ -15,9 +15,6 @@ getgroups	-	getgroups32	i:ip	__getgroups	getgroups
 setfsgid	-	setfsgid32	Ei:i	setfsgid
 setfsuid	-	setfsuid32	Ei:i	setfsuid
 
-oldgetrlimit	EXTRA	getrlimit	i:ip	__old_getrlimit	getrlimit@GLIBC_2.0
-setrlimit	-	setrlimit	i:ip	__setrlimit	setrlimit@GLIBC_2.0 setrlimit@@GLIBC_2.2
-
 prlimit64	EXTRA	prlimit64	i:iipp	prlimit64
 fanotify_mark	EXTRA	fanotify_mark	i:iiiiis	fanotify_mark
 personality	EXTRA	personality	Ei:i	__personality	personality
diff --git a/sysdeps/unix/sysv/linux/setrlimit.c b/sysdeps/unix/sysv/linux/setrlimit.c
new file mode 100644
index 0000000..78a3c33
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/setrlimit.c
@@ -0,0 +1,64 @@
+/* Linux setrlimit implementation (32 bits off_t).
+   Copyright (C) 2016 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/>.  */
+
+#include <errno.h>
+#include <sys/resource.h>
+#include <sys/types.h>
+#include <shlib-compat.h>
+
+#if !__RLIM_T_MATCHES_RLIM64_T
+
+/* The compatibility symbol is meant to match the old __NR_getrlimit syscall
+   (with broken RLIM_INFINITY definition).  It should be provided iff
+   __NR_getrlimit and __NR_ugetrlimit are both defined.  */
+# ifndef __NR_ugetrlimit
+#  undef SHLIB_COMPAT
+#  define SHLIB_COMPAT(a, b, c) 0
+# endif
+
+int
+__setrlimit (enum __rlimit_resource resource, const struct rlimit *rlim)
+{
+# ifdef __NR_prlimit64
+  struct rlimit64 rlim64;
+
+  if (rlim->rlim_cur == RLIM_INFINITY)
+    rlim64.rlim_cur = RLIM64_INFINITY;
+  else
+    rlim64.rlim_cur = rlim->rlim_cur;
+  if (rlim->rlim_max == RLIM_INFINITY)
+    rlim64.rlim_max = RLIM64_INFINITY;
+  else
+    rlim64.rlim_max = rlim->rlim_max;
+
+  int res = 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)
+strong_alias (__setrlimit, __setrlimit_1)
+compat_symbol (libc, __setrlimit, setrlimit, GLIBC_2_0);
+versioned_symbol (libc, __setrlimit_1, setrlimit, GLIBC_2_2);
+# else
+weak_alias (__setrlimit, setrlimit)
+# endif
+
+#endif /* __RLIM_T_MATCHES_RLIM64_T  */
diff --git a/sysdeps/unix/sysv/linux/setrlimit64.c b/sysdeps/unix/sysv/linux/setrlimit64.c
index 5f444d2..8d2f7c6 100644
--- a/sysdeps/unix/sysv/linux/setrlimit64.c
+++ b/sysdeps/unix/sysv/linux/setrlimit64.c
@@ -1,4 +1,5 @@
-/* Copyright (C) 2010-2016 Free Software Foundation, Inc.
+/* Linux setrlimit64 implementation (64 bits off_t).
+   Copyright (C) 2010-2016 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
@@ -16,25 +17,37 @@
    <http://www.gnu.org/licenses/>.  */
 
 #include <errno.h>
-#include <sys/resource.h>
 #include <sys/types.h>
-#include <sysdep.h>
-#include <kernel-features.h>
+#include <shlib-compat.h>
+
+/* Add this redirection so the strong_alias for __RLIM_T_MATCHES_RLIM64_T
+   linking setlimit64 to {__}setrlimit does not throw a type error.  */
+#undef settrlimit
+#undef __sttrlimit
+#define setrlimit setrlimit_redirect
+#define __setrlimit __setrlimit_redirect
+#include <sys/resource.h>
+#undef setrlimit
+#undef __setrlimit
 
 /* Set the soft and hard limits for RESOURCE to *RLIMITS.
    Only the super-user can increase hard limits.
    Return 0 if successful, -1 if not (and sets errno).  */
 int
-setrlimit64 (enum __rlimit_resource resource, const struct rlimit64 *rlimits)
+__setrlimit64 (enum __rlimit_resource resource, const struct rlimit64 *rlimits)
 {
-#ifdef __ASSUME_PRLIMIT64
-  return INLINE_SYSCALL (prlimit64, 4, 0, resource, rlimits, NULL);
-#else
-# ifdef __NR_prlimit64
-  int res = INLINE_SYSCALL (prlimit64, 4, 0, resource, rlimits, NULL);
+  int res;
+
+#ifdef __NR_prlimit64
+  res = INLINE_SYSCALL_CALL (prlimit64, 0, resource, rlimits, NULL);
   if (res == 0 || errno != ENOSYS)
     return res;
-# endif
+#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)
@@ -45,7 +58,18 @@ setrlimit64 (enum __rlimit_resource resource, const struct rlimit64 *rlimits)
     rlimits32.rlim_max = RLIM_INFINITY;
   else
     rlimits32.rlim_max = rlimits->rlim_max;
+# else
+#  define rlimits32 (*rlimits)
+# endif
 
-  return __setrlimit (resource, &rlimits32);
+  res = INLINE_SYSCALL_CALL (setrlimit, resource, &rlimits32);
 #endif
+
+  return res;
 }
+weak_alias (__setrlimit64, setrlimit64)
+
+#if __RLIM_T_MATCHES_RLIM64_T
+strong_alias (__setrlimit64, __setrlimit)
+weak_alias (__setrlimit64, setrlimit)
+#endif
diff --git a/sysdeps/unix/sysv/linux/sh/getrlimit64.c b/sysdeps/unix/sysv/linux/sh/getrlimit64.c
deleted file mode 100644
index fef018f..0000000
--- a/sysdeps/unix/sysv/linux/sh/getrlimit64.c
+++ /dev/null
@@ -1 +0,0 @@
-#include <sysdeps/unix/sysv/linux/i386/getrlimit64.c>
diff --git a/sysdeps/unix/sysv/linux/sparc/bits/typesizes.h b/sysdeps/unix/sysv/linux/sparc/bits/typesizes.h
index f98dd83..705c877 100644
--- a/sysdeps/unix/sysv/linux/sparc/bits/typesizes.h
+++ b/sysdeps/unix/sysv/linux/sparc/bits/typesizes.h
@@ -69,6 +69,11 @@
 
 /* Same for ino_t and ino64_t.  */
 # define __INO_T_MATCHES_INO64_T	1
+
+/* And for __rlim_t and __rlim64_t.  */
+# define __RLIM_T_MATCHES_RLIM64_T	1
+#else
+# define __RLIM_T_MATCHES_RLIM64_T	0
 #endif
 
 /* Number of descriptors that can fit in an `fd_set'.  */
diff --git a/sysdeps/unix/sysv/linux/i386/getrlimit64.c b/sysdeps/unix/sysv/linux/sparc/getrlimit64.c
similarity index 74%
rename from sysdeps/unix/sysv/linux/i386/getrlimit64.c
rename to sysdeps/unix/sysv/linux/sparc/getrlimit64.c
index 7f3d227..3a19852 100644
--- a/sysdeps/unix/sysv/linux/i386/getrlimit64.c
+++ b/sysdeps/unix/sysv/linux/sparc/getrlimit64.c
@@ -1,4 +1,5 @@
-/* Copyright (C) 1999-2016 Free Software Foundation, Inc.
+/* Linux getrlimit64 sparc32 implementation (64 bits rlim_t).
+   Copyright (C) 2016 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
@@ -15,11 +16,9 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
-#define getrlimit64 __new_getrlimit64
+#include <shlib-compat.h>
 
-#include "../getrlimit64.c"
+#undef SHLIB_COMPAT
+#define SHLIB_COMPAT(a,b,c) 0
 
-#undef getrlimit64
-#include <shlib-compat.h>
-versioned_symbol (libc, __getrlimit64, getrlimit64, GLIBC_2_2);
-strong_alias (__getrlimit64, __GI_getrlimit64)
+#include <sysdeps/unix/sysv/linux/getrlimit64.c>
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/syscalls.list b/sysdeps/unix/sysv/linux/sparc/sparc32/syscalls.list
index 6240cd3..0b6095f 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc32/syscalls.list
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/syscalls.list
@@ -4,8 +4,6 @@ chown		-	chown32		i:sii	__chown		chown
 lchown		-	lchown32	i:sii	__lchown	lchown
 fchown		-	fchown32	i:iii	__fchown	fchown
 
-setrlimit	-	setrlimit	2	__setrlimit	setrlimit
-getrlimit	-	getrlimit	2	__getrlimit	getrlimit
 getegid		-	getegid32	Ei:	__getegid	getegid
 geteuid		-	geteuid32	Ei:	__geteuid	geteuid
 getgid		-	getgid32	Ei:	__getgid	getgid
diff --git a/sysdeps/unix/sysv/linux/syscalls.list b/sysdeps/unix/sysv/linux/syscalls.list
index 7ae2541..68af897 100644
--- a/sysdeps/unix/sysv/linux/syscalls.list
+++ b/sysdeps/unix/sysv/linux/syscalls.list
@@ -26,7 +26,6 @@ getpmsg		-	getpmsg		i:ipppp	getpmsg
 getppid		-	getppid		Ei:	__getppid	getppid
 getresuid	-	getresuid	i:ppp	getresuid
 getresgid	-	getresgid	i:ppp	getresgid
-getrlimit	-	ugetrlimit	i:ip	__new_getrlimit __getrlimit getrlimit@@GLIBC_2.2
 getsid		-	getsid		i:i	getsid
 init_module	EXTRA	init_module	5	init_module
 inotify_add_watch	EXTRA	inotify_add_watch	i:isi	inotify_add_watch
diff --git a/sysdeps/unix/sysv/linux/wordsize-64/getrlimit64.c b/sysdeps/unix/sysv/linux/wordsize-64/getrlimit64.c
deleted file mode 100644
index 9feab0e..0000000
--- a/sysdeps/unix/sysv/linux/wordsize-64/getrlimit64.c
+++ /dev/null
@@ -1 +0,0 @@
-/* getrlimit64 is the same as getrlimit. */
diff --git a/sysdeps/unix/sysv/linux/wordsize-64/setrlimit64.c b/sysdeps/unix/sysv/linux/wordsize-64/setrlimit64.c
deleted file mode 100644
index 8edcff0..0000000
--- a/sysdeps/unix/sysv/linux/wordsize-64/setrlimit64.c
+++ /dev/null
@@ -1 +0,0 @@
-/* setrlimit64 is the same as setrlimit. */
diff --git a/sysdeps/unix/sysv/linux/wordsize-64/syscalls.list b/sysdeps/unix/sysv/linux/wordsize-64/syscalls.list
index 99236ba..e71cd7b 100644
--- a/sysdeps/unix/sysv/linux/wordsize-64/syscalls.list
+++ b/sysdeps/unix/sysv/linux/wordsize-64/syscalls.list
@@ -3,8 +3,6 @@
 fstatfs		-	fstatfs		i:ip	__fstatfs	fstatfs fstatfs64 __fstatfs64
 statfs		-	statfs		i:sp	__statfs	statfs statfs64
 mmap		-	mmap		b:aniiii __mmap		mmap __mmap64 mmap64
-getrlimit	-	getrlimit	i:ip	__getrlimit	getrlimit getrlimit64 __getrlimit64
-setrlimit	-	setrlimit	i:ip	__setrlimit	setrlimit setrlimit64
 readahead	-	readahead	i:iii	__readahead	readahead
 sendfile	-	sendfile	i:iipi	sendfile	sendfile64
 sync_file_range	-	sync_file_range	Ci:iiii	sync_file_range
diff --git a/sysdeps/unix/sysv/linux/x86/bits/typesizes.h b/sysdeps/unix/sysv/linux/x86/bits/typesizes.h
index 5817ef3..1fd90d3 100644
--- a/sysdeps/unix/sysv/linux/x86/bits/typesizes.h
+++ b/sysdeps/unix/sysv/linux/x86/bits/typesizes.h
@@ -81,6 +81,11 @@
 
 /* Same for ino_t and ino64_t.  */
 # define __INO_T_MATCHES_INO64_T	1
+
+/* And for __rlim_t and __rlim64_t.  */
+# define __RLIM_T_MATCHES_RLIM64_T	1
+#else
+# define __RLIM_T_MATCHES_RLIM64_T	0
 #endif
 
 /* Number of descriptors that can fit in an `fd_set'.  */

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog                                          |   59 +++++++++++++
 bits/typesizes.h                                   |    5 +
 sysdeps/unix/sysv/linux/alpha/bits/typesizes.h     |    3 +
 sysdeps/unix/sysv/linux/arm/Makefile               |    4 -
 sysdeps/unix/sysv/linux/arm/getrlimit64.c          |    1 -
 sysdeps/unix/sysv/linux/arm/oldgetrlimit.c         |    1 -
 sysdeps/unix/sysv/linux/arm/oldgetrlimit64.c       |    1 -
 sysdeps/unix/sysv/linux/arm/oldsetrlimit.c         |    1 -
 sysdeps/unix/sysv/linux/generic/bits/typesizes.h   |    5 +
 .../sysv/linux/generic/wordsize-32/syscalls.list   |    2 -
 sysdeps/unix/sysv/linux/getrlimit.c                |   56 +++++++++++++
 sysdeps/unix/sysv/linux/getrlimit64.c              |   86 +++++++++++++++++---
 sysdeps/unix/sysv/linux/hppa/getrlimit64.c         |    1 -
 sysdeps/unix/sysv/linux/hppa/syscalls.list         |    2 -
 sysdeps/unix/sysv/linux/i386/Makefile              |    4 -
 sysdeps/unix/sysv/linux/i386/getrlimit64.c         |   25 ------
 sysdeps/unix/sysv/linux/i386/oldgetrlimit64.c      |   57 -------------
 sysdeps/unix/sysv/linux/i386/syscalls.list         |    2 -
 sysdeps/unix/sysv/linux/m68k/Makefile              |    4 -
 sysdeps/unix/sysv/linux/m68k/getrlimit64.c         |    1 -
 sysdeps/unix/sysv/linux/m68k/m680x0/syscalls.list  |    4 -
 sysdeps/unix/sysv/linux/m68k/oldgetrlimit64.c      |    1 -
 sysdeps/unix/sysv/linux/powerpc/getrlimit64.c      |    1 -
 sysdeps/unix/sysv/linux/powerpc/oldgetrlimit64.c   |    1 -
 sysdeps/unix/sysv/linux/powerpc/powerpc32/Makefile |    4 -
 .../sysv/linux/powerpc/powerpc32/syscalls.list     |    4 -
 .../sysv/linux/powerpc/powerpc64/syscalls.list     |    3 -
 sysdeps/unix/sysv/linux/s390/bits/typesizes.h      |    5 +
 sysdeps/unix/sysv/linux/s390/s390-32/Makefile      |    4 -
 sysdeps/unix/sysv/linux/s390/s390-32/getrlimit64.c |    1 -
 .../unix/sysv/linux/s390/s390-32/oldgetrlimit64.c  |    1 -
 sysdeps/unix/sysv/linux/s390/s390-32/syscalls.list |    3 -
 sysdeps/unix/sysv/linux/setrlimit.c                |   64 +++++++++++++++
 sysdeps/unix/sysv/linux/setrlimit64.c              |   48 ++++++++---
 sysdeps/unix/sysv/linux/sh/getrlimit64.c           |    1 -
 sysdeps/unix/sysv/linux/sparc/bits/typesizes.h     |    5 +
 sysdeps/unix/sysv/linux/sparc/getrlimit64.c        |   24 ++++++
 .../unix/sysv/linux/sparc/sparc32/syscalls.list    |    2 -
 sysdeps/unix/sysv/linux/syscalls.list              |    1 -
 sysdeps/unix/sysv/linux/wordsize-64/getrlimit64.c  |    1 -
 sysdeps/unix/sysv/linux/wordsize-64/setrlimit64.c  |    1 -
 sysdeps/unix/sysv/linux/wordsize-64/syscalls.list  |    2 -
 sysdeps/unix/sysv/linux/x86/bits/typesizes.h       |    5 +
 43 files changed, 341 insertions(+), 165 deletions(-)
 delete mode 100644 sysdeps/unix/sysv/linux/arm/getrlimit64.c
 delete mode 100644 sysdeps/unix/sysv/linux/arm/oldgetrlimit.c
 delete mode 100644 sysdeps/unix/sysv/linux/arm/oldgetrlimit64.c
 delete mode 100644 sysdeps/unix/sysv/linux/arm/oldsetrlimit.c
 create mode 100644 sysdeps/unix/sysv/linux/getrlimit.c
 delete mode 100644 sysdeps/unix/sysv/linux/hppa/getrlimit64.c
 delete mode 100644 sysdeps/unix/sysv/linux/i386/getrlimit64.c
 delete mode 100644 sysdeps/unix/sysv/linux/i386/oldgetrlimit64.c
 delete mode 100644 sysdeps/unix/sysv/linux/m68k/getrlimit64.c
 delete mode 100644 sysdeps/unix/sysv/linux/m68k/m680x0/syscalls.list
 delete mode 100644 sysdeps/unix/sysv/linux/m68k/oldgetrlimit64.c
 delete mode 100644 sysdeps/unix/sysv/linux/powerpc/getrlimit64.c
 delete mode 100644 sysdeps/unix/sysv/linux/powerpc/oldgetrlimit64.c
 delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc64/syscalls.list
 delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-32/getrlimit64.c
 delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-32/oldgetrlimit64.c
 create mode 100644 sysdeps/unix/sysv/linux/setrlimit.c
 delete mode 100644 sysdeps/unix/sysv/linux/sh/getrlimit64.c
 create mode 100644 sysdeps/unix/sysv/linux/sparc/getrlimit64.c
 delete mode 100644 sysdeps/unix/sysv/linux/wordsize-64/getrlimit64.c
 delete mode 100644 sysdeps/unix/sysv/linux/wordsize-64/setrlimit64.c


hooks/post-receive
-- 
GNU C Library master sources


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]