Make _REENTRANT and _THREAD_SAFE aliases for _POSIX_C_SOURCE=199506L.

For many years, the only effect of these macros has been to make
unistd.h declare getlogin_r.  _POSIX_C_SOURCE >= 199506L also causes
this function to be declared.  However, people who don't carefully
read all the headers might be confused into thinking they need to
define _REENTRANT for any threaded code (as was indeed the case a long
time ago).

Therefore, remove __USE_REENTRANT, and make _REENTRANT and _THREAD_SAFE
into synonyms for _POSIX_C_SOURCE=199506L.  This will only affect
programs that don't select a higher conformance level some other way.
For instance, -std=c89 -D_REENTRANT will see a change in visible
declarations, but -std=c99 -D_POSIX_C_SOURCE=200809L -D_REENTRANT won't,
and -D_REENTRANT all by itself also won't, because _DEFAULT_SOURCE
implies _POSIX_C_SOURCE > 199506.

	* include/features.h: Remove __USE_REENTRANT.  Treat _REENTRANT
	and _THREAD_SAFE the same as _POSIX_C_SOURCE=199506L, if a higher
	POSIX conformance level has not been selected by other macros.
	* NEWS, manual/creature.texi: Document this change.

	* posix/unistd.h, posix/bits/unistd.h: Don't check __USE_REENTRANT.
	* include/libc-symbols.h: Don't define _REENTRANT.
	* scripts/check-installed-headers.sh: Don't undefine _REENTRANT.
This commit is contained in:
Zack Weinberg 2016-12-06 10:14:42 -05:00
parent 3d6bfcace1
commit c03073774f
7 changed files with 46 additions and 27 deletions

13
NEWS
View File

@ -22,6 +22,19 @@ Version 2.25
from that TS. Note that most features from that TS are not supported by from that TS. Note that most features from that TS are not supported by
the GNU C Library. the GNU C Library.
* The nonstandard feature selection macros _REENTRANT and _THREAD_SAFE are
now treated as compatibility synonyms for _POSIX_C_SOURCE=199506L.
Since the GNU C Library defaults to a much newer revision of POSIX, this
will only affect programs that specifically request an old conformance
mode. For instance, a program compiled with -std=c89 -D_REENTRANT will
see a change in the visible declarations, but a program compiled with
just -D_REENTRANT, or -std=c99 -D_POSIX_C_SOURCE=200809L -D_REENTRANT,
will not.
Some C libraries once required _REENTRANT and/or _THREAD_SAFE to be
defined by all multithreaded code, but glibc has not required this for
many years.
* The inclusion of <sys/sysmacros.h> by <sys/types.h> is deprecated. This * The inclusion of <sys/sysmacros.h> by <sys/types.h> is deprecated. This
means that in a future release, the macros “major”, “minor”, and “makedev” means that in a future release, the macros “major”, “minor”, and “makedev”
will only be available from <sys/sysmacros.h>. will only be available from <sys/sysmacros.h>.

View File

