This is the mail archive of the libc-alpha@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]

Remove __ASSUME_NEW_GETRLIMIT_SYSCALL


__ASSUME_NEW_GETRLIMIT_SYSCALL is defined in kernel-features.h for x86
and powerpc, and in ports for arm, for m68k (>= 2.4.12) and tile.  It
is used in sysdeps/unix/sysv/linux/i386/getrlimit.c and
sysdeps/unix/sysv/linux/i386/setrlimit.c.  Those files are in turn
included for powerpc, s390-32, sh and (in ports) am33, arm and m68k.

This relates to system calls now called ugetrlimit and setrlimit.  As
of 2.4.0-test1, s390, sh and m68k all have those syscalls wired up
(this is about the syscall tables rather than what's in asm/unistd.h,
since we already require >= 2.6.19.1 kernel headers).  So although
those architectures do not define __ASSUME_NEW_GETRLIMIT_SYSCALL (at
all, or for 2.4.0 in the case of m68k) it's nevertheless safe to
assume the syscalls to be present for those architectures.  Finally,
am33 (mn10300) support was added in 2.6.25, and when added the support
for those syscalls was present (and kernel versions before support for
an architecture was officially added to Linux are not of concern to
glibc).

Thus it is safe to remove the conditionals on this macro, and the
definitions of this macro.  I propose this patch to do so.  Tested
x86.

2012-05-25  Joseph Myers  <joseph@codesourcery.com>

	* sysdeps/unix/sysv/linux/kernel-features.h
	(__ASSUME_NEW_GETRLIMIT_SYSCALL): Remove all definitions.
	* sysdeps/unix/sysv/linux/i386/getrlimit.c: Do not include
	kernel-features.h.
	[!__ASSUME_NEW_GETRLIMIT_SYSCALL]: Remove conditional code.
	[__ASSUME_NEW_GETRLIMIT_SYSCALL]: Make code unconditional.
	* sysdeps/unix/sysv/linux/i386/setrlimit.c Do not include
	kernel-features.h.
	[!__ASSUME_NEW_GETRLIMIT_SYSCALL]: Remove conditional code.
	[__ASSUME_NEW_GETRLIMIT_SYSCALL]: Make code unconditional.

diff --git a/sysdeps/unix/sysv/linux/i386/getrlimit.c b/sysdeps/unix/sysv/linux/i386/getrlimit.c
index 21a2c00..e18f9de 100644
--- a/sysdeps/unix/sysv/linux/i386/getrlimit.c
+++ b/sysdeps/unix/sysv/linux/i386/getrlimit.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1999, 2000, 2003, 2006 Free Software Foundation, Inc.
+/* Copyright (C) 1999-2012 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
@@ -23,58 +23,15 @@
 #include <shlib-compat.h>
 #include <bp-checks.h>
 
-#include <kernel-features.h>
-
 extern int __new_getrlimit (enum __rlimit_resource resource,
 			    struct rlimit *__unbounded rlimits);
 
-
-/* Linux 2.3.25 introduced a new system call since the types used for
-   the limits are now unsigned.  */
-#if defined __NR_ugetrlimit && !defined __ASSUME_NEW_GETRLIMIT_SYSCALL
-int __have_no_new_getrlimit;
-#endif
+/* Consider moving to syscalls.list.  */
 
 int
 __new_getrlimit (enum __rlimit_resource resource, struct rlimit *rlimits)
 {
-#ifdef __ASSUME_NEW_GETRLIMIT_SYSCALL
   return INLINE_SYSCALL (ugetrlimit, 2, resource, CHECK_1 (rlimits));
-#else
-  int result;
-
-# ifdef __NR_ugetrlimit
-  if (__have_no_new_getrlimit <= 0)
-    {
-      result = INLINE_SYSCALL (ugetrlimit, 2, resource, CHECK_1 (rlimits));
-
-      /* If the system call is available remember this fact and return.  */
-      if (result != -1 || errno != ENOSYS)
-	{
-	  __have_no_new_getrlimit = -1;
-	  return result;
-	}
-
-      /* Remember that the system call is not available.  */
-      __have_no_new_getrlimit = 1;
-    }
-# endif
-
-  /* Fall back to the old system call.  */
-  result = INLINE_SYSCALL (getrlimit, 2, resource, CHECK_1 (rlimits));
-
-  if (result == -1)
-    return result;
-
-  /* We might have to correct the limits values.  Since the old values
-     were signed the infinity value is too small.  */
-  if (rlimits->rlim_cur == RLIM_INFINITY >> 1)
-    rlimits->rlim_cur = RLIM_INFINITY;
-  if (rlimits->rlim_max == RLIM_INFINITY >> 1)
-    rlimits->rlim_max = RLIM_INFINITY;
-
-  return result;
-#endif
 }
 
 weak_alias (__new_getrlimit, __getrlimit);
