浏览代码

merge some misc stuff from glibc

Mike Frysinger 19 年之前
父节点
当前提交
32f94b6380
共有 1 个文件被更改,包括 36 次插入18 次删除
  1. 36 18
      include/features.h

+ 36 - 18
include/features.h

@@ -1,4 +1,4 @@
-/* Copyright (C) 1991,92,93,95,96,97,98,99,2000,2001 Free Software Foundation, Inc.
+/* Copyright (C) 1991-1993,1995-2003,2004,2005 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    This file is part of the GNU C Library.
 
 
    The GNU C Library is free software; you can redistribute it and/or
    The GNU C Library is free software; you can redistribute it and/or
@@ -31,7 +31,8 @@
    _POSIX_SOURCE	IEEE Std 1003.1.
    _POSIX_SOURCE	IEEE Std 1003.1.
    _POSIX_C_SOURCE	If ==1, like _POSIX_SOURCE; if >=2 add IEEE Std 1003.2;
    _POSIX_C_SOURCE	If ==1, like _POSIX_SOURCE; if >=2 add IEEE Std 1003.2;
 			if >=199309L, add IEEE Std 1003.1b-1993;
 			if >=199309L, add IEEE Std 1003.1b-1993;
-			if >=199506L, add IEEE Std 1003.1c-1995
+			if >=199506L, add IEEE Std 1003.1c-1995;
+			if >=200112L, all of IEEE 1003.1-2004
    _XOPEN_SOURCE	Includes POSIX and XPG things.  Set to 500 if
    _XOPEN_SOURCE	Includes POSIX and XPG things.  Set to 500 if
 			Single Unix conformance is wanted, to 600 for the
 			Single Unix conformance is wanted, to 600 for the
 			upcoming sixth revision.
 			upcoming sixth revision.
@@ -44,6 +45,8 @@
    _GNU_SOURCE		All of the above, plus GNU extensions.
    _GNU_SOURCE		All of the above, plus GNU extensions.
    _REENTRANT		Select additionally reentrant object.
    _REENTRANT		Select additionally reentrant object.
    _THREAD_SAFE		Same as _REENTRANT, often used by other systems.
    _THREAD_SAFE		Same as _REENTRANT, often used by other systems.
+   _FORTIFY_SOURCE	If set to numeric value > 0 additional security
+			measures are defined, according to level.
 
 
    The `-ansi' switch to the GNU C compiler defines __STRICT_ANSI__.
    The `-ansi' switch to the GNU C compiler defines __STRICT_ANSI__.
    If none of these are defined, the default is to have _SVID_SOURCE,
    If none of these are defined, the default is to have _SVID_SOURCE,
@@ -72,6 +75,7 @@
    __USE_MISC		Define things common to BSD and System V Unix.
    __USE_MISC		Define things common to BSD and System V Unix.
    __USE_GNU		Define GNU extensions.
    __USE_GNU		Define GNU extensions.
    __USE_REENTRANT	Define reentrant/thread-safe *_r functions.
    __USE_REENTRANT	Define reentrant/thread-safe *_r functions.
+   __USE_FORTIFY_LEVEL	Additional security measures used, according to level.
    __FAVOR_BSD		Favor 4.3BSD things in cases of conflict.
    __FAVOR_BSD		Favor 4.3BSD things in cases of conflict.
 
 
    The macros `__GNU_LIBRARY__', `__GLIBC__', and `__GLIBC_MINOR__' are
    The macros `__GNU_LIBRARY__', `__GLIBC__', and `__GLIBC_MINOR__' are
@@ -85,6 +89,7 @@
    but are implied by the other feature-test macros defined (or by the
    but are implied by the other feature-test macros defined (or by the
    lack of any definitions) are defined by the file.  */
    lack of any definitions) are defined by the file.  */
 
 
+
 /* Undefine everything, so we get a clean slate.  */
 /* Undefine everything, so we get a clean slate.  */
 #undef	__USE_ISOC99
 #undef	__USE_ISOC99
 #undef	__USE_POSIX
 #undef	__USE_POSIX
@@ -103,6 +108,7 @@
 #undef	__USE_MISC
 #undef	__USE_MISC
 #undef	__USE_GNU
 #undef	__USE_GNU
 #undef	__USE_REENTRANT
 #undef	__USE_REENTRANT
+#undef	__USE_FORTIFY_LEVEL
 #undef	__FAVOR_BSD
 #undef	__FAVOR_BSD
 #undef	__KERNEL_STRICT_NAMES
 #undef	__KERNEL_STRICT_NAMES
 
 
