about summary refs log tree commit diff
Commit message (Collapse)AuthorAgeFilesLines
* Add SEM_STAT_ANY from Linux 4.17 to bits/sem.h.Joseph Myers2018-06-1811-0/+31
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Linux 4.17 adds a SEM_STAT_ANY constant (ipcs command). This patch adds it to the relevant bits/sem.h headers. Tested for x86_64. * sysdeps/unix/sysv/linux/alpha/bits/sem.h [__USE_MISC] (SEM_STAT_ANY): New macro. * sysdeps/unix/sysv/linux/bits/sem.h [__USE_MISC] (SEM_STAT_ANY): Likewise. * sysdeps/unix/sysv/linux/generic/bits/sem.h [__USE_MISC] (SEM_STAT_ANY): Likewise. * sysdeps/unix/sysv/linux/hppa/bits/sem.h [__USE_MISC] (SEM_STAT_ANY): Likewise. * sysdeps/unix/sysv/linux/ia64/bits/sem.h [__USE_MISC] (SEM_STAT_ANY): Likewise. * sysdeps/unix/sysv/linux/mips/bits/sem.h [__USE_MISC] (SEM_STAT_ANY): Likewise. * sysdeps/unix/sysv/linux/powerpc/bits/sem.h [__USE_MISC] (SEM_STAT_ANY): Likewise. * sysdeps/unix/sysv/linux/s390/bits/sem.h [__USE_MISC] (SEM_STAT_ANY): Likewise. * sysdeps/unix/sysv/linux/sparc/bits/sem.h [__USE_MISC] (SEM_STAT_ANY): Likewise. * sysdeps/unix/sysv/linux/x86/bits/sem.h [__USE_MISC] (SEM_STAT_ANY): Likewise.
* Add MSG_STAT_ANY from Linux 4.17 to bits/msq.h.Joseph Myers2018-06-1811-0/+31
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Linux 4.17 adds a MSG_STAT_ANY constant (ipcs command). This patch adds it to the relevant bits/msq.h headers. Tested for x86_64. * sysdeps/unix/sysv/linux/alpha/bits/msq.h [__USE_MISC] (MSG_STAT_ANY): New macro. * sysdeps/unix/sysv/linux/bits/msq.h [__USE_MISC] (MSG_STAT_ANY): Likewise. * sysdeps/unix/sysv/linux/generic/bits/msq.h [__USE_MISC] (MSG_STAT_ANY): Likewise. * sysdeps/unix/sysv/linux/hppa/bits/msq.h [__USE_MISC] (MSG_STAT_ANY): Likewise. * sysdeps/unix/sysv/linux/ia64/bits/msq.h [__USE_MISC] (MSG_STAT_ANY): Likewise. * sysdeps/unix/sysv/linux/mips/bits/msq.h [__USE_MISC] (MSG_STAT_ANY): Likewise. * sysdeps/unix/sysv/linux/powerpc/bits/msq.h [__USE_MISC] (MSG_STAT_ANY): Likewise. * sysdeps/unix/sysv/linux/s390/bits/msq.h [__USE_MISC] (MSG_STAT_ANY): Likewise. * sysdeps/unix/sysv/linux/sparc/bits/msq.h [__USE_MISC] (MSG_STAT_ANY): Likewise. * sysdeps/unix/sysv/linux/x86/bits/msq.h [__USE_MISC] (MSG_STAT_ANY): Likewise.
* Update MAP_TYPE value for hppa from Linux 4.17.Joseph Myers2018-06-182-1/+6
| | | | | | | | | | | | | This patch updates the hppa definition of MAP_TYPE to reflect a corresponding change in the Linux kernel in 4.17 (so the value now has four bits set, as it does on other architectures, although they are different from other architectures because of hppa differences in other MAP_* bits). Tested with build-many-glibcs.py for hppa. * sysdeps/unix/sysv/linux/hppa/bits/mman.h [__USE_MISC] (MAP_TYPE): Change value to 0x2b.
* Linux: Create Netlink socket with SOCK_CLOEXEC in __check_pf [BZ #15722]Florian Weimer2018-06-182-1/+7
|
* Fix powerpc64le build of nan-sign tests (bug 23303).Joseph Myers2018-06-182-1/+13
| | | | | | | | | | | | | | | | My recent nan-sign tests fail to build for powerpc64le with GCC 8 because of the special compile / link options needed there for any test using _Float128. This patch arranges for these tests to be handled on powerpc64le similarly to other such tests. Tested with build-many-glibcs.py for powerpc64le. [BZ #23303] * sysdeps/powerpc/powerpc64/le/Makefile (CFLAGS-tst-strtod-nan-sign.c): Add -mfloat128. (CFLAGS-tst-wcstod-nan-sign.c): Likewise. (gnulib-tests): Also add $(f128-loader-link) for tst-strtod-nan-sign abd tst-wcstod-nan-sign.
* hurd: Fix reference to _hurd_self_sigstateSamuel Thibault2018-06-163-1/+14
| | | | | | | * sysdeps/hurd/include/hurd/signal.h (_hurd_self_sigstate): Add hidden prototype and definition. * sysdeps/mach/hurd/i386/____longjmp_chk.S (____longjmp_chk): Use hidden target for _hurd_self_sigstate.
* hurd: Fix missing __pthread_get_cleanup_stack symbolSamuel Thibault2018-06-166-15/+10
| | | | | | | | | | | | | | | | | | | Rework 57e1651557e8 ("hurd: Avoid PLT ref for __pthread_get_cleanup_stack") to keep the __pthread_get_cleanup_stack symbol. * htl/pt-cleanup.c (__pthread_get_cleanup_stack): Rename to ___pthread_get_cleanup_stack. (__pthread_get_cleanup_stack): Remove hidden def, add alias. * htl/pt-exit.c (__pthread_exit): Use ___pthread_get_cleanup_stack instead of __pthread_get_cleanup_stack. * sysdeps/htl/pthread-functions.h [libpthread] (__pthread_get_cleanup_stack): Remove hidden proto. * sysdeps/htl/pthreadP.h (___pthread_get_cleanup_stack): Add prototype. * sysdeps/htl/pthreadP.h (___pthread_get_cleanup_stack): Add hidden attribute. * htl/pt-join.c (__pthread_get_cleanup_stack): Define to ___pthread_get_cleanup_stack.
* hurd: Whitelist PLT refs which are difficult to avoidSamuel Thibault2018-06-162-0/+10
| | | | | * sysdeps/mach/hurd/localplt.data (siglongjmp, longjmp, __libc_lseek64, _IO_funlockfile): Whitelist PLT references.
* hurd: Avoid PLT references to syscallsSamuel Thibault2018-06-163-7/+20
| | | | | | | * mach/Makefile ($(mach-syscalls:%=$(objpfx))): Add hidden definition. * sysdeps/mach/include/mach/mach_traps.h (__mach_reply_port, __mach_thread_self, __mach_task_self, __mach_host_self, __swtch, __swtch_pri, __thread_switch, __evc_wait): Add hidden prototypes.
* hurd: Avoid PLT ref to __mach_msgSamuel Thibault2018-06-163-0/+6
| | | | | | * sysdeps/mach/include/mach.h (__mach_msg): Add hidden prototype. * mach/msg.c: Include <mach.h>. (__mach_msg): Add hidden definition.
* hurd: Avoid PLT references to shortcutsSamuel Thibault2018-06-164-0/+20
| | | | | | | * sysdeps/mach/include/mach-shortcuts-hidden.h: New file. * mach/shortcut.awk: Make syscall stubs include <mach-shortcuts-hidden.h> and add hidden definition. * sysdeps/mach/include/mach.h: Include <mach-shortcuts-hidden.h>.
* hurd: Avoid missing PLT ref from ld.so requirementSamuel Thibault2018-06-162-1/+2
| | | | * sysdeps/mach/hurd/localplt.data (ld.so): Make ref to __open optional.
* hurd: Avoid PLT ref for __pthread_get_cleanup_stackSamuel Thibault2018-06-165-4/+15
| | | | | | | | | | | | * htl/pt-cleanup.c (___pthread_get_cleanup_stack): Rename to __pthread_get_cleanup_stack. (__pthread_get_cleanup_stack): Remove alias, add hidden def. * htl/pt-exit.c (__pthread_exit): Use __pthread_get_cleanup_stack instead of ___pthread_get_cleanup_stack. * sysdeps/htl/pthread-functions.h [libpthread] (__pthread_get_cleanup_stack): Add hidden proto. * sysdeps/htl/pthreadP.h (___pthread_get_cleanup_stack): Remove prototype.
* hurd: Detect 32bit overflow in value returned by lseekSamuel Thibault2018-06-162-1/+14
| | | | | | * sysdeps/mach/hurd/lseek.c: Include <errno.h>. * sysdeps/mach/hurd/lseek.c (__libc_lseek): Check that the value returned by __lseek64 can fit off_t, return EOVERFLOW otherwise.
* hurd: avoid PLT ref between sendfile and sendfile64Samuel Thibault2018-06-164-3/+18
| | | | | | | | * include/sys/sendfile.h (__sendfile64): Declare hidden prototype. * sysdeps/mach/hurd/sendfile.c (sendfile): Call __sendfile64 instead of sendfile. * sysdeps/mach/hurd/sendfile64.c (sendfile64): Rename to __sendfile64. (sendfile64): New strong alias.
* Add tests for sign of NaN returned by strtod (bug 23007).Joseph Myers2018-06-156-2/+111
| | | | | | | | | | | | | | | | This patch adds tests for bug 23007, strtod ignoring any sign in the input string in the case of a NaN result. Tested for x86_64. [BZ #23007] * stdlib/tst-strtod-nan-sign-main.c: New file. * stdlib/tst-strtod-nan-sign.c: Likewise. * wcsmbs/tst-wcstod-nan-sign.c: Likewise. * stdlib/Makefile (tests): Add tst-strtod-nan-sign. ($(objpfx)tst-strtod-nan-sign): Depend on $(libm). * wcsmbs/Makefile (tests) Add tst-wcstod-nan-sign. ($(objpfx)tst-wcstod-nan-sign): Depend on $(libm).
* Fix sign of NaN returned by strtod (bug 23007).Herman ten Brugge2018-06-152-1/+7
| | | | | | | | | | | As reported in bug 23007, strtod ignores any sign in the input string in the case of a NaN result. Thes patch fixes this. Tested for x86_64 (in conjunction with tests to be added separately). [BZ #23007] * stdlib/strtod_l.c (____STRTOF_INTERNAL): Return NaN of appropriate sign.
* localedata: Make IBM273 compatible with ISO-8859-1 [BZ #23290]Florian Weimer2018-06-143-2/+10
| | | | Reviewed-by: Carlos O'Donell <carlos@redhat.com>
* hurd: Fix htl link failureSamuel Thibault2018-06-142-2/+7
| | | | | | | | | | 126b3ec370f0 ("hurd: Avoid PLTs for __mach_thread_self and __mach_reply_port") made mach traps hidden, but htl actually uses two of them. Re-expose them for now. Exposing them properly will be more involved since their definition is generated. * sysdeps/mach/include/mach/mach_traps.h (__mach_thread_self, __mach_task_self): Remove attribute_hidden.
* Ignore -Wrestrict for one strncat test.Joseph Myers2018-06-142-0/+9
| | | | | | | | | | | | | | | With current GCC mainline, one strncat test involving a size close to SIZE_MAX results in a -Wrestrict warning that that buffer size would imply that the two buffers must overlap. This patch fixes the build by adding disabling of -Wrestrict (for GCC versions supporting that option) to the already-present disabling of -Wstringop-overflow= and -Warray-bounds for this test. Tested with build-many-glibcs.py that this restores the testsuite build with GCC mainline for aarch64-linux-gnu. * string/tester.c (test_strncat) [__GNUC_PREREQ (7, 0)]: Also ignore -Wrestrict for one test.
* aarch64: Use an ifunc/VDSO to implement gettimeofday in shared glibc.Steve Ellcey2018-06-142-0/+76
| | | | | | | | | | | | | | | | | | This patch uses an ifunc to implement gettimeofday in the shared libc. This is faster compared to the vsyscall mechanism that has to check a global pointer, demangle it and call it indirectly when the VDSO is present. Resolving the gettimeofday symbol directly to the VDSO code is safe because there are no failures that the libc has to handle by setting errno like in a generic vsyscall (the only failure when the VDSO code falls back to a syscall is EFAULT, but passing an invalid pointer is undefined behaviour so returning -EFAULT is fine). If the kernel supports the VDSO interface we use it for extern calls, otherwise the old vsyscall method is used which falls back to a syscall. The static version of gettimeofday continues to use a syscall, libc.so internal calls use the old vsyscall method. * sysdeps/unix/sysv/linux/aarch64/gettimeofday.c: New file.
* scripts/update-abilist.sh: Accept empty list of files to patchFlorian Weimer2018-06-142-1/+8
| | | | | | Commit b289cd9db8286fa6c670104dd5dfcfc68d5d00d6 (“Ignore absolute symbols in ABI tests.”) broke “make update-all-abi” because an empty list of files is now passed to scripts/update-abilist.sh.
* hurd: Avoid a PLT referenceSamuel Thibault2018-06-142-6/+3
| | | | | * sysdeps/mach/hurd/i386/____longjmp_chk.S (____longjmp_chk): Do not use PLT to call _hurd_self_sigstate.
* hurd: Avoid PLTs for __mach_thread_self and __mach_reply_portSamuel Thibault2018-06-143-9/+18
| | | | | | | | * mach/mach/mach_traps.h (__mach_reply_port, __mach_thread_self, __mach_task_self, __mach_host_self, __swtch, __swtch_pri, __thread_switch, __evc_wait): Move declarations to... * sysdeps/mach/include/mach/mach_traps.h: ... new file, and add attribute_hidden.
* hurd: Avoid PLTs for _hurd_port_locked_get/setSamuel Thibault2018-06-142-0/+10
| | | | * sysdeps/hurd/include/hurd/port.h: New file.
* hurd: update localplt.dataSamuel Thibault2018-06-142-2/+5
| | | | | | | after 329ea513b451 ("Avoid cancellable I/O primitives in ld.so.") * sysdeps/mach/hurd/localplt.data (ld.so): Add __open64, rename __libc_read and __libc_write to __read and __write.
* hurd: xfail missing abilist for libmachuser and libhurduserSamuel Thibault2018-06-132-0/+13
| | | | | | | They need more work to implement, see bug 23286. * sysdeps/mach/hurd/i386/Makefile (test-xfail-check-abi-libhurduser, test-xfail-check-abi-libmachuser): Add.
* Fix strtod overflow detection (bug 23279).Joseph Myers2018-06-136-4391/+4864
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | As shown by bug 23279, strtod's round_and_return has an off-by-one error in its overflow detection, only counting an exponent greater than MAX_EXP as overflowing when an exponent of MAX_EXP also means overflow (recall the ISO C definition of DBL_MAX_EXP etc. is based on a floating-point model where 2^exp is multiplied by a value in the interval [0.5, 1), so 2^MAX_EXP is not representable). For decimal arguments to strtod, a separate overflow check in the main implementation covers the case where the integer part of the argument (truncated to the nearest integer towards zero) has more than MAX_EXP bits, meaning that this issue in round_and_return only affects cases (arguments with absolute value strictly between the maximum representable value and 2^MAX_EXP) where overflow depends on the rounding mode; in such cases, the returned value would still have been correct on overflow but without the overflow exception being raised or errno being set to ERANGE. For hex float arguments, however, other cases can arise, as shown in bug 23279, where a value with exponent already set to MAX_EXP is passed into round_and_return and a result can wrongly end up being NaN, or infinity instead of the largest finite value. This patch fixes the off-by-one error, adds testing of overflow exceptions to the tst-strtod-round framework, and adds tests of these issues. Tested for x86_64. Also ran the tst-strtod-round tests for powerpc to make sure the new tests didn't introduce any new failures for IBM long double. [BZ #23279] * stdlib/strtod_l.c (round_and_return): Handle an exponent of MAX_EXP as overflowing. * stdlib/gen-tst-strtod-round.c (string_to_fp): Clear MPFR overflow flag. (round_str): Output also whether result overflows in each rounding mode. * stdlib/tst-strtod-round-data: Add more tests. * stdlib/tst-strtod-round-data.h: Regenerated. * stdlib/tst-strtod-round-skeleton.c (_XNTRY): Update comment. (TEST): Handle extra arguments for overflow flags. (struct test_overflow): New type. [!FE_OVERFLOW] (FE_OVERFLOW): Define to 0. (GEN_ONE_TEST): Clear all exceptions. Test overflow flag. (test_in_one_mode): Take argument with overflow information. (do_test): Update calls to test_in_one_mode.
* Fix comments in _dl_dst_count and _dl_dst_substitute.Carlos O'Donell2018-06-122-6/+11
| | | | | | | | | The comments in _dl_dst_count is adjusted to match what the code does which is count DSTs from the start of the string. With the removal of DL_DST_COUNT we no longer accept an input that starts at the first $. In _dl_dst_substitute we adjust the comment to indicate that both conditions must be true for the SUID/SGID $ORIGIN exception.
* Fix fallback path in __pthread_mutex_timedlock ().Carlos O'Donell2018-06-122-1/+6
| | | | | | | Fix the typo in the fallback path in __pthread_mutex_timedlock () whic hcalls lll_futex_timed_wait (). This is only useful for cases where the patch is being backported to older distributions where only lll_futex_timed_wait () is available.
* Do not use const attribute for nan functions (bug 23277).Joseph Myers2018-06-124-2/+45
| | | | | | | | | | | | | | | | | | | | | As in https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86113 for __builtin_nan, bits/mathcalls.h wrongly declares the nan function with the __const__ attribute. Because the function reads memory pointed to by an argument, it's only pure, not const. This patch removes the incorrect attribute and adds a testcase for the bug. No __pure__ attribute is added to replace the incorrect __const__ one, since that would introduce problems when using GCC versions that have the incorrect built-in __const__ attribute and warn for the combination of those two attributes. Tested for x86_64. [BZ #23277] * math/bits/mathcalls.h [__USE_ISOC99] (nan): Do not use __const__ attribute. * math/test-nan-const.c: New file. * math/Makefile (tests): Add test-nan-const. (CFLAGS-test-nan-const.c): New variable.
* benchtests: Add -f/--functions argumentH.J. Lu2018-06-122-10/+50
| | | | | | | | | | | | | On x86-64, there may be multiple IFUNC implementations for a given function. But we may be only interested in a subset of them. This patch adds -f/--functions argument to compare a subset of IFUNC implementations. * benchtests/scripts/compare_strings.py (process_results): Add funcs argument. Compare only functions which are selected. (main): Check if base function is among selected functions. Pass selected functions to process_results. (__main__): Add -f/--functions argument.
* aarch64: add HXT Phecda core memory operation ifuncsHongbo Zhang2018-06-126-5/+24
| | | | | | | | | | | | | | | | | | | | Phecda is HXT semiconductor's CPU core, this patch adds memory operation ifuncs for it: sharing the same optimized implementation with Qualcomm's Falkor core. 2018-06-07 Minfeng Kang <minfeng.kang@hxt-semitech.com> Hongbo Zhang <hongbo.zhang@linaro.org> * sysdeps/aarch64/multiarch/memcpy.c (libc_ifunc): reuse __memcpy_falkor for phecda core. * sysdeps/aarch64/multiarch/memmove.c (libc_ifunc): reuse __memmove_falkor for phecda core. * sysdeps/aarch64/multiarch/memset.c (libc_ifunc): reuse __memset_falkor for phecda core. * sysdeps/unix/sysv/linux/aarch64/cpu-features.c: add MIDR entry for phecda core. * sysdeps/unix/sysv/linux/aarch64/cpu-features.h (IS_PHECDA): add macro to identify phecda core.
* Improve DST handling (Bug 23102, Bug 21942, Bug 18018, Bug 23259).Carlos O'Donell2018-06-125-93/+165
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This commit improves DST handling significantly in the following ways: firstly is_dst () is overhauled to correctly process DST sequences that would be accepted given the ELF gABI. This means that we actually now accept slightly more sequences than before. Now we accept $ORIGIN$ORIGIN, but in the past we accepted only $ORIGIN\0 or $ORIGIN/..., but this kind of behaviour results in unexpected and uninterpreted DST sequences being used as literal search paths leading to security defects. Therefore the first step in correcting this defect is making is_dst () properly account for all DSTs and making the function context free in the sense that it counts DSTs without knowledge of path, or AT_SECURE. Next, _dl_dst_count () is also simplified to count all DSTs regardless of context. Then in _dl_dst_substitute () we reintroduce context-dependent processing for such things as AT_SECURE handling. At the level of _dl_dst_substitute we can have access to things like the true start of the string sequence to validate $ORIGIN-based paths rooted in trusted directories. Lastly, we tighten up the accepted sequences in AT_SECURE, and avoid leaving known unexpanded DSTs, this is noted in the NEWS entry. Verified with a sequence of 68 tests on x86_64 that cover non-AT_SECURE and AT_SECURE testing using a sysroot (requires root to run). The tests cover cases for bug 23102, bug 21942, bug 18018, and bug 23259. These tests are not yet appropriate for the glibc regression testsuite, but with the upcoming test-in-container testing framework it should be possible to include these tests upstream soon. See the mailing list for the tests: https://www.sourceware.org/ml/libc-alpha/2018-06/msg00251.html
* Avoid cancellable I/O primitives in ld.so.Zack Weinberg2018-06-1245-279/+647
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Neither the <dlfcn.h> entry points, nor lazy symbol resolution, nor initial shared library load-up, are cancellation points, so ld.so should exclusively use I/O primitives that are not cancellable. We currently achieve this by having the cancellation hooks compile as no-ops when IS_IN(rtld); this patch changes to using exclusively _nocancel primitives in the source code instead, which makes the intent clearer and significantly reduces the amount of code compiled under IS_IN(rtld) as well as IS_IN(libc) -- in particular, elf/Makefile no longer thinks we require a copy of unwind.c in rtld-libc.a. (The older mechanism is preserved as a backstop.) The bulk of the change is splitting up the files that define the _nocancel I/O functions, so they don't also define the variants that *are* cancellation points; after which, the existing logic for picking out the bits of libc that need to be recompiled as part of ld.so Just Works. I did this for all of the _nocancel functions, not just the ones used by ld.so, for consistency. fcntl was a little tricky because it's only a cancellation point for certain opcodes (F_SETLKW(64), which can block), and the existing __fcntl_nocancel wasn't applying the FCNTL_ADJUST_CMD hook, which strikes me as asking for trouble, especially as the only nontrivial definition of FCNTL_ADJUST_CMD (for powerpc64) changes F_*LK* opcodes. To fix this, fcntl_common moves to fcntl_nocancel.c along with __fcntl_nocancel, and changes its name to the extern (but hidden) symbol __fcntl_nocancel_adjusted, so that regular fcntl can continue calling it. __fcntl_nocancel now applies FCNTL_ADJUST_CMD; so that both both fcntl.c and fcntl_nocancel.c can see it, the only nontrivial definition moves from sysdeps/u/s/l/powerpc/powerpc64/fcntl.c to .../powerpc64/sysdep.h and becomes entirely a macro, instead of a macro that calls an inline function. The nptl version of libpthread also changes a little, because its "compat-routines" formerly included files that defined all the _nocancel functions it uses; instead of continuing to duplicate them, I exported the relevant ones from libc.so as GLIBC_PRIVATE. Since the Linux fcntl.c calls a function defined by fcntl_nocancel.c, it can no longer be used from libpthread.so; instead, introduce a custom forwarder, pt-fcntl.c, and export __libc_fcntl from libc.so as GLIBC_PRIVATE. The nios2-linux ABI doesn't include a copy of vfork() in libpthread, and it was handling that by manipulating libpthread-routines in .../linux/nios2/Makefile; it is cleaner to do what other such ports do, and have a pt-vfork.S that defines no symbols. Right now, it appears that Hurd does not implement _nocancel I/O, so sysdeps/generic/not-cancel.h will forward everything back to the regular functions. This changed the names of some of the functions that sysdeps/mach/hurd/dl-sysdep.c needs to interpose. * elf/dl-load.c, elf/dl-misc.c, elf/dl-profile.c, elf/rtld.c * sysdeps/unix/sysv/linux/dl-sysdep.c Include not-cancel.h. Use __close_nocancel instead of __close, __open64_nocancel instead of __open, __read_nocancel instead of __libc_read, and __write_nocancel instead of __libc_write. * csu/check_fds.c (check_one_fd) * sysdeps/posix/fdopendir.c (__fdopendir) * sysdeps/posix/opendir.c (__alloc_dir): Use __fcntl_nocancel instead of __fcntl and/or __libc_fcntl. * sysdeps/unix/sysv/linux/pthread_setname.c (pthread_setname_np) * sysdeps/unix/sysv/linux/pthread_getname.c (pthread_getname_np) * sysdeps/unix/sysv/linux/i386/smp.h (is_smp_system): Use __open64_nocancel instead of __open_nocancel. * sysdeps/unix/sysv/linux/not-cancel.h: Move all of the hidden_proto declarations to the end and issue them if either IS_IN(libc) or IS_IN(rtld). * sysdeps/unix/sysv/linux/Makefile [subdir=io] (sysdep_routines): Add close_nocancel, fcntl_nocancel, nanosleep_nocancel, open_nocancel, open64_nocancel, openat_nocancel, pause_nocancel, read_nocancel, waitpid_nocancel, write_nocancel. * io/Versions [GLIBC_PRIVATE]: Add __libc_fcntl, __fcntl_nocancel, __open64_nocancel, __write_nocancel. * posix/Versions: Add __nanosleep_nocancel, __pause_nocancel. * nptl/pt-fcntl.c: New file. * nptl/Makefile (pthread-compat-wrappers): Remove fcntl. (libpthread-routines): Add pt-fcntl. * include/fcntl.h (__fcntl_nocancel_adjusted): New function. (__libc_fcntl): Remove attribute_hidden. * sysdeps/unix/sysv/linux/fcntl.c (__libc_fcntl): Call __fcntl_nocancel_adjusted, not fcntl_common. (__fcntl_nocancel): Move to new file fcntl_nocancel.c. (fcntl_common): Rename to __fcntl_nocancel_adjusted; also move to fcntl_nocancel.c. * sysdeps/unix/sysv/linux/fcntl_nocancel.c: New file. * sysdeps/unix/sysv/linux/powerpc/powerpc64/fcntl.c: Remove file. * sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep.h: Define FCNTL_ADJUST_CMD here, as a self-contained macro. * sysdeps/unix/sysv/linux/close.c: Move __close_nocancel to... * sysdeps/unix/sysv/linux/close_nocancel.c: ...this new file. * sysdeps/unix/sysv/linux/nanosleep.c: Move __nanosleep_nocancel to... * sysdeps/unix/sysv/linux/nanosleep_nocancel.c: ...this new file. * sysdeps/unix/sysv/linux/open.c: Move __open_nocancel to... * sysdeps/unix/sysv/linux/open_nocancel.c: ...this new file. * sysdeps/unix/sysv/linux/open64.c: Move __open64_nocancel to... * sysdeps/unix/sysv/linux/open64_nocancel.c: ...this new file. * sysdeps/unix/sysv/linux/openat.c: Move __openat_nocancel to... * sysdeps/unix/sysv/linux/openat_nocancel.c: ...this new file. * sysdeps/unix/sysv/linux/openat64.c: Move __openat64_nocancel to... * sysdeps/unix/sysv/linux/openat64_nocancel.c: ...this new file. * sysdeps/unix/sysv/linux/pause.c: Move __pause_nocancel to... * sysdeps/unix/sysv/linux/pause_nocancel.c: ...this new file. * sysdeps/unix/sysv/linux/read.c: Move __read_nocancel to... * sysdeps/unix/sysv/linux/read_nocancel.c: ...this new file. * sysdeps/unix/sysv/linux/waitpid.c: Move __waitpid_nocancel to... * sysdeps/unix/sysv/linux/waitpid_nocancel.c: ...this new file. * sysdeps/unix/sysv/linux/write.c: Move __write_nocancel to... * sysdeps/unix/sysv/linux/write_nocancel.c: ...this new file. * sysdeps/unix/sysv/linux/nios2/Makefile: Don't override libpthread-routines. * sysdeps/unix/sysv/linux/nios2/pt-vfork.S: New file which defines nothing. * sysdeps/mach/hurd/dl-sysdep.c: Define __read instead of __libc_read, and __write instead of __libc_write. Define __open64 in addition to __open.
* i386: Change offset of __private_ss to 0x30 [BZ #23250]H.J. Lu2018-06-123-1/+26
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | sysdeps/i386/nptl/tls.h has typedef struct { void *tcb; /* Pointer to the TCB. Not necessarily the thread descriptor used by libpthread. */ dtv_t *dtv; void *self; /* Pointer to the thread descriptor. */ int multiple_threads; uintptr_t sysinfo; uintptr_t stack_guard; uintptr_t pointer_guard; int gscope_flag; int __glibc_reserved1; /* Reservation of some values for the TM ABI. */ void *__private_tm[4]; /* GCC split stack support. */ void *__private_ss; } tcbhead_t; The offset of __private_ss is 0x34. But GCC defines /* We steal the last transactional memory word. */ #define TARGET_THREAD_SPLIT_STACK_OFFSET 0x30 and libgcc/config/i386/morestack.S has cmpl %gs:0x30,%eax # See if we have enough space. movl %eax,%gs:0x30 # Save the new stack boundary. movl %eax,%gs:0x30 # Save the new stack boundary. movl %ecx,%gs:0x30 # Save new stack boundary. movl %eax,%gs:0x30 movl %gs:0x30,%eax movl %eax,%gs:0x30 Since update TARGET_THREAD_SPLIT_STACK_OFFSET changes split stack ABI, this patch updates tcbhead_t to match GCC. [BZ #23250] [BZ #10686] * sysdeps/i386/nptl/tls.h (tcbhead_t): Change __private_tm[4] to _private_tm[3] and add __glibc_reserved2. Add _Static_assert of offset of __private_ss == 0x30. * sysdeps/x86_64/nptl/tls.h: Add _Static_assert of offset of __private_ss == 0x40 for ILP32 and == 0x70 for LP64.
* x86: Make strncmp usable from rtldFlorian Weimer2018-06-123-5/+16
| | | | | | | | | Due to the way the conditions were written, the rtld build of strncmp ended up with no definition of the strncmp symbol at all: The implementations were renamed for use within an IFUNC resolver, but the IFUNC resolver itself was missing (because rtld does not use IFUNCs). Reviewed-by: Carlos O'Donell <carlos@redhat.com>
* gd_GB, hsb_DE, wa_BE: Add alternative month names (bug 23140).Rafal Luzynski2018-06-125-13/+67
| | | | | | | | | | | | | | | | | | | | | | | | As a followup of fixing bug 10871, these three languages now support two grammatical cases of the month names. This commit does not resolve the bug because there are more languages to be committed. [BZ #23140] * localedata/locales/gd_GB (mon): Rename to... (alt_mon): This. (mon): Import from CLDR (genitive case). * localedata/locales/hsb_DE (mon): Rename to... (alt_mon): This. (mon): Import from CLDR (genitive case). * localedata/locales/wa_BE (mon): Rename to... (alt_mon): This. (mon): Add, fill with the proper genitive forms, but CLDR data is incomplete; completed according to the comments in this file. (d_t_fmt): Do not use "di" before the month name, no longer needed. * localedata/locales/wa_BE (country_name): Reword "Beljike" -> "Beldjike".
* Fix ldbl-96 fma (Inf, Inf, finite) (bug 23272).Joseph Myers2018-06-113-8/+46
| | | | | | | | | | | | | | | | | | | As reported in bug 23272, the ldbl-96 implementation of fma (fma for double, in terms of ldbl-96 as the internal arithmetic type, as used on 32-bit x86) is missing some of the special-case handling for non-finite arguments, resulting in incorrect NaN results when the first two arguments are infinities, the third is finite and so the infinities go through the logic for finite arguments. This patch fixes it by handling all cases of non-finite arguments up front, with additional fma tests for the problem cases being added to the testsuite. Tested for x86_64 and x86. [BZ #23272] * sysdeps/ieee754/ldbl-96/s_fma.c (__fma): Start by handling all cases of non-finite arguments. * math/libm-test-fma.inc (fma_test_data): Add more tests.
* The hppa-linux target still requires an executable stack for kernelJohn David Anglin2018-06-102-0/+12
| | | | | | | | syscall restarts and signal returns. Thus, we need to xfail the check-execstack test. [BZ #23174] * sysdeps/unix/sysv/linux/hppa/Makefile: xfail check-execstack.
* posix: Fix posix_spawnp to not execute invalid binaries in non compat mode ↵Adhemerval Zanella2018-06-088-11/+175
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | (BZ#23264) Current posix_spawnp implementation wrongly tries to execute invalid binaries (for instance script without shebang) as a shell script in non compat mode. It was a regression introduced by 9ff72da471a509a8c19791efe469f47fa6977410 when __spawni started to use __execvpe instead of __execve (glibc __execvpe try to execute ENOEXEC as shell script regardless). This patch fixes it by using an internal symbol (__execvpex) with the faulty semantic (since compat mode is handled by spawni.c itself). It was reported by Daniel Drake on libc-help [1]. Checked on x86_64-linux-gnu and i686-linux-gnu. [BZ #23264] * include/unistd.h (__execvpex): New prototype. * posix/Makefile (tests): Add tst-spawn4. (tests-internal): Add tst-spawn4-compat. * posix/execvpe.c (__execvpe_common, __execvpex): New functions. * posix/tst-spawn4-compat.c: New file. * posix/tst-spawn4.c: Likewise. * sysdeps/unix/sysv/linux/spawni.c (__spawni): Do not interpret invalid binaries as shell scripts. * sysdeps/posix/spawni.c (__spawni): Likewise. [1] https://sourceware.org/ml/libc-help/2018-06/msg00012.html
* Mark _init and _fini as hidden [BZ #23145]H.J. Lu2018-06-0822-1/+163
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | _init and _fini are special functions provided by glibc for linker to define DT_INIT and DT_FINI in executable and shared library. They should never be put in dynamic symbol table. This patch marks them as hidden to remove them from dynamic symbol table. Tested with build-many-glibcs.py. [BZ #23145] * elf/Makefile (tests-special): Add $(objpfx)check-initfini.out. ($(all-built-dso:=.dynsym): New target. (common-generated): Add $(all-built-dso:$(common-objpfx)%=%.dynsym). ($(objpfx)check-initfini.out): New target. (generated): Add check-initfini.out. * scripts/check-initfini.awk: New file. * sysdeps/aarch64/crti.S (_init): Mark as hidden. (_fini): Likewise. * sysdeps/alpha/crti.S (_init): Mark as hidden. (_fini): Likewise. * sysdeps/arm/crti.S (_init): Mark as hidden. (_fini): Likewise. * sysdeps/hppa/crti.S (_init): Mark as hidden. (_fini): Likewise. * sysdeps/i386/crti.S (_init): Mark as hidden. (_fini): Likewise. * sysdeps/ia64/crti.S (_init): Mark as hidden. (_fini): Likewise. * sysdeps/m68k/crti.S (_init): Mark as hidden. (_fini): Likewise. * sysdeps/microblaze/crti.S (_init): Mark as hidden. (_fini): Likewise. * sysdeps/mips/mips32/crti.S (_init): Mark as hidden. (_fini): Likewise. * sysdeps/mips/mips64/n32/crti.S (_init): Mark as hidden. (_fini): Likewise. * sysdeps/mips/mips64/n64/crti.S (_init): Mark as hidden. (_fini): Likewise. * sysdeps/nios2/crti.S (_init): Mark as hidden. (_fini): Likewise. * sysdeps/powerpc/powerpc32/crti.S (_init): Mark as hidden. (_fini): Likewise. * sysdeps/powerpc/powerpc64/crti.S (_init): Mark as hidden. (_fini): Likewise. * sysdeps/s390/s390-32/crti.S (_init): Mark as hidden. (_fini): Likewise. * sysdeps/s390/s390-64/crti.S (_init): Mark as hidden. (_fini): Likewise. * sysdeps/sh/crti.S (_init): Mark as hidden. (_fini): Likewise. * sysdeps/sparc/crti.S (_init): Mark as hidden. (_fini): Likewise. * sysdeps/x86_64/crti.S (_init): Mark as hidden. (_fini): Likewise.
* powerpc64le: Fix TFtype in sqrtf128 when using -mabi=ieeelongdoubleTulio Magno Quites Machado Filho2018-06-062-3/+15
| | | | | | | | | | | | | | | | When building with -mlong-double-128 or -mabi=ibmlongdouble, TFtype represents the IBM 128-bit extended floating point type, while KFtype represents the IEEE 128-bit floating point type. The soft float implementation of e_sqrtf128 had to redefine TFtype and TF in order to workaround this issue. However, this behavior changes when -mabi=ieeelongdouble is used and the macros are not necessary. * sysdeps/powerpc/powerpc64/le/fpu/e_sqrtf128.c [__HAVE_FLOAT128_UNLIKE_LDBL] (TFtype, TF): Restrict TFtype and TF redirection to KFtype and KF only when the default long double type is not the IEEE 128-bit floating point type. Signed-off-by: Tulio Magno Quites Machado Filho <tuliom@linux.ibm.com>
* Add AArch64 hwcap values from Linux 4.17.Joseph Myers2018-06-053-2/+15
| | | | | | | | | | | | | | | | | Linux 4.17 adds four new AArch64 hwcap values. This patch adds them to glibc's AArch64 bits/hwcap.h, with corresponding dl-procinfo.c updates. Tested with build-many-glibcs.py for aarch64. * sysdeps/unix/sysv/linux/aarch64/bits/hwcap.h (HWCAP_DIT): New macro. (HWCAP_USCAT): Likewise. (HWCAP_ILRCPC): Likewise. (HWCAP_FLAGM): Likewise. * sysdeps/unix/sysv/linux/aarch64/dl-procinfo.c (_DL_HWCAP_COUNT): Increase to 28. (_dl_aarch64_cap_flags): Add new flag names.
* Add MAP_FIXED_NOREPLACE from Linux 4.17 to bits/mman.h.Joseph Myers2018-06-0516-0/+61
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Linux 4.17 adds MAP_FIXED_NOREPLACE (value 0x100000 on most architectures, 0x200000 on alpha). This patch adds that macro to glibc's bits/mman.h headers. Tested for x86_64. * sysdeps/unix/sysv/linux/aarch64/bits/mman.h [__USE_MISC] (MAP_FIXED_NOREPLACE): New macro. * sysdeps/unix/sysv/linux/alpha/bits/mman.h [__USE_MISC] (MAP_FIXED_NOREPLACE): Likewise. * sysdeps/unix/sysv/linux/arm/bits/mman.h [__USE_MISC] (MAP_FIXED_NOREPLACE): Likewise. * sysdeps/unix/sysv/linux/hppa/bits/mman.h [__USE_MISC] (MAP_FIXED_NOREPLACE): Likewise. * sysdeps/unix/sysv/linux/ia64/bits/mman.h [__USE_MISC] (MAP_FIXED_NOREPLACE): Likewise. * sysdeps/unix/sysv/linux/m68k/bits/mman.h [__USE_MISC] (MAP_FIXED_NOREPLACE): Likewise. * sysdeps/unix/sysv/linux/microblaze/bits/mman.h [__USE_MISC] (MAP_FIXED_NOREPLACE): Likewise. * sysdeps/unix/sysv/linux/mips/bits/mman.h [__USE_MISC] (MAP_FIXED_NOREPLACE): Likewise. * sysdeps/unix/sysv/linux/nios2/bits/mman.h [__USE_MISC] (MAP_FIXED_NOREPLACE): Likewise. * sysdeps/unix/sysv/linux/powerpc/bits/mman.h [__USE_MISC] (MAP_FIXED_NOREPLACE): Likewise. * sysdeps/unix/sysv/linux/riscv/bits/mman.h [__USE_MISC] (MAP_FIXED_NOREPLACE): Likewise. * sysdeps/unix/sysv/linux/s390/bits/mman.h [__USE_MISC] (MAP_FIXED_NOREPLACE): Likewise. * sysdeps/unix/sysv/linux/sh/bits/mman.h [__USE_MISC] (MAP_FIXED_NOREPLACE): Likewise. * sysdeps/unix/sysv/linux/sparc/bits/mman.h [__USE_MISC] (MAP_FIXED_NOREPLACE): Likewise. * sysdeps/unix/sysv/linux/x86/bits/mman.h [__USE_MISC] (MAP_FIXED_NOREPLACE): Likewise.
* Update kernel version in syscall-names.list to 4.17.Joseph Myers2018-06-052-2/+7
| | | | | | | | | | | As far as I can tell, Linux 4.17 does not add any new syscalls; this patch updates the version number in syscall-names.list to reflect that it's still current for 4.17. Tested for x86_64-linux-gnu with build-many-glibcs.py. * sysdeps/unix/sysv/linux/syscall-names.list: Update kernel version to 4.17.
* Use Linux 4.17 in build-many-glibcs.py.Joseph Myers2018-06-042-1/+6
| | | | | * scripts/build-many-glibcs.py (Context.checkout): Default Linux version to 4.17
* hurd: Fix shmid_ds's shm_segsz field typeSamuel Thibault2018-06-023-2/+8
| | | | | | * bits/shm.h (struct shmid_ds): Make shm_segsz field size_t instead of int. * sysdeps/gnu/bits/shm.h (struct shmid_ds): Likewise.
* benchtests: Catch exceptions in input argumentsLeonardo Sandoval2018-06-012-10/+31
| | | | | | | | | | | Catch runtime exceptions in case the user provided: wrong base function, attribute(s) or input file. In any of the latter, quit immediately with non-zero return code. * benchtests/scripts/compare_string.py: (process_results) Catch exception in non-existent base_func and catch exception in non-existent attribute. (parse_file) Catch exception in non-existent input file.
* benchtests: Add --no-diff and --no-header optionsLeonardo Sandoval2018-06-012-10/+24
| | | | | | | | | Having a string comparison report with neither diff numbers nor header yields a more useful output to be consumed by other tools. * benchtests/scripts/compare_string.py: Add --no-diff and --no-header options to avoid diff calculation and omit header, respectively. (main): process --no-diff and --no-header