diff --git a/sysdeps/unix/sysv/linux/i386/setrlimit.c b/sysdeps/unix/sysv/linux/i386/setrlimit.c
index d6f904f..7683b85 100644
--- a/sysdeps/unix/sysv/linux/i386/setrlimit.c
+++ b/sysdeps/unix/sysv/linux/i386/setrlimit.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1999, 2000, 2003, 2006 Free Software Foundation, Inc.
+/* Copyright (C) 1999-2012 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
@@ -24,53 +24,15 @@
 #include <shlib-compat.h>
 #include <bp-checks.h>
 
-#include <kernel-features.h>
-
 extern int __new_setrlimit (enum __rlimit_resource resource,
 			    const struct rlimit *__unboundedrlimits);
 
-/* Linux 2.3.25 introduced a new system call since the types used for
-   the limits are now unsigned.  */
-#if defined __NR_ugetrlimit && !defined __ASSUME_NEW_GETRLIMIT_SYSCALL
-extern int __have_no_new_getrlimit; /* from getrlimit.c */
-#endif
+/* Consider moving to syscalls.list.  */
 
 int
 __new_setrlimit (enum __rlimit_resource resource, const struct rlimit *rlimits)
 {
-#ifdef __ASSUME_NEW_GETRLIMIT_SYSCALL
   return INLINE_SYSCALL (setrlimit, 2, resource, CHECK_1 (rlimits));
-#else
-  struct rlimit rlimits_small;
-
-# ifdef __NR_ugetrlimit
-  if (__have_no_new_getrlimit == 0)
-    {
-      /* Check if the new ugetrlimit syscall exists.  We must do this
-	 first because older kernels don't reject negative rlimit
-	 values in setrlimit.  */
-      int result = INLINE_SYSCALL (ugetrlimit, 2, resource, __ptrvalue (&rlimits_small));
-      if (result != -1 || errno != ENOSYS)
-	/* The syscall exists.  */
-	__have_no_new_getrlimit = -1;
-      else
-	/* The syscall does not exist.  */
-	__have_no_new_getrlimit = 1;
-    }
-  if (__have_no_new_getrlimit < 0)
-    return INLINE_SYSCALL (setrlimit, 2, resource, CHECK_1 (rlimits));
-# endif
-
-  /* We might have to correct the limits values.  Since the old values
-     were signed the new values might be too large.  */
-  rlimits_small.rlim_cur = MIN ((unsigned long int) rlimits->rlim_cur,
-				RLIM_INFINITY >> 1);
-  rlimits_small.rlim_max = MIN ((unsigned long int) rlimits->rlim_max,
-				RLIM_INFINITY >> 1);
-
-  /* Use the adjusted values.  */
-  return INLINE_SYSCALL (setrlimit, 2, resource, __ptrvalue (&rlimits_small));
-#endif
 }
 
 weak_alias (__new_setrlimit, __setrlimit);
diff --git a/sysdeps/unix/sysv/linux/kernel-features.h b/sysdeps/unix/sysv/linux/kernel-features.h
index fd2f1db..0ea453d 100644
--- a/sysdeps/unix/sysv/linux/kernel-features.h
+++ b/sysdeps/unix/sysv/linux/kernel-features.h
@@ -40,11 +40,6 @@
 /* The sendfile syscall was introduced in 2.2.0.  */
 #define __ASSUME_SENDFILE		1
 
-/* On x86 another `getrlimit' syscall was added in 2.3.25.  */
-#ifdef __i386__
-# define __ASSUME_NEW_GETRLIMIT_SYSCALL	1
-#endif
-
 /* On x86 the truncate64/ftruncate64 syscalls were introduced in 2.3.31.  */
 #ifdef __i386__
 # define __ASSUME_TRUNCATE64_SYSCALL	1
@@ -68,11 +63,6 @@
 # define __ASSUME_STAT64_SYSCALL	1
 #endif
 
-/* I know for sure that getrlimit are in 2.3.35 on powerpc.  */
-#ifdef __powerpc__
-# define __ASSUME_NEW_GETRLIMIT_SYSCALL	1
-#endif
-
 /* I know for sure that these are in 2.3.35 on powerpc. But PowerPC64 does not
    support separate 64-bit syscalls, already 64-bit.  */
 #if defined __powerpc__ && !defined __powerpc64__

-- 
Joseph S. Myers
joseph@codesourcery.com


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