aboutsummaryrefslogtreecommitdiff
path: root/manual/creature.texi
AgeCommit message (Collapse)AuthorFilesLines
2024-11-04Add feature test macro _ISOC2Y_SOURCELenard Mollenkopf1-0/+7
This patch starts preparation for C2Y support in glibc headers by adding a feature test macro _ISOC2Y_SOURCE and corresponding __GLIBC_USE (ISOC2Y). (I mostly copied the work of Joseph Myers for C2X). As with other such macros, C2Y features are also enabled by compiling for a standard newer than C23, or by using _GNU_SOURCE. This patch does not itself enable anything new in the headers for C2Y; that is to be done in followup patches. (For example an implementation of WG14 N3349.) Once C2Y becomes an actual standard we'll presumably move to using the actual year in the feature test macro and __GLIBC_USE, with some period when both macro spellings are accepted, as was done with _ISOC2X_SOURCE. Tested for x86_64. Signed-off-by: Lenard Mollenkopf <glibc@lenardmollenkopf.de>
2024-04-02Always define __USE_TIME_BITS64 when 64 bit time_t is usedAdhemerval Zanella1-0/+6
It was raised on libc-help [1] that some Linux kernel interfaces expect the libc to define __USE_TIME_BITS64 to indicate the time_t size for the kABI. Different than defined by the initial y2038 design document [2], the __USE_TIME_BITS64 is only defined for ABIs that support more than one time_t size (by defining the _TIME_BITS for each module). The 64 bit time_t redirects are now enabled using a different internal define (__USE_TIME64_REDIRECTS). There is no expected change in semantic or code generation. Checked on x86_64-linux-gnu, i686-linux-gnu, aarch64-linux-gnu, and arm-linux-gnueabi [1] https://sourceware.org/pipermail/libc-help/2024-January/006557.html [2] https://sourceware.org/glibc/wiki/Y2038ProofnessDesign Reviewed-by: DJ Delorie <dj@redhat.com>
2024-02-01Refer to C23 in place of C2X in glibcJoseph Myers1-5/+5
WG14 decided to use the name C23 as the informal name of the next revision of the C standard (notwithstanding the publication date in 2024). Update references to C2X in glibc to use the C23 name. This is intended to update everything *except* where it involves renaming files (the changes involving renaming tests are intended to be done separately). In the case of the _ISOC2X_SOURCE feature test macro - the only user-visible interface involved - support for that macro is kept for backwards compatibility, while adding _ISOC23_SOURCE. Tested for x86_64.
2023-04-08manual: fix texinfo typoPaul Eggert1-2/+1
* manual/creature.texi (Feature Test Macros): Fix “creature.texi:309: warning: `.' or `,' must follow @xref, not f”.
2023-01-10Add _FORTIFY_SOURCE implementation documentation [BZ #28998]Siddhesh Poyarekar1-0/+2
There have been multiple requests to provide more detail on how the _FORTIFY_SOURCE macro works, so this patch adds a new node in the Library Maintenance section that does this. A lot of the description is implementation detail, which is why I put this in the appendix and not in the main documentation. Resolves: BZ #28998. Signed-off-by: Siddhesh Poyarekar <siddhesh@sourceware.org> Reviewed-by: Florian Weimer <fweimer@redhat.com>
2022-01-12manual: Drop obsolete @refillSiddhesh Poyarekar1-1/+1
The @refill command has been obsolete for a while and now texinfo has started warning about it. Reviewed-by: Florian Weimer <fweimer@redhat.com> Signed-off-by: Siddhesh Poyarekar <siddhesh@sourceware.org>
2021-10-18manual: Update _TIME_BITS to clarify it's user definedStafford Horne1-2/+2
The current language reads "This macro determines...", changing to "Define this macro...". This is consistent with other feature macro documentation language. When I first read the previous language it seems to indicate that the macro is already defined. By changing the language to "Define this macro..." it's clear that its the user's responsibility to define it.
2021-07-09Define PTHREAD_STACK_MIN to sysconf(_SC_THREAD_STACK_MIN)H.J. Lu1-2/+2
The constant PTHREAD_STACK_MIN may be too small for some processors. Rename _SC_SIGSTKSZ_SOURCE to _DYNAMIC_STACK_SIZE_SOURCE. When _DYNAMIC_STACK_SIZE_SOURCE or _GNU_SOURCE are defined, define PTHREAD_STACK_MIN to sysconf(_SC_THREAD_STACK_MIN) which is changed to MIN (PTHREAD_STACK_MIN, sysconf(_SC_MINSIGSTKSZ)). Consolidate <bits/local_lim.h> with <bits/pthread_stack_min.h> to provide a constant target specific PTHREAD_STACK_MIN value. Reviewed-by: Carlos O'Donell <carlos@redhat.com>
2021-06-23doc: _TIME_BITS defaults may changePaul Eggert1-29/+28
* NEWS: Don't imply the default will always be 32-bit. * manual/creature.texi (Feature Test Macros): Say that _TIME_BITS and _FILE_OFFSET_BITS defaults may change in future releases.
2021-06-15y2038: Add support for 64-bit time on legacy ABIsAdhemerval Zanella1-0/+44
A new build flag, _TIME_BITS, enables the usage of the newer 64-bit time symbols for legacy ABI (where 32-bit time_t is default). The 64 bit time support is only enabled if LFS (_FILE_OFFSET_BITS=64) is also used. Different than LFS support, the y2038 symbols are added only for the required ABIs (armhf, csky, hppa, i386, m68k, microblaze, mips32, mips64-n32, nios2, powerpc32, sparc32, s390-32, and sh). The ABIs with 64-bit time support are unchanged, both for symbol and types redirection. On Linux the full 64-bit time support requires a minimum of kernel version v5.1. Otherwise, the 32-bit fallbacks are used and might results in error with overflow return code (EOVERFLOW). The i686-gnu does not yet support 64-bit time. This patch exports following rediretions to support 64-bit time: * libc: adjtime adjtimex clock_adjtime clock_getres clock_gettime clock_nanosleep clock_settime cnd_timedwait ctime ctime_r difftime fstat fstatat futimens futimes futimesat getitimer getrusage gettimeofday gmtime gmtime_r localtime localtime_r lstat_time lutimes mktime msgctl mtx_timedlock nanosleep nanosleep ntp_gettime ntp_gettimex ppoll pselec pselect pthread_clockjoin_np pthread_cond_clockwait pthread_cond_timedwait pthread_mutex_clocklock pthread_mutex_timedlock pthread_rwlock_clockrdlock pthread_rwlock_clockwrlock pthread_rwlock_timedrdlock pthread_rwlock_timedwrlock pthread_timedjoin_np recvmmsg sched_rr_get_interval select sem_clockwait semctl semtimedop sem_timedwait setitimer settimeofday shmctl sigtimedwait stat thrd_sleep time timegm timerfd_gettime timerfd_settime timespec_get utime utimensat utimes utimes wait3 wait4 * librt: aio_suspend mq_timedreceive mq_timedsend timer_gettime timer_settime * libanl: gai_suspend Reviewed-by: Lukasz Majewski <lukma@denx.de> Reviewed-by: Carlos O'Donell <carlos@redhat.com> Tested-by: Carlos O'Donell <carlos@redhat.com>
2021-06-01Update floating-point feature test macro handling for C2XJoseph Myers1-0/+7
ISO C2X has made some changes to the handling of feature test macros related to features from the floating-point TSes, and to exactly what such features are present in what headers, that require corresponding changes in glibc. * For the few features that were controlled by __STDC_WANT_IEC_60559_BFP_EXT__ (and the corresponding DFP macro) in C2X, there is now instead a new feature test macro __STDC_WANT_IEC_60559_EXT__ covering both binary and decimal FP. This controls CR_DECIMAL_DIG in <float.h> (provided by GCC; I implemented support for the new feature test macro for GCC 11) and the totalorder and payload functions in <math.h>. C2X no longer says anything about __STDC_WANT_IEC_60559_BFP_EXT__ (so it's appropriate for that macro to continue to enable exactly the features from TS 18661-1). * The SNAN macros for each floating-point type have moved to <float.h> (and been renamed in the process). Thus, the copies in <math.h> should only be defined for __STDC_WANT_IEC_60559_BFP_EXT__, not for C2X. * The fmaxmag and fminmag functions have been removed (replaced by new functions for the new min/max operations in IEEE 754-2019). Thus those should also only be declared for __STDC_WANT_IEC_60559_BFP_EXT__. * The _FloatN / _FloatNx handling for the last two points in glibc is trickier, since __STDC_WANT_IEC_60559_TYPES_EXT__ is still in C2X (the integration of TS 18661-3 as an Annex, that is, which hasn't yet been merged into the C standard git repository but has been accepted by WG14), so C2X with that macro should not declare some things that are declared for older standards with that macro. The approach taken here is to provide the declarations (when __STDC_WANT_IEC_60559_TYPES_EXT__ is enabled) only when (defined __USE_GNU || !__GLIBC_USE (ISOC2X)), so if C2X features are enabled then those declarations (that are only in TS 18661-3 and not in C2X) will only be provided if _GNU_SOURCE is defined as well. Thus _GNU_SOURCE remains a superset of the TS features as well as of C2X. Some other somewhat related changes in C2X are not addressed here. There's an open proposal not to include the fmin and fmax functions for the _FloatN / _FloatNx types, given the new min/max operations, which could be handled like the previous point if adopted. And the fromfp functions have been changed to return a result in floating type rather than intmax_t / uintmax_t; my inclination there is to treat that like that change of totalorder type (new symbol versions etc. for the ABI change; old versions become compat symbols and are no longer supported as an API). Tested for x86_64 and x86.
2021-02-01sysconf: Add _SC_MINSIGSTKSZ/_SC_SIGSTKSZ [BZ #20305]H.J. Lu1-0/+6
Add _SC_MINSIGSTKSZ for the minimum signal stack size derived from AT_MINSIGSTKSZ, which is the minimum number of bytes of free stack space required in order to gurantee successful, non-nested handling of a single signal whose handler is an empty function, and _SC_SIGSTKSZ which is the suggested minimum number of bytes of stack space required for a signal stack. If AT_MINSIGSTKSZ isn't available, sysconf (_SC_MINSIGSTKSZ) returns MINSIGSTKSZ. On Linux/x86 with XSAVE, the signal frame used by kernel is composed of the following areas and laid out as: ------------------------------ | alignment padding | ------------------------------ | xsave buffer | ------------------------------ | fsave header (32-bit only) | ------------------------------ | siginfo + ucontext | ------------------------------ Compute AT_MINSIGSTKSZ value as size of xsave buffer + size of fsave header (32-bit only) + size of siginfo and ucontext + alignment padding. If _SC_SIGSTKSZ_SOURCE or _GNU_SOURCE are defined, MINSIGSTKSZ and SIGSTKSZ are redefined as /* Default stack size for a signal handler: sysconf (SC_SIGSTKSZ). */ # undef SIGSTKSZ # define SIGSTKSZ sysconf (_SC_SIGSTKSZ) /* Minimum stack size for a signal handler: SIGSTKSZ. */ # undef MINSIGSTKSZ # define MINSIGSTKSZ SIGSTKSZ Compilation will fail if the source assumes constant MINSIGSTKSZ or SIGSTKSZ. The reason for not simply increasing the kernel's MINSIGSTKSZ #define (apart from the fact that it is rarely used, due to glibc's shadowing definitions) was that userspace binaries will have baked in the old value of the constant and may be making assumptions about it. For example, the type (char [MINSIGSTKSZ]) changes if this #define changes. This could be a problem if an newly built library tries to memcpy() or dump such an object defined by and old binary. Bounds-checking and the stack sizes passed to things like sigaltstack() and makecontext() could similarly go wrong.
2020-12-31Introduce _FORTIFY_SOURCE=3Siddhesh Poyarekar1-1/+2
Introduce a new _FORTIFY_SOURCE level of 3 to enable additional fortifications that may have a noticeable performance impact, allowing more fortification coverage at the cost of some performance. With llvm 9.0 or later, this will replace the use of __builtin_object_size with __builtin_dynamic_object_size. __builtin_dynamic_object_size ----------------------------- __builtin_dynamic_object_size is an LLVM builtin that is similar to __builtin_object_size. In addition to what __builtin_object_size does, i.e. replace the builtin call with a constant object size, __builtin_dynamic_object_size will replace the call site with an expression that evaluates to the object size, thus expanding its applicability. In practice, __builtin_dynamic_object_size evaluates these expressions through malloc/calloc calls that it can associate with the object being evaluated. A simple motivating example is below; -D_FORTIFY_SOURCE=2 would miss this and emit memcpy, but -D_FORTIFY_SOURCE=3 with the help of __builtin_dynamic_object_size is able to emit __memcpy_chk with the allocation size expression passed into the function: void *copy_obj (const void *src, size_t alloc, size_t copysize) { void *obj = malloc (alloc); memcpy (obj, src, copysize); return obj; } Limitations ----------- If the object was allocated elsewhere that the compiler cannot see, or if it was allocated in the function with a function that the compiler does not recognize as an allocator then __builtin_dynamic_object_size also returns -1. Further, the expression used to compute object size may be non-trivial and may potentially incur a noticeable performance impact. These fortifications are hence enabled at a new _FORTIFY_SOURCE level to allow developers to make a choice on the tradeoff according to their environment.
2019-08-13Add feature test macro _ISOC2X_SOURCE.Joseph Myers1-0/+7
This patch starts preparation for C2X support in glibc headers by adding a feature test macro _ISOC2X_SOURCE and corresponding __GLIBC_USE (ISOC2X). (I chose to use the newer __GLIBC_USE style for this rather than the older __USE_* macros tested with #ifdef.) As with other such macros, C2X features are also enabled by compiling for a standard newer than C17, or by using _GNU_SOURCE. This patch does not itself enable anything new in the headers for C2X; that is to be done in followup patches. (For example, most of the TS 18661-1 functions should be declared for C2X without any __STDC_WANT_IEC_60559_BFP_EXT__ being needed, but the ones that 18661-1 adds to Annex F because of their close relation to IEEE 754 formats do still need the WANT macro in C2X.) Once C2X becomes an actual standard we'll presumably move to using the actual year in the feature test macro and __GLIBC_USE, with some period when both macro spellings are accepted, as was done with _ISOC9X_SOURCE. Tested for x86_64. * include/features.h (_ISOC2X_SOURCE): New feature test macro. Undefine and define to 1 if [_GNU_SOURCE]. (__GLIBC_USE_ISOC2X): New macro. Undefine and redefine depending on [_ISOC2X_SOURCE] and [__STDC_VERSION__ > 201710L]. (__USE_ISOC11): Also define to 1 if [_ISOC2X_SOURCE]. (__USE_ISOC99): Likewise. (__USE_ISOC95): Likewise. * manual/creature.texi (_ISOC2X_SOURCE): Document.
2018-02-21manual: Update _DEFAULT_SOURCE. [BZ #22862]Rical Jasan1-7/+14
The description of the interplay between feature test macros and compiler options in the description of _DEFAULT_SOURCE is a little confusing, and dated, so clarify the situation, and don't assume a specific value for _DEFAULT_SOURCE. Also, _DEFAULT_SOURCE is supposed to be defined if none of the C/POSIX feature test macros are defined, but the condition was lacking a test for _ISOC11_SOURCE, so that is also addressed. [BZ #22862] * include/features.h: Add _ISOC11_SOURCE to test for whether to define _DEFAULT_SOURCE. * manual/creature.texi (_DEFAULT_SOURCE): Improve documentation.
2018-02-20manual: Update the _ISOC99_SOURCE description.Rical Jasan1-4/+3
The current description refers to ISO C99 not being widely adopted, which it is believed to be now. * manual/creature.texi (_ISOC99_SOURCE): Update the dated description.
2018-02-20manual: Document missing feature test macros.Rical Jasan1-2/+37
Several feature test macros are documented in features.h but absent in the manual, and some documented macros accept undocumented values. This commit updates the manual to mention all the accepted macros, along with any values that hold special meaning. * manual/creature.texi (_POSIX_C_SOURCE): Document special values of 199606L, 200112L, and 200809L. (_XOPEN_SOURCE): Document special values of 600 and 700. (_ISOC11_SOURCE): Document macro. (_ATFILE_SOURCE): Likewise. (_FORTIFY_SOURCE): Likewise.
2018-02-09manual: Fix Texinfo warnings about improper node names.Rical Jasan1-1/+1
A number of cross-references to the GCC info manual cause Texinfo warnings; e.g.: ./creature.texi:11: warning: @xref node name should not contain `.' This is due to "gcc.info" being used in the INFO-FILE-NAME (fourth) argument. Changing it to "gcc" removes these warnings. (Manually confirmed equivalent behaviour for make info, html, and pdf.) * manual/creature.texi: Convert references to gcc.info to gcc. * manual/stdio.texi: Likewise. * manual/string.texi: Likewise.
2017-07-27manual: Complete @standards in creature.texi.Rical Jasan1-1/+1
* manual/creature.texi (_REENTRANT): Annotate as obsolete. (_THREAD_SAFE): Likewise.
2017-06-15manual: Replace summary.awk with summary.pl.Rical Jasan1-30/+14
The Summary is now generated from @standards, and syntax-checking is performed. If invalid @standards syntax is detected, summary.pl will fail, reporting all errors. Failure and error reporting is disabled for now, however, since much of the manual is still incomplete wrt. header and standards annotations. Note that the sorting order of the Summary has changed; summary.pl respects the locale, like summary.awk did, but the use of LC_ALL=C is introduced in the Makefile. Other notable deviations are improved detection of the annotated elements' names, which are used for sorting, and improved detection of the @node used to reference into the manual. The most noticeable difference in the rendered Summary is that entries may now contain multiple lines, one for each header and standard combination. summary.pl accepts a `--help' option, which details the expected syntax of @standards. If errors are reported, the user is directed to this feature for further information. * manual/Makefile: Generate summary.texi with summary.pl. Force use of the C locale. Update Perl dependency comment. * manual/header.texi: Update reference to summary.awk. * manual/macros.texi: Refer authors to `summary.pl --help'. * manual/summary.awk: Remove file. * manual/summary.pl: New file. Generate summary.texi, and check for @standards-related syntax errors. * manual/argp.texi: Convert header and standards @comments to @standards. * manual/arith.texi: Likewise. * manual/charset.texi: Likewise. * manual/conf.texi: Likewise. * manual/creature.texi: Likewise. * manual/crypt.texi: Likewise. * manual/ctype.texi: Likewise. * manual/debug.texi: Likewise. * manual/errno.texi: Likewise. * manual/filesys.texi: Likewise. * manual/getopt.texi: Likewise. * manual/job.texi: Likewise. * manual/lang.texi: Likewise. * manual/llio.texi: Likewise. * manual/locale.texi: Likewise. * manual/math.texi: Likewise. * manual/memory.texi: Likewise. * manual/message.texi: Likewise. * manual/pattern.texi: Likewise. * manual/pipe.texi: Likewise. * manual/process.texi: Likewise. * manual/resource.texi: Likewise. * manual/search.texi: Likewise. * manual/setjmp.texi: Likewise. * manual/signal.texi: Likewise. * manual/socket.texi: Likewise. * manual/startup.texi: Likewise. * manual/stdio.texi: Likewise. * manual/string.texi: Likewise. * manual/sysinfo.texi: Likewise. * manual/syslog.texi: Likewise. * manual/terminal.texi: Likewise. * manual/threads.texi: Likewise. * manual/time.texi: Likewise. * manual/users.texi: Likewise.
2017-05-09Add support for testing __STDC_WANT_IEC_60559_TYPES_EXT__Paul E. Murphy1-0/+9
This macro is defined by TS 18661-3 for supporting the _FloatN and _FloatNx types, as well as the functions suffixed with fN. * bits/libc-header-start.h: (__GLIBC_USE_IEC_60559_TYPES_EXT): New macro. * include/features.h: Describe __STDC_WANT_IEC_60559_TYPES_EXT__. * manual/creature.texi: Likewise.
2016-12-08Make _REENTRANT and _THREAD_SAFE aliases for _POSIX_C_SOURCE=199506L.Zack Weinberg1-9/+5
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.
2016-08-03Support __STDC_WANT_IEC_60559_FUNCS_EXT__ feature test macro.Joseph Myers1-0/+9
This patch implements support for the __STDC_WANT_IEC_60559_FUNCS_EXT__ feature test macro, following the __GLIBC_USE approach used for other ISO C feature test macros. Currently this only affects the exp10 functions (which glibc has had for a long time). Tested for x86_64 and x86 (testsuite, and that installed stripped shared libraries are unchanged by the patch). * bits/libc-header-start.h (__GLIBC_USE_IEC_60559_FUNCS_EXT): New macro. * include/features.h (__STDC_WANT_IEC_60559_FUNCS_EXT__): Document. * manual/creature.texi (__STDC_WANT_IEC_60559_FUNCS_EXT__): Document macro. * manual/math.texi (exp10): Document as ISO from TS 18661-4:2015. (exp10f): Likewise. (exp10l): Likewise. * math/bits/mathcalls.h (exp10): Declare if [__GLIBC_USE (IEC_60559_FUNCS_EXT)], not [__USE_GNU].
2016-08-03Support __STDC_WANT_IEC_60559_BFP_EXT__ feature test macro.Joseph Myers1-0/+9
This patch implements support for the __STDC_WANT_IEC_60559_BFP_EXT__ feature test macro from ISO/IEC 18661-1:2014, following the __GLIBC_USE approach now used for __STDC_WANT_LIB_EXT2__. For this macro, the relevant consideration is whether it is defined or undefined when an affected header is included (not what its value is if defined, and not whether it's defined or undefined when any other unaffected system header is included). Currently this macro only affects the issignaling macro and the nextup and nextdown functions (so they can be enabled by defining this macro, not just by defining _GNU_SOURCE as previously). Any further features from this TS added in future would also be conditioned on this macro. Tested for x86_64 and x86 (testsuite, and that installed stripped shared libraries are unchanged by the patch). * bits/libc-header-start.h (__GLIBC_USE_IEC_60559_BFP_EXT): New macro. * include/features.h (__STDC_WANT_IEC_60559_BFP_EXT__): Document. * manual/arith.texi (issignaling): Document as ISO from TS 18661-1:2014. (nextup): Likewise. (nextupf): Likewise. (nextupl): Likewise. (nextdown): Likewise. (nextdownf): Likewise. (nextdownl): Likewise. * manual/creature.texi (__STDC_WANT_IEC_60559_BFP_EXT__): Document macro. * math/math.h: Define __GLIBC_INTERNAL_STARTING_HEADER_IMPLEMENTATION and include <bits/libc-header-start.h> instead of including <features.h>. (issignaling): Define if [__GLIBC_USE (IEC_60559_BFP_EXT)], not [__USE_GNU]. * math/bits/mathcalls.h (nextdown): Declare if [__GLIBC_USE (IEC_60559_BFP_EXT)], not [__USE_GNU]. (nextup): Likewise. (__issignaling): Likewise.
2016-08-02Support __STDC_WANT_LIB_EXT2__ feature test macro.Joseph Myers1-0/+8
This patch implements support for the __STDC_WANT_LIB_EXT2__ feature test macro from ISO/IEC TR 24731-2:2010, thereby implementing one possible approach for supporting ISO C feature test macros. Recall that, as described in <https://sourceware.org/ml/libc-alpha/2016-05/msg00486.html>, these macros work based on the definition when affected headers are included, so cannot be handled once when the first system header is included because that might not be one of the headers the particular macro in question affects. <https://sourceware.org/ml/libc-alpha/2016-05/msg00680.html> expresses views on possible approaches for implementation and <https://sourceware.org/ml/libc-alpha/2016-06/msg00039.html> follows up on that. This patch arranges things so that the relevant condition is __GLIBC_USE (LIB_EXT2), following one of the suggestions given. Headers using these macros include <bits/libc-header-start.h>, which in turn includes <features.h>. Headers must define __GLIBC_INTERNAL_STARTING_HEADER_IMPLEMENTATION before including <bits/libc-header-start.h>, to discourage inclusion outside glibc as requested. __USE_GNU conditions on affected functions are changed to __GLIBC_USE (LIB_EXT2), while it's added as an additional alternative on the conditions for functions already enabled for some POSIX versions. It would be possible to convert existing __USE_* conditionals to __GLIBC_USE (with the relevant __GLIBC_USE_* being defined in <features.h> where __USE_* are presently defined), and so make them typo-proof (given -Wundef -Werror in glibc builds) because __GLIBC_USE is used with #if not #ifdef / #if defined. No attempt is made to enforce the rule about diagnosing different definitions of __STDC_WANT_LIB_EXT2__ when affected headers are included; such a diagnostic is incompatible with multiple-include guards on the affected headers, unless compiler extensions are added to support it. As previously noted, glibc does not implement all features from TR 24731-2:2010: the functions aswprintf vaswprintf getwdelim getwline are not in glibc, although they would be appropriate to add if someone wished to do so. But I think it makes sense to support the feature test macro if *any* of the controlled features are present in glibc. Tested for x86_64 and x86 (testsuite, and that installed stripped shared libraries are unchanged by the patch). * bits/libc-header-start.h: New file. * Makefile (headers): Add bits/libc-header-start.h. * include/features.h (__STDC_WANT_LIB_EXT2__): Document. (__GLIBC_USE): New macro. * libio/stdio.h: Define __GLIBC_INTERNAL_STARTING_HEADER_IMPLEMENTATION and include <bits/libc-header-start.h> instead of including <features.h>. (fmemopen): Declare also if [__GLIBC_USE (LIB_EXT2)]. (open_memstream): Likewise. (vasprintf): Declare if [__GLIBC_USE (LIB_EXT2)], not [__USE_GNU]. (__asprintf): Likewise. (asprintf): Likewise. (__getdelim): Declare also if [__GLIBC_USE (LIB_EXT2)]. (getdelim): Likewise. (getline): Likewise. * string/string.h: Define __GLIBC_INTERNAL_STARTING_HEADER_IMPLEMENTATION and include <bits/libc-header-start.h> instead of including <features.h>. (strdup): Declare also if [__GLIBC_USE (LIB_EXT2)] (strndup): Likewise. * wcsmbs/wchar.h: Define __GLIBC_INTERNAL_STARTING_HEADER_IMPLEMENTATION and include <bits/libc-header-start.h> instead of including <features.h>. (open_wmemstream): Declare also if [__GLIBC_USE (LIB_EXT2)]. * manual/creature.texi (__STDC_WANT_LIB_EXT2__): Document macro.
2014-02-11Remove _BSD_SOURCE and _SVID_SOURCE.Joseph Myers1-18/+4
This is a minimal patch to remove _BSD_SOURCE and _SVID_SOURCE from the documented user API, making them into aliases for _DEFAULT_SOURCE with a #warning given, but keeping most of the features.h logic using those macros and all the exising __USE_* conditionals, on the basis that all the consequent cleanups will go in followup patches. Tested x86_64. * include/features.h: Update comment documenting feature test macros. [_BSD_SOURCE || _SVID_SOURCE]: Give #warning. Define _DEFAULT_SOURCE. * manual/creature.texi (_BSD_SOURCE): Remove documentation. (_SVID_SOURCE): Likewise. (_DEFAULT_SOURCE): Update description of default features. (Feature Test Macros): Don't mention _SVID_SOURCE in conjunction with _GNU_SOURCE. * manual/filesys.texi (__ftw_func_t): Do not refer to _BSD_SOURCE. (S_ISVTX): Likewise. * manual/math.texi (Mathematical Constants): Likewise. * manual/signal.texi (Interrupted Primitives): Likewise. * manual/startup.texi (putenv): Do not refer to _SVID_SOURCE. * math/test-matherr.c (_SVID_SOURCE): Do not define. * sysvipc/sys/ipc.h [__USE_SVID && !__USE_XOPEN && __GNUC__ >= 2]: Don't refer to _SVID_SOURCE in warning text.
2013-12-19Add _DEFAULT_SOURCE feature test macro.Joseph Myers1-4/+19
This patch adds a feature test macro _DEFAULT_SOURCE to enable the default set of header declarations. The intention is: if _DEFAULT_SOURCE is not used there is no change to the set of __USE_* macros glibc defines; if it's used on its own, and without compiler options such as -std=c99 that define __STRICT_ANSI__, again, there is no change; if it's used together with the macros it approximately (i.e., apart from __USE_POSIX_IMPLICITLY) implies (-D_BSD_SOURCE -D_SVID_SOURCE -D_POSIX_C_SOURCE=200809L), again, there is no change. Otherwise, it causes the relevant features to be enabled, even if __STRICT_ANSI__, or another feature test macro, would cause them to be disabled. This macro deliberately bundles the POSIX.1-2008 (non-X/Open) functionality with the BSD/SVID/"misc" functionality, rather than defining a macro that gives just the latter, as many of the header cleanups resulting from removing _BSD_SOURCE and _SVID_SOURCE support are only possible when BSD/SVID/"misc" is always bundled with POSIX.1-2008. Tested x86_64. * include/features.h: Update comment documenting feature test macros. Mention _DEFAULT_SOURCE in comment. [_GNU_SOURCE] (_DEFAULT_SOURCE): Undefine and redefine. [_DEFAULT_SOURCE]: Undefine and redefine _DEFAULT_SOURCE, _BSD_SOURCE and _SVID_SOURCE. [!__STRICT_ANSI__ && !_ISOC99_SOURCE && !_POSIX_SOURCE && !_POSIX_C_SOURCE && !_XOPEN_SOURCE && !_BSD_SOURCE && !_SVID_SOURCE]: Likewise. [_DEFAULT_SOURCE && !_POSIX_SOURCE && !_POSIX_C_SOURCE] (__USE_POSIX_IMPLICITLY): Define. [_DEFAULT_SOURCE && !_POSIX_SOURCE && !_POSIX_C_SOURCE] (_POSIX_SOURCE): Undefine and redefine. [_DEFAULT_SOURCE && !_POSIX_SOURCE && !_POSIX_C_SOURCE] (_POSIX_C_SOURCE): Likewise. * manual/creature.texi (_DEFAULT_SOURCE): Document. (Feature Test Macros): Update documentation of default features.
2013-12-17Remove __FAVOR_BSD.Joseph Myers1-41/+0
2012-03-21Remove NOTES.Joseph Myers1-1/+0
2012-02-28Use Texinfo macros to refer to the GNU C Library within the manual.Joseph Myers1-3/+4