about summary refs log tree commit diff
path: root/manual
Commit message (Collapse)AuthorAgeFilesLines
* manual: Add description of AArch64-specific pkey flagsYury Khrustalev2 days1-1/+15
| | | | | | | | Describe AArch64 specific flags PKEY_DISABLE_READ and PKEY_DISABLE_EXECUTE that are available on AArch64 systems with enabled Stage 1 permission overlays feature introduced in Armv8.9 / 9.4 (FEAT_S1POE). Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
* manual: Fix overeager s/int/size_t/ in memory.texiJonathan Wakely9 days1-1/+1
| | | | | | | The change in e3960d1c57e57f33e0e846d615788f4ede73b945 should only have affected 'int' not 'internally'. Signed-off-by: Jonathan Wakely <jwakely@redhat.com>
* manual: Use more precise wording for memory protection keysYury Khrustalev2024-11-061-27/+31
| | | | | | | | | | | Update the name of the argument in several pkey_*() functions that refers to access restrictions rather than access rights: change access "rights" to access "restrictions". Specify that the result of the pkey_get() should be checked using bitwise operations rather than plain equals comparison. Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
* Add feature test macro _ISOC2Y_SOURCELenard Mollenkopf2024-11-041-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>
* Document further requirement on mixing streams / file descriptorsJoseph Myers2024-10-281-0/+21
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The gilbc manual has some documentation in llio.texi of requirements for moving between I/O on FILE * streams and file descriptors on the same open file description. The documentation of what must be done on a FILE * stream to move from it to either a file descriptor or another FILE * for the same open file description seems to match POSIX. However, there is an additional requirement in POSIX on the *second* of the two handles being moved between, which is not mentioned in the glibc manual: "If any previous active handle has been used by a function that explicitly changed the file offset, except as required above for the first handle, the application shall perform an lseek() or fseek() (as appropriate to the type of handle) to an appropriate location.". Document this requirement on seeking in the glibc manual, limited to the case that seems relevant to glibc (the new channel is a previously active stream, on which the seeking previously occurred). Note that I'm not sure what the "except as required above for the first handle" is meant to be about, so I haven't documented anything for it. As far as I can tell, nothing specified for moving from the first handle actually list calling a seek function as one of the steps to be done. (Current POSIX doesn't seem to have any relevant rationale for this section. The rationale in the 1996 edition says "In requiring the seek to an appropriate location for the new handle, the application is required to know what it is doing if it is passing streams with seeks involved. If the required seek is not done, the results are undefined (and in fact the program probably will not work on many common implementations)." - which also doesn't help in understanding the purpose of "except as required above for the first handle".) Tested with "make info" and "make pdf".
* manual: Document stdio.h functions that may be macrosDJ Delorie2024-10-211-0/+12
| | | | | | | | | | Glibc has two gnu-extension functions that are implemented as macros but not documented as such: fread_unlocked and fwrite_unlocked. Document them as such. Additionally, putc_unlocked and getc_unlocked are documented in POSIX as possibly being macros. Update the manual to add a warning about those also, depite glibc not implementing them as macros.
* manual: Fix and test @deftypef* function formattingCarlos O'Donell2024-10-118-31/+104
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The manual contained several instances of incorrect formatting that were correct texinfo but produced incorrectly rendered manuals or incorrect behaviour from the tooling. The most important was incorrect quoting of function returns by failing to use {} to quote the return. The impact of this mistake means that 'info libc func' does not jump to the function in question but instead to the introductory page under the assumption that func doesn't exist. The function returns are now correctly quoted. The second issue was the use of a category specifier with @deftypefun which doesn't accept a category specifier. If a category specifier is required then @deftypefn needs to be used. This is corrected by changing the command to @deftypefn for such functions that used {Deprecated function} as a category. The last issue is a missing space between the function name and the arguments which results in odd function names like "epoll_wait(int" instead of "epoll_wait". This also impacts the use of 'info libc' and is corrected. We additionally remove ';' from the end of function arguments and add an 'int' return type for dprintf. Lastly we add a new test check-deftype.sh which verifies the expected formatting of @deftypefun, @deftypefunx, @deftypefn, and @deftypefnx. The new test is also run as the summary file is generated to ensure we don't generate incorrect results. The existing check-safety.sh is also run directly as a test to increase coverage since the existing tests only ran on manual install. The new tests now run as part of the standard "make check" that pre-commit CI runs and developers should run. No regressions on x86_64. HTML and PDF rendering reviewed and looks correct for all changes. Reviewed-by: H.J. Lu <hjl.tools@gmail.com>
* misc: Add support for Linux uio.h RWF_ATOMIC flagAdhemerval Zanella2024-10-101-0/+13
| | | | | | | | | Linux 6.11 adds the new flag for pwritev2 (commit c34fc6f26ab86d03a2d47446f42b6cd492dfdc56). Checked on x86_64-linux-gnu on 6.11 kernel. Reviewed-by: H.J. Lu <hjl.tools@gmail.com>
* linux: Add MAP_DROPPABLE from Linux 6.11Adhemerval Zanella2024-10-101-0/+9
| | | | | | | | | | | | This request the page to be never written out to swap, it will be zeroed under memory pressure (so kernel can just drop the page), it is inherited by fork, it is not counted against @code{mlock} budget, and if there is no enough memory to service a page faults there is no fatal error (so not signal is sent). Tested with build-many-glibcs.py. Reviewed-by: H.J. Lu <hjl.tools@gmail.com>
* stdlib: Make abort/_Exit AS-safe (BZ 26275)Adhemerval Zanella2024-10-081-4/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The recursive lock used on abort does not synchronize with a new process creation (either by fork-like interfaces or posix_spawn ones), nor it is reinitialized after fork(). Also, the SIGABRT unblock before raise() shows another race condition, where a fork or posix_spawn() call by another thread, just after the recursive lock release and before the SIGABRT signal, might create programs with a non-expected signal mask. With the default option (without POSIX_SPAWN_SETSIGDEF), the process can see SIG_DFL for SIGABRT, where it should be SIG_IGN. To fix the AS-safe, raise() does not change the process signal mask, and an AS-safe lock is used if a SIGABRT is installed or the process is blocked or ignored. With the signal mask change removal, there is no need to use a recursive loc. The lock is also taken on both _Fork() and posix_spawn(), to avoid the spawn process to see the abort handler as SIG_DFL. A read-write lock is used to avoid serialize _Fork and posix_spawn execution. Both sigaction (SIGABRT) and abort() requires to lock as writer (since both change the disposition). The fallback is also simplified: there is no need to use a loop of ABORT_INSTRUCTION after _exit() (if the syscall does not terminate the process, the system is broken). The proposed fix changes how setjmp works on a SIGABRT handler, where glibc does not save the signal mask. So usage like the below will now always abort. static volatile int chk_fail_ok; static jmp_buf chk_fail_buf; static void handler (int sig) { if (chk_fail_ok) { chk_fail_ok = 0; longjmp (chk_fail_buf, 1); } else _exit (127); } [...] signal (SIGABRT, handler); [....] chk_fail_ok = 1; if (! setjmp (chk_fail_buf)) { // Something that can calls abort, like a failed fortify function. chk_fail_ok = 0; printf ("FAIL\n"); } Such cases will need to use sigsetjmp instead. The _dl_start_profile calls sigaction through _profil, and to avoid pulling abort() on loader the call is replaced with __libc_sigaction. Checked on x86_64-linux-gnu and aarch64-linux-gnu. Reviewed-by: DJ Delorie <dj@redhat.com>
* manual: Document that feof and ferror are mutually exclusiveFlorian Weimer2024-09-271-0/+9
| | | | | | | | This is not completely clear from the C standard (although there is footnote number 289 in C11), but I assume that our implementation works this way. Reviewed-by: DJ Delorie <dj@redhat.com>
* manual: __is_last is no longer part of iconv internalsFlorian Weimer2024-09-201-9/+9
| | | | | | | | The __is_last field was replaced with a bitmask in commit 85830c4c4688b30d3d76111aa9a26745c7b141d6 in 2000, and multiple bits are in use today. Reviewed-by: DJ Delorie <dj@redhat.com>
* Linux: Add the sched_setattr and sched_getattr functionsFlorian Weimer2024-09-111-0/+115
| | | | | | | | | | | | | | | | | | | | And struct sched_attr. In sysdeps/unix/sysv/linux/bits/sched.h, the hack that defines sched_param around the inclusion of <linux/sched/types.h> is quite ugly, but the definition of struct sched_param has already been dropped by the kernel, so there is nothing else we can do and maintain compatibility of <sched.h> with a wide range of kernel header versions. (An alternative would involve introducing a separate header for this functionality, but this seems unnecessary.) The existing sched_* functions that change scheduler parameters are already incompatible with PTHREAD_PRIO_PROTECT mutexes, so there is no harm in adding more functionality in this area. The documentation mostly defers to the Linux manual pages. Reviewed-by: Carlos O'Donell <carlos@redhat.com>
* manual: Extract the @manpageurl{func,sec} macroFlorian Weimer2024-09-111-2/+5
| | | | | | | | From the existing @manpagefunctionstub{func,sec} macro, so that URLs can be included in the manual without the stub text. Reviewed-by: Carlos O'Donell <carlos@redhat.com>
* Document limitations on streams passed to freopenJoseph Myers2024-09-061-0/+8
| | | | | | | | | | As recently discussed, document that freopen does not work with streams opened with functions such as popen, fmemopen, open_memstream or fopencookie. I've filed <https://austingroupbugs.net/view.php?id=1855> to clarify this issue in POSIX. Tested with "make info" and "make html".
* manual: Safety annotations for clock_gettime, clock_getresFlorian Weimer2024-09-061-0/+2
| | | | | | | The annotations are preliminary, for consistency with existing annotations on gettimeofday etc. Reviewed-by: Carlos O'Donell <carlos@redhat.com>
* manual: Add Descriptor-Relative Access sectionFlorian Weimer2024-08-273-10/+235
| | | | | | | | | | | Reference this new section from the O_PATH documentation. And document the functions openat, openat64, fstatat, fstatat64. (The safety assessment for fstatat was already obsolete because current glibc assumes kernel support for the underlying system call.) Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
* ungetc: Fix uninitialized read when putting into unused streams [BZ #27821]Siddhesh Poyarekar2024-08-151-5/+3
| | | | | | | | | | | | | | | | | | | | When ungetc is called on an unused stream, the backup buffer is allocated without the main get area being present. This results in every subsequent ungetc (as the stream remains in the backup area) checking uninitialized memory in the backup buffer when trying to put a character back into the stream. Avoid comparing the input character with buffer contents when in backup to avoid this uninitialized read. The uninitialized read is harmless in this context since the location is promptly overwritten with the input character, thus fulfilling ungetc functionality. Also adjust wording in the manual to drop the paragraph that says glibc cannot do multiple ungetc back to back since with this change, ungetc can actually do this. Signed-off-by: Siddhesh Poyarekar <siddhesh@sourceware.org> Reviewed-by: Carlos O'Donell <carlos@redhat.com>
* manual: Document dprintf and vdprintfFlorian Weimer2024-08-131-0/+27
| | | | Reviewed-by: Carlos O'Donell <carlos@redhat.com>
* manual: Document generic printf error codesFlorian Weimer2024-08-131-0/+23
| | | | | | Describe EOVERFLOW, ENOMEN, EILSEQ. Reviewed-by: Carlos O'Donell <carlos@redhat.com>
* manual/stdio: Further clarify putc, putwc, getc, and getwcArjun Shankar2024-08-061-17/+10
| | | | | | | | | | | This is a follow-up to 10de4a47ef3f481592e3c62eb07bcda23e9fde4d that reworded the manual entries for putc and putwc and removed any performance claims. This commit further clarifies these entries and brings getc and getwc in line with the descriptions of putc and putwc, removing any performance claims from them as well. Reviewed-by: Florian Weimer <fweimer@redhat.com>
* mremap: Update manual entryH.J. Lu2024-08-011-7/+35
| | | | | | | | | | Update mremap manual entry: 1. Change mremap to variadic. 2. Document MREMAP_FIXED and MREMAP_DONTUNMAP. Signed-off-by: H.J. Lu <hjl.tools@gmail.com> Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
* manual: make setrlimit() description less ambiguousLukas Bulwahn2024-07-291-2/+2
| | | | | | | | | | | The existing description for setrlimit() has some ambiguity. It could be understood to have the semantics of getrlimit(), i.e., the limits from the process are stored in the provided rlp pointer. Make the description more explicit that rlp are the input values, and that the limits of the process is changed with this function. Reviewed-by: Florian Weimer <fweimer@redhat.com>
* manual/stdio: Clarify putc and putwcArjun Shankar2024-07-291-6/+6
| | | | | | | | | | | | | | The manual entry for `putc' described what "most systems" do instead of describing the glibc implementation and its guarantees. This commit fixes that by warning that putc may be implemented as a macro that double-evaluates `stream', and removing the performance claim. Even though the current `putc' implementation does not double-evaluate `stream', offering this obscure guarantee as an extension to what POSIX allows does not seem very useful. The entry for `putwc' is also edited to bring it in line with `putc'. Reviewed-by: Florian Weimer <fweimer@redhat.com>
* manual: Do not mention STATIC_TLS in dynamic linker hardening recommendationsFlorian Weimer2024-07-241-12/+12
| | | | | | | The current toolchain does not consistently generate it, and glibc does not use it. Reviewed-by: Szabolcs Nagy <szabolcs.nagy@arm.com>
* contrib.texi: Fix format of MIPS and RISC-VAndreas K. Hüttel2024-07-211-3/+3
| | | | Signed-off-by: Andreas K. Hüttel <dilfridge@gentoo.org>
* install.texi: bump "latest verified" versionsAndreas K. Hüttel2024-07-211-9/+9
| | | | Signed-off-by: Andreas K. Hüttel <dilfridge@gentoo.org>
* contrib.texi: updateAndreas K. Hüttel2024-07-201-5/+29
| | | | Signed-off-by: Andreas K. Hüttel <dilfridge@gentoo.org>
* Linux: Make __rseq_size useful for feature detection (bug 31965)Florian Weimer2024-07-091-2/+6
| | | | | | | | | | | The __rseq_size value is now the active area of struct rseq (so 20 initially), not the full struct size including padding at the end (32 initially). Update misc/tst-rseq to print some additional diagnostics. Reviewed-by: Michael Jeanson <mjeanson@efficios.com> Reviewed-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
* manual: add syscallsDJ Delorie2024-07-096-37/+96
| | | | | | | | | | | | | | The purpose of this patch is to add some system calls that (1) aren't otherwise documented, and (2) are merely redirected to the kernel, so can refer to their documentation; and define a standard way of doing so in the future. A more detailed explaination of how system calls are wrapped is added along with reference to the Linux Man-Pages project. Default version of man-pages is in configure.ac but can be overridden by --with-man-pages=X.Y Reviewed-by: Alejandro Colomar <alx@kernel.org>
* manual: Recommendations for dynamic linker hardeningFlorian Weimer2024-07-031-0/+558
| | | | | | | | | This new section in the manual provides recommendations for use of glibc in environments with higher integrity requirements. It's reflecting both current implementation shortcomings, and challenges we inherit from ELF and psABI requirements. Reviewed-by: Jonathan Wakely <jwakely@redhat.com>
* Add --disable-static-c++-tests option [BZ #31797]H.J. Lu2024-07-021-0/+8
| | | | | | | | | | | | By default, if the C++ toolchain lacks support for static linking, configure fails to find the C++ header files and the glibc build fails. The --disable-static-c++-link-check option allows the glibc build to finish, but static C++ tests will fail if the C++ toolchain doesn't have the necessary static C++ libraries which may not be easily installed. Add --disable-static-c++-tests option to skip the static C++ link check and tests. This fixes BZ #31797. Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
* Add --disable-static-c++-link-check option [BZ #31412]H.J. Lu2024-07-021-0/+8
| | | | | | | | | | | | The current minimum GCC version of glibc build is GCC 6.2 or newer. But building i686 glibc with GCC 6.4 on Fedora 40 failed since the C++ header files couldn't be found which was caused by the static C++ link check failure due to missing __divmoddi4 which was referenced in i686 libc.a and added to GCC 7. Add --disable-static-c++-link-check configure option to disable the static C++ link test. The newly built i686 libc.a can be used by GCC 6.4 to create static C++ tests. This fixes BZ #31412. Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
* Update mmap() flags and errors listsDJ Delorie2024-07-011-16/+126
| | | | | | | | | Extend the list of MAP_* macros to include all macros available to the average program (gcc -E -dM | grep MAP_*) Extend the list of errno codes. Reviewed-by: Florian Weimer <fweimer@redhat.com>
* Fix strnlen doc re array sizePaul Eggert2024-06-261-7/+10
| | | | | | | | | * manual/string.texi: For strnlen (s, maxlen), do not say that s must be of size maxlen, as it can be smaller if it is null-terminated. This should help avoid confusion such as seen in <https://lists.gnu.org/r/bug-gnulib/2024-06/msg00280.html>. Mention that strnlen and wcsnlen have been in POSIX since POSIX.1-2008.
* INSTALL: Fix typo ibmlondouble to ibmlongdoubleJoe Simmons-Talbott2024-06-241-1/+1
|
* elf: Remove LD_HWCAP_MASK / tunable glibc.cpu.hwcap_maskStefan Liebler2024-06-182-17/+6
| | | | | | | | | | | | Remove the environment variable LD_HWCAP_MASK and the tunable glibc.cpu.hwcap_mask as those are not used anymore in common-code after removal in elf/dl-cache.c:search_cache(). The only remaining user is sparc32 where it is used in elf_machine_matches_host(). If sparc32 does not need it anymore, we can get rid of it at all. Otherwise we could also move LD_HWCAP_MASK / tunable glibc.cpu.hwcap_mask to be sparc32 specific. Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
* Convert to autoconf 2.72 (vanilla release, no distribution patches)Andreas K. Hüttel2024-06-171-1/+1
| | | | | | | As discussed at the patch review meeting Signed-off-by: Andreas K. Hüttel <dilfridge@gentoo.org> Reviewed-by: Simon Chopin <simon.chopin@canonical.com>
* Implement C23 exp2m1, exp10m1Joseph Myers2024-06-171-0/+30
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | C23 adds various <math.h> function families originally defined in TS 18661-4. Add the exp2m1 and exp10m1 functions (exp2(x)-1 and exp10(x)-1, like expm1). As with other such functions, these use type-generic templates that could be replaced with faster and more accurate type-specific implementations in future. Test inputs are copied from those for expm1, plus some additions close to the overflow threshold (copied from exp2 and exp10) and also some near the underflow threshold. exp2m1 has the unusual property of having an input (M_MAX_EXP) where whether the function overflows (under IEEE semantics) depends on the rounding mode. Although these could reasonably be XFAILed in the testsuite (as we do in some cases for arguments very close to a function's overflow threshold when an error of a few ulps in the implementation can result in the implementation not agreeing with an ideal one on whether overflow takes place - the testsuite isn't smart enough to handle this automatically), since these functions aren't required to be correctly rounding, I made the implementation check for and handle this case specially. The Makefile ordering expected by lint-makefiles for the new functions is a bit peculiar, but I implemented it in this patch so that the test passes; I don't know why log2 also needed moving in one Makefile variable setting when it didn't in my previous patches, but the failure showed a different place was expected for that function as well. The powerpc64le IFUNC setup seems not to be as self-contained as one might hope; it shouldn't be necessary to add IFUNCs for new functions such as these simply to get them building, but without setting up IFUNCs for the new functions, there were undefined references to __GI___expm1f128 (that IFUNC machinery results in no such function being defined, but doesn't stop include/math.h from doing the redirection resulting in the exp2m1f128 and exp10m1f128 implementations expecting to call it). Tested for x86_64 and x86, and with build-many-glibcs.py.
* Implement C23 log10p1Joseph Myers2024-06-171-0/+14
| | | | | | | | | | | | | | C23 adds various <math.h> function families originally defined in TS 18661-4. Add the log10p1 functions (log10(1+x): like log1p, but for base-10 logarithms). This is directly analogous to the log2p1 implementation (except that whereas log2p1 has a smaller underflow range than log1p, log10p1 has a larger underflow range). The test inputs are copied from those for log1p and log2p1, plus a few more inputs in that wider underflow range. Tested for x86_64 and x86, and with build-many-glibcs.py.
* Implement C23 logp1Joseph Myers2024-06-171-0/+12
| | | | | | | | | | | | | | | | | | | | | | | | | | | C23 adds various <math.h> function families originally defined in TS 18661-4. Add the logp1 functions (aliases for log1p functions - the name is intended to be more consistent with the new log2p1 and log10p1, where clearly it would have been very confusing to name those functions log21p and log101p). As aliases rather than new functions, the content of this patch is somewhat different from those actually adding new functions. Tests are shared with log1p, so this patch *does* mechanically update all affected libm-test-ulps files to expect the same errors for both functions. The vector versions of log1p on aarch64 and x86_64 are *not* updated to have logp1 aliases (and thus there are no corresponding header, tests, abilist or ulps changes for vector functions either). It would be reasonable for such vector aliases and corresponding changes to other files to be made separately. For now, the log1p tests instead avoid testing logp1 in the vector case (a Makefile change is needed to avoid problems with grep, used in generating the .c files for vector function tests, matching more than one ALL_RM_TEST line in a file testing multiple functions with the same inputs, when it assumes that the .inc file only has a single such line). Tested for x86_64 and x86, and with build-many-glibcs.py.
* Minor code improvement to timespec_subtract examplePaul Eggert2024-06-151-3/+3
| | | | | | | This saves a few instructions. BORROW cannot be -1, since NSEC_DIFF is at most 999999999. Idea taken from Gnulib, here: https://git.savannah.gnu.org/cgit/gnulib.git/commit/?id=fe33f943054b93af8b965ce6564b8713b0979a21
* Modernize and fix doc’s “Date and Time” (BZ 31876)Paul Eggert2024-06-158-462/+584
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | POSIX.1-2024 (now official) specifies tm_gmtoff and tm_zone. This is a good time to update the manual’s “Date and Time” chapter so I went through it, fixed some outdated stuff that had been in there for decades, and improved it to match POSIX.1-2024 better and to clarify some implementation-defined behavior. Glibc already conforms to POSIX.1-2024 in these matters, so this is merely a documentation change. * manual/examples/strftim.c: Use snprintf instead of now-deprecated function asctime. Check for localtime failure. Simplify by using puts instead of fputs. Prefer ‘buf, sizeof buf’ to less-obvious ‘buffer, SIZE’. * manual/examples/timespec_subtract.c: Modernize to use struct timespec not struct timeval, and rename from timeval_subtract.c. All uses changed. Check for overflow. Do not check for negative return value, which ought to be OK since negative time_t is OK. Use GNU indenting style. * manual/time.texi: Document CLOCKS_PER_SEC, TIME_UTC, timespec_get, timespec_getres, strftime_l. Document the storage lifetime of tm_zone and of tzname. Caution against use of tzname, timezone and daylight, saying that these variables have unspecified values when TZ is geographic. This is what glibc actually does (contrary to what the manual said before this patch), and POSIX is planned to say the same thing <https://austingroupbugs.net/view.php?id=1816>. Also say that directly accessing the variables is not thread-safe. Say that localtime_r and ctime_r don’t necessarily set time zone state. Similarly, in the tzset documentation, say that it is called by ctime, localtime, mktime, strftime, not that it is called by all time conversion functions that depend on the time zone. Say that tm_isdst is useful mostly just for mktime, and that other uses should prefer tm_gmtoff and tm_zone instead. Do not say that strftime ignores tm_gmtoff and tm_zone, because it doesn’t do that. Document what gmtime does to tm_gmtoff and tm_zone. Say that the asctime, asctime_r, ctime, and ctime_r are now deprecated and/or obsolescent, and that behavior is undefined if the year is < 1000 or > 9999. Document strftime before these now-obsolescent functions, so that readers see the useful function first. Coin the terms “geographical format” and “proleptic format” for the two main formats of TZ settings, to simplify exposition. Use this wording consistently. Update top-level proleptic syntax to match POSIX.1-2024, which glibc already implements. Document the angle-bracket quoted forms of time zone abbreviations in proleptic TZ. Say that time zone abbreviations can contain only ASCII alphanumerics, ‘+’, and ‘-’. Document what happens if the proleptic form specifies a DST abbreviation and offset but omits the rules. POSIX says this is implementation-defined so we need to document it. Although this documentation mentions ‘posixrules’ tersely, we need to rethink ‘posixrules’ since I think it stops working after 2038. Clarify wording about TZ settings beginning with ‘;’. Say that timegm is in ISO C (as of C23). Say that POSIX.1-2024 removed gettimeofday. Say that tm_gmtoff and tm_zone are extensions to ISO C, which is clearer than saying they are invisible in a struct ISO C enviroment, and gives us more wiggle room if we want to make them visible in strict ISO C, something that ISO C allows. Drop mention of old standards like POSIX.1c and POSIX.2-1992 in the text when the history is so old that it’s no longer useful in a general-purpose manual. Define Coordinated Universal Time (UTC), time zone, time zone ruleset, and POSIX Epoch, and use these phrases more consistently. Improve TZ examples to show more variety, and to reflect current practice and timestamps. Remove obsolete example about Argentina. Add an example for Ireland. Don’t rely on GCC extensions when explaining ctime_r. Do not say that difftime produces the mathematically correct result, since it might be inexact. For clock_t don’t say “as in the example above” when there is no such example, and don’t say that casting to double works “properly and consistently no matter what”, as it suffers from rounding and overflow. Don’t say broken-down time is not useful for calculations; it’s merely painful. Say that UTC is not defined before 1960. Rename Time Zone Functions to Time Zone State. All uses changed. Update Internet RFC 822 → 5322, 1305 → 5905. Drop specific years of ISO 8601 as they don’t matter. Minor style changes: @code{"..."} → @t{"..."} to avoid overquoting in info files, @code → @env for environment variables, Daylight Saving Time → daylight saving time, white space → whitespace, prime meridian → Prime Meridian.
* manual: minor language fix (bz 31340)Andreas K. Hüttel2024-06-151-1/+1
| | | | | Resolves: https://sourceware.org/bugzilla/show_bug.cgi?id=31340 Signed-off-by: Andreas K. Hüttel <dilfridge@gentoo.org>
* Improve doc for time_t range (BZ 31808)Paul Eggert2024-06-041-1/+11
|
* x86: Add seperate non-temporal tunable for memsetNoah Goldstein2024-05-301-1/+15
| | | | | | | | | | | The tuning for non-temporal stores for memset vs memcpy is not always the same. This includes both the exact value and whether non-temporal stores are profitable at all for a given arch. This patch add `x86_memset_non_temporal_threshold`. Currently we disable non-temporal stores for non Intel vendors as the only benchmarks showing its benefit have been on Intel hardware. Reviewed-by: H.J. Lu <hjl.tools@gmail.com>
* manual: clarify defintions of floating point exponent bounds (bug 31518)Andreas Schwab2024-05-211-5/+5
| | | | | For decimal exponent bounds the range is inclusive, for binary exponent bounds the range is exclusive.
* Implement C23 log2p1Joseph Myers2024-05-201-0/+14
| | | | | | | | | | | | | | | | | | | | | | | | C23 adds various <math.h> function families originally defined in TS 18661-4. Add the log2p1 functions (log2(1+x): like log1p, but for base-2 logarithms). This illustrates the intended structure of implementations of all these function families: define them initially with a type-generic template implementation. If someone wishes to add type-specific implementations, it is likely such implementations can be both faster and more accurate than the type-generic one and can then override it for types for which they are implemented (adding benchmarks would be desirable in such cases to demonstrate that a new implementation is indeed faster). The test inputs are copied from those for log1p. Note that these changes make gen-auto-libm-tests depend on MPFR 4.2 (or later). The bulk of the changes are fairly generic for any such new function. (sysdeps/powerpc/nofpu/Makefile only needs changing for those type-generic templates that use fabs.) Tested for x86_64 and x86, and with build-many-glibcs.py.
* manual: add dup3DJ Delorie2024-05-131-0/+8
| | | | Reviewed-by: Florian Weimer <fweimer@redhat.com>
* LoongArch: Add glibc.cpu.hwcap support.caiyinyu2024-04-241-1/+4
| | | | | | | | | | | | | | | | The current IFUNC selection is always using the most recent features which are available via AT_HWCAP. But in some scenarios it is useful to adjust this selection. The environment variable: GLIBC_TUNABLES=glibc.cpu.hwcaps=-xxx,yyy,zzz,.... can be used to enable HWCAP feature yyy, disable HWCAP feature xxx, where the feature name is case-sensitive and has to match the ones used in sysdeps/loongarch/cpu-tunables.c. Signed-off-by: caiyinyu <caiyinyu@loongson.cn>