aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2024-09-24elf: Move __rtld_malloc_init_stubs call into _dl_start_finalFlorian Weimer1-2/+2
Calling an extern function in a different translation unit before self-relocation is brittle. The compiler may load the address at an earlier point in _dl_start, before self-relocation. In _dl_start_final, the call is behind a compiler barrier, so this cannot happen.
2024-09-24elf: Eliminate alloca in open_verifyFlorian Weimer1-7/+5
With the two-stage approach for exception handling, the name can be freed after it has been copied into the exception, but before it is raised.
2024-09-24elf: Remove version assert in check_match in elf/dl-lookup.cFlorian Weimer3-36/+5
This case is detected early in the elf/dl-version.c consistency checks. (These checks could be disabled in the future to allow the removal of symbol versioning from objects.) Commit f0b2132b35 ("ld.so: Support moving versioned symbols between sonames [BZ #24741]) removed another call to _dl_name_match_p. The _dl_check_caller function no longer exists, and the remaining calls to _dl_name_match_p happen under the loader lock. This means that atomic accesses are no longer required for the l_libname list. This supersedes commit 395be7c218 ("elf: Fix data race in _dl_name_match_p [BZ #21349]").
2024-09-24elf: In rtld_setup_main_map, assume ld.so has a DYNAMIC segmentFlorian Weimer1-24/+0
The way we build ld.so, it always has a dynamic segment, so checking for its absence is unnecessary.
2024-09-24misc: Enable internal use of memory protection keysFlorian Weimer9-9/+43
This adds the necessary hidden prototypes.
2024-09-24misc: Link tst-mkstemp-fuse-parallel with $(shared-thread-library)Florian Weimer1-0/+1
The barrier functions require this on Hurd.
2024-09-24iconv: Use $(run-program-prefix) for running iconv (bug 32197)Florian Weimer1-3/+3
With --enable-hardcoded-path-in-tests, $(test-program-prefix) does not redirect to the built glibc, but we need to run iconv (the program) against the built glibc even with --enable-hardcoded-path-in-tests, as it is using the ABI path for the dynamic linker (as an installed program). Use $(run-program-prefix) instead. Reviewed-by: H.J. Lu <hjl.tools@gmail.com>
2024-09-23AArch64: Simplify rounding-multiply pattern in several AdvSIMD routinesJoe Ramsay5-38/+30
This operation can be simplified to use simpler multiply-round-convert sequence, which uses fewer instructions and constants. Reviewed-by: Wilco Dijkstra <Wilco.Dijkstra@arm.com>
2024-09-23AArch64: Improve codegen in users of ADVSIMD expm1f helperJoe Ramsay4-91/+58
Rearrange operations so MOV is not necessary in reduction or around the special-case handler. Reduce memory access by using more indexed MLAs in polynomial. Reviewed-by: Wilco Dijkstra <Wilco.Dijkstra@arm.com>
2024-09-23AArch64: Improve codegen in users of AdvSIMD log1pf helperJoe Ramsay5-139/+146
log1pf is quite register-intensive - use fewer registers for the polynomial, and make various changes to shorten dependency chains in parent routines. There is now no spilling with GCC 14. Accuracy moves around a little - comments adjusted accordingly but does not require regen-ulps. Use the helper in log1pf as well, instead of having separate implementations. The more accurate polynomial means special-casing can be simplified, and the shorter dependency chain avoids the usual dance around v0, which is otherwise difficult. There is a small duplication of vectors containing 1.0f (or 0x3f800000) - GCC is not currently able to efficiently handle values which fit in FMOV but not MOVI, and are reinterpreted to integer. There may be potential for more optimisation if this is fixed. Reviewed-by: Wilco Dijkstra <Wilco.Dijkstra@arm.com>
2024-09-23AArch64: Improve codegen in SVE F32 logsJoe Ramsay3-47/+69
Reduce MOVPRFXs by using unpredicated (non-destructive) instructions where possible. Similar to the recent change to AdvSIMD F32 logs, adjust special-case arguments and bounds to allow for more optimal register usage. For all 3 routines one MOVPRFX remains in the reduction, which cannot be avoided as immediate AND and ASR are both destructive. Reviewed-by: Wilco Dijkstra <Wilco.Dijkstra@arm.com>
2024-09-23AArch64: Improve codegen in SVE expf & related routinesJoe Ramsay5-148/+136
Reduce MOV and MOVPRFX by improving special-case handling. Use inline helper to duplicate the entire computation between the special- and non-special case branches, removing the contention for z0 between x and the return value. Also rearrange some MLAs and MLSs - by making the multiplicand the destination we can avoid a MOVPRFX in several cases. Also change which constants go in the vector used for lanewise ops - the last lane is no longer wasted. Spotted that shift was incorrect in exp2f and exp10f, w.r.t. to the comment that explains it. Fixed - worst-case ULP for exp2f moves around but it doesn't change significantly for either routine. Worst-case error for coshf increases due to passing x to exp rather than abs(x) - updated the comment, but does not require regen-ulps. Reviewed-by: Wilco Dijkstra <Wilco.Dijkstra@arm.com>
2024-09-21Linux: readdir64_r should not skip d_ino == 0 entries (bug 32126)Florian Weimer3-17/+147
This is the same bug as bug 12165, but for readdir_r. The regression test covers both bug 12165 and bug 32126. Reviewed-by: DJ Delorie <dj@redhat.com>
2024-09-21dirent: Add tst-rewinddirFlorian Weimer2-0/+208
It verifies that rewinddir allows restarting the directory iteration. Reviewed-by: DJ Delorie <dj@redhat.com>
2024-09-21dirent: Add tst-readdir-longFlorian Weimer2-0/+232
It tests long names and ENAMETOOLONG handling, specifically for readdir_r. This is a regression test for bug 14699, bug 32124, and bug 32128. Reviewed-by: DJ Delorie <dj@redhat.com>
2024-09-21Linux: Use readdir64_r for compat __old_readdir64_r (bug 32128)Florian Weimer4-216/+71
It is not necessary to do the conversion at the getdents64 layer for readdir64_r. Doing it piecewise for readdir64 is slightly simpler and allows deleting __old_getdents64. This fixes bug 32128 because readdir64_r handles the length check correctly. Reviewed-by: DJ Delorie <dj@redhat.com>
2024-09-21dirent: Add tst-closedir-leaksFlorian Weimer2-0/+97
It verfies that closedir deallocates memory and closes file descriptors. Reviewed-by: DJ Delorie <dj@redhat.com>
2024-09-21support: Add valgrind instructions to <support/fuse.h>Florian Weimer1-2/+4
Replacing an outdated comment (namespace setup is now handled by support_fuse_init).
2024-09-21support: Fix memory leaks in FUSE testsFlorian Weimer2-0/+2
The internal read buffer (used by all FUSE tests) was not freed. The support/tst-support_fuse test missed a deallocation.
2024-09-21misc: FUSE-based tests for mkstempFlorian Weimer3-0/+422
The tests check that O_EXCL is used properly, that 0600 is used as the mode, that the characters used are as expected, and that the distribution of names generated is reasonably random. The tests run very slowly on some kernel versions, so make them xtests. Reviewed-by: DJ Delorie <dj@redhat.com>
2024-09-20Add freopen special-case tests: chroot, EFBIG, stdin/stdout/stderrJoseph Myers8-0/+385
Add tests of special cases for freopen that were omitted from the more general tests of different modes and similar issues. The special cases in the three tests here are logically unconnected, it was simply convenient to put these tests in one patch. * Test freopen with a NULL path to the new file, in a chroot. Rather than asserting that this fails (logically, failure in this case is an implementation detail; it's not required for freopen to rely on /proc), verify that either it fails (without memory leaks) or that it succeeds and behaves as expected on success. There is no check for file descriptor leaks because the machinery for that also depends on /proc, so can't be used in a chroot. * Test that freopen and freopen64 are genuinely different in configurations with 32-bit off_t by checking for an EFBIG trying to write past 2GB in a file opened with freopen in such a configuration but no error with 64-bit off_t or when opening with freopen64. * Test freopen of stdin, stdout and stderr. Tested for x86_64 and x86.
2024-09-20Make tst-strtod-underflow type-genericJoseph Myers1-60/+297
The test tst-strtod-underflow covers various edge cases close to the underflow threshold for strtod (especially cases where underflow on architectures with after-rounding tininess detection depends on the rounding mode). Make it use the type-generic machinery, with corresponding test inputs for each supported floating-point format, so that other functions in the strtod family are tested for underflow edge cases as well. Tested for x86_64.
2024-09-20Add tests of more strtod special casesJoseph Myers1-0/+14
There is very little test coverage of inputs to strtod-family functions that don't contain anything that can be parsed as a number (one test of ".y" in tst-strtod2), and none that I can see of skipping initial whitespace. Add some tests of these things to tst-strtod2. Tested for x86_64.
2024-09-20Add more tests of strtod end pointerJoseph Myers1-2/+39
Although there are some tests in tst-strtod2 and tst-strtod3 for the end pointer provided by strtod when it doesn't parse the whole string, they aren't very thorough. Add tests of more such cases to tst-strtod2. Tested for x86_64.
2024-09-20Make tst-strtod2 and tst-strtod5 type-genericJoseph Myers2-82/+118
Some of the strtod tests use type-generic machinery in tst-strtod.h to test the strto* functions for all floating types, while others only test double even when the tests are in fact meaningful for all floating types. Convert tst-strtod2 and tst-strtod5 to use the type-generic machinery so they test all floating types. I haven't tried to convert them to use newer test interfaces in other ways, just made the changes necessary to use the type-generic machinery. Tested for x86_64.
2024-09-21Implement run-built-tests=no for make xcheck, always build xtestsFlorian Weimer1-6/+11
Previously, the second occurrence of the xtests target expected all xtests to run (as the result of specifying $(xtests)), but these tests have not been run due to the the first xtests target is set up for run-built-tests=no: it only runs tests in $(xtests-special). Consequently, xtests are reported as UNSUPPORTED with “make xcheck run-built-tests=no”. The xtests were not built, either. After this change always, xtests are built regardless of the $(run-built-tests) variable (except for xtests listed in $(tests-unsupported)). To fix the UNSUPPORTED issue, introduce xtests-expected and use that manage test expectations in the second xtests target. Reviewed-by: Carlos O'Donell <carlos@redhat.com>
2024-09-20Test that errno is set to 0 at program startupAaron Merey2-0/+59
Add new testcase elf/tst-startup-errno.c which tests that errno is set to 0 at first ELF constructor execution and at the start of the program's main function. Tested for x86_64 Reviewed-by: Carlos O'Donell <carlos@redhat.com>
2024-09-20Add another test for fclose on an unopened fileAaron Merey4-3/+69
Add new file libio/tst-fclose-unopened2.c that tests whether fclose on an unopened file returns EOF. This test differs from tst-fclose-unopened.c by ensuring the file's buffer is allocated prior to double-fclose. A comment in tst-fclose-unopened.c now clarifies that it is testing a file with an unallocated buffer. Calling fclose on unopened files normally causes a use-after-free bug, however the standard streams are an exception since they are not deallocated by fclose. Tested for x86_64. Reviewed-by: Carlos O'Donell <carlos@redhat.com>
2024-09-20iconv: Input buffering for the iconv program (bug 6050)Florian Weimer2-106/+109
Do not read the entire input file into memory. Reviewed-by: DJ Delorie <dj@redhat.com>
2024-09-20iconv: Multiple - on command line should not fail (bug 32050)Florian Weimer2-1/+7
Usually, the second and subsequent - return EOF immediately and do not contribute to the output, but this is not an error. Reviewed-by: DJ Delorie <dj@redhat.com>
2024-09-20iconv: Support in-place conversions (bug 10460, bug 32033)Florian Weimer4-75/+386
Check if any of the input files overlaps with the output file, and use a temporary file in this case, so that the input is no clobbered before it is read. This fixes bug 10460. It allows to use iconv more easily as a functional replacement for GNU recode. The updated output buffer management truncates the output file if there is no input, fixing bug 32033. Reviewed-by: DJ Delorie <dj@redhat.com>
2024-09-20iconv: Preserve iconv -c error exit on invalid inputs (bug 32046)Florian Weimer16-108/+280
In several converters, a __GCONV_ILLEGAL_INPUT result gets overwritten with __GCONV_FULL_OUTPUT. As a result, iconv (the function) returns E2BIG instead of EILSEQ. The iconv program does not see the original EILSEQ failure, does not recognize the invalid input, and may incorrectly exit successfully. To address this, a new __flags bit is used to indicate a sticky input error state. All __GCONV_ILLEGAL_INPUT results are replaced with a function call that sets this new __GCONV_ENCOUNTERED_ILLEGAL_INPUT and returns __GCONV_ILLEGAL_INPUT. The iconv program checks for __GCONV_ENCOUNTERED_ILLEGAL_INPUT and overrides the exit status. The converter changes introducing __gconv_mark_illegal_input are mostly mechanical, except for the res variable initialization in iconvdata/iso-2022-jp.c: this error gets overwritten with __GCONV_OK and other results in the following code. If res == __GCONV_ILLEGAL_INPUT afterwards, STANDARD_TO_LOOP_ERR_HANDLER below will handle it. The __gconv_mark_illegal_input changes do not alter the errno value set by the iconv function. This is simpler to implement than reviewing each __GCONV_FULL_OUTPUT result and adjust it not to override a previous __GCONV_ILLEGAL_INPUT result. Doing it that way would also change some E2BIG errors in to EILSEQ errors, so it had to be done conditionally (under a flag set by the iconv program only), to avoid confusing buffer management in other applications. Reviewed-by: DJ Delorie <dj@redhat.com>
2024-09-20manual: __is_last is no longer part of iconv internalsFlorian Weimer1-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>
2024-09-20iconv: Do not use mmap in iconv (the program) (bug 17703)Florian Weimer1-41/+1
On current systems, very large files are needed before mmap becomes beneficial. Simplify the implementation. This exposed that inptr was not initialized correctly in process_fd. Handling multiple input files resulted in EFAULT in read because a null pointer was passed. This could be observed previously if an input file was not mappable and was reported as bug 17703. Reviewed-by: DJ Delorie <dj@redhat.com>
2024-09-20iconv: Base tests for buffer managementFlorian Weimer2-2/+187
Reviewed-by: DJ Delorie <dj@redhat.com>
2024-09-19AArch64: Add vector logp1 alias for log1pJoe Ramsay10-1/+42
This enables vectorisation of C23 logp1, which is an alias for log1p. There are no new tests or ulp entries because the new symbols are simply aliases. Reviewed-by: Wilco Dijkstra <Wilco.Dijkstra@arm.com>
2024-09-19hurd: Avoid file_check_access () RPC for access (F_OK)Sergey Bugaev1-0/+9
A common use case of access () / faccessat () is checking for file existence, not any specific access permissions. In that case, we can avoid doing the file_check_access () RPC; whether the given path had been successfully resolved to a file is all we need to know to answer. This is prompted by GLib switching to use faccessat (F_OK) to implement g_file_query_exists () for local files. https://gitlab.gnome.org/GNOME/glib/-/merge_requests/4272 Signed-off-by: Sergey Bugaev <bugaevc@gmail.com> Message-ID: <20240919101439.179663-1-bugaevc@gmail.com>
2024-09-14tst: Extend cross-test-ssh.sh to support passing glibc tunablesYury Khrustalev1-0/+18
This patch adds new flag --glibctunables to the cross-test-ssh.sh script to pass Glibc tunables to the system on which tests are executed. The value to pass can be also provided via the GLIBC_TUNABLES environment variable. This works similar to the TIMEOUTFACTOR variable. Sometimes it is useful to cross test glibc with some non-default tunable, and a global environment variable is the easiest way to inject some tunable value into most tests. With this patch using cross-test-ssh.sh script becomes very similar to running a test natively on the local host when using non-default tunable is important. Reviewed-by: Arjun Shankar <arjun@redhat.com>
2024-09-12support: Fix Hurd build of tst-support_readdirFlorian Weimer1-4/+7
Check for the availability of the d_off member at compile time, not run time. Fixes commit 1251e9ea49fba9f53bbf4f290f3db90c01931fa7 ("support: Add <support/readdir.h>").
2024-09-12support: Add <support/readdir.h>Florian Weimer4-0/+475
It allows to read directories using the six readdir variants without writing type-specific code or using skeleton files that are compiled four times. The readdir_r subtest for support_readdir_expect_error revealed bug 32124. Reviewed-by: DJ Delorie <dj@redhat.com>
2024-09-11Linux: Add missing scheduler constants to <sched.h>Florian Weimer4-0/+82
And add a test, misc/tst-sched-consts, that checks consistency with <sched.h>. Reviewed-by: Carlos O'Donell <carlos@redhat.com>
2024-09-11Linux: Add the sched_setattr and sched_getattr functionsFlorian Weimer41-2/+391
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>
2024-09-11manual: Extract the @manpageurl{func,sec} macroFlorian Weimer1-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>
2024-09-10AArch64: Remove memset-reg.hWilco Dijkstra6-35/+28
Remove memset-reg.h by moving register definitions into the memset implementations. Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
2024-09-10debug: Fix read error handling in pcprofiledumpFlorian Weimer1-36/+47
The reading loops did not check for read failures. Addresses a static analysis report. Manually tested by compiling a program with the GCC's -finstrument-functions option, running it with “LD_PRELOAD=debug/libpcprofile.so PCPROFILE_OUTPUT=output-file”, and reviewing the output of “debug/pcprofiledump output-file”.
2024-09-09elf: Fix tst-dlopen-tlsreinit1.out test dependencyFlorian Weimer1-1/+1
Fixes commit 5097cd344fd243fb8deb6dec96e8073753f962f9 ("elf: Avoid re-initializing already allocated TLS in dlopen (bug 31717)"). Reported-by: Patsy Griffin <patsy@redhat.com> Reviewed-by: Patsy Griffin <patsy@redhat.com>
2024-09-09Add a new fwrite test for memory streamsTulio Magno Quites Machado Filho2-0/+178
Ensure that fwrite() behaves correctly when using memory streams. Reviewed-by: Carlos O'Donell <carlos@redhat.com>
2024-09-09Add a new fwrite test for read-only streamsTulio Magno Quites Machado Filho2-0/+66
Ensure that fwrite() behaves correctly even when the stream is read-only. Reviewed-by: Carlos O'Donell <carlos@redhat.com>
2024-09-09AArch64: Optimize memsetWilco Dijkstra1-111/+84
Improve small memsets by avoiding branches and use overlapping stores. Use DC ZVA for copies over 128 bytes. Remove unnecessary code for ZVA sizes other than 64 and 128. Performance of random memset benchmark improves by 24% on Neoverse N1. Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
2024-09-09hppa: Update libm-test-ulpsJohn David Anglin1-21/+21