@ -24,10 +24,13 @@
__STRICT_ANSI__ ISO Standard C. __STRICT_ANSI__ ISO Standard C.
_ISOC99_SOURCE Extensions to ISO C89 from ISO C99. _ISOC99_SOURCE Extensions to ISO C89 from ISO C99.
_ISOC11_SOURCE Extensions to ISO C99 from ISO C11. _ISOC11_SOURCE Extensions to ISO C99 from ISO C11.
__STDC_WANT_LIB_EXT2__ Extensions to ISO C99 from TR 27431-2:2010. __STDC_WANT_LIB_EXT2__
__STDC_WANT_IEC_60559_BFP_EXT__ Extensions to ISO C11 from TS 18661-1:2014. Extensions to ISO C99 from TR 27431-2:2010.
__STDC_WANT_IEC_60559_FUNCS_EXT__ Extensions to ISO C11 from __STDC_WANT_IEC_60559_BFP_EXT__
TS 18661-4:2015. Extensions to ISO C11 from TS 18661-1:2014.
__STDC_WANT_IEC_60559_FUNCS_EXT__
Extensions to ISO C11 from TS 18661-4:2015.
_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;
@ -45,10 +48,12 @@
_GNU_SOURCE All of the above, plus GNU extensions. _GNU_SOURCE All of the above, plus GNU extensions.
_DEFAULT_SOURCE The default set of features (taking precedence over _DEFAULT_SOURCE The default set of features (taking precedence over
__STRICT_ANSI__). __STRICT_ANSI__).
_REENTRANT Select additionally reentrant object.
_THREAD_SAFE Same as _REENTRANT, often used by other systems. _FORTIFY_SOURCE Add security hardening to many library functions.
_FORTIFY_SOURCE If set to numeric value > 0 additional security Set to 1 or 2; 2 performs stricter checks than 1.
measures are defined, according to level.
_REENTRANT, _THREAD_SAFE
Obsolete; equivalent to _POSIX_C_SOURCE=199506L.
The `-ansi' switch to the GNU C compiler, and standards conformance The `-ansi' switch to the GNU C compiler, and standards conformance
options such as `-std=c99', define __STRICT_ANSI__. If none of options such as `-std=c99', define __STRICT_ANSI__. If none of
@ -86,7 +91,6 @@
__USE_MISC Define things from 4.3BSD or System V Unix. __USE_MISC Define things from 4.3BSD or System V Unix.
__USE_ATFILE Define *at interfaces and AT_* constants for them. __USE_ATFILE Define *at interfaces and AT_* constants for them.
__USE_GNU Define GNU extensions. __USE_GNU Define GNU extensions.
__USE_REENTRANT Define reentrant/thread-safe *_r functions.
__USE_FORTIFY_LEVEL Additional security measures used, according to level. __USE_FORTIFY_LEVEL Additional security measures used, according to level.
The macros `__GNU_LIBRARY__', `__GLIBC__', and `__GLIBC_MINOR__' are The macros `__GNU_LIBRARY__', `__GLIBC__', and `__GLIBC_MINOR__' are
@ -130,7 +134,6 @@
#undef __USE_MISC #undef __USE_MISC
#undef __USE_ATFILE #undef __USE_ATFILE
#undef __USE_GNU #undef __USE_GNU
#undef __USE_REENTRANT
#undef __USE_FORTIFY_LEVEL #undef __USE_FORTIFY_LEVEL
#undef __KERNEL_STRICT_NAMES #undef __KERNEL_STRICT_NAMES
@ -253,6 +256,7 @@
# undef _POSIX_C_SOURCE # undef _POSIX_C_SOURCE
# define _POSIX_C_SOURCE 200809L # define _POSIX_C_SOURCE 200809L
#endif #endif
#if ((!defined __STRICT_ANSI__ \ #if ((!defined __STRICT_ANSI__ \
|| (defined _XOPEN_SOURCE && (_XOPEN_SOURCE - 0) >= 500)) \ || (defined _XOPEN_SOURCE && (_XOPEN_SOURCE - 0) >= 500)) \
&& !defined _POSIX_SOURCE && !defined _POSIX_C_SOURCE) && !defined _POSIX_SOURCE && !defined _POSIX_C_SOURCE)
@ -269,6 +273,19 @@
# define __USE_POSIX_IMPLICITLY 1 # define __USE_POSIX_IMPLICITLY 1
#endif #endif
/* Some C libraries once required _REENTRANT and/or _THREAD_SAFE to be
defined in all multithreaded code. GNU libc has not required this
for many years. We now treat them as compatibility synonyms for
_POSIX_C_SOURCE=199506L, which is the earliest level of POSIX with
comprehensive support for multithreaded code. Using them never
lowers the selected level of POSIX conformance, only raises it. */
#if ((!defined _POSIX_C_SOURCE || (_POSIX_C_SOURCE - 0) < 199506L) \
&& (defined _REENTRANT || defined _THREAD_SAFE))
# define _POSIX_SOURCE 1
# undef _POSIX_C_SOURCE
# define _POSIX_C_SOURCE 199506L
#endif
#if (defined _POSIX_SOURCE \ #if (defined _POSIX_SOURCE \
|| (defined _POSIX_C_SOURCE && _POSIX_C_SOURCE >= 1) \ || (defined _POSIX_C_SOURCE && _POSIX_C_SOURCE >= 1) \
|| defined _XOPEN_SOURCE) || defined _XOPEN_SOURCE)
@ -351,10 +368,6 @@
# define __USE_GNU 1 # define __USE_GNU 1
#endif #endif
#if defined _REENTRANT || defined _THREAD_SAFE
# define __USE_REENTRANT 1
#endif
#if defined _FORTIFY_SOURCE && _FORTIFY_SOURCE > 0 #if defined _FORTIFY_SOURCE && _FORTIFY_SOURCE > 0
# if !defined __OPTIMIZE__ || __OPTIMIZE__ <= 0 # if !defined __OPTIMIZE__ || __OPTIMIZE__ <= 0
# warning _FORTIFY_SOURCE requires compiling with optimization (-O) # warning _FORTIFY_SOURCE requires compiling with optimization (-O)

