From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 17829 invoked by alias); 3 Aug 2012 15:07:11 -0000 Received: (qmail 17812 invoked by uid 22791); 3 Aug 2012 15:07:09 -0000 X-SWARE-Spam-Status: No, hits=-4.1 required=5.0 tests=AWL,BAYES_00,KHOP_RCVD_UNTRUST,RCVD_IN_HOSTKARMA_W,RCVD_IN_HOSTKARMA_WL X-Spam-Check-By: sourceware.org Received: from relay1.mentorg.com (HELO relay1.mentorg.com) (192.94.38.131) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Fri, 03 Aug 2012 15:06:55 +0000 Received: from svr-orw-fem-01.mgc.mentorg.com ([147.34.98.93]) by relay1.mentorg.com with esmtp id 1SxJSp-0004kF-7V from joseph_myers@mentor.com ; Fri, 03 Aug 2012 08:06:55 -0700 Received: from SVR-IES-FEM-02.mgc.mentorg.com ([137.202.0.106]) by svr-orw-fem-01.mgc.mentorg.com over TLS secured channel with Microsoft SMTPSVC(6.0.3790.4675); Fri, 3 Aug 2012 08:06:54 -0700 Received: from digraph.polyomino.org.uk (137.202.0.76) by SVR-IES-FEM-02.mgc.mentorg.com (137.202.0.106) with Microsoft SMTP Server id 14.1.289.1; Fri, 3 Aug 2012 16:06:52 +0100 Received: from jsm28 (helo=localhost) by digraph.polyomino.org.uk with local-esmtp (Exim 4.76) (envelope-from ) id 1SxJSl-0007of-Ob; Fri, 03 Aug 2012 15:06:51 +0000 Date: Fri, 03 Aug 2012 15:07:00 -0000 From: "Joseph S. Myers" To: CC: , Mike Frysinger Subject: Move Linux kernel version conditionals to kernel-features.h Message-ID: MIME-Version: 1.0 Content-Type: text/plain; charset="US-ASCII" Mailing-List: contact libc-ports-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Post: List-Help: , Sender: libc-ports-owner@sourceware.org X-SW-Source: 2012-08/txt/msg00028.txt.bz2 Generally conditions on the compile-time minimum Linux kernel version go via __ASSUME_* macros defined in kernel-features.h. However, sysdeps/unix/sysv/linux/sysconf.c and ports/sysdeps/unix/sysv/linux/ia64/nptl/dl-sysdep.h have such conditions directly using __LINUX_KERNEL_VERSION. This patch fixes those conditions to follow the kernel-features.h convention instead. For sysconf.c, a new macro __ASSUME_ARG_MAX_STACK_BASED is defined and used. Because the #if condition was a condition on an if () condition using the same version, the same version number was previously repeated in both conditions in close proximity; to avoid those copies (that should be in sync) now being widely separated, I defined a macro __LINUX_ARG_MAX_STACK_BASED_MIN_KERNEL for the version number in question. For ports/sysdeps/unix/sysv/linux/ia64/nptl/dl-sysdep.h, I removed the condition; this is in line with commit de7f5ce7c595f4741029f7e63429826f8e82b340 which removed such a condition from nptl/sysdeps/unix/sysv/linux/i386/i686/dl-sysdep.h a few months ago. Tested x86_64. (This should be reviewed for ia64.) 2012-08-03 Joseph Myers * sysdeps/unix/sysv/linux/kernel-features.h (__LINUX_ARG_MAX_STACK_BASED_MIN_KERNEL): Define. [__LINUX_KERNEL_VERSION >= __LINUX_ARG_MAX_STACK_BASED_MIN_KERNEL] (__ASSUME_ARG_MAX_STACK_BASED): Define. * sysdeps/unix/sysv/linux/sysconf.c (__sysconf) [__LINUX_KERNEL_VERSION < 0x020617]: Change condition to !__ASSUME_ARG_MAX_STACK_BASED. Compare version with __LINUX_ARG_MAX_STACK_BASED_MIN_KERNEL. ports/ChangeLog.ia64 2012-08-03 Joseph Myers * sysdeps/unix/sysv/linux/ia64/nptl/dl-sysdep.h (_dl_discover_osversion): Do not condition on __LINUX_KERNEL_VERSION < 0x020617. (HAVE_DL_DISCOVER_OSVERSION): Likewise. diff --git a/ports/sysdeps/unix/sysv/linux/ia64/nptl/dl-sysdep.h b/ports/sysdeps/unix/sysv/linux/ia64/nptl/dl-sysdep.h index e30e33d..0962129 100644 --- a/ports/sysdeps/unix/sysv/linux/ia64/nptl/dl-sysdep.h +++ b/ports/sysdeps/unix/sysv/linux/ia64/nptl/dl-sysdep.h @@ -1,5 +1,5 @@ /* System-specific settings for dynamic linker code. IA-64 version. - Copyright (C) 2003, 2004, 2006, 2008 Free Software Foundation, Inc. + Copyright (C) 2003-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 @@ -65,9 +65,7 @@ extern int _dl_sysinfo_break attribute_hidden; #define DL_ARGV_NOT_RELRO 1 -/* The _dl_discover_osversion function is so far only needed in sysconf - to check for kernels later than 2.6.23. */ -#if !defined __ASSEMBLER__ && __LINUX_KERNEL_VERSION < 0x020617 +#ifndef __ASSEMBLER__ /* Get version of the OS. */ extern int _dl_discover_osversion (void) attribute_hidden; # define HAVE_DL_DISCOVER_OSVERSION 1 diff --git a/sysdeps/unix/sysv/linux/kernel-features.h b/sysdeps/unix/sysv/linux/kernel-features.h index b949f16..18cb038 100644 --- a/sysdeps/unix/sysv/linux/kernel-features.h +++ b/sysdeps/unix/sysv/linux/kernel-features.h @@ -279,6 +279,13 @@ # define __ASSUME_O_CLOEXEC 1 #endif +/* From 2.6.23 onwards the value of ARG_MAX depends on the stack + size. */ +#define __LINUX_ARG_MAX_STACK_BASED_MIN_KERNEL 0x020617 +#if __LINUX_KERNEL_VERSION >= __LINUX_ARG_MAX_STACK_BASED_MIN_KERNEL +# define __ASSUME_ARG_MAX_STACK_BASED 1 +#endif + /* Support for ADJ_OFFSET_SS_READ was added in 2.6.24. */ #if __LINUX_KERNEL_VERSION >= 0x020618 # define __ASSUME_ADJ_OFFSET_SS_READ 1 diff --git a/sysdeps/unix/sysv/linux/sysconf.c b/sysdeps/unix/sysv/linux/sysconf.c index 5c8f45d..47ce5ef 100644 --- a/sysdeps/unix/sysv/linux/sysconf.c +++ b/sysdeps/unix/sysv/linux/sysconf.c @@ -1,5 +1,5 @@ /* Get file-specific information about a file. Linux version. - Copyright (C) 2003,2004,2006 2008,2009,2011 Free Software Foundation, Inc. + Copyright (C) 2003-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 @@ -88,11 +88,11 @@ __sysconf (int name) return HAS_CPUCLOCK (name); case _SC_ARG_MAX: -#if __LINUX_KERNEL_VERSION < 0x020617 - /* Determine whether this is a kernel 2.6.23 or later. Only - then do we have an argument limit determined by the stack - size. */ - if (GLRO(dl_discover_osversion) () >= 0x020617) +#if !__ASSUME_ARG_MAX_STACK_BASED + /* Determine whether this is a kernel with an argument limit + determined by the stack size. */ + if (GLRO(dl_discover_osversion) () + >= __LINUX_ARG_MAX_STACK_BASED_MIN_KERNEL) #endif /* Use getrlimit to get the stack limit. */ if (__getrlimit (RLIMIT_STACK, &rlimit) == 0) -- Joseph S. Myers joseph@codesourcery.com