@@ -115,6 +121,20 @@
 /* Always use ISO C things.  */
 /* Always use ISO C things.  */
 #define	__USE_ANSI	1
 #define	__USE_ANSI	1
 
 
+/* Convenience macros to test the versions of glibc and gcc.
+   Use them like this:
+   #if __GNUC_PREREQ (2,8)
+   ... code requiring gcc 2.8 or later ...
+   #endif
+   Note - they won't work for gcc1 or glibc1, since the _MINOR macros
+   were not defined then.  */
+#if defined __GNUC__ && defined __GNUC_MINOR__
+# define __GNUC_PREREQ(maj, min) \
+	((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min))
+#else
+# define __GNUC_PREREQ(maj, min) 0
+#endif
+
 
 
 /* If _BSD_SOURCE was defined by the user, favor BSD over POSIX.  */
 /* If _BSD_SOURCE was defined by the user, favor BSD over POSIX.  */
 #if defined _BSD_SOURCE && \
 #if defined _BSD_SOURCE && \
@@ -165,8 +185,8 @@
 
 
 /* If none of the ANSI/POSIX macros are defined, use POSIX.1 and POSIX.2
 /* If none of the ANSI/POSIX macros are defined, use POSIX.1 and POSIX.2
    (and IEEE Std 1003.1b-1993 unless _XOPEN_SOURCE is defined).  */
    (and IEEE Std 1003.1b-1993 unless _XOPEN_SOURCE is defined).  */
-#if (!defined __STRICT_ANSI__ && !defined _POSIX_SOURCE && \
+#if ((!defined __STRICT_ANSI__ || (_XOPEN_SOURCE - 0) >= 500) && \
-     !defined _POSIX_C_SOURCE)
+     !defined _POSIX_SOURCE && !defined _POSIX_C_SOURCE)
 # define _POSIX_SOURCE	1
 # define _POSIX_SOURCE	1
 # if defined _XOPEN_SOURCE && (_XOPEN_SOURCE - 0) < 500
 # if defined _XOPEN_SOURCE && (_XOPEN_SOURCE - 0) < 500
 #  define _POSIX_C_SOURCE	2
 #  define _POSIX_C_SOURCE	2
@@ -191,6 +211,10 @@
 # define __USE_POSIX199506	1
 # define __USE_POSIX199506	1
 #endif
 #endif
 
 
+#if (_POSIX_C_SOURCE - 0) >= 200112L
+# define __USE_XOPEN2K		1
+#endif
+
 #ifdef	_XOPEN_SOURCE
 #ifdef	_XOPEN_SOURCE
 # define __USE_XOPEN	1
 # define __USE_XOPEN	1
 # if (_XOPEN_SOURCE - 0) >= 500
 # if (_XOPEN_SOURCE - 0) >= 500
@@ -242,6 +266,14 @@
 # define __USE_REENTRANT	1
 # define __USE_REENTRANT	1
 #endif
 #endif
 
 
+#if _FORTIFY_SOURCE > 0 && __GNUC_PREREQ (4, 1) && __OPTIMIZE__ > 0
+# if _FORTIFY_SOURCE == 1
+#  define __USE_FORTIFY_LEVEL 1
+# elif _FORTIFY_SOURCE > 1
+#  define __USE_FORTIFY_LEVEL 2
+# endif
+#endif
+
 /* We do support the IEC 559 math functionality, real and complex.  */
 /* We do support the IEC 559 math functionality, real and complex.  */
 #define __STDC_IEC_559__		1
 #define __STDC_IEC_559__		1
 #define __STDC_IEC_559_COMPLEX__	1
 #define __STDC_IEC_559_COMPLEX__	1
@@ -280,20 +312,6 @@
 #   define __GLIBC_MINOR__ 2
 #   define __GLIBC_MINOR__ 2
 #endif
 #endif
 
 
-/* Convenience macros to test the versions of glibc and gcc.
-   Use them like this:
-   #if __GNUC_PREREQ (2,8)
-   ... code requiring gcc 2.8 or later ...
-   #endif
-   Note - they won't work for gcc1 or glibc1, since the _MINOR macros
-   were not defined then.  */
-#if defined __GNUC__ && defined __GNUC_MINOR__
-# define __GNUC_PREREQ(maj, min) \
-	((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min))
-#else
-# define __GNUC_PREREQ(maj, min) 0
-#endif
-
 #define __GLIBC_PREREQ(maj, min) \
 #define __GLIBC_PREREQ(maj, min) \
 	((__GLIBC__ << 16) + __GLIBC_MINOR__ >= ((maj) << 16) + (min))
 	((__GLIBC__ << 16) + __GLIBC_MINOR__ >= ((maj) << 16) + (min))