View File

@ -52,8 +52,6 @@
/* Enable declarations of GNU extensions, since we are compiling them. */ /* Enable declarations of GNU extensions, since we are compiling them. */
#define _GNU_SOURCE 1 #define _GNU_SOURCE 1
/* And we also need the data for the reentrant functions. */
#define _REENTRANT 1
#include <config.h> #include <config.h>

View File

@ -219,15 +219,11 @@ cause them to be disabled.
@comment GNU @comment GNU
@defvr Macro _REENTRANT @defvr Macro _REENTRANT
@defvrx Macro _THREAD_SAFE @defvrx Macro _THREAD_SAFE
If you define one of these macros, reentrant versions of several functions get These macros are obsolete. They have the same effect as defining
declared. Some of the functions are specified in POSIX.1c but many others @code{_POSIX_C_SOURCE} with the value @code{199506L}.
are only available on a few other systems or are unique to @theglibc{}.
The problem is the delay in the standardization of the thread safe C library
interface.
Unlike on some other systems, no special version of the C library must be Some very old C libraries required one of these macros to be defined
used for linking. There is only one version but while compiling this for basic functionality (e.g.@: @code{getchar}) to be thread-safe.
it must have been specified to compile as thread safe.
@end defvr @end defvr
We recommend you use @code{_GNU_SOURCE} in new programs. If you don't We recommend you use @code{_GNU_SOURCE} in new programs. If you don't

View File

@ -302,7 +302,7 @@ __NTH (ttyname_r (int __fd, char *__buf, size_t __buflen))
} }
#if defined __USE_REENTRANT || defined __USE_POSIX199506 #ifdef __USE_POSIX199506
extern int __getlogin_r_chk (char *__buf, size_t __buflen, size_t __nreal) extern int __getlogin_r_chk (char *__buf, size_t __buflen, size_t __nreal)
__nonnull ((1)); __nonnull ((1));
extern int __REDIRECT (__getlogin_r_alias, (char *__buf, size_t __buflen), extern int __REDIRECT (__getlogin_r_alias, (char *__buf, size_t __buflen),

View File

@ -849,7 +849,7 @@ extern int tcsetpgrp (int __fd, __pid_t __pgrp_id) __THROW;
This function is a possible cancellation point and therefore not This function is a possible cancellation point and therefore not
marked with __THROW. */ marked with __THROW. */
extern char *getlogin (void); extern char *getlogin (void);
#if defined __USE_REENTRANT || defined __USE_POSIX199506 #ifdef __USE_POSIX199506
/* Return at most NAME_LEN characters of the login name of the user in NAME. /* Return at most NAME_LEN characters of the login name of the user in NAME.
If it cannot be determined or some other error occurred, return the error If it cannot be determined or some other error occurred, return the error
code. Otherwise return 0. code. Otherwise return 0.

View File

@ -143,7 +143,6 @@ EOF
inappropriate for this test. */ inappropriate for this test. */
#undef _LIBC #undef _LIBC
#undef _GNU_SOURCE #undef _GNU_SOURCE
#undef _REENTRANT
/* The library mode is selected here rather than on the command line to /* The library mode is selected here rather than on the command line to
ensure that this selection wins. */ ensure that this selection wins. */
$expanded_lib_mode $expanded_lib_mode