aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2019-02-20Add new Fortran vector math header file.marxin
2019-02-20powerpc64le: Remove test for GCC 6.2Gabriel F. T. Gomes
The configure fragment for powerpc64le contains a test for the presence of several compiler builtins and of the __float128 type, which are provided by GCC 6.2 for powerpc64le. Since this configure test was added, the compiler version required to build glibc for powerpc64le was different than that required for the other architectures. Now that glibc requires GCC 6.2 globally (since commit ID 4dcbbc3b28aa), this patch removes the powerpc64le-specific test. Even tough the configure test checks for compiler features rather than compiler version, the intent of the test was to stop build attempts at early stages, if they had been configured with a too old compiler. It was not the intention of the test to detect compiler breakage (such as the removal of the required compiler features in future GCC versions), and glibc is not the place to test for compiler regressions, anyway. Tested for powerpc64le with GCC 6.2 (built with build-many-glibcs.py). Reviewed-by: Tulio Magno Quites Machado Filho <tuliom@linux.ibm.com>
2019-02-19nptl: Fix comment typo in pthread_mutex_trylock.cWolfram Sang
2019-02-19nptl: Fix pthread_tryjoin comment.Carlos O'Donell
In pthread_tryjoin if pd->tid == 0 then we will not block on a futex operation because we will immediately see the join is already complete and return. The comment is fixed to reflect that. Signed-off-by: Carlos O'Donell <carlos@redhat.com>
2019-02-18Fix SPARC64 handling of R_SPARC_H34 (bug 24231).Joseph Myers
Building glibc with -Wextra shows a -Wimplicit-fallthrough warning for SPARC64 that appears to be a real bug in glibc. The dynamic linker handling of R_SPARC_H34 falls through to that of R_SPARC_H44, which in the case of this code is nonsensical (it means the value computed for R_SPARC_H34 gets overwritten by one computed with the different logic for R_SPARC_H44). Thus, this patch adds the missing break there. Note: I do not have a testcase to demonstrate this bug. Tested with build-many-glibcs.py. [BZ #24231] * sysdeps/sparc/sparc64/dl-machine.h (elf_machine_rela): Add break after R_SPARC_H34 case.
2019-02-18resolv: Remove debugging code from compat-gethnamaddr.cFlorian Weimer
2019-02-18libio: Eliminate _IO_stdin, _IO_stdout, _IO_stderrFlorian Weimer
These variables are only used to determine if a stdio stream is a pre-allocated stream, but it is possible to do so by comparing a FILE * to all pre-allocated stream objects. As a result, it is not necessary to keep those pointers in separate variables. Behavior with symbol interposition is unchanged because _IO_stdin_, _IO_stdout_, _IO_stderr_ are exported, and refer to objects outside of libc if symbol interposition or copy relocations are involved. (The removed variables _IO_stdin, _IO_stdout, _IO_stderr were not exported, of course.)
2019-02-18misc/tst-clone3: Fix waiting for exited thread.Stefan Liebler
From time to time the test misc/tst-clone3 fails with a timeout. Then futex_wait is blocking. Usually ctid should be set to zero due to CLONE_CHILD_CLEARTID and the futex should be waken up. But the fail occures if the thread has already exited before ctid is set to the return value of clone(). Then futex_wait() will block as there will be nobody who wakes the futex up again. This patch initializes ctid to a known value before calling clone and the kernel is the only one who updates the value to zero after clone. If futex_wait is called then it is either waked up due to the exited thread or the futex syscall fails as *ctid_ptr is already zero instead of the specified value 1. ChangeLog: * sysdeps/unix/sysv/linux/tst-clone3.c (do_test): Initialize ctid with a known value and remove update of ctid after clone. (wait_tid): Adjust arguments and call futex_wait with ctid_val as assumed current value of ctid_ptr.
2019-02-16Add check for missing wrapper headersFlorian Weimer
If building on a subset of architectures only, it is easy to miss wrapper headers which are required by other architectures because they lack the corresponding sysdeps header. The check ensures that every installed header which is not itself a sysdeps header has a header under include/ (that presumably wraps the header, and perhaps also adding declarations and definitions for !_ISOMAC). Also check for the absence of the sysdeps/generic/bits directory removed in commit c72565e5f1124c2dc72573e83406fe999e56091f, to make accidental re-introduction more difficult. Reviewed-by: Carlos O'Donell <carlos@redhat.com>
2019-02-16Add missing header wrappers under include/Florian Weimer
With a complete set of wrapper headers, it will be possible to check for automatically for new installed headers which lack such wrappers. Reviewed-by: Carlos O'Donell <carlos@redhat.com>
2019-02-16Move remaining nptl_db headers to sysdeps/nptlFlorian Weimer
sys/procfs.h was already using this sysdeps directory. This avoids the need for nptl-specific wrapper headers under include/, a generic location in the source tree.
2019-02-15io: Consolidate lockf implementationAdhemerval Zanella
With internal fcntl64 internal (commit 06ab719d), it is possible to consolidate lockf implementation by using the LFS fcntl interface instead of using arch and system-specific implementations. For Linux, the i386 implementation is used as generic implementation by replacing the direct syscall with fcntl64 call. The LFS symbol alias for default LFS ABI (__OFF_T_MATCHES_OFF64_T) is used to avoid the duplicate symbol (instead of overriding the implementation with an empty file). For Hurd lockf64 semantic is changed: previous generic lockf64 implementation returned EOVERFLOW if LEN input is larger than 32-bit off_t. However, Hurd fcntl64 implementation for F_GETLK64, F_SETLK64, and F_SETLKW64 do accept off64_t inputs (__f_setlk accepts only off64_t inputs). Checked on i686-linux-gnu and x86_64-linux-gnu along with a i686-gnu build. * io/Makefile (tests): Add tst-lockf. * io/lockf.c (lockf): Use __fcntl and only define for !__OFF_T_MATCHES_OFF64_T. * io/lockf64.c (__lockf64): Call __fcntl64 and alias to lockf for __OFF_T_MATCHES_OFF64_T case. * io/tst-lockf.c: New file. * sysdeps/unix/sysv/linux/i386/lockf64.c: Remove file. * sysdeps/unix/sysv/linux/arm/lockf64.c: Likewise. * sysdeps/unix/sysv/linux/m68k/lockf64.c: Likewise. * sysdeps/unix/sysv/linux/mips/mips32/lockf64.c: Likewise. * sysdeps/unix/sysv/linux/mips/mips64/n32/lockf64.c: Likewise. * sysdeps/unix/sysv/linux/powerpc/powerpc32/lockf64.c: Likewise. * sysdeps/unix/sysv/linux/s390/s390-32/lockf64.c: Likewise. * sysdeps/unix/sysv/linux/sh/lockf64.c: Likewise. * sysdeps/unix/sysv/linux/sparc/sparc32/lockf64.c: Likewise.
2019-02-15nptl: Fix invalid Systemtap probe in pthread_join [BZ #24211]Florian Weimer
After commit f1ac7455831546e5dca0ed98fe8af2686fae7ce6 ("arm: Use "nr" constraint for Systemtap probes [BZ #24164]"), we load pd->result into a register in the probe below: /* Free the TCB. */ __free_tcb (pd); } else pd->joinid = NULL; LIBC_PROBE (pthread_join_ret, 3, threadid, result, pd->result); However, at this point, the thread descriptor has been freed. If the thread stack does not fit into the thread stack cache, the memory will have been unmapped, and the program will crash in the probe.
2019-02-15Remove qualifier from function return type in tst-svc_register.c.Joseph Myers
Building the testsuite with -Wextra produces a warning in sunrpc/tst-svc_register.c for a useless qualifier on a function return type. This patch removes that qualifier. Tested for x86_64. * sunrpc/tst-svc_register.c (rpcbind_address): Remove qualifier from function return type.
2019-02-15Fix implicit-fallthrough warnings in tst-setjmp.c.Joseph Myers
Building the testsuite with -Wextra (together with -Wno-cast-function-type -Wno-clobbered -Wno-expansion-to-defined -Wno-missing-field-initializers -Wno-old-style-declaration -Wno-shift-negative-value -Wno-sign-compare -Wno-type-limits -Wno-unused-parameter, which reflect the set of -Wextra warnings for which glibc itself is not currently clean on x86_64) showed up implicit-fallthrough warnings in tst-setjmp.c. Those warnings appear to be false positives, arising from a function "jump" that calls longjmp not itself being marked as noreturn; thus, this patch adds the noreturn marking to that function to fix the warnings. Tested for x86_64. * setjmp/tst-setjmp.c (jump): Use __attribute__ ((__noreturn__)).
2019-02-14Avoid readline conflicts in pexpectJan Kratochvil
In some cases, sensitive to readline version and the user's environment, gdb might emit escape codes while run under python's pexpect (i.e. testing pretty printers). This patch, suggested by Jan, helps isolate the test from the user's environment. Tested on RHEL 7 x86_64 with DTS 7 and EPEL, which is one magic combination of components that triggers this bug.
2019-02-14Fix fall-through warnings in sunrpc/xdr.c.Joseph Myers
This patch fixes implicit-fallthrough warnings in sunrpc/xdr.c when building with -Wextra. A fall-through comment is added in three places; in two other places, an existing comment is reworded so it matches the default patterns used by -Wimplicit-fallthrough. Tested for x86_64. * sunrpc/xdr.c (xdr_int): Add fall-through comment. (xdr_u_int): Likewise. (xdr_enum): Likewise. (xdr_bytes): Reword fall-through comment. (xdr_string): Likewise.
2019-02-14nptl: Reinstate pthread_timedjoin_np as a cancellation point (BZ#24215)Adhemerval Zanella
Patch ce7eb0e90315 ("nptl: Cleanup cancellation macros") changed the join sequence for internal common __pthread_timedjoin_ex to use the new macro lll_wait_tid. The idea was this macro would issue the cancellable futex operation depending whether the timeout is used or not. However if a timeout is used, __lll_timedwait_tid is called and it is not a cancellable entrypoint. This patch fixes it by simplifying the code in various ways: - Instead of adding the cancellation handling on __lll_timedwait_tid, it moves the generic implementation to pthread_join_common.c (called now timedwait_tid with some fixes to use the correct type for pid). - The llvm_wait_tid macro is removed, along with its replication on x86_64, i686, and sparc arch-specific lowlevellock.h. - sparc32 __lll_timedwait_tid is also removed, since the code is similar to generic one. - x86_64 and i386 provides arch-specific __lll_timedwait_tid which is also removed since they are similar in functionality to generic C code and there is no indication it is better than compiler generated code. New tests, tst-join8 and tst-join9, are provided to check if pthread_timedjoin_np acts as a cancellation point. Checked on x86_64-linux-gnu, i686-linux-gnu, sparcv9-linux-gnu, and aarch64-linux-gnu. [BZ #24215] * nptl/Makefile (lpthread-routines): Remove lll_timedwait_tid. (tests): Add tst-join8 tst-join9. * nptl/lll_timedwait_tid.c: Remove file. * sysdeps/sparc/sparc32/lll_timedwait_tid.c: Likewise. * sysdeps/unix/sysv/linux/i386/lll_timedwait_tid.c: Likewise. * sysdeps/sysv/linux/x86_64/lll_timedwait_tid.c: Likewise. * nptl/pthread_join_common.c (timedwait_tid): New function. (__pthread_timedjoin_ex): Act as cancellation entrypoint is block is set. * nptl/tst-join5.c (thread_join): New function. (tf1, tf2, do_test): Use libsupport and add pthread_timedjoin_np check. * nptl/tst-join8.c: New file. * nptl/tst-join9.c: Likewise. * sysdeps/nptl/lowlevellock-futex.h (lll_futex_wait_cancel, lll_futex_timed_wait_cancel): Add generic macros. * sysdeps/nptl/lowlevellock.h (__lll_timedwait_tid, lll_wait_tid): Remove definitions. * sysdeps/unix/sysv/linux/i386/lowlevellock.h: Likewise. * sysdeps/unix/sysv/linux/sparc/lowlevellock.h: Likewise. * sysdeps/unix/sysv/linux/x86_64/lowlevellock.h: Likewise. * sysdeps/sparc/sparc32/lowlevellock.c (__lll_timedwait_tid): Remove function. * sysdeps/unix/sysv/linux/i386/lowlevellock.S (__lll_timedwait_tid): Likewise. * sysdeps/unix/sysv/linux/x86_64/lowlevellock.S: Likewise. * sysdeps/unix/sysv/linux/lowlevellock-futex.h (lll_futex_timed_wait_cancel): New macro.
2019-02-14Add missing bench-malloc-simple.c file.Wilco Dijkstra
2019-02-14Add malloc micro benchmarkWilco Dijkstra
Add a malloc micro benchmark to enable accurate testing of the various paths in malloc and free. The benchmark does a varying number of allocations of a given block size, then frees them again. It tests 3 different scenarios: single-threaded using main arena, multi-threaded using thread-arena, main arena with SINGLE_THREAD_P false. * benchtests/Makefile: Add malloc-simple benchmark. * benchtests/bench-malloc-simple.c: New benchmark.
2019-02-14benchtests: Remove useless ORIG_SRC in memmove benchmarksSiddhesh Poyarekar
The ORIG_SRC argument is likely a useless relic from the original correctness tests that are not needed in the benchmarks. Remove the argument and use S1 to point to the source to avoid confusion. * benchtests/bench-memmove.c (do_one_test): Remove unused ORIG_SRC. (do_test): Adjust. * benchtests/bench-memmove-large.c (do_one_test): Remove unused ORIG_SRC. (do_test): Adjust.
2019-02-13RISC-V: Fix elfutils testsuite unwind failures.Jim Wilson
The clone.S patch fixes 2 elfutils testsuite unwind failures, where the backtrace gets stuck repeating __thread_start until we hit the backtrace limit. This was confirmed by building and installing a patched glibc and then building elfutils and running its testsuite. Unfortunately, the testcase isn't working as expected and I don't know why. The testcase passes even when my clone.S patch is not installed. The testcase looks logically similarly to the elfutils testcases that are failing. Maybe there is a subtle difference in how the glibc unwinding works versus the elfutils unwinding? I don't have good gdb pthread support yet, so I haven't found a way to debug this. Anyways, I don't know if the testcase is useful or not. If the testcase isn't useful then maybe the clone.S patch is OK without a testcase? Jim [BZ #24040] * elf/Makefile (CFLAGS-tst-unwind-main.c): Add -DUSE_PTHREADS=0. * elf/tst-unwind-main.c: If USE_PTHEADS, include pthread.h and error.h (func): New. (main): If USE_PTHREADS, call pthread_create to run func. Otherwise call func directly. * nptl/Makefile (tests): Add tst-unwind-thread. (CFLAGS-tst-unwind-thread.c): Define. * nptl/tst-unwind-thread.c: New file. * sysdeps/unix/sysv/linux/riscv/clone.S (__thread_start): Mark ra as undefined.
2019-02-13Adjust wording of two fall-through comments.Joseph Myers
In two places in glibc, -Wextra produces implicit-fallthrough warnings where there are comments about the fall-through but their wording doesn't match one of the forms expected by the default implicit-fallthrough level. This patch adjusts those two places to have a comment in a form that is accepted, so avoiding the warning (this seems preferable to only being able to use a looser level of the warning that allows any comment at all as evidence of deliberate fall-through). Tested for x86_64. * iconvdata/cns11643.h (ucs4_to_cns11643): Adjust fall-through comment wording. * nis/nis_call.c (__do_niscall3): Likewise.
2019-02-13Fix -Wempty-body warnings in glibc.Joseph Myers
One group of warnings seen building glibc with -Wextra is -Wempty-body warnings about an 'if' body (or in one case an 'else' body) that is just a semicolon, "warning: suggest braces around empty body in an 'if' statement [-Wempty-body]" - I think the point of the warning being to make it more visible whether an 'if' body is actually present or not. This patch fixes such warnings in glibc. There's one place, with a semicolon at the end of a comment, where this is clearly making the presence of an 'else' body more visible. The other cases involve macro definitions expanding to nothing. While there's no issue there with visibility at the call sites, I think it's still cleaner to have a macro that expands to something nonempty appropriate for the context - so do {} while (0) if it's only intended to be usable as a statement, or ((void) 0) where the macro definition is an alternative to a call to a function returning void, so this patch makes those changes. Tested for x86_64. * catgets/gencat.c (normalize_line): Use braces around empty 'else' body. * include/stap-probe.h [!USE_STAP_PROBE && !__ASSEMBLER__] (STAP_PROBE0): Use do {} while (0) for do-nothing definition. [!USE_STAP_PROBE && !__ASSEMBLER__] (STAP_PROBE1): Likewise. [!USE_STAP_PROBE && !__ASSEMBLER__] (STAP_PROBE2): Likewise. [!USE_STAP_PROBE && !__ASSEMBLER__] (STAP_PROBE3): Likewise. [!USE_STAP_PROBE && !__ASSEMBLER__] (STAP_PROBE4): Likewise. * libio/libio.h (_IO_funlockfile): Use ((void) 0) for do-nothing definition.
2019-02-13Avoid fall-through in test-container if execlp fails.Joseph Myers
One of the implicit-fallthrough warnings from compiling glibc with -Wextra appears to indicate an actual bug: the test-container code could fall through inappropriately if execlp returns (which only occurs on error). This patch adds appropriate error handling in this case to avoid that fall-through. Tested for x86_64. * support/test-container.c (recursive_remove): Use FAIL_EXIT1 if execlp returns.
2019-02-12String benchtest cleanupWilco Dijkstra
Continue cleanup of the string benchtests. Remove simplistic byte-oriented versions with faster generic implementations. Remove bcopy/bzero benchmarks (bcopy/bzero are obsolete and never emitted by compilers). Remove builtin versions of memcpy, memset and strlen. Remove all remaining "stupid" implementations given they are always slower than the "simple" variants and thus don't add anything useful. * benchtests/bench-strcasecmp.c (stupid_strcasecmp): Remove. * benchtests/bench-strcasestr.c (stupid_strcasestr): Remove. * benchtests/bench-strchr.c (stupid_strchr): Remove. * benchtests/bench-strcmp.c (stupid_strcmp): Remove. * benchtests/bench-strcspn.c (stupid_strcspn): Remove. * benchtests/bench-strlen.c (builtin_strlen): Remove. * benchtests/bench-strncasecmp.c (stupid_strncasecmp): Remove. * benchtests/bench-strncmp.c (stupid_strncmp): Remove. * benchtests/bench-strpbrk.c (stupid_strpbrk): Remove. * benchtests/bench-strspn.c (stupid_strspn): Remove. * benchtests/Makefile: Remove bench-bcopy.c and bench-bzero.c. * benchtests/bench-bcopy.c: Delete file. * benchtests/bench-bzero.c: Likewise. * benchtests/bench-memccpy.c (stupid_memccpy): Remove. (simple_memccpy): Remove. (generic_memccpy): Add function. * benchtests/bench-memcpy.c: (builtin_memcpy): Remove. * benchtests/bench-memmove.c (simple_bcopy): Remove. * benchtests/bench-mempcpy.c (simple_mempcpy): Remove. (generic_mempcpy): Add new function. * benchtests/bench-memset.c (simple_bzero): Remove. (builtin_bzero): Remove. (builtin_memset): Remove. * benchtests/bench-rawmemchr.c (simple_rawmemchr): Remove. (generic_rawmemchr): Add new function.
2019-02-12nss: getent: Print IPv6 scope ID for ahosts/ahostsv6 if availableFlorian Weimer
This information is sometimes useful and actually required for link-local addresses.
2019-02-12elf: Test for LD_AUDIT module returning zero from la_version [BZ #24122]Adhemerval Zanella
This includes the original test case from commit 8e889c5da3c5981c5a46a93fec02de40131ac5a6 ("elf: Fix LD_AUDIT for modules with invalid version (BZ#24122)).
2019-02-12elf: Ignore LD_AUDIT interfaces if la_version returns 0 [BZ #24122]Florian Weimer
This change moves the audit module loading and early notification into separate functions out of dl_main. It restores the bug fix from commit 8e889c5da3c5981c5a46a93fec02de40131ac5a6 ("elf: Fix LD_AUDIT for modules with invalid version (BZ#24122)") which was reverted in commit 83e6b59625f45db1eee93e5684091f740c52a083 ("[elf] Revert 8e889c5da3 (BZ#24122)"). The actual bug fix is the separate error message for the case when la_version returns zero. The dynamic linker error message (which is NULL in this case) is no longer used. Based on the intended use of version zero (ignore this module due to explicit request), the message is only printed if debugging is enabled.
2019-02-12Add fall-through comments.Joseph Myers
This patch adds fall-through comments in some cases where -Wextra produces implicit-fallthrough warnings. The patch is non-exhaustive. Apart from architecture-specific code for non-x86_64 architectures, it does not change sunrpc/xdr.c (legacy code, probably should have such changes, but left to be dealt with separately), or places that already had comments about the fall-through but not matching the form expected by -Wimplicit-fallthrough=3 (the default level with -Wextra; my inclination is to adjust those comments to match rather than downgrading to -Wimplicit-fallthrough=1 to allow any comment), or one place where I thought the implicit fallthrough was not correct and so should be handled separately as a bug fix. I think the key thing to consider in review of this patch is whether the fall-through is indeed intended and correct in each place where such a comment is added. Tested for x86_64. * elf/dl-exception.c (_dl_exception_create_format): Add fall-through comments. * elf/ldconfig.c (parse_conf_include): Likewise. * elf/rtld.c (print_statistics): Likewise. * locale/programs/charmap.c (parse_charmap): Likewise. * misc/mntent_r.c (__getmntent_r): Likewise. * posix/wordexp.c (parse_arith): Likewise. (parse_backtick): Likewise. * resolv/ns_ttl.c (ns_parse_ttl): Likewise. * sysdeps/x86/cpu-features.c (init_cpu_features): Likewise. * sysdeps/x86_64/dl-machine.h (elf_machine_rela): Likewise.
2019-02-11Use float in e_sqrt.cPaul Clarke
The type used within e_sqrt.c(__slow_ieee754_sqrtf) was, unnecessarily and likely inadvertently, double. float is not only appropriate, but also more efficient, avoiding the need for the compiler to emit a round-to-single-precision instruction. This is the difference in compiled code: 0000000000000000 <__ieee754_sqrtf>: 0: 2c 08 20 ec fsqrts f1,f1 - 4: 18 08 20 fc frsp f1,f1 - 8: 20 00 80 4e blr + 4: 20 00 80 4e blr (Found by Anton Blanchard.)
2019-02-11Fix a few whitespace arrangement inconsistencies in time/strftime_l.cTAMUKI Shoichi
Having checked the arrangement of whitespace in time/strftime_l.c using "unexpand" and "unexpand -a" command, three inconsistencies are detected. So fix them for consistency. ChangeLog: * time/strftime_l.c: Fix a few whitespace arrangement inconsistencies.
2019-02-08Remove powerpc bits/mathinline.h.Joseph Myers
Continuing the process of moving away from having bits/mathinline.h headers in glibc, leaving the compiler to inline functions as appropriate depending on the options passed to it, this patch removes the header for powerpc. <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88558> is the corresponding GCC bug for adding replacements for these powerpc (32-bit-only) lrint / lrintf inlines. Tested with build-many-glibcs.py for its powerpc configurations. * sysdeps/powerpc/bits/mathinline.h: Remove.
2019-02-08math: Enable <bits/math-finite.h> sysdeps overrideFlorian Weimer
sysdeps/ia64/fpu/bits/math-finite.h exists and will be installed on ia64, but during the build, the default math/bits/math-finite.h file is used, which is wrong. Fixes commit 0ac5ae2335292908f39031b1ea9fe8edce433c0f ("Optimize libm").
2019-02-08Move generic <bits/unistd_ext.h> to a more regular locationFlorian Weimer
No functional change; the previous path worked as well, but it re-added the obsolete sysdeps/generic/bits directory, which was removed (for the first time) in commit c72565e5f1124c2dc72573e83406fe999e56091f. Fixes commit e47d82c99a6db060419b421768aced76bea92997 ("Provide <bits/unistd_ext.h> as a sysdeps header exclusively").
2019-02-08nss: Add tst-nss-files-hosts-long test [BZ #21915]Patsy Franklin
When the /etc/hosts file has a line longer than 1028 characters getent ahostsv4 and ahostsv6 will fail. This test performs a getent call on a /etc/hosts file that contains a very long line (greater than 1028) using the test-in-container framework.
2019-02-08Provide <bits/unistd_ext.h> as a sysdeps header exclusivelyFlorian Weimer
Non-sysdeps headers cannot be overriden by sysdeps headers across the entire build, so it is necessary to turn such extension headers into sysdeps headers themselves. The approach here follows the existing <bits/shm.h> header (although it uses sysdeps/gnu instead of sysdeps/generic). Fixes commit 1d0fc213824eaa2a8f8c4385daaa698ee8fb7c92 ("Linux: Add gettid system call wrapper [BZ #6399]") and commit 8f89ab216f205c2ffd90d1fc8454efdfc0b01dee ("posix: Fix missing wrapper header for <bits/unistd_ext.h>").
2019-02-08posix: Fix missing wrapper header for <bits/unistd_ext.h>Florian Weimer
Fixes commit 1d0fc213824eaa2a8f8c4385daaa698ee8fb7c92 ("Linux: Add gettid system call wrapper [BZ #6399]"). Reviewed-by: Carlos O'Donell <carlos@redhat.com>
2019-02-08tst-strftime2: Use array_length macros instead of magic numbersTAMUKI Shoichi
ChangeLog: * time/tst-strftime2.c: Use array_length macros instead of magic numbers.
2019-02-08nptl: Avoid fork handler lock for async-signal-safe fork [BZ #24161]Florian Weimer
Commit 27761a1042daf01987e7d79636d0c41511c6df3c ("Refactor atfork handlers") introduced a lock, atfork_lock, around fork handler list accesses. It turns out that this lock occasionally results in self-deadlocks in malloc/tst-mallocfork2: (gdb) bt #0 __lll_lock_wait_private () at ../sysdeps/unix/sysv/linux/x86_64/lowlevellock.S:63 #1 0x00007f160c6f927a in __run_fork_handlers (who=(unknown: 209394016), who@entry=atfork_run_prepare) at register-atfork.c:116 #2 0x00007f160c6b7897 in __libc_fork () at ../sysdeps/nptl/fork.c:58 #3 0x00000000004027d6 in sigusr1_handler (signo=<optimized out>) at tst-mallocfork2.c:80 #4 sigusr1_handler (signo=<optimized out>) at tst-mallocfork2.c:64 #5 <signal handler called> #6 0x00007f160c6f92e4 in __run_fork_handlers (who=who@entry=atfork_run_parent) at register-atfork.c:136 #7 0x00007f160c6b79a2 in __libc_fork () at ../sysdeps/nptl/fork.c:152 #8 0x0000000000402567 in do_test () at tst-mallocfork2.c:156 #9 0x0000000000402dd2 in support_test_main (argc=1, argv=0x7ffc81ef1ab0, config=config@entry=0x7ffc81ef1970) at support_test_main.c:350 #10 0x0000000000402362 in main (argc=<optimized out>, argv=<optimized out>) at ../support/test-driver.c:168 If no locking happens in the single-threaded case (where fork is expected to be async-signal-safe), this deadlock is avoided. (pthread_atfork is not required to be async-signal-safe, so a fork call from a signal handler interrupting pthread_atfork is not a problem.)
2019-02-08ChangeLog: Correct date of last commitFlorian Weimer
2019-02-08Linux: Add gettid system call wrapper [BZ #6399]Florian Weimer
This commit adds gettid to <unistd.h> on Linux, and not to the kernel-independent GNU API. gettid is now supportable on Linux because too many things assume a 1:1 mapping between libpthread threads and kernel threads. Reviewed-by: Carlos O'Donell <carlos@redhat.com>
2019-02-08rt: Turn forwards from librt to libc into compat symbols [BZ #24194]Florian Weimer
As the result of commit 6e6249d0b461b952d0f544792372663feb6d792a ("BZ#14743: Move clock_* symbols from librt to libc."), in glibc 2.17, clock_gettime, clock_getres, clock_settime, clock_getcpuclockid, clock_nanosleep were added to libc, and the file rt/clock-compat.c was added with forwarders to the actual implementations in libc. These forwarders were wrapped in #if SHLIB_COMPAT (librt, GLIBC_2_2, GLIBC_2_17) so that they are not present for newer architectures (such as powerpc64le) with a 2.17 or later ABI baseline. But the forwarders were not marked as compatibility symbols. As a result, on older architectures, historic configure checks such as AC_CHECK_LIB(rt, clock_gettime) still cause linking against librt, even though this is completely unnecessary. It also creates a needless porting hazard because architectures behave differently when it comes to symbol availability. Reviewed-by: Carlos O'Donell <carlos@redhat.com>
2019-02-07Add compiler barriers around modifications of the robust mutex list for ↵Stefan Liebler
pthread_mutex_trylock. [BZ #24180] While debugging a kernel warning, Thomas Gleixner, Sebastian Sewior and Heiko Carstens found a bug in pthread_mutex_trylock due to misordered instructions: 140: a5 1b 00 01 oill %r1,1 144: e5 48 a0 f0 00 00 mvghi 240(%r10),0 <--- THREAD_SETMEM (THREAD_SELF, robust_head.list_op_pending, NULL); 14a: e3 10 a0 e0 00 24 stg %r1,224(%r10) <--- last THREAD_SETMEM of ENQUEUE_MUTEX_PI vs (with compiler barriers): 140: a5 1b 00 01 oill %r1,1 144: e3 10 a0 e0 00 24 stg %r1,224(%r10) 14a: e5 48 a0 f0 00 00 mvghi 240(%r10),0 Please have a look at the discussion: "Re: WARN_ON_ONCE(!new_owner) within wake_futex_pi() triggerede" (https://lore.kernel.org/lkml/20190202112006.GB3381@osiris/) This patch is introducing the same compiler barriers and comments for pthread_mutex_trylock as introduced for pthread_mutex_lock and pthread_mutex_timedlock by commit 8f9450a0b7a9e78267e8ae1ab1000ebca08e473e "Add compiler barriers around modifications of the robust mutex list." ChangeLog: [BZ #24180] * nptl/pthread_mutex_trylock.c (__pthread_mutex_trylock):
2019-02-07array_length: Make usable as a constant expressionFlorian Weimer
Do not use a statement expression in array_length, so that array_length can be used at file scope and as a constant expression. Instead, put the _Static_assert into a struct (as a declaration), and nest this in the expression using a sizeof expression.
2019-02-07support: Implement xdlmopenFlorian Weimer
Put xdlmopen into its own file, to avoid disturbing static linking tests (where dlmopen pulls in additional code).
2019-02-06Avoid "inline" after return type in function definitions.Joseph Myers
One group of warnings seen with -Wextra is warnings for static or inline not at the start of a declaration (-Wold-style-declaration). This patch fixes various such cases for inline, ensuring it comes at the start of the declaration (after any static). A common case of the fix is "static inline <type> __always_inline"; the definition of __always_inline starts with __inline, so the natural change is to "static __always_inline <type>". Other cases of the warning may be harder to fix (one pattern is a function definition that gets rewritten to be static by an including file, "#define funcname static wrapped_funcname" or similar), but it seems worth fixing these cases with inline anyway. Tested for x86_64. * elf/dl-load.h (_dl_postprocess_loadcmd): Use __always_inline before return type, without separate inline. * elf/dl-tunables.c (maybe_enable_malloc_check): Likewise. * elf/dl-tunables.h (tunable_is_name): Likewise. * malloc/malloc.c (do_set_trim_threshold): Likewise. (do_set_top_pad): Likewise. (do_set_mmap_threshold): Likewise. (do_set_mmaps_max): Likewise. (do_set_mallopt_check): Likewise. (do_set_perturb_byte): Likewise. (do_set_arena_test): Likewise. (do_set_arena_max): Likewise. (do_set_tcache_max): Likewise. (do_set_tcache_count): Likewise. (do_set_tcache_unsorted_limit): Likewise. * nis/nis_subr.c (count_dots): Likewise. * nptl/allocatestack.c (advise_stack_range): Likewise. * sysdeps/ieee754/dbl-64/s_sin.c (do_cos): Likewise. (do_sin): Likewise. (reduce_sincos): Likewise. (do_sincos): Likewise. * sysdeps/unix/sysv/linux/x86/elision-conf.c (do_set_elision_enable): Likewise. (TUNABLE_CALLBACK_FNDECL): Likewise.
2019-02-06support: Use dlerror to detect NULL symbols in xdlsymFlorian Weimer
2019-02-06x86: Remove unnecessary <stap-probe.h> include from lowlevellock.hFlorian Weimer
In the i386 case, it appears that the sole remaining LIBC_PROBE was removed in commit a9fe4c5aa8e53ee30f7d0a1c878391d5d6324e6e ("Support six-argument syscalls from C for 32-bit x86, use generic lowlevellock-futex.h (bug 18138)."), when sysdeps/unix/sysv/linux/i386/lowlevellock-futex.h was replaced with the generic version. For x86_64, the relevant change is commit 76f71081cd3fe355b9c18d1fc5e87643c788cfac ("Use generic lowlevellock-futex.h in x86_64 lowlevellock.h."), again by using the generic version of <lowlevellock-futex.h>. Tested on i386 and x86_64, with and without --enable-systemtap.
2019-02-06Fix wide char format specifier in libio/tst-bz24153.c.Stefan Liebler
On big endian systems the test fails with: tst-bz24153.c:88: numeric comparison failure left: 1660944385 (0x63000001); from: ch right: 99 (0x63); from: L'c' tst-bz24153.c:90: numeric comparison failure left: 1677721601 (0x64000001); from: ch right: 100 (0x64); from: L'd' error: 2 test failures One 'char' ("%c") is stored to the 'wchar_t *': ch = 0x00000001 | 0x63000000 This patch is using "%lc" as format specifier to read a wchar_t. ChangeLog: * libio/tst-bz24153.c (wide): Use wide char format specifier.