aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2022-11-07hurd: Add sigtimedwait and sigwaitinfo supportSamuel Thibault
This simply needed to add the timeout parameter to mach_msg, and copy information from struct hurd_signal_detail.
2022-11-07Apply asm redirection in gmp.h before first useAdhemerval Zanella
For clang the redeclaration after the first use, the visibility attribute is silently ignored (symbol is STV_DEFAULT) while the asm label attribute causes an error. Reviewed-by: Fangrui Song <maskray@google.com>
2022-11-07Rewrite find_cxx_header config configure.acAdhemerval Zanella
With clang if the main file is <stdin>, the first non-main-file dependency is not listed in the -MP output. Although it was fixed on clang-16 [1], this change adds portability for older version. [1] https://github.com/llvm/llvm-project/commit/ff9576f74514b836e1ba0268409a2ecb919d7118 Reviewed-by: Fangrui Song <maskray@google.com>
2022-11-07elf/tlsdeschtab.h: Add the Malloc return value check in ↵Xiaoming Ni
_dl_make_tlsdesc_dynamic() Check the return value of malloc based on the function header comment of _dl_make_tlsdesc_dynamic(). If the return value fails, NULL is returned. Signed-off-by: Xiaoming Ni <nixiaoming@huawei.com> Reviewed-by: Szabolcs Nagy <szabolcs.nagy@arm.com>
2022-11-04elf: Disable some subtests of ifuncmain1, ifuncmain5 for !PIEFlorian Weimer
2022-11-04posix: Make posix_spawn extensions available by defaultFlorian Weimer
Some sources merely include <spawn.h> without -D_GNU_SOURCE and expect declarations for posix_spawn_file_actions_addchdir_np to be available. For consistency, declare posix_spawn_file_actions_addfchdir_np, posix_spawn_file_actions_addclosefrom_np, posix_spawn_file_actions_addtcsetpgrp_np as well. Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
2022-11-03x86_64: Implement evex512 version of strrchr and wcsrchrSunil K Pandey
Changes from v1: Use vec api for register. Replace VPCMP with VPCMPEQ Restructure and remove 1 unconditional jump. Change page cross logic to use sall. This patch implements following evex512 version of string functions. evex512 version takes up to 30% less cycle as compared to evex, depending on length and alignment. - strrchr function using 512 bit vectors. - wcsrchr function using 512 bit vectors. Code size data: strrchr-evex.o 879 byte strrchr-evex512.o 601 byte (-32%) wcsrchr-evex.o 882 byte wcsrchr-evex512.o 572 byte (-35%) Placeholder function, not used by any processor at the moment. Reviewed-by: Noah Goldstein <goldstein.w.n@gmail.com>
2022-11-03elf: Introduce <dl-call_tls_init_tp.h> and call_tls_init_tp (bug 29249)Florian Weimer
This makes it more likely that the compiler can compute the strlen argument in _startup_fatal at compile time, which is required to avoid a dependency on strlen this early during process startup. Reviewed-by: Szabolcs Nagy <szabolcs.nagy@arm.com>
2022-11-03LoongArch: Fix ABI related macros in elf.h to keep consistent with binutils[1].caiyinyu
[1]: https://sourceware.org/git/?p=binutils-gdb.git;a=commitdiff;h=c4a7e6b56218e1d5a858682186b542e2eae01a4a;hp=0d94a8735055432029237612a6eb9165db1ec9dd [2]: Reference: https://loongson.github.io/LoongArch-Documentation/LoongArch-ELF-ABI-EN.html#_e_flags_identifies_abi_type_and_version
2022-11-03scripts/glibcelf.py: Properly report <elf.h> parsing failuresFlorian Weimer
Without this change, parse failures result in an exception: Traceback (most recent call last): File "tst-glibcelf.py", line 23, in <module> import glibcelf File "/path/to/git/scripts/glibcelf.py", line 226, in <module> _elf_h = _parse_elf_h() File "/path/to/git/scripts/glibcelf.py", line 221, in _parse_elf_h result = glibcpp.macro_eval(glibcpp.macro_definitions(tokens), reporter) File "/path/to/git/scripts/glibcpp.py", line 379, in macro_eval reporter.error(md.line, 'macro {} redefined'.format(md.name)) File "/path/to/git/scripts/glibcelf.py", line 214, in error errors += 1 UnboundLocalError: local variable 'errors' referenced before assignment
2022-11-03elf: Rework exception handling in the dynamic loader [BZ #25486]Florian Weimer
The old exception handling implementation used function interposition to replace the dynamic loader implementation (no TLS support) with the libc implementation (TLS support). This results in problems if the link order between the dynamic loader and libc is reversed (bug 25486). The new implementation moves the entire implementation of the exception handling functions back into the dynamic loader, using THREAD_GETMEM and THREAD_SETMEM for thread-local data support. These depends on Hurd support for these macros, added in commit b65a82e4e757c1e6cb7073916 ("hurd: Add THREAD_GET/SETMEM/_NC"). One small obstacle is that the exception handling facilities are used before the TCB has been set up, so a check is needed if the TCB is available. If not, a regular global variable is used to store the exception handling information. Also rename dl-error.c to dl-catch.c, to avoid confusion with the dlerror function. Reviewed-by: Siddhesh Poyarekar <siddhesh@sourceware.org>
2022-11-02linux: Drop useless include from fstatat.cAurelien Jarno
It is a left-over from previous refactorings. Reviewed by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
2022-11-02Fix OOB read in stdlib thousand grouping parsing [BZ #29727]Szabolcs Nagy
__correctly_grouped_prefixmb only worked with thousands_len == 1, otherwise it read past the end of cp or thousands. This affects scanf formats like %'d, %'f and the internal but exposed __strto{l,ul,f,d,..}_internal with grouping flag set and an LC_NUMERIC locale where thousands_len > 1. Avoid OOB access by considering thousands_len when initializing cp. This fixes bug 29727. Found by the morello port with strict bounds checking where FAIL: stdlib/tst-strtod4 FAIL: stdlib/tst-strtod5i crashed using a locale with thousands_len==3.
2022-11-02linux: Fix fstatat on MIPSn64 (BZ #29730)Aurelien Jarno
Commit 6e8a0aac2f883 ("time: Fix overflow itimer tests on 32-bit systems") changed in_time_t_range to assume a 32-bit time_t. This broke fstatat on MIPSn64 that was using it with a 64-bit time_t due to difference between stat and stat64. This commit fix that by adding a MIPSn64 specific version, which bypasses the EOVERFLOW tests. Resolves: BZ #29730 Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
2022-11-02elf: Remove allocate use on _dl_debug_printfAdhemerval Zanella
The maximum number of directives is already limited by the maximum value of iovec, and current padding usage on _dl_map_object_from_fd specifies a value of 16 (2 times sizeof (void *)) in hexa, which is less than the INT_STRLEN_BOUND(void *) (20 for LP64). This works if pointers are larger than 8 bytes, for instance 16. In this case the maximum padding would be 32 and the IFMTSIZE would be 40. The resulting code does use a slightly larger static stack, the output of -fstack-usage (for x86_64): * master: dl-printf.c:35:1:_dl_debug_vdprintf 1344 dynamic * patch: dl-printf.c:36:1:_dl_debug_vdprintf 2416 static However, there is an improvement in code generation: * master text data bss dec hex filename 3309 0 0 3309 ced elf/dl-printf.os * patch text data bss dec hex filename 3151 0 0 3151 c4f elf/dl-printf.os Checked on x86_64-linux-gnu. Reviewed-by: Szabolcs Nagy <szabolcs.nagy@arm.com>
2022-11-01nptl: Fix pthread_create.c build with clangAdhemerval Zanella
clang complains that libc_hidden_data_def (__nptl_threads_events) creates an invalid alias: pthread_create.c:50:1: error: alias must point to a defined variable or function libc_hidden_data_def (__nptl_threads_events) ^ ../include/libc-symbols.h:621:37: note: expanded from macro 'libc_hidden_data_def' It seems that clang requires that a proper prototype is defined prior the hidden alias creation. Reviewed-by: Fangrui Song <maskray@google.com>
2022-11-01allocate_once: Apply asm redirection before first useAdhemerval Zanella
Compilers may not be able to apply asm redirections to functions after these functions are used for the first time, e.g. clang 15. Reviewed-by: Fangrui Song <maskray@google.com>
2022-11-01alloc_buffer: Apply asm redirection before first useAdhemerval Zanella
Compilers may not be able to apply asm redirections to functions after these functions are used for the first time, e.g. clang 15. Reviewed-by: Fangrui Song <maskray@google.com>
2022-11-01configure: Use -Wno-ignored-attributes if compiler warns about multiple aliasesAdhemerval Zanella
clang emits an warning when a double alias redirection is used, to warn the the original symbol will be used even when weak definition is overridden. However, this is a common pattern for weak_alias, where multiple alias are set to same symbol. Reviewed-by: Fangrui Song <maskray@google.com>
2022-11-01Disable use of -fsignaling-nans if compiler does not support itAdhemerval Zanella
Reviewed-by: Fangrui Song <maskray@google.com>
2022-11-01intl: Fix clang -Wunused-but-set-variable on plural.cAdhemerval Zanella
Clang warns that '__gettextnerrs' set but not used: intl/plural.c:1034:9: error: variable '__gettextnerrs' set but not used [-Werror,-Wunused-but-set-variable] int yynerrs = 0; ^ Clang 15 (https://reviews.llvm.org/D122271) -Wunused-but-set-variable gives a warning while GCC doesn't. The -Wunused-but-set-variable is available in GCC 4.6, lower than the minimum required version 6.2. Since the file is auto-generated, suppress the warning with a compiler flag. Reviewed-by: Fangrui Song <maskray@google.com>
2022-11-01Apply asm redirection in not-cancel before first useAdhemerval Zanella
It is avoid a build failure on clang where it can not redeclare function attribute after its first use. Reviewed-by: Fangrui Song <maskray@google.com>
2022-11-01malloc: Use uintptr_t for pointer alignmentCarlos Eduardo Seo
Avoid integer casts that assume unsigned long can represent pointers. Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
2022-11-01Use uintptr_t in fts for pointer alignmentSzabolcs Nagy
The code assumed unsigned long can represent pointers. Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
2022-10-31Fix build with GCC 13 _FloatN, _FloatNx built-in functionsJoseph Myers
GCC 13 has added more _FloatN and _FloatNx versions of existing <math.h> and <complex.h> built-in functions, for use in libstdc++-v3. This breaks the glibc build because of how those functions are defined as aliases to functions with the same ABI but different types. Add appropriate -fno-builtin-* options for compiling relevant files, as already done for the case of long double functions aliasing double ones and based on the list of files used there. I fixed some mistakes in that list of double files that I noticed while implementing this fix, but there may well be more such (harmless) cases, in this list or the new one (files that don't actually exist or don't define the named functions as aliases so don't need the options). I did try to exclude cases where glibc doesn't define certain functions for _FloatN or _FloatNx types at all from the new uses of -fno-builtin-* options. As with the options for double files (see the commit message for commit 49348beafe9ba150c9bd48595b3f372299bddbb0, "Fix build with GCC 10 when long double = double."), it's deliberate that the options are used even if GCC currently doesn't have a built-in version of a given functions, so providing some level of future-proofing against more such built-in functions being added in future. Tested with build-many-glibcs.py for aarch64-linux-gnu powerpc-linux-gnu powerpc64le-linux-gnu x86_64-linux-gnu (compilers and glibcs builds) with GCC mainline.
2022-10-31elf: Build tst-relr-mod[34]a.so with $(LDFLAGS-rpath-ORIGIN)H.J. Lu
When --enable-hardcoded-path-in-tests is used only with DT_RUNPATH, elf/tst-relr3 and elf/tst-relr4 failed to run. Their dependency libraries, tst-relr-mod3a.so and tst-relr-mod4a.so, are failed to load since DT_RUNPATH on executable doesn't apply to them. Build tst-relr-mod3a.so and tst-relr-mod4a.so with $(LDFLAGS-rpath-ORIGIN) to add DT_RUNPATH for their dependency libraries. Reviewed-by: Fangrui Song <maskray@google.com>
2022-10-30x86-64: Improve evex512 version of strlen functionsSunil K Pandey
This patch improves following functionality - Replace VPCMP with VPCMPEQ. - Replace page cross check logic with sall. - Remove extra lea from align_more. - Remove uncondition loop jump. - Use bsf to check max length in first vector. Reviewed-by: Noah Goldstein <goldstein.w.n@gmail.com>
2022-10-28Correctly determine libc.so 'OUTPUT_FORMAT' when cross-compiling.Ludovic Courtès
Commit 87d583c6e8cd0e49f64da76636ebeec033298b4d replaces the sed script with an "objdump -f" invocation to determine the 'OUTPUT_FORMAT' bit of the libc.so linker script. However, when cross-compiling, for example from x86_64-linux-gnu to aarch64-linux-gnu, "objdump -f" would report the wrong format ("elf64-little"). Conversely, "aarch64-linux-gnu-objdump -f" reports "elf64-littleaarch64" as expected. This patch changes 'configure.ac' to use AC_CHECK_TOOL rather than '$CC -print-prog-name=objdump' to determine the value of the OBJDUMP variable. That way, OBJDUMP is set to TRIPLET-objdump when cross-compiling for TRIPLET. Reviewed-by: Carlos O'Donell <carlos@redhat.com> Tested-by: Carlos O'Donell <carlos@redhat.com>
2022-10-28Remove unused scratch_buffer_dupfreeSzabolcs Nagy
Turns out scratch_buffer_dupfree internal API was unused since commit ef0700004bf0dccf493a5e8e21f71d9e7972ea9f stdlib: Simplify buffer management in canonicalize And the related test in malloc/tst-scratch_buffer had issues so it's better to remove it completely. Reviewed-by: Florian Weimer <fweimer@redhat.com>
2022-10-28Fix elf/tst-dlmopen-twice not to exhaust static TLSSzabolcs Nagy
By default glibc only allocates enough static TLS for 4 link namespaces including the initial one. So only use 3 dlmopens in the test. Reviewed-by: Florian Weimer <fweimer@redhat.com>
2022-10-28Use uintptr_t in string/tester for pointer alignmentSzabolcs Nagy
The code assumed unsigned long can represent pointers. Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
2022-10-28stdlib/strfrom: Add copysign to fix NAN issue on riscv (BZ #29501)Letu Ren
According to the specification of ISO/IEC TS 18661-1:2014, The strfromd, strfromf, and strfroml functions are equivalent to snprintf(s, n, format, fp) (7.21.6.5), except the format string contains only the character %, an optional precision that does not contain an asterisk *, and one of the conversion specifiers a, A, e, E, f, F, g, or G, which applies to the type (double, float, or long double) indicated by the function suffix (rather than by a length modifier). Use of these functions with any other 20 format string results in undefined behavior. strfromf will convert the arguement with type float to double first. According to the latest version of IEEE754 which is published in 2019, Conversion of a quiet NaN from a narrower format to a wider format in the same radix, and then back to the same narrower format, should not change the quiet NaN payload in any way except to make it canonical. When either an input or result is a NaN, this standard does not interpret the sign of a NaN. However, operations on bit strings—copy, negate, abs, copySign—specify the sign bit of a NaN result, sometimes based upon the sign bit of a NaN operand. The logical predicates totalOrder and isSignMinus are also affected by the sign bit of a NaN operand. For all other operations, this standard does not specify the sign bit of a NaN result, even when there is only one input NaN, or when the NaN is produced from an invalid operation. converting NAN or -NAN with type float to double doesn't need to keep the signbit. As a result, this test case isn't mandatory. The problem is that according to RISC-V ISA manual in chapter 11.3 of riscv-isa-20191213, Except when otherwise stated, if the result of a floating-point operation is NaN, it is the canonical NaN. The canonical NaN has a positive sign and all significand bits clear except the MSB, a.k.a. the quiet bit. For single-precision floating-point, this corresponds to the pattern 0x7fc00000. which means that conversion -NAN from float to double won't keep the signbit. Since glibc ought to be consistent here between types and architectures, this patch adds copysign to fix this problem if the string is NAN. This patch adds two different functions under sysdeps directory to work around the issue. This patch has been tested on x86_64 and riscv64. Resolves: BZ #29501 v2: Change from macros to different inline functions. v3: Add unlikely check to isnan. v4: Fix wrong commit message header. v5: Fix style: add space before parentheses. v6: Add copyright. Signed-off-by: Letu Ren <fantasquex@gmail.com> Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
2022-10-28Fix resource/bug-ulimit1 testSzabolcs Nagy
ulimit is a variadic function and the second argument must have type long (or unsigned long). Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
2022-10-28Fix missing NUL terminator in stdio-common/scanf13 testSzabolcs Nagy
sscanf is only defined on nul terminated string input, but '\0' was missing in this test which caused _IO_str_init_static_internal to read OOB on the stack when computing the bounds of the string. Reviewed-by: Florian Weimer <fweimer@redhat.com>
2022-10-28Fix off-by-one OOB read in elf/tst-tls20Szabolcs Nagy
The int mods[nmods] array on the stack was overread by one. Reviewed-by: Florian Weimer <fweimer@redhat.com>
2022-10-28elf: Fix alloca size in _dl_debug_vdprintfSzabolcs Nagy
The alloca size did not consider the optional width parameter for padding which could cause buffer underflow. The width is currently used e.g. by _dl_map_object_from_fd which passes 2 * sizeof(void *) which can be larger than the alloca buffer size on targets where sizeof(void *) >= 2 * sizeof(unsigned long). Even if large width is not used on existing targets it is better to fix the formatting code to avoid surprises. Reviewed-by: Florian Weimer <fweimer@redhat.com>
2022-10-28malloc: Use uintptr_t in alloc_bufferSzabolcs Nagy
The values represnt pointers and not sizes. The members of struct alloc_buffer are already uintptr_t. Reviewed-by: Florian Weimer <fweimer@redhat.com>
2022-10-28Fix invalid pointer dereference in wcpcpy_chkSzabolcs Nagy
The src pointer is const and points to a different object, so accessing dest via src is invalid. Reviewed-by: Florian Weimer <fweimer@redhat.com>
2022-10-28Fix invalid pointer dereference in wcscpy_chkSzabolcs Nagy
The src pointer is const and points to a different object, so accessing dest via src is invalid. Reviewed-by: Florian Weimer <fweimer@redhat.com>
2022-10-28aarch64: Fix the extension header write in getcontext and swapcontextSzabolcs Nagy
The extension header is two 32bit words and in the last header both should be 0. There is plenty space in the __reserved area, but it's better not to write more than we mean to.
2022-10-28aarch64: Don't build wordcopySzabolcs Nagy
Use an empty wordcopy.c to avoid building the generic one. It does not seem to be used anywhere. Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
2022-10-28scripts: Use bool in tunables initializerSzabolcs Nagy
The initializer for a tunable_t set the bool initialized flag to NULL. This causes a build failure when pointer to bool conversion warns. Reviewed-by: Florian Weimer <fweimer@redhat.com>
2022-10-28longlong.h: update from GCC for LoongArch clz/ctz supportXi Ruoyao
Update longlong.h to GCC r13-3269. Keep our local change (prefer https for gnu.org URL).
2022-10-27elf: Introduce to _dl_call_finiFlorian Weimer
This consolidates the destructor invocations from _dl_fini and dlclose. Remove the micro-optimization that avoids calling _dl_call_fini if they are no destructors (as dlclose is quite expensive anyway). The debug log message is now printed unconditionally. Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
2022-10-27ld.so: Export tls_init_tp_called as __rtld_tls_init_tp_calledFlorian Weimer
This allows the rest of dynamic loader to check whether the TCB has been set up (and THREAD_GETMEM and THREAD_SETMEM will work). Reviewed-by: Siddhesh Poyarekar <siddhesh@gotplt.org>
2022-10-27scripts/localplt.awk: Handle DT_JMPREL with empty PLT (for C-SKY)Florian Weimer
On csky-linux-gnuabiv2, binutils 2.33 produces a DT_JMPREL entry for the dynamic loader if it does not contain any PLT relocations: Dynamic section at offset 0x1df48 contains 19 entries: Tag Type Name/Value 0x0000000e (SONAME) Library soname: [ld-linux-cskyv2-hf.so.1] 0x00000004 (HASH) 0xd4 0x6ffffef5 (GNU_HASH) 0x1a8 0x00000005 (STRTAB) 0x4ac 0x00000006 (SYMTAB) 0x28c 0x0000000a (STRSZ) 527 (bytes) 0x0000000b (SYMENT) 16 (bytes) 0x00000003 (PLTGOT) 0x1f000 0x00000002 (PLTRELSZ) 0 (bytes) 0x00000014 (PLTREL) RELA 0x00000017 (JMPREL) 0xaa4 0x00000007 (RELA) 0x75c 0x00000008 (RELASZ) 840 (bytes) 0x00000009 (RELAENT) 12 (bytes) 0x6ffffffc (VERDEF) 0x700 0x6ffffffd (VERDEFNUM) 3 0x6ffffff0 (VERSYM) 0x6bc 0x6ffffff9 (RELACOUNT) 68 0x00000000 (NULL) 0x0 This confuses the script: Unexpected output from check-localplt: …/elf/ld.so.jmprel: *** DT_JMPREL does not match any section's address This commit changes the script to record the DT_PLTRELSZ value and reject DT_JMPREL values not a section boundary only if DT_PLTRELSZ is present with a non-zero value. Reviewed-by: Siddhesh Poyarekar <siddhesh@sourceware.org>
2022-10-26Remove lingering libSegfault Makefile entriesAdhemerval Zanella
The library was removed by 65ccd641ba.
2022-10-26aarch64: Use memcpy_simd as the default memcpyWilco Dijkstra
Since __memcpy_simd is the fastest memcpy on almost all cores, replace the generic memcpy with it. If SVE is available, a SVE memcpy will be used by default (including for Neoverse N2).
2022-10-26aarch64: Cleanup memset ifuncWilco Dijkstra
Cleanup memset ifunc selectors. The A64FX memset relies on a ZVA size of 256, so add an explicit check.
2022-10-26elf: Reinstate on DL_DEBUG_BINDINGS _dl_lookup_symbol_xAdhemerval Zanella
The prelink removal done by 6628c742b2c16e wrongly removed the debug support. Checked on x86_64-linux-gnu.