summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog17
-rw-r--r--bits/confname.h56
-rw-r--r--bits/environments.h28
-rw-r--r--posix/Makefile8
-rw-r--r--posix/confstr.c182
-rw-r--r--posix/getconf.c111
-rw-r--r--posix/sysconf.c12
-rw-r--r--sysdeps/posix/sysconf.c31
-rw-r--r--sysdeps/unix/sysv/linux/i386/bits/environments.h24
-rw-r--r--sysdeps/unix/sysv/linux/powerpc/bits/environments.h28
-rw-r--r--sysdeps/unix/sysv/linux/s390/bits/environments.h28
-rw-r--r--sysdeps/unix/sysv/linux/sparc/bits/environments.h28
-rw-r--r--sysdeps/unix/sysv/linux/x86_64/bits/environments.h28
13 files changed, 497 insertions, 84 deletions
diff --git a/ChangeLog b/ChangeLog
index fb133f0a9b..155e68401f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,20 @@
+2009-02-06  Ulrich Drepper  <drepper@redhat.com>
+
+	[BZ #7095]
+	* bits/confname.h: Add SUSv7 macros for getconf environments.
+	* bits/environments.h: Likewise.
+	* sysdeps/unix/sysv/linux/i386/bits/environments.h: Likewise.
+	* sysdeps/unix/sysv/linux/powerpc/bits/environments.h: Likewise.
+	* sysdeps/unix/sysv/linux/s390/bits/environments.h: Likewise.
+	* sysdeps/unix/sysv/linux/sparc/bits/environments.h: Likewise.
+	* sysdeps/unix/sysv/linux/x86_64/bits/environments.h: Likewise.
+	* posix/confstr.c: Handle SUSv5 and SUSv7 environments.
+	* posix/getconf.c: Likewise.
+	* posix/sysconf.c: Likewise.
+	* sysdeps/posix/sysconf.c: Likewise.
+	* posix/Makefile (getconf.speclist): Also collect SUSv5 and SUSv7
+	environments.
+
 2009-01-16  Petr Baudis  <pasky@suse.cz>
 
 	[BZ #9753]
diff --git a/bits/confname.h b/bits/confname.h
index 80b51ac0b8..f6fea1fc29 100644
--- a/bits/confname.h
+++ b/bits/confname.h
@@ -1,5 +1,5 @@
 /* `sysconf', `pathconf', and `confstr' NAME values.  Generic version.
-   Copyright (C) 1993,1995-1998,2000,2001,2003,2004,2007
+   Copyright (C) 1993,1995-1998,2000,2001,2003,2004,2007,2009
    Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
@@ -498,8 +498,17 @@ enum
 
     _SC_IPV6 = _SC_LEVEL1_ICACHE_SIZE + 50,
 #define _SC_IPV6			_SC_IPV6
-    _SC_RAW_SOCKETS
+    _SC_RAW_SOCKETS,
 #define _SC_RAW_SOCKETS			_SC_RAW_SOCKETS
+
+    _SC_V7_ILP32_OFF32,
+#define _SC_V7_ILP32_OFF32		_SC_V7_ILP32_OFF32
+    _SC_V7_ILP32_OFFBIG,
+#define _SC_V7_ILP32_OFFBIG		_SC_V7_ILP32_OFFBIG
+    _SC_V7_LP64_OFF64,
+#define _SC_V7_LP64_OFF64		_SC_V7_LP64_OFF64
+    _SC_V7_LPBIG_OFFBIG,
+#define _SC_V7_LPBIG_OFFBIG		_SC_V7_LPBIG_OFFBIG
   };
 
 /* Values for the NAME argument to `confstr'.  */
@@ -517,6 +526,14 @@ enum
     _CS_GNU_LIBPTHREAD_VERSION,
 #define _CS_GNU_LIBPTHREAD_VERSION	_CS_GNU_LIBPTHREAD_VERSION
 
+    _CS_V5_WIDTH_RESTRICTED_ENVS,
+#define _CS_V5_WIDTH_RESTRICTED_ENVS	_CS_V5_WIDTH_RESTRICTED_ENVS
+#define _CS_POSIX_V5_WIDTH_RESTRICTED_ENVS	_CS_V5_WIDTH_RESTRICTED_ENVS
+
+    _CS_V7_WIDTH_RESTRICTED_ENVS,
+#define _CS_V7_WIDTH_RESTRICTED_ENVS	_CS_V7_WIDTH_RESTRICTED_ENVS
+#define _CS_POSIX_V7_WIDTH_RESTRICTED_ENVS	_CS_V7_WIDTH_RESTRICTED_ENVS
+
     _CS_LFS_CFLAGS = 1000,
 #define _CS_LFS_CFLAGS	_CS_LFS_CFLAGS
     _CS_LFS_LDFLAGS,
@@ -597,6 +614,39 @@ enum
 #define _CS_POSIX_V6_LPBIG_OFFBIG_LDFLAGS _CS_POSIX_V6_LPBIG_OFFBIG_LDFLAGS
     _CS_POSIX_V6_LPBIG_OFFBIG_LIBS,
 #define _CS_POSIX_V6_LPBIG_OFFBIG_LIBS _CS_POSIX_V6_LPBIG_OFFBIG_LIBS
-    _CS_POSIX_V6_LPBIG_OFFBIG_LINTFLAGS
+    _CS_POSIX_V6_LPBIG_OFFBIG_LINTFLAGS,
 #define _CS_POSIX_V6_LPBIG_OFFBIG_LINTFLAGS _CS_POSIX_V6_LPBIG_OFFBIG_LINTFLAGS
+
+    _CS_POSIX_V7_ILP32_OFF32_CFLAGS,
+#define _CS_POSIX_V7_ILP32_OFF32_CFLAGS _CS_POSIX_V7_ILP32_OFF32_CFLAGS
+    _CS_POSIX_V7_ILP32_OFF32_LDFLAGS,
+#define _CS_POSIX_V7_ILP32_OFF32_LDFLAGS _CS_POSIX_V7_ILP32_OFF32_LDFLAGS
+    _CS_POSIX_V7_ILP32_OFF32_LIBS,
+#define _CS_POSIX_V7_ILP32_OFF32_LIBS _CS_POSIX_V7_ILP32_OFF32_LIBS
+    _CS_POSIX_V7_ILP32_OFF32_LINTFLAGS,
+#define _CS_POSIX_V7_ILP32_OFF32_LINTFLAGS _CS_POSIX_V7_ILP32_OFF32_LINTFLAGS
+    _CS_POSIX_V7_ILP32_OFFBIG_CFLAGS,
+#define _CS_POSIX_V7_ILP32_OFFBIG_CFLAGS _CS_POSIX_V7_ILP32_OFFBIG_CFLAGS
+    _CS_POSIX_V7_ILP32_OFFBIG_LDFLAGS,
+#define _CS_POSIX_V7_ILP32_OFFBIG_LDFLAGS _CS_POSIX_V7_ILP32_OFFBIG_LDFLAGS
+    _CS_POSIX_V7_ILP32_OFFBIG_LIBS,
+#define _CS_POSIX_V7_ILP32_OFFBIG_LIBS _CS_POSIX_V7_ILP32_OFFBIG_LIBS
+    _CS_POSIX_V7_ILP32_OFFBIG_LINTFLAGS,
+#define _CS_POSIX_V7_ILP32_OFFBIG_LINTFLAGS _CS_POSIX_V7_ILP32_OFFBIG_LINTFLAGS
+    _CS_POSIX_V7_LP64_OFF64_CFLAGS,
+#define _CS_POSIX_V7_LP64_OFF64_CFLAGS _CS_POSIX_V7_LP64_OFF64_CFLAGS
+    _CS_POSIX_V7_LP64_OFF64_LDFLAGS,
+#define _CS_POSIX_V7_LP64_OFF64_LDFLAGS _CS_POSIX_V7_LP64_OFF64_LDFLAGS
+    _CS_POSIX_V7_LP64_OFF64_LIBS,
+#define _CS_POSIX_V7_LP64_OFF64_LIBS _CS_POSIX_V7_LP64_OFF64_LIBS
+    _CS_POSIX_V7_LP64_OFF64_LINTFLAGS,
+#define _CS_POSIX_V7_LP64_OFF64_LINTFLAGS _CS_POSIX_V7_LP64_OFF64_LINTFLAGS
+    _CS_POSIX_V7_LPBIG_OFFBIG_CFLAGS,
+#define _CS_POSIX_V7_LPBIG_OFFBIG_CFLAGS _CS_POSIX_V7_LPBIG_OFFBIG_CFLAGS
+    _CS_POSIX_V7_LPBIG_OFFBIG_LDFLAGS,
+#define _CS_POSIX_V7_LPBIG_OFFBIG_LDFLAGS _CS_POSIX_V7_LPBIG_OFFBIG_LDFLAGS
+    _CS_POSIX_V7_LPBIG_OFFBIG_LIBS,
+#define _CS_POSIX_V7_LPBIG_OFFBIG_LIBS _CS_POSIX_V7_LPBIG_OFFBIG_LIBS
+    _CS_POSIX_V7_LPBIG_OFFBIG_LINTFLAGS
+#define _CS_POSIX_V7_LPBIG_OFFBIG_LINTFLAGS _CS_POSIX_V7_LPBIG_OFFBIG_LINTFLAGS
   };
diff --git a/bits/environments.h b/bits/environments.h
index 4617dc45f2..548ea7f847 100644
--- a/bits/environments.h
+++ b/bits/environments.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 1999, 2001, 2004 Free Software Foundation, Inc.
+/* Copyright (C) 1999, 2001, 2004, 2009 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
@@ -27,30 +27,36 @@
    `-1' means it is never supported.  Undefined means it cannot be
    statically decided.
 
-   _POSIX_V6_ILP32_OFF32   32bit int, long, pointers, and off_t type
-   _POSIX_V6_ILP32_OFFBIG  32bit int, long, and pointers and larger off_t type
+   _POSIX_V7_ILP32_OFF32   32bit int, long, pointers, and off_t type
+   _POSIX_V7_ILP32_OFFBIG  32bit int, long, and pointers and larger off_t type
 
-   _POSIX_V6_LP64_OFF32	   64bit long and pointers and 32bit off_t type
-   _POSIX_V6_LPBIG_OFFBIG  64bit long and pointers and large off_t type
+   _POSIX_V7_LP64_OFF32	   64bit long and pointers and 32bit off_t type
+   _POSIX_V7_LPBIG_OFFBIG  64bit long and pointers and large off_t type
 
-   The macros _XBS5_ILP32_OFF32, _XBS5_ILP32_OFFBIG, _XBS5_LP64_OFF32, and
-   _XBS5_LPBIG_OFFBIG were used in previous versions of the Unix standard
-   and are available only for compatibility.
+   The macros _POSIX_V6_ILP32_OFF32, _POSIX_V6_ILP32_OFFBIG,
+   _POSIX_V6_LP64_OFF32, _POSIX_V6_LPBIG_OFFBIG, _XBS5_ILP32_OFF32,
+   _XBS5_ILP32_OFFBIG, _XBS5_LP64_OFF32, and _XBS5_LPBIG_OFFBIG were
+   used in previous versions of the Unix standard and are available
+   only for compatibility.
 */
 
 #if __WORDSIZE == 64
 
 /* We can never provide environments with 32-bit wide pointers.  */
+# define _POSIX_V7_ILP32_OFF32	-1
+# define _POSIX_V7_ILP32_OFFBIG	-1
 # define _POSIX_V6_ILP32_OFF32	-1
 # define _POSIX_V6_ILP32_OFFBIG	-1
 # define _XBS5_ILP32_OFF32	-1
 # define _XBS5_ILP32_OFFBIG	-1
 /* We also have no use (for now) for an environment with bigger pointers
    and offsets.  */
+# define _POSIX_V7_LPBIG_OFFBIG	-1
 # define _POSIX_V6_LPBIG_OFFBIG	-1
 # define _XBS5_LPBIG_OFFBIG	-1
 
 /* By default we have 64-bit wide `long int', pointers and `off_t'.  */
+# define _POSIX_V7_LP64_OFF64	1
 # define _POSIX_V6_LP64_OFF64	1
 # define _XBS5_LP64_OFF64	1
 
@@ -58,15 +64,19 @@
 
 /* By default we have 32-bit wide `int', `long int', pointers and `off_t'
    and all platforms support LFS.  */
+# define _POSIX_V7_ILP32_OFF32	1
+# define _POSIX_V7_ILP32_OFFBIG	1
 # define _POSIX_V6_ILP32_OFF32	1
 # define _POSIX_V6_ILP32_OFFBIG	1
 # define _XBS5_ILP32_OFF32	1
 # define _XBS5_ILP32_OFFBIG	1
 
 /* We optionally provide an environment with the above size but an 64-bit
-   side `off_t'.  Therefore we don't define _XBS5_ILP32_OFFBIG.  */
+   side `off_t'.  Therefore we don't define _POSIX_V7_ILP32_OFFBIG.  */
 
 /* We can never provide environments with 64-bit wide pointers.  */
+# define _POSIX_V7_LP64_OFF64	-1
+# define _POSIX_V7_LPBIG_OFFBIG	-1
 # define _POSIX_V6_LP64_OFF64	-1
 # define _POSIX_V6_LPBIG_OFFBIG	-1
 # define _XBS5_LP64_OFF64	-1
diff --git a/posix/Makefile b/posix/Makefile
index c904636411..d9a1ac768f 100644
--- a/posix/Makefile
+++ b/posix/Makefile
@@ -1,4 +1,4 @@
-# Copyright (C) 1991-1999, 2000-2006, 2007 Free Software Foundation, Inc.
+# Copyright (C) 1991-1999, 2000-2006, 2007, 2009 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
@@ -304,7 +304,11 @@ $(inst_libexecdir)/getconf: $(inst_bindir)/getconf \
 $(objpfx)getconf.speclist: $(objpfx)getconf
 ifeq (no,$(cross-compiling))
 	LC_ALL=C GETCONF_DIR=/dev/null \
-	$(run-program-prefix) $< _POSIX_V6_WIDTH_RESTRICTED_ENVS > $@.new
+	$(run-program-prefix) $< _POSIX_V7_WIDTH_RESTRICTED_ENVS > $@.new
+	LC_ALL=C GETCONF_DIR=/dev/null \
+	$(run-program-prefix) $< _POSIX_V6_WIDTH_RESTRICTED_ENVS >> $@.new
+	LC_ALL=C GETCONF_DIR=/dev/null \
+	$(run-program-prefix) $< _XBS5_WIDTH_RESTRICTED_ENVS >> $@.new
 else
 	> $@.new
 endif
diff --git a/posix/confstr.c b/posix/confstr.c
index 26b0fa875b..9aa4b5aebb 100644
--- a/posix/confstr.c
+++ b/posix/confstr.c
@@ -1,5 +1,4 @@
-/* Copyright (C) 1991, 1996, 1997, 2000-2002, 2003, 2004
-   Free Software Foundation, Inc.
+/* Copyright (C) 1991,1996,1997,2000-2004,2009 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
@@ -46,6 +45,69 @@ confstr (name, buf, len)
       }
       break;
 
+    case _CS_V7_WIDTH_RESTRICTED_ENVS:
+      /* We have to return a newline-separated list of named of
+	 programming environements in which the widths of blksize_t,
+	 cc_t, mode_t, nfds_t, pid_t, ptrdiff_t, size_t, speed_t,
+	 ssize_t, suseconds_t, tcflag_t, useconds_t, wchar_t, and
+	 wint_t types are no greater than the width of type long.
+
+	 Currently this means all environment which the system allows.  */
+      {
+	char restenvs[4 * sizeof "POSIX_V7_LPBIG_OFFBIG"];
+
+	string_len = 0;
+#ifndef _POSIX_V7_ILP32_OFF32
+        if (__sysconf (_SC_V7_ILP32_OFF32) > 0)
+#endif
+#if !defined _POSIX_V7_ILP32_OFF32 || _POSIX_V7_ILP32_OFF32 > 0
+          {
+            memcpy (restenvs + string_len, "POSIX_V7_ILP32_OFF32",
+                    sizeof "POSIX_V7_ILP32_OFF32" - 1);
+            string_len += sizeof "POSIX_V7_ILP32_OFF32" - 1;
+          }
+#endif
+#ifndef _POSIX_V7_ILP32_OFFBIG
+        if (__sysconf (_SC_V7_ILP32_OFFBIG) > 0)
+#endif
+#if !defined _POSIX_V7_ILP32_OFFBIG || _POSIX_V7_ILP32_OFFBIG > 0
+          {
+            if (string_len)
+              restenvs[string_len++] = '\n';
+            memcpy (restenvs + string_len, "POSIX_V7_ILP32_OFFBIG",
+                    sizeof "POSIX_V7_ILP32_OFFBIG" - 1);
+            string_len += sizeof "POSIX_V7_ILP32_OFFBIG" - 1;
+          }
+#endif
+#ifndef _POSIX_V7_LP64_OFF64
+        if (__sysconf (_SC_V7_LP64_OFF64) > 0)
+#endif
+#if !defined _POSIX_V7_LP64_OFF64 || _POSIX_V7_LP64_OFF64 > 0
+          {
+            if (string_len)
+              restenvs[string_len++] = '\n';
+            memcpy (restenvs + string_len, "POSIX_V7_LP64_OFF64",
+                    sizeof "POSIX_V7_LP64_OFF64" - 1);
+            string_len += sizeof "POSIX_V7_LP64_OFF64" - 1;
+          }
+#endif
+#ifndef _POSIX_V7_LPBIG_OFFBIG
+        if (__sysconf (_SC_V7_LPBIG_OFFBIG) > 0)
+#endif
+#if !defined _POSIX_V7_LPBIG_OFFBIG || _POSIX_V7_LPBIG_OFFBIG > 0
+          {
+            if (string_len)
+              restenvs[string_len++] = '\n';
+            memcpy (restenvs + string_len, "POSIX_V7_LPBIG_OFFBIG",
+                    sizeof "POSIX_V7_LPBIG_OFFBIG" - 1);
+            string_len += sizeof "POSIX_V7_LPBIG_OFFBIG" - 1;
+          }
+#endif
+        restenvs[string_len++] = '\0';
+	string = restenvs;
+      }
+      break;
+
     case _CS_V6_WIDTH_RESTRICTED_ENVS:
       /* We have to return a newline-separated list of named of
 	 programming environements in which the widths of blksize_t,
@@ -109,13 +171,77 @@ confstr (name, buf, len)
       }
       break;
 
+    case _CS_V5_WIDTH_RESTRICTED_ENVS:
+      /* We have to return a newline-separated list of named of
+	 programming environements in which the widths of blksize_t,
+	 cc_t, mode_t, nfds_t, pid_t, ptrdiff_t, size_t, speed_t,
+	 ssize_t, suseconds_t, tcflag_t, useconds_t, wchar_t, and
+	 wint_t types are no greater than the width of type long.
+
+	 Currently this means all environment which the system allows.  */
+      {
+	char restenvs[4 * sizeof "XBS5_LPBIG_OFFBIG"];
+
+	string_len = 0;
+#ifndef _XBS5_ILP32_OFF32
+        if (__sysconf (_SC_XBS5_ILP32_OFF32) > 0)
+#endif
+#if !defined _XBS5_ILP32_OFF32 || _XBS5_ILP32_OFF32 > 0
+          {
+            memcpy (restenvs + string_len, "XBS5_ILP32_OFF32",
+                    sizeof "XBS5_ILP32_OFF32" - 1);
+            string_len += sizeof "XBS5_ILP32_OFF32" - 1;
+          }
+#endif
+#ifndef _XBS5_ILP32_OFFBIG
+        if (__sysconf (_SC_XBS5_ILP32_OFFBIG) > 0)
+#endif
+#if !defined _XBS5_ILP32_OFFBIG || _XBS5_ILP32_OFFBIG > 0
+          {
+            if (string_len)
+              restenvs[string_len++] = '\n';
+            memcpy (restenvs + string_len, "XBS5_ILP32_OFFBIG",
+                    sizeof "XBS5_ILP32_OFFBIG" - 1);
+            string_len += sizeof "XBS5_ILP32_OFFBIG" - 1;
+          }
+#endif
+#ifndef _XBS5_LP64_OFF64
+        if (__sysconf (_SC_XBS5_LP64_OFF64) > 0)
+#endif
+#if !defined _XBS5_LP64_OFF64 || _XBS5_LP64_OFF64 > 0
+          {
+            if (string_len)
+              restenvs[string_len++] = '\n';
+            memcpy (restenvs + string_len, "XBS5_LP64_OFF64",
+                    sizeof "XBS5_LP64_OFF64" - 1);
+            string_len += sizeof "XBS5_LP64_OFF64" - 1;
+          }
+#endif
+#ifndef _XBS5_LPBIG_OFFBIG
+        if (__sysconf (_SC_XBS5_LPBIG_OFFBIG) > 0)
+#endif
+#if !defined _XBS5_LPBIG_OFFBIG || _XBS5_LPBIG_OFFBIG > 0
+          {
+            if (string_len)
+              restenvs[string_len++] = '\n';
+            memcpy (restenvs + string_len, "XBS5_LPBIG_OFFBIG",
+                    sizeof "XBS5_LPBIG_OFFBIG" - 1);
+            string_len += sizeof "XBS5_LPBIG_OFFBIG" - 1;
+          }
+#endif
+        restenvs[string_len++] = '\0';
+	string = restenvs;
+      }
+      break;
+
     case _CS_XBS5_ILP32_OFF32_CFLAGS:
     case _CS_POSIX_V6_ILP32_OFF32_CFLAGS:
+    case _CS_POSIX_V7_ILP32_OFF32_CFLAGS:
 #ifdef __ILP32_OFF32_CFLAGS
-# if _POSIX_V6_ILP32_OFF32 == -1
+# if _POSIX_V7_ILP32_OFF32 == -1
 #  error "__ILP32_OFF32_CFLAGS should not be defined"
-# elif !defined _POSIX_V6_ILP32_OFF32
-      if (__sysconf (_SC_V6_ILP32_OFF32) < 0)
+# elif !defined _POSIX_V7_ILP32_OFF32
+      if (__sysconf (_SC_V7_ILP32_OFF32) < 0)
         break;
 # endif
       string = __ILP32_OFF32_CFLAGS;
@@ -125,11 +251,12 @@ confstr (name, buf, len)
 
     case _CS_XBS5_ILP32_OFFBIG_CFLAGS:
     case _CS_POSIX_V6_ILP32_OFFBIG_CFLAGS:
+    case _CS_POSIX_V7_ILP32_OFFBIG_CFLAGS:
 #ifdef __ILP32_OFFBIG_CFLAGS
-# if _POSIX_V6_ILP32_OFFBIG == -1
+# if _POSIX_V7_ILP32_OFFBIG == -1
 #  error "__ILP32_OFFBIG_CFLAGS should not be defined"
-# elif !defined _POSIX_V6_ILP32_OFFBIG
-      if (__sysconf (_SC_V6_ILP32_OFFBIG) < 0)
+# elif !defined _POSIX_V7_ILP32_OFFBIG
+      if (__sysconf (_SC_V7_ILP32_OFFBIG) < 0)
         break;
 # endif
       string = __ILP32_OFFBIG_CFLAGS;
@@ -139,11 +266,12 @@ confstr (name, buf, len)
 
     case _CS_XBS5_LP64_OFF64_CFLAGS:
     case _CS_POSIX_V6_LP64_OFF64_CFLAGS:
+    case _CS_POSIX_V7_LP64_OFF64_CFLAGS:
 #ifdef __LP64_OFF64_CFLAGS
-# if _POSIX_V6_LP64_OFF64 == -1
+# if _POSIX_V7_LP64_OFF64 == -1
 #  error "__LP64_OFF64_CFLAGS should not be defined"
-# elif !defined _POSIX_V6_LP64_OFF64
-      if (__sysconf (_SC_V6_LP64_OFF64) < 0)
+# elif !defined _POSIX_V7_LP64_OFF64
+      if (__sysconf (_SC_V7_LP64_OFF64) < 0)
         break;
 # endif
       string = __LP64_OFF64_CFLAGS;
@@ -153,11 +281,12 @@ confstr (name, buf, len)
 
     case _CS_XBS5_ILP32_OFF32_LDFLAGS:
     case _CS_POSIX_V6_ILP32_OFF32_LDFLAGS:
+    case _CS_POSIX_V7_ILP32_OFF32_LDFLAGS:
 #ifdef __ILP32_OFF32_LDFLAGS
-# if _POSIX_V6_ILP32_OFF32 == -1
+# if _POSIX_V7_ILP32_OFF32 == -1
 #  error "__ILP32_OFF32_LDFLAGS should not be defined"
-# elif !defined _POSIX_V6_ILP32_OFF32
-      if (__sysconf (_SC_V6_ILP32_OFF32) < 0)
+# elif !defined _POSIX_V7_ILP32_OFF32
+      if (__sysconf (_SC_V7_ILP32_OFF32) < 0)
         break;
 # endif
       string = __ILP32_OFF32_LDFLAGS;
@@ -167,11 +296,12 @@ confstr (name, buf, len)
 
     case _CS_XBS5_ILP32_OFFBIG_LDFLAGS:
     case _CS_POSIX_V6_ILP32_OFFBIG_LDFLAGS:
+    case _CS_POSIX_V7_ILP32_OFFBIG_LDFLAGS:
 #ifdef __ILP32_OFFBIG_LDFLAGS
-# if _POSIX_V6_ILP32_OFFBIG == -1
+# if _POSIX_V7_ILP32_OFFBIG == -1
 #  error "__ILP32_OFFBIG_LDFLAGS should not be defined"
-# elif !defined _POSIX_V6_ILP32_OFFBIG
-      if (__sysconf (_SC_V6_ILP32_OFFBIG) < 0)
+# elif !defined _POSIX_V7_ILP32_OFFBIG
+      if (__sysconf (_SC_V7_ILP32_OFFBIG) < 0)
         break;
 # endif
       string = __ILP32_OFFBIG_LDFLAGS;
@@ -181,11 +311,12 @@ confstr (name, buf, len)
 
     case _CS_XBS5_LP64_OFF64_LDFLAGS:
     case _CS_POSIX_V6_LP64_OFF64_LDFLAGS:
+    case _CS_POSIX_V7_LP64_OFF64_LDFLAGS:
 #ifdef __LP64_OFF64_LDFLAGS
-# if _POSIX_V6_LP64_OFF64 == -1
+# if _POSIX_V7_LP64_OFF64 == -1
 #  error "__LP64_OFF64_LDFLAGS should not be defined"
-# elif !defined _POSIX_V6_LP64_OFF64
-      if (__sysconf (_SC_V6_LP64_OFF64) < 0)
+# elif !defined _POSIX_V7_LP64_OFF64
+      if (__sysconf (_SC_V7_LP64_OFF64) < 0)
         break;
 # endif
       string = __LP64_OFF64_LDFLAGS;
@@ -241,6 +372,17 @@ confstr (name, buf, len)
     case _CS_POSIX_V6_LPBIG_OFFBIG_LDFLAGS:
     case _CS_POSIX_V6_LPBIG_OFFBIG_LIBS:
     case _CS_POSIX_V6_LPBIG_OFFBIG_LINTFLAGS:
+
+    case _CS_POSIX_V7_ILP32_OFF32_LIBS:
+    case _CS_POSIX_V7_ILP32_OFF32_LINTFLAGS:
+    case _CS_POSIX_V7_ILP32_OFFBIG_LIBS:
+    case _CS_POSIX_V7_ILP32_OFFBIG_LINTFLAGS:
+    case _CS_POSIX_V7_LP64_OFF64_LIBS:
+    case _CS_POSIX_V7_LP64_OFF64_LINTFLAGS:
+    case _CS_POSIX_V7_LPBIG_OFFBIG_CFLAGS:
+    case _CS_POSIX_V7_LPBIG_OFFBIG_LDFLAGS:
+    case _CS_POSIX_V7_LPBIG_OFFBIG_LIBS:
+    case _CS_POSIX_V7_LPBIG_OFFBIG_LINTFLAGS:
       /* GNU libc does not require special actions to use LFS functions.  */
       break;
 
diff --git a/posix/getconf.c b/posix/getconf.c
index 1b5f6bc2b7..2b1f6c9871 100644
--- a/posix/getconf.c
+++ b/posix/getconf.c
@@ -528,6 +528,11 @@ static const struct conf vars[] =
 #endif
 
     /* Programming environments.  */
+#ifdef _CS_V5_WIDTH_RESTRICTED_ENVS
+    { "_XBS5_WIDTH_RESTRICTED_ENVS", _CS_V5_WIDTH_RESTRICTED_ENVS, CONFSTR },
+    { "XBS5_WIDTH_RESTRICTED_ENVS", _CS_V5_WIDTH_RESTRICTED_ENVS, CONFSTR },
+#endif
+
 #ifdef _SC_XBS5_ILP32_OFF32
     { "_XBS5_ILP32_OFF32", _SC_XBS5_ILP32_OFF32, SYSCONF },
 #endif
@@ -661,6 +666,75 @@ static const struct conf vars[] =
     { "POSIX_V6_LPBIG_OFFBIG_LINTFLAGS", _CS_POSIX_V6_LPBIG_OFFBIG_LINTFLAGS, CONFSTR },
 #endif
 
+#ifdef _SC_V7_ILP32_OFF32
+    { "_POSIX_V7_ILP32_OFF32", _SC_V7_ILP32_OFF32, SYSCONF },
+#endif
+#ifdef _CS_POSIX_V7_ILP32_OFF32_CFLAGS
+    { "POSIX_V7_ILP32_OFF32_CFLAGS", _CS_POSIX_V7_ILP32_OFF32_CFLAGS, CONFSTR },
+#endif
+#ifdef _CS_POSIX_V7_ILP32_OFF32_LDFLAGS
+    { "POSIX_V7_ILP32_OFF32_LDFLAGS", _CS_POSIX_V7_ILP32_OFF32_LDFLAGS, CONFSTR },
+#endif
+#ifdef _CS_POSIX_V7_ILP32_OFF32_LIBS
+    { "POSIX_V7_ILP32_OFF32_LIBS", _CS_POSIX_V7_ILP32_OFF32_LIBS, CONFSTR },
+#endif
+#ifdef _CS_POSIX_V7_ILP32_OFF32_LINTFLAGS
+    { "POSIX_V7_ILP32_OFF32_LINTFLAGS", _CS_POSIX_V7_ILP32_OFF32_LINTFLAGS, CONFSTR },
+#endif
+
+#ifdef _CS_V7_WIDTH_RESTRICTED_ENVS
+    { "_POSIX_V7_WIDTH_RESTRICTED_ENVS", _CS_V7_WIDTH_RESTRICTED_ENVS, CONFSTR },
+    { "POSIX_V7_WIDTH_RESTRICTED_ENVS", _CS_V7_WIDTH_RESTRICTED_ENVS, CONFSTR },
+#endif
+
+#ifdef _SC_V7_ILP32_OFFBIG
+    { "_POSIX_V7_ILP32_OFFBIG", _SC_V7_ILP32_OFFBIG, SYSCONF },
+#endif
+#ifdef _CS_POSIX_V7_ILP32_OFFBIG_CFLAGS
+    { "POSIX_V7_ILP32_OFFBIG_CFLAGS", _CS_POSIX_V7_ILP32_OFFBIG_CFLAGS, CONFSTR },
+#endif
+#ifdef _CS_POSIX_V7_ILP32_OFFBIG_LDFLAGS
+    { "POSIX_V7_ILP32_OFFBIG_LDFLAGS", _CS_POSIX_V7_ILP32_OFFBIG_LDFLAGS, CONFSTR },
+#endif
+#ifdef _CS_POSIX_V7_ILP32_OFFBIG_LIBS
+    { "POSIX_V7_ILP32_OFFBIG_LIBS", _CS_POSIX_V7_ILP32_OFFBIG_LIBS, CONFSTR },
+#endif
+#ifdef _CS_POSIX_V7_ILP32_OFFBIG_LINTFLAGS
+    { "POSIX_V7_ILP32_OFFBIG_LINTFLAGS", _CS_POSIX_V7_ILP32_OFFBIG_LINTFLAGS, CONFSTR },
+#endif
+
+#ifdef _SC_V7_LP64_OFF64
+    { "_POSIX_V7_LP64_OFF64", _SC_V7_LP64_OFF64, SYSCONF },
+#endif
+#ifdef _CS_POSIX_V7_LP64_OFF64_CFLAGS
+    { "POSIX_V7_LP64_OFF64_CFLAGS", _CS_POSIX_V7_LP64_OFF64_CFLAGS, CONFSTR },
+#endif
+#ifdef _CS_POSIX_V7_LP64_OFF64_LDFLAGS
+    { "POSIX_V7_LP64_OFF64_LDFLAGS", _CS_POSIX_V7_LP64_OFF64_LDFLAGS, CONFSTR },
+#endif
+#ifdef _CS_POSIX_V7_LP64_OFF64_LIBS
+    { "POSIX_V7_LP64_OFF64_LIBS", _CS_POSIX_V7_LP64_OFF64_LIBS, CONFSTR },
+#endif
+#ifdef _CS_POSIX_V7_LP64_OFF64_LINTFLAGS
+    { "POSIX_V7_LP64_OFF64_LINTFLAGS", _CS_POSIX_V7_LP64_OFF64_LINTFLAGS, CONFSTR },
+#endif
+
+#ifdef _SC_V7_LPBIG_OFFBIG
+    { "_POSIX_V7_LPBIG_OFFBIG", _SC_V7_LPBIG_OFFBIG, SYSCONF },
+#endif
+#ifdef _CS_POSIX_V7_LPBIG_OFFBIG_CFLAGS
+    { "POSIX_V7_LPBIG_OFFBIG_CFLAGS", _CS_POSIX_V7_LPBIG_OFFBIG_CFLAGS, CONFSTR },
+#endif
+#ifdef _CS_POSIX_V7_LPBIG_OFFBIG_LDFLAGS
+    { "POSIX_V7_LPBIG_OFFBIG_LDFLAGS", _CS_POSIX_V7_LPBIG_OFFBIG_LDFLAGS, CONFSTR },
+#endif
+#ifdef _CS_POSIX_V7_LPBIG_OFFBIG_LIBS
+    { "POSIX_V7_LPBIG_OFFBIG_LIBS", _CS_POSIX_V7_LPBIG_OFFBIG_LIBS, CONFSTR },
+#endif
+#ifdef _CS_POSIX_V7_LPBIG_OFFBIG_LINTFLAGS
+    { "POSIX_V7_LPBIG_OFFBIG_LINTFLAGS", _CS_POSIX_V7_LPBIG_OFFBIG_LINTFLAGS, CONFSTR },
+#endif
+
 #ifdef _SC_ADVISORY_INFO
     { "_POSIX_ADVISORY_INFO", _SC_ADVISORY_INFO, SYSCONF },
 #endif
@@ -926,12 +1000,20 @@ static const struct conf vars[] =
   };
 
 
-static struct { const char *name; int num; } specs[] =
+static const struct { const char *name; int num; } specs[] =
   {
+    { "XBS5_ILP32_OFF32", _SC_XBS5_ILP32_OFF32 },
+    { "XBS5_ILP32_OFFBIG", _SC_XBS5_ILP32_OFFBIG },
+    { "XBS5_LP64_OFF64", _SC_XBS5_LP64_OFF64 },
+    { "XBS5_LPBIG_OFFBIG", _SC_XBS5_LPBIG_OFFBIG },
     { "POSIX_V6_ILP32_OFF32", _SC_V6_ILP32_OFF32 },
     { "POSIX_V6_ILP32_OFFBIG", _SC_V6_ILP32_OFFBIG },
     { "POSIX_V6_LP64_OFF64", _SC_V6_LP64_OFF64 },
-    { "POSIX_V6_LPBIG_OFFBIG", _SC_V6_LPBIG_OFFBIG }
+    { "POSIX_V6_LPBIG_OFFBIG", _SC_V6_LPBIG_OFFBIG },
+    { "POSIX_V7_ILP32_OFF32", _SC_V7_ILP32_OFF32 },
+    { "POSIX_V7_ILP32_OFFBIG", _SC_V7_ILP32_OFFBIG },
+    { "POSIX_V7_LP64_OFF64", _SC_V7_LP64_OFF64 },
+    { "POSIX_V7_LPBIG_OFFBIG", _SC_V7_LPBIG_OFFBIG },
   };
 static const int nspecs = sizeof (specs) / sizeof (specs[0]);
 
@@ -949,6 +1031,7 @@ usage (void)
   exit (2);
 }
 
+
 static void
 print_all (const char *path)
 {
@@ -1082,6 +1165,18 @@ environment SPEC.\n\n"));
 
       switch (specs[i].num)
 	{
+#ifndef _XBS5_ILP32_OFF32
+	  case _SC_XBS5_ILP32_OFF32:
+#endif
+#ifndef _XBS5_ILP32_OFFBIG
+	  case _SC_XBS5_ILP32_OFFBIG:
+#endif
+#ifndef _XBS5_LP64_OFF64
+	  case _SC_XBS5_LP64_OFF64:
+#endif
+#ifndef _XBS5_LPBIG_OFFBIG
+	  case _SC_XBS5_LPBIG_OFFBIG:
+#endif
 #ifndef _POSIX_V6_ILP32_OFF32
 	  case _SC_V6_ILP32_OFF32:
 #endif
@@ -1094,6 +1189,18 @@ environment SPEC.\n\n"));
 #ifndef _POSIX_V6_LPBIG_OFFBIG
 	  case _SC_V6_LPBIG_OFFBIG:
 #endif
+#ifndef _POSIX_V7_ILP32_OFF32
+	  case _SC_V7_ILP32_OFF32:
+#endif
+#ifndef _POSIX_V7_ILP32_OFFBIG
+	  case _SC_V7_ILP32_OFFBIG:
+#endif
+#ifndef _POSIX_V7_LP64_OFF64
+	  case _SC_V7_LP64_OFF64:
+#endif
+#ifndef _POSIX_V7_LPBIG_OFFBIG
+	  case _SC_V7_LPBIG_OFFBIG:
+#endif
 	    {
 	      const char *args[argc + 3];
 	      size_t spec_len = strlen (spec);
diff --git a/posix/sysconf.c b/posix/sysconf.c
index f22685cb29..971dd8bf77 100644
--- a/posix/sysconf.c
+++ b/posix/sysconf.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991,1993,1995-1997,2001,2002,2003
+/* Copyright (C) 1991,1993,1995-1997,2001,2002,2003,2009
    Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
@@ -255,6 +255,16 @@ __sysconf (name)
     case _SC_XBS5_LP64_OFF64:
     case _SC_XBS5_LPBIG_OFFBIG:
 
+    case _SC_POSIX_V6_ILP32_OFF32:
+    case _SC_POSIX_V6_ILP32_OFFBIG:
+    case _SC_POSIX_V6_LP64_OFF64:
+    case _SC_POSIX_V6_LPBIG_OFFBIG:
+
+    case _SC_POSIX_V7_ILP32_OFF32:
+    case _SC_POSIX_V7_ILP32_OFFBIG:
+    case _SC_POSIX_V7_LP64_OFF64:
+    case _SC_POSIX_V7_LPBIG_OFFBIG:
+
     case _SC_XOPEN_LEGACY:
     case _SC_XOPEN_REALTIME:
     case _SC_XOPEN_REALTIME_THREADS:
diff --git a/sysdeps/posix/sysconf.c b/sysdeps/posix/sysconf.c
index 0c0d7d1418..f1d1ee4417 100644
--- a/sysdeps/posix/sysconf.c
+++ b/sysdeps/posix/sysconf.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991,1993,1995-1997,1999-2003,2004,2006
+/* Copyright (C) 1991,1993,1995-1997,1999-2003,2004,2006,2009
 	Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
@@ -38,7 +38,9 @@
   (!defined _XBS5_ILP32_OFF32 || !defined _XBS5_ILP32_OFFBIG \
    || !defined _XBS5_LP64_OFF64 || !defined _XBS5_LPBIG_OFFBIG \
    || !defined _POSIX_V6_ILP32_OFF32 || !defined _POSIX_V6_ILP32_OFFBIG \
-   || !defined _POSIX_V6_LP64_OFF64 || !defined _POSIX_V6_LPBIG_OFFBIG)
+   || !defined _POSIX_V6_LP64_OFF64 || !defined _POSIX_V6_LPBIG_OFFBIG \
+   || !defined _POSIX_V7_ILP32_OFF32 || !defined _POSIX_V7_ILP32_OFFBIG \
+   || !defined _POSIX_V7_LP64_OFF64 || !defined _POSIX_V7_LPBIG_OFFBIG)
 #if NEED_CHECK_SPEC
 static long int __sysconf_check_spec (const char *spec);
 #endif
@@ -840,6 +842,31 @@ __sysconf (name)
       return __sysconf_check_spec ("LPBIG_OFFBIG");
 #endif
 
+    case _SC_V7_ILP32_OFF32:
+#ifdef _POSIX_V7_ILP32_OFF32
+      return _POSIX_V7_ILP32_OFF32;
+#else
+      return __sysconf_check_spec ("ILP32_OFF32");
+#endif
+    case _SC_V7_ILP32_OFFBIG:
+#ifdef _POSIX_V7_ILP32_OFFBIG
+      return _POSIX_V7_ILP32_OFFBIG;
+#else
+      return __sysconf_check_spec ("ILP32_OFFBIG");
+#endif
+    case _SC_V7_LP64_OFF64:
+#ifdef _POSIX_V7_LP64_OFF64
+      return _POSIX_V7_LP64_OFF64;
+#else
+      return __sysconf_check_spec ("LP64_OFF64");
+#endif
+    case _SC_V7_LPBIG_OFFBIG:
+#ifdef _POSIX_V7_LPBIG_OFFBIG
+      return _POSIX_V7_LPBIG_OFFBIG;
+#else
+      return __sysconf_check_spec ("LPBIG_OFFBIG");
+#endif
+
     case _SC_XOPEN_LEGACY:
       return _XOPEN_LEGACY;
 
diff --git a/sysdeps/unix/sysv/linux/i386/bits/environments.h b/sysdeps/unix/sysv/linux/i386/bits/environments.h
index 16f7732aad..785dd7e8fa 100644
--- a/sysdeps/unix/sysv/linux/i386/bits/environments.h
+++ b/sysdeps/unix/sysv/linux/i386/bits/environments.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 1999, 2001, 2004 Free Software Foundation, Inc.
+/* Copyright (C) 1999, 2001, 2004, 2009 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
@@ -25,29 +25,35 @@
    `-1' means it is never supported.  Undefined means it cannot be
    statically decided.
 
-   _POSIX_V6_ILP32_OFF32   32bit int, long, pointers, and off_t type
-   _POSIX_V6_ILP32_OFFBIG  32bit int, long, and pointers and larger off_t type
+   _POSIX_V7_ILP32_OFF32   32bit int, long, pointers, and off_t type
+   _POSIX_V7_ILP32_OFFBIG  32bit int, long, and pointers and larger off_t type
 
-   _POSIX_V6_LP64_OFF32	   64bit long and pointers and 32bit off_t type
-   _POSIX_V6_LPBIG_OFFBIG  64bit long and pointers and large off_t type
+   _POSIX_V7_LP64_OFF32	   64bit long and pointers and 32bit off_t type
+   _POSIX_V7_LPBIG_OFFBIG  64bit long and pointers and large off_t type
 
-   The macros _XBS5_ILP32_OFF32, _XBS5_ILP32_OFFBIG, _XBS5_LP64_OFF32, and
-   _XBS5_LPBIG_OFFBIG were used in previous versions of the Unix standard
-   and are available only for compatibility.
+   The macros _POSIX_V6_ILP32_OFF32, _POSIX_V6_ILP32_OFFBIG,
+   _POSIX_V6_LP64_OFF32, _POSIX_V6_LPBIG_OFFBIG, _XBS5_ILP32_OFF32,
+   _XBS5_ILP32_OFFBIG, _XBS5_LP64_OFF32, and _XBS5_LPBIG_OFFBIG were
+   used in previous versions of the Unix standard and are available
+   only for compatibility.
 */
 
 /* By default we have 32-bit wide `int', `long int', pointers and `off_t'
    and all platforms support LFS.  */
+#define _POSIX_V7_ILP32_OFF32	1
+#define _POSIX_V7_ILP32_OFFBIG	1
 #define _POSIX_V6_ILP32_OFF32	1
 #define _POSIX_V6_ILP32_OFFBIG	1
 #define _XBS5_ILP32_OFF32	1
 #define _XBS5_ILP32_OFFBIG	1
 
 /* We optionally provide an environment with the above size but an 64-bit
-   side `off_t'.  Therefore we don't define _XBS5_ILP32_OFFBIG.  */
+   side `off_t'.  Therefore we don't define _POSIX_V7_ILP32_OFFBIG.  */
 
 /* Environments with 64-bit wide pointers can be provided,
    so these macros aren't defined:
+   # undef _POSIX_V7_LP64_OFF64
+   # undef _POSIX_V7_LPBIG_OFFBIG
    # undef _POSIX_V6_LP64_OFF64
    # undef _POSIX_V6_LPBIG_OFFBIG
    # undef _XBS5_LP64_OFF64
diff --git a/sysdeps/unix/sysv/linux/powerpc/bits/environments.h b/sysdeps/unix/sysv/linux/powerpc/bits/environments.h
index a51a564cbb..c675ecc627 100644
--- a/sysdeps/unix/sysv/linux/powerpc/bits/environments.h
+++ b/sysdeps/unix/sysv/linux/powerpc/bits/environments.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 1999, 2001, 2004 Free Software Foundation, Inc.
+/* Copyright (C) 1999, 2001, 2004, 2009 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
@@ -27,21 +27,25 @@
    `-1' means it is never supported.  Undefined means it cannot be
    statically decided.
 
-   _POSIX_V6_ILP32_OFF32   32bit int, long, pointers, and off_t type
-   _POSIX_V6_ILP32_OFFBIG  32bit int, long, and pointers and larger off_t type
+   _POSIX_V7_ILP32_OFF32   32bit int, long, pointers, and off_t type
+   _POSIX_V7_ILP32_OFFBIG  32bit int, long, and pointers and larger off_t type
 
-   _POSIX_V6_LP64_OFF32	   64bit long and pointers and 32bit off_t type
-   _POSIX_V6_LPBIG_OFFBIG  64bit long and pointers and large off_t type
+   _POSIX_V7_LP64_OFF32	   64bit long and pointers and 32bit off_t type
+   _POSIX_V7_LPBIG_OFFBIG  64bit long and pointers and large off_t type
 
-   The macros _XBS5_ILP32_OFF32, _XBS5_ILP32_OFFBIG, _XBS5_LP64_OFF32, and
-   _XBS5_LPBIG_OFFBIG were used in previous versions of the Unix standard
-   and are available only for compatibility.
+   The macros _POSIX_V6_ILP32_OFF32, _POSIX_V6_ILP32_OFFBIG,
+   _POSIX_V6_LP64_OFF32, _POSIX_V6_LPBIG_OFFBIG, _XBS5_ILP32_OFF32,
+   _XBS5_ILP32_OFFBIG, _XBS5_LP64_OFF32, and _XBS5_LPBIG_OFFBIG were
+   used in previous versions of the Unix standard and are available
+   only for compatibility.
 */
 
 #if __WORDSIZE == 64
 
 /* Environments with 32-bit wide pointers are optionally provided.
    Therefore following macros aren't defined:
+   # undef _POSIX_V7_ILP32_OFF32
+   # undef _POSIX_V7_ILP32_OFFBIG
    # undef _POSIX_V6_ILP32_OFF32
    # undef _POSIX_V6_ILP32_OFFBIG
    # undef _XBS5_ILP32_OFF32
@@ -50,10 +54,12 @@
 
 /* We also have no use (for now) for an environment with bigger pointers
    and offsets.  */
+# define _POSIX_V7_LPBIG_OFFBIG	-1
 # define _POSIX_V6_LPBIG_OFFBIG	-1
 # define _XBS5_LPBIG_OFFBIG	-1
 
 /* By default we have 64-bit wide `long int', pointers and `off_t'.  */
+# define _POSIX_V7_LP64_OFF64	1
 # define _POSIX_V6_LP64_OFF64	1
 # define _XBS5_LP64_OFF64	1
 
@@ -61,16 +67,20 @@
 
 /* By default we have 32-bit wide `int', `long int', pointers and `off_t'
    and all platforms support LFS.  */
+# define _POSIX_V7_ILP32_OFF32	1
+# define _POSIX_V7_ILP32_OFFBIG	1
 # define _POSIX_V6_ILP32_OFF32	1
 # define _POSIX_V6_ILP32_OFFBIG	1
 # define _XBS5_ILP32_OFF32	1
 # define _XBS5_ILP32_OFFBIG	1
 
 /* We optionally provide an environment with the above size but an 64-bit
-   side `off_t'.  Therefore we don't define _XBS5_ILP32_OFFBIG.  */
+   side `off_t'.  Therefore we don't define _POSIX_V7_ILP32_OFFBIG.  */
 
 /* Environments with 64-bit wide pointers can be provided,
    so these macros aren't defined:
+   # undef _POSIX_V7_LP64_OFF64
+   # undef _POSIX_V7_LPBIG_OFFBIG
    # undef _POSIX_V6_LP64_OFF64
    # undef _POSIX_V6_LPBIG_OFFBIG
    # undef _XBS5_LP64_OFF64
diff --git a/sysdeps/unix/sysv/linux/s390/bits/environments.h b/sysdeps/unix/sysv/linux/s390/bits/environments.h
index 713d21c9a5..29628b2ed4 100644
--- a/sysdeps/unix/sysv/linux/s390/bits/environments.h
+++ b/sysdeps/unix/sysv/linux/s390/bits/environments.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 1999, 2001, 2004 Free Software Foundation, Inc.
+/* Copyright (C) 1999, 2001, 2004, 2009 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
@@ -27,21 +27,25 @@
    `-1' means it is never supported.  Undefined means it cannot be
    statically decided.
 
-   _POSIX_V6_ILP32_OFF32   32bit int, long, pointers, and off_t type
-   _POSIX_V6_ILP32_OFFBIG  32bit int, long, and pointers and larger off_t type
+   _POSIX_V7_ILP32_OFF32   32bit int, long, pointers, and off_t type
+   _POSIX_V7_ILP32_OFFBIG  32bit int, long, and pointers and larger off_t type
 
-   _POSIX_V6_LP64_OFF32	   64bit long and pointers and 32bit off_t type
-   _POSIX_V6_LPBIG_OFFBIG  64bit long and pointers and large off_t type
+   _POSIX_V7_LP64_OFF32	   64bit long and pointers and 32bit off_t type
+   _POSIX_V7_LPBIG_OFFBIG  64bit long and pointers and large off_t type
 
-   The macros _XBS5_ILP32_OFF32, _XBS5_ILP32_OFFBIG, _XBS5_LP64_OFF32, and
-   _XBS5_LPBIG_OFFBIG were used in previous versions of the Unix standard
-   and are available only for compatibility.
+   The macros _POSIX_V6_ILP32_OFF32, _POSIX_V6_ILP32_OFFBIG,
+   _POSIX_V6_LP64_OFF32, _POSIX_V6_LPBIG_OFFBIG, _XBS5_ILP32_OFF32,
+   _XBS5_ILP32_OFFBIG, _XBS5_LP64_OFF32, and _XBS5_LPBIG_OFFBIG were
+   used in previous versions of the Unix standard and are available
+   only for compatibility.
 */
 
 #if __WORDSIZE == 64
 
 /* Environments with 32-bit wide pointers are optionally provided.
    Therefore following macros aren't defined:
+   # undef _POSIX_V7_ILP32_OFF32
+   # undef _POSIX_V7_ILP32_OFFBIG
    # undef _POSIX_V6_ILP32_OFF32
    # undef _POSIX_V6_ILP32_OFFBIG
    # undef _XBS5_ILP32_OFF32
@@ -50,10 +54,12 @@
 
 /* We also have no use (for now) for an environment with bigger pointers
    and offsets.  */
+# define _POSIX_V7_LPBIG_OFFBIG	-1
 # define _POSIX_V6_LPBIG_OFFBIG	-1
 # define _XBS5_LPBIG_OFFBIG	-1
 
 /* By default we have 64-bit wide `long int', pointers and `off_t'.  */
+# define _POSIX_V7_LP64_OFF64	1
 # define _POSIX_V6_LP64_OFF64	1
 # define _XBS5_LP64_OFF64	1
 
@@ -61,16 +67,20 @@
 
 /* By default we have 32-bit wide `int', `long int', pointers and `off_t'
    and all platforms support LFS.  */
+# define _POSIX_V7_ILP32_OFF32	1
+# define _POSIX_V7_ILP32_OFFBIG	1
 # define _POSIX_V6_ILP32_OFF32	1
 # define _POSIX_V6_ILP32_OFFBIG	1
 # define _XBS5_ILP32_OFF32	1
 # define _XBS5_ILP32_OFFBIG	1
 
 /* We optionally provide an environment with the above size but an 64-bit
-   side `off_t'.  Therefore we don't define _XBS5_ILP32_OFFBIG.  */
+   side `off_t'.  Therefore we don't define _POSIX_V7_ILP32_OFFBIG.  */
 
 /* Environments with 64-bit wide pointers can be provided,
    so these macros aren't defined:
+   # undef _POSIX_V7_LP64_OFF64
+   # undef _POSIX_V7_LPBIG_OFFBIG
    # undef _POSIX_V6_LP64_OFF64
    # undef _POSIX_V6_LPBIG_OFFBIG
    # undef _XBS5_LP64_OFF64
diff --git a/sysdeps/unix/sysv/linux/sparc/bits/environments.h b/sysdeps/unix/sysv/linux/sparc/bits/environments.h
index a51a564cbb..c675ecc627 100644
--- a/sysdeps/unix/sysv/linux/sparc/bits/environments.h
+++ b/sysdeps/unix/sysv/linux/sparc/bits/environments.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 1999, 2001, 2004 Free Software Foundation, Inc.
+/* Copyright (C) 1999, 2001, 2004, 2009 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
@@ -27,21 +27,25 @@
    `-1' means it is never supported.  Undefined means it cannot be
    statically decided.
 
-   _POSIX_V6_ILP32_OFF32   32bit int, long, pointers, and off_t type
-   _POSIX_V6_ILP32_OFFBIG  32bit int, long, and pointers and larger off_t type
+   _POSIX_V7_ILP32_OFF32   32bit int, long, pointers, and off_t type
+   _POSIX_V7_ILP32_OFFBIG  32bit int, long, and pointers and larger off_t type
 
-   _POSIX_V6_LP64_OFF32	   64bit long and pointers and 32bit off_t type
-   _POSIX_V6_LPBIG_OFFBIG  64bit long and pointers and large off_t type
+   _POSIX_V7_LP64_OFF32	   64bit long and pointers and 32bit off_t type
+   _POSIX_V7_LPBIG_OFFBIG  64bit long and pointers and large off_t type
 
-   The macros _XBS5_ILP32_OFF32, _XBS5_ILP32_OFFBIG, _XBS5_LP64_OFF32, and
-   _XBS5_LPBIG_OFFBIG were used in previous versions of the Unix standard
-   and are available only for compatibility.
+   The macros _POSIX_V6_ILP32_OFF32, _POSIX_V6_ILP32_OFFBIG,
+   _POSIX_V6_LP64_OFF32, _POSIX_V6_LPBIG_OFFBIG, _XBS5_ILP32_OFF32,
+   _XBS5_ILP32_OFFBIG, _XBS5_LP64_OFF32, and _XBS5_LPBIG_OFFBIG were
+   used in previous versions of the Unix standard and are available
+   only for compatibility.
 */
 
 #if __WORDSIZE == 64
 
 /* Environments with 32-bit wide pointers are optionally provided.
    Therefore following macros aren't defined:
+   # undef _POSIX_V7_ILP32_OFF32
+   # undef _POSIX_V7_ILP32_OFFBIG
    # undef _POSIX_V6_ILP32_OFF32
    # undef _POSIX_V6_ILP32_OFFBIG
    # undef _XBS5_ILP32_OFF32
@@ -50,10 +54,12 @@
 
 /* We also have no use (for now) for an environment with bigger pointers
    and offsets.  */
+# define _POSIX_V7_LPBIG_OFFBIG	-1
 # define _POSIX_V6_LPBIG_OFFBIG	-1
 # define _XBS5_LPBIG_OFFBIG	-1
 
 /* By default we have 64-bit wide `long int', pointers and `off_t'.  */
+# define _POSIX_V7_LP64_OFF64	1
 # define _POSIX_V6_LP64_OFF64	1
 # define _XBS5_LP64_OFF64	1
 
@@ -61,16 +67,20 @@
 
 /* By default we have 32-bit wide `int', `long int', pointers and `off_t'
    and all platforms support LFS.  */
+# define _POSIX_V7_ILP32_OFF32	1
+# define _POSIX_V7_ILP32_OFFBIG	1
 # define _POSIX_V6_ILP32_OFF32	1
 # define _POSIX_V6_ILP32_OFFBIG	1
 # define _XBS5_ILP32_OFF32	1
 # define _XBS5_ILP32_OFFBIG	1
 
 /* We optionally provide an environment with the above size but an 64-bit
-   side `off_t'.  Therefore we don't define _XBS5_ILP32_OFFBIG.  */
+   side `off_t'.  Therefore we don't define _POSIX_V7_ILP32_OFFBIG.  */
 
 /* Environments with 64-bit wide pointers can be provided,
    so these macros aren't defined:
+   # undef _POSIX_V7_LP64_OFF64
+   # undef _POSIX_V7_LPBIG_OFFBIG
    # undef _POSIX_V6_LP64_OFF64
    # undef _POSIX_V6_LPBIG_OFFBIG
    # undef _XBS5_LP64_OFF64
diff --git a/sysdeps/unix/sysv/linux/x86_64/bits/environments.h b/sysdeps/unix/sysv/linux/x86_64/bits/environments.h
index a51a564cbb..c675ecc627 100644
--- a/sysdeps/unix/sysv/linux/x86_64/bits/environments.h
+++ b/sysdeps/unix/sysv/linux/x86_64/bits/environments.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 1999, 2001, 2004 Free Software Foundation, Inc.
+/* Copyright (C) 1999, 2001, 2004, 2009 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
@@ -27,21 +27,25 @@
    `-1' means it is never supported.  Undefined means it cannot be
    statically decided.
 
-   _POSIX_V6_ILP32_OFF32   32bit int, long, pointers, and off_t type
-   _POSIX_V6_ILP32_OFFBIG  32bit int, long, and pointers and larger off_t type
+   _POSIX_V7_ILP32_OFF32   32bit int, long, pointers, and off_t type
+   _POSIX_V7_ILP32_OFFBIG  32bit int, long, and pointers and larger off_t type
 
-   _POSIX_V6_LP64_OFF32	   64bit long and pointers and 32bit off_t type
-   _POSIX_V6_LPBIG_OFFBIG  64bit long and pointers and large off_t type
+   _POSIX_V7_LP64_OFF32	   64bit long and pointers and 32bit off_t type
+   _POSIX_V7_LPBIG_OFFBIG  64bit long and pointers and large off_t type
 
-   The macros _XBS5_ILP32_OFF32, _XBS5_ILP32_OFFBIG, _XBS5_LP64_OFF32, and
-   _XBS5_LPBIG_OFFBIG were used in previous versions of the Unix standard
-   and are available only for compatibility.
+   The macros _POSIX_V6_ILP32_OFF32, _POSIX_V6_ILP32_OFFBIG,
+   _POSIX_V6_LP64_OFF32, _POSIX_V6_LPBIG_OFFBIG, _XBS5_ILP32_OFF32,
+   _XBS5_ILP32_OFFBIG, _XBS5_LP64_OFF32, and _XBS5_LPBIG_OFFBIG were
+   used in previous versions of the Unix standard and are available
+   only for compatibility.
 */
 
 #if __WORDSIZE == 64
 
 /* Environments with 32-bit wide pointers are optionally provided.
    Therefore following macros aren't defined:
+   # undef _POSIX_V7_ILP32_OFF32
+   # undef _POSIX_V7_ILP32_OFFBIG
    # undef _POSIX_V6_ILP32_OFF32
    # undef _POSIX_V6_ILP32_OFFBIG
    # undef _XBS5_ILP32_OFF32
@@ -50,10 +54,12 @@
 
 /* We also have no use (for now) for an environment with bigger pointers
    and offsets.  */
+# define _POSIX_V7_LPBIG_OFFBIG	-1
 # define _POSIX_V6_LPBIG_OFFBIG	-1
 # define _XBS5_LPBIG_OFFBIG	-1
 
 /* By default we have 64-bit wide `long int', pointers and `off_t'.  */
+# define _POSIX_V7_LP64_OFF64	1
 # define _POSIX_V6_LP64_OFF64	1
 # define _XBS5_LP64_OFF64	1
 
@@ -61,16 +67,20 @@
 
 /* By default we have 32-bit wide `int', `long int', pointers and `off_t'
    and all platforms support LFS.  */
+# define _POSIX_V7_ILP32_OFF32	1
+# define _POSIX_V7_ILP32_OFFBIG	1
 # define _POSIX_V6_ILP32_OFF32	1
 # define _POSIX_V6_ILP32_OFFBIG	1
 # define _XBS5_ILP32_OFF32	1
 # define _XBS5_ILP32_OFFBIG	1
 
 /* We optionally provide an environment with the above size but an 64-bit
-   side `off_t'.  Therefore we don't define _XBS5_ILP32_OFFBIG.  */
+   side `off_t'.  Therefore we don't define _POSIX_V7_ILP32_OFFBIG.  */
 
 /* Environments with 64-bit wide pointers can be provided,
    so these macros aren't defined:
+   # undef _POSIX_V7_LP64_OFF64
+   # undef _POSIX_V7_LPBIG_OFFBIG
    # undef _POSIX_V6_LP64_OFF64
    # undef _POSIX_V6_LPBIG_OFFBIG
    # undef _XBS5_LP64_OFF64