about summary refs log tree commit diff
Commit message (Collapse)AuthorAgeFilesLines
* [BZ 18034][AArch64] Lazy TLSDESC relocation data race fixSzabolcs Nagy2015-06-176-22/+91
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Lazy TLSDESC initialization needs to be synchronized with concurrent TLS accesses. The TLS descriptor contains a function pointer (entry) and an argument that is accessed from the entry function. With lazy initialization the first call to the entry function updates the entry and the argument to their final value. A final entry function must make sure that it accesses an initialized argument, this needs synchronization on systems with weak memory ordering otherwise the writes of the first call can be observed out of order. There are at least two issues with the current code: tlsdesc.c (i386, x86_64, arm, aarch64) uses volatile memory accesses on the write side (in the initial entry function) instead of C11 atomics. And on systems with weak memory ordering (arm, aarch64) the read side synchronization is missing from the final entry functions (dl-tlsdesc.S). This patch only deals with aarch64. * Write side: Volatile accesses were replaced with C11 relaxed atomics, and a release store was used for the initialization of entry so the read side can synchronize with it. * Read side: TLS access generated by the compiler and an entry function code is roughly ldr x1, [x0] // load the entry blr x1 // call it entryfunc: ldr x0, [x0,#8] // load the arg ret Various alternatives were considered to force the ordering in the entry function between the two loads: (1) barrier entryfunc: dmb ishld ldr x0, [x0,#8] (2) address dependency (if the address of the second load depends on the result of the first one the ordering is guaranteed): entryfunc: ldr x1,[x0] and x1,x1,#8 orr x1,x1,#8 ldr x0,[x0,x1] (3) load-acquire (ARMv8 instruction that is ordered before subsequent loads and stores) entryfunc: ldar xzr,[x0] ldr x0,[x0,#8] Option (1) is the simplest but slowest (note: this runs at every TLS access), options (2) and (3) do one extra load from [x0] (same address loads are ordered so it happens-after the load on the call site), option (2) clobbers x1 which is problematic because existing gcc does not expect that, so approach (3) was chosen. A new _dl_tlsdesc_return_lazy entry function was introduced for lazily relocated static TLS, so non-lazy static TLS can avoid the synchronization cost. [BZ #18034] * sysdeps/aarch64/dl-tlsdesc.h (_dl_tlsdesc_return_lazy): Declare. * sysdeps/aarch64/dl-tlsdesc.S (_dl_tlsdesc_return_lazy): Define. (_dl_tlsdesc_undefweak): Guarantee TLSDESC entry and argument load-load ordering using ldar. (_dl_tlsdesc_dynamic): Likewise. (_dl_tlsdesc_return_lazy): Likewise. * sysdeps/aarch64/tlsdesc.c (_dl_tlsdesc_resolve_rela_fixup): Use relaxed atomics instead of volatile and synchronize with release store. (_dl_tlsdesc_resolve_hold_fixup): Use relaxed atomics instead of volatile. * elf/tlsdeschtab.h (_dl_tlsdesc_resolve_early_return_p): Likewise.
* Vector sinf for x86_64 and tests.Andrew Senkevich2015-06-1528-2/+2377
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Here is implementation of vectorized sinf containing SSE, AVX, AVX2 and AVX512 versions according to Vector ABI <https://groups.google.com/forum/#!topic/x86-64-abi/LmppCfN1rZ4>. * sysdeps/unix/sysv/linux/x86_64/libmvec.abilist: New symbols added. * sysdeps/x86/fpu/bits/math-vector.h: Added SIMD declaration for sinf. * sysdeps/x86_64/fpu/Makefile (libmvec-support): Added new files. * sysdeps/x86_64/fpu/Versions: New versions added. * sysdeps/x86_64/fpu/libm-test-ulps: Regenerated. * sysdeps/x86_64/fpu/multiarch/Makefile (libmvec-sysdep_routines): Added build of SSE, AVX2 and AVX512 IFUNC versions. * sysdeps/x86_64/fpu/multiarch/svml_s_sinf16_core.S: New file. * sysdeps/x86_64/fpu/multiarch/svml_s_sinf16_core_avx512.S: New file. * sysdeps/x86_64/fpu/multiarch/svml_s_sinf4_core.S: New file. * sysdeps/x86_64/fpu/multiarch/svml_s_sinf4_core_sse4.S: New file. * sysdeps/x86_64/fpu/multiarch/svml_s_sinf8_core.S: New file. * sysdeps/x86_64/fpu/multiarch/svml_s_sinf8_core_avx2.S: New file. * sysdeps/x86_64/fpu/svml_s_sinf16_core.S: New file. * sysdeps/x86_64/fpu/svml_s_sinf4_core.S: New file. * sysdeps/x86_64/fpu/svml_s_sinf8_core.S: New file. * sysdeps/x86_64/fpu/svml_s_sinf8_core_avx.S: New file. * sysdeps/x86_64/fpu/svml_s_sinf_data.S: New file. * sysdeps/x86_64/fpu/svml_s_sinf_data.h: New file. * sysdeps/x86_64/fpu/test-float-vlen16-wrappers.c: Vector sinf tests. * sysdeps/x86_64/fpu/test-float-vlen16.c: Likewise. * sysdeps/x86_64/fpu/test-float-vlen4-wrappers.c: Likewise. * sysdeps/x86_64/fpu/test-float-vlen4.c: Likewise. * sysdeps/x86_64/fpu/test-float-vlen8-avx2-wrappers.c: Likewise. * sysdeps/x86_64/fpu/test-float-vlen8-avx2.c: Likewise. * sysdeps/x86_64/fpu/test-float-vlen8-wrappers.c: Likewise. * sysdeps/x86_64/fpu/test-float-vlen8.c: Likewise. * NEWS: Mention addition of x86_64 vector sinf.
* Fix linknamespace expectations for in6addr_any, in6addr_loopback.Joseph Myers2015-06-143-6/+13
| | | | | | | | | | | | | | | | | | | | Some linknamespace test failures turned out to be because the variables in6addr_any and in6addr_loopback weren't listed in the lists of extra reserved symbols for the relevant standards (only functions are handled automatically through -aux-info, data symbols need listing manually in list-header-symbols.pl). This patch duly adds those symbols to those lists (there are still failures for older standards because of references to those symbols being brought in for standards that didn't reserve them: bug 18532, to be fixed separately). Tested for x86_64. * conform/list-header-symbols.pl (%extra_syms): Add in6addr_any and in6addr_loopback for XOPEN2K, XOPEN2K8 and POSIX2008. * conform/Makefile (test-xfail-XOPEN2K/netdb.h/linknamespace): Remove variable. (test-xfail-POSIX2008/netdb.h/linknamespace): Likewise. (test-xfail-XOPEN2K8/netdb.h/linknamespace): Likewise.
* Fix syslog fputs_unlocked namespace (bug 18530).Joseph Myers2015-06-126-4/+21
| | | | | | | | | | | | | | | | | | | | | | | | | | syslog (XSI POSIX) brings in references to fputs_unlocked (not POSIX). This patch fixes this by making fputs_unlocked into a weak alias for __fputs_unlocked and using __fputs_unlocked as needed. (No linknamespace test XFAILs are removed because there are other failures from syslog as well.) Tested for x86_64 and x86 (testsuite, and comparison of disassembly of installed stripped shared libraries). Disassembly of installed stripped shared libraries is unchanged on x86_64; on x86, I see some small changes to instruction ordering and register choice, with no apparent reason for such changes to be related to this patch, but they also seem completely harmless with no change to code size. [BZ #18530] * libio/iofputs.c [!_IO_MTSAFE_IO] (__fputs_unlocked): Define as strong alias of _IO_fputs. Use libc_hidden_def. * libio/iofputs_u.c (fputs_unlocked): Rename to __fputs_unlocked and define as weak alias of __fputs_unlocked. Use libc_hidden_weak. * include/stdio.h (__fputs_unlocked): Declare. Use libc_hidden_proto. * misc/syslog.c (__vsyslog_chk): Call __fputs_unlocked instead of fputs_unlocked.
* Fix netdb.h addrinfo namespace (bug 18529).Joseph Myers2015-06-124-3/+41
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | netdb.h declares interfaces such as getaddrinfo if __USE_POSIX, i.e. POSIX.1:1990 or later. However, these interfaces were new in the 2001 edition of POSIX, although the header was in XPG4 and UNIX98, so they should not be declared for XPG4 or UNIX98. (This produces spurious linknamespace test failures, although there are other failures for this header as well for the same standards so this patch doesn't remove any XFAILs.) This patch corrects the condition, and the conform/ test expectations which were similarly wrong. Tested for x86_64 and x86 (testsuite, and that installed stripped shared libraries are unchanged by the patch). [BZ #18529] * resolv/netdb.h [__USE_POSIX]: Change condition to [__USE_XOPEN2K]. * conform/data/netdb.h-data [XPG4 || UNIX98] (struct addrinfo): Do not expect. [XPG4 || UNIX98] (AI_PASSIVE): Likewise. [XPG4 || UNIX98] (AI_CANONNAME): Likewise. [XPG4 || UNIX98] (AI_NUMERICHOST): Likewise. [XPG4 || UNIX98] (AI_V4MAPPED): Likewise. [XPG4 || UNIX98] (AI_ALL): Likewise. [XPG4 || UNIX98] (AI_ADDRCONFIG): Likewise. [XPG4 || UNIX98] (AI_NUMERICSERV): Likewise. [XPG4 || UNIX98] (NI_NOFQDN): Likewise. [XPG4 || UNIX98] (NI_NUMERICHOST): Likewise. [XPG4 || UNIX98] (NI_NAMEREQD): Likewise. [XPG4 || UNIX98] (NI_NUMERICSERV): Likewise. [XPG4 || UNIX98] (NI_DGRAM): Likewise. [XPG4 || UNIX98] (EAI_AGAIN): Likewise. [XPG4 || UNIX98] (EAI_BADFLAGS): Likewise. [XPG4 || UNIX98] (EAI_FAIL): Likewise. [XPG4 || UNIX98] (EAI_FAMILY): Likewise. [XPG4 || UNIX98] (EAI_MEMORY): Likewise. [XPG4 || UNIX98] (EAI_NONAME): Likewise. [XPG4 || UNIX98] (EAI_SERVICE): Likewise. [XPG4 || UNIX98] (EAI_SOCKTYPE): Likewise. [XPG4 || UNIX98] (EAI_SYSTEM): Likewise. [XPG4 || UNIX98] (EAI_SYSTEM): Likewise. [XPG4 || UNIX98] (freeaddrinfo): Likewise. [XPG4 || UNIX98] (gai_strerror): Likewise. [XPG4 || UNIX98] (getaddrinfo): Likewise. [XPG4 || UNIX98] (getnameinfo): Likewise.
* Fix grp.h endgrent, getgrent namespace (bug 18528).Joseph Myers2015-06-125-8/+15
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | grp.h declares endgrent and getgrent if __USE_XOPEN2K8 (i.e. 2008 edition of POSIX, non-XSI). However, the 2013 Technical Corrigendum corrected the grp.h specification to XSI-shade these functions as in previous editions (see <http://austingroupbugs.net/view.php?id=24>), so they should not be declared for non-XSI POSIX. This patch corrects the conditions - using __USE_MISC || __USE_XOPEN_EXTENDED to match setgrent - and the conform/ test expectations for this header, thereby fixing the conform tests for this header for XPG3 (where the expectations were wrong) and the linknamespace tests for it for POSIX2008 (where the header bug meant it was wrongly considered a problem for endgrent to bring in a reference to setgrent). Tested for x86_64 and x86 (testsuite, and that installed stripped shared libraries are unchanged by the patch). [BZ #18528] * grp/grp.h (endgrent): Condition on [__USE_MISC || __USE_XOPEN_EXTENDED], not [__USE_XOPEN_EXTENDED || __USE_XOPEN2K8]. (getgrent): Likewise. * conform/data/grp.h-data [XPG3 || POSIX2008] (getgrent): Do not expect. [XPG3 || POSIX2008] (endgrent): Likewise. [XPG3] (setgrent): Likewise. * conform/Makefile (test-xfail-XPG3/grp.h/conform): Remove variable. (test-xfail-POSIX2008/grp.h/linknamespace): Likewise.
* Fix getlogin_r namespace (bug 18527).Joseph Myers2015-06-129-16/+39
| | | | | | | | | | | | | | | | | | | | | | | | | | Various functions in XPG4 bring in references to getlogin_r, which is not in XPG4; this is also a bug for some older POSIX versions which aren't yet covered by the linknamespace tests. This patch fixes this by making getlogin_r into a weak alias for __getlogin_r and using __getlogin_r as needed. Tested for x86_64 and x86 (testsuite, and that disassembly of installed stripped shared libraries is unchanged by the patch). [BZ #18527] * login/getlogin_r.c (getlogin_r): Rename to __getlogin_r and define as weak alias of __getlogin_r. Use libc_hidden_weak. * sysdeps/mach/hurd/getlogin_r.c (getlogin_r): Likewise. * sysdeps/unix/getlogin_r.c (getlogin_r): Likewise. * sysdeps/unix/sysv/linux/getlogin_r.c (getlogin_r): Likewise. * include/unistd.h (__getlogin_r): Declare. Use libc_hidden_proto. * posix/glob.c (glob): Call __getlogin_r instead of getlogin_r. * conform/Makefile (test-xfail-XPG3/glob.h/linknamespace): Remove variable. (test-xfail-XPG3/wordexp.h/linknamespace): Likewise. (test-xfail-XPG4/glob.h/linknamespace): Likewise. (test-xfail-XPG4/wordexp.h/linknamespace): Likewise.
* Attempting to install glibc configured with --prefix=/usr intoMartin Sebor2015-06-125-10/+44
| | | | | | | | a non-standard directory specified by the prefix make variable fails with an error. Since this is an unsupported use case, this change makes make install fail early and with a descriptive error message when either the prefix or the exec_prefix make variable is overridden on the command line.
* Fix aio_* pread namespace (bug 18519).Joseph Myers2015-06-125-7/+15
| | | | | | | | | | | | | | | | | | | | | | | | | aio_* bring in references to pread, which isn't in all the standards containing aio_* (as a reference from one library to another, this is a bug for dynamic as well as static linking). This patch fixes this by using __libc_pread instead, exporting that function from libc at symbol version GLIBC_PRIVATE; the code, with conditionals that may call either __pread64 or __libc_pread, becomes exactly analogous to that elsewhere in the same file that may call either __pwrite64 or __libc_pwrite. Tested for x86_64 and x86 (testsuite, and comparison of disassembly of installed shared libraries). libc changes because of the PLT entry for the newly exported __libc_pread; librt changes because of assertion line numbers and PLT rearrangement; other stripped installed shared libraries do not change. [BZ #18519] * posix/Versions (libc): Export __libc_pread at version GLIBC_PRIVATE. * sysdeps/pthread/aio_misc.c (handle_fildes_io): Call __libc_pread instead of pread. * conform/Makefile (test-xfail-POSIX/aio.h/linknamespace): Remove variable.
* Fix ecvt_r, fcvt_r namespace (bug 18522).Joseph Myers2015-06-124-6/+13
| | | | | | | | | | | | | | | | | | | | | The functions ecvt, fcvt and gcvt, in some standards, bring in references to ecvt_r and fcvt_r, which aren't in any of those standards. The calls are correctly to __ecvt_r and __fcvt_r, but then the names ecvt_r and fcvt_r are defined as strong aliases; this patch changes them to weak aliases. Tested for x86_64 and x86 (testsuite, and that disassembly of installed stripped shared libraries is unchanged by the patch). [BZ #18522] * misc/efgcvt_r.c [LONG_DOUBLE_COMPAT (libc, GLIBC_2_0) && !LONG_DOUBLE_CVT] (cvt_symbol): Use weak_alias instead of strong_alias. [LONG_DOUBLE_COMPAT (libc, GLIBC_2_0)] (cvt_symbol): Likewise. * conform/Makefile (test-xfail-XPG4/stdlib.h/linknamespace): Remove variable. (test-xfail-UNIX98/stdlib.h/linknamespace): Likewise. (test-xfail-XOPEN2K/stdlib.h/linknamespace): Likewise.
* Fix h_errno namespace (bug 18520).Joseph Myers2015-06-127-9/+22
| | | | | | | | | | | | | | | | | | | | | | | | | | The 2008 edition of POSIX removed h_errno, but some functions still bring in references to the h_errno external symbol. As this symbol is not a part of the public ABI (only __h_errno_location is), this patch fixes this by renaming the GLIBC_PRIVATE TLS symbol to __h_errno. Tested for x86_64 and x86 (testsuite, and comparison of installed shared libraries). Disassembly of all shared libraries using h_errno changes because of the renaming (and changes to associated TLS / GOT offsets in some cases); disassembly of libpthread on x86_64 changes more substantially because the enlargement of .dynsym affects subsequent addresses. [BZ #18520] * inet/herrno.c (h_errno): Rename to __h_errno. (__libc_h_errno): Define as alias of __h_errno not h_errno. * include/netdb.h [IS_IN_LIB && !IS_IN (libc)] (h_errno): Define to __h_errno instead of h_errno. * nptl/herrno.c (h_errno): Rename to __h_errno. (__h_errno_location): Refer to __h_errno not h_errno. * resolv/Versions (h_errno): Rename to __h_errno. * conform/Makefile (test-xfail-XOPEN2K8/grp.h/linknamespace): Remove variable. (test-xfail-XOPEN2K8/pwd.h/linknamespace): Likewise.
* Vector sin for x86_64 and tests.Andrew Senkevich2015-06-1130-5/+1333
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Here is implementation of vectorized sin containing SSE, AVX, AVX2 and AVX512 versions according to Vector ABI <https://groups.google.com/forum/#!topic/x86-64-abi/LmppCfN1rZ4>. * bits/libm-simd-decl-stubs.h: Added stubs for sin. * math/bits/mathcalls.h: Added sin declaration with __MATHCALL_VEC. * sysdeps/unix/sysv/linux/x86_64/libmvec.abilist: New versions added. * sysdeps/x86/fpu/bits/math-vector.h: SIMD declaration for sin. * sysdeps/x86_64/fpu/Makefile (libmvec-support): Added new files. * sysdeps/x86_64/fpu/Versions: New versions added. * sysdeps/x86_64/fpu/libm-test-ulps: Regenerated. * sysdeps/x86_64/fpu/multiarch/Makefile (libmvec-sysdep_routines): Added build of SSE, AVX2 and AVX512 IFUNC versions. * sysdeps/x86_64/fpu/multiarch/svml_d_sin2_core.S: New file. * sysdeps/x86_64/fpu/multiarch/svml_d_sin2_core_sse4.S: New file. * sysdeps/x86_64/fpu/multiarch/svml_d_sin4_core.S: New file. * sysdeps/x86_64/fpu/multiarch/svml_d_sin4_core_avx2.S: New file. * sysdeps/x86_64/fpu/multiarch/svml_d_sin8_core.S: New file. * sysdeps/x86_64/fpu/multiarch/svml_d_sin8_core_avx512.S: New file. * sysdeps/x86_64/fpu/svml_d_sin2_core.S: New file. * sysdeps/x86_64/fpu/svml_d_sin4_core.S: New file. * sysdeps/x86_64/fpu/svml_d_sin4_core_avx.S: New file. * sysdeps/x86_64/fpu/svml_d_sin8_core.S: New file. * sysdeps/x86_64/fpu/svml_d_sin_data.S: New file. * sysdeps/x86_64/fpu/svml_d_sin_data.h: New file. * sysdeps/x86_64/fpu/test-double-vlen2-wrappers.c: Added vector sin test. * sysdeps/x86_64/fpu/test-double-vlen2.c: Likewise. * sysdeps/x86_64/fpu/test-double-vlen4-avx2-wrappers.c: Likewise. * sysdeps/x86_64/fpu/test-double-vlen4-avx2.c: Likewise. * sysdeps/x86_64/fpu/test-double-vlen4-wrappers.c: Likewise. * sysdeps/x86_64/fpu/test-double-vlen4.c: Likewise. * sysdeps/x86_64/fpu/test-double-vlen8-wrappers.c: Likewise. * sysdeps/x86_64/fpu/test-double-vlen8.c: Likewise. * NEWS: Mention addition of x86_64 vector sin.
* More strict check of AVX512 support in assembler.Andrew Senkevich2015-06-113-0/+7
| | | | | | | | Binutils 2.24 doesn't support some AVX512 instructions with ZMM registers, so we need add more strict check. * configure.ac: Added more strict check. * configure: Regenerated.
* pthread_key_create: Fix typo in commentFlorian Weimer2015-06-112-1/+6
|
* nptl: restore .interp section in libpthread.soGleb Fotengauer-Malinovskiy2015-06-104-3/+16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | In commit 02657da2cf4457804ed938ee08b8316249126444, .interp section was removed from libpthread.so. This led to an error: $ /lib64/libpthread.so.0 Native POSIX Threads Library by Ulrich Drepper et al Copyright (C) 2015 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Forced unwind support included. Segmentation fault (gdb) bt #0 0x00000000000055a6 in _exit@plt () Unfortunately, there is no way to add a regression test for the bug because .interp specifies the path to dynamic linker of the target system. [BZ #18479] * nptl/pt-interp.c: New file. * nptl/Makefile (libpthread-routines, libpthread-shared-only-routines): Add pt-interp. [$(build-shared) = yes] ($(objpfx)pt-interp.os): Depend on $(common-objpfx)runtime-linker.h.
* Prepare for restoration of .interp section in libpthread.soDmitry V. Levin2015-06-105-11/+26
| | | | | | | | | | | | | | | | | | Make runtime-linker.h available outside $(elf-objpfx) by moving the file to $(common-objpfx) and the rules for it to Makerules. Tested for x86_64 and x86 (testsuite, and that no compiled code changed by the patch). * Makeconfig (+interp): Remove unused variable. * elf/Makefile ($(objpfx)interp.os): Define for [$(build-shared) = yes] only. Depend on $(common-objpfx)runtime-linker.h instead of $(elf-objpfx)runtime-linker.h. ($(elf-objpfx)runtime-linker.h): Rename to $(common-objpfx)runtime-linker.h and move ... * Makerules [$(build-shared) = yes]: ... here. * elf/interp.c: Include <runtime-linker.h> instead of <elf/runtime-linker.h>.
* x86: Remove vsyscall usageAdhemerval Zanella2015-06-097-74/+36
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This patch removes the vsyscall usage for x86_64 port. As indicated by kernel code comments [1], vsyscalls are a legacy ABI and its concept is problematic: - It interferes with ASLR. - It's awkward to write code that lives in kernel addresses but is callable by userspace at fixed addresses. - The whole concept is impossible for 32-bit compat userspace. - UML cannot easily virtualize a vsyscall. The VDSO is a better approach for such functionality. Tested on i686, x86_64, and x32. * sysdeps/unix/sysv/linux/i386/gettimeofday.c (__gettimeofday_syscall): Remove vsyscall fallback. * sysdeps/unix/sysv/linux/i386/time.c (__time_syscall): Likewise. * sysdeps/unix/sysv/linux/x86/gettimeofday.c (__gettimeofday_syscall): Add syscall fallback function. (gettimeofday_ifunc): Use __gettimeofday_syscall as fallback mechanism if vDSO is not present. * sysdeps/unix/sysv/linux/x86/time.c (__time_syscall): Add syscall fallback function. (time_ifunc): Use __time_syscall as fallback mechanism if vDSO is not present. * sysdeps/unix/sysv/linux/x86_64/gettimeofday.c: Remove file. * sysdeps/unix/sysv/linux/x86_64/time.c: Likewise. [1] arch/x86/kernel/vsyscall_64.c
* Fix regcomp wcscoll, wcscmp namespace (bug 18497).Joseph Myers2015-06-0912-23/+61
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | regcomp brings in references to wcscoll, which isn't in all the standards that contain regcomp. In turn, wcscoll brings in references to wcscmp, also not in all those standards. This patch fixes this by making those functions into weak aliases of __wcscoll and __wcscmp and calling those names instead as needed. Tested for x86_64 and x86 (testsuite, and that disassembly of installed shared libraries is unchanged by the patch). [BZ #18497] * wcsmbs/wcscmp.c [!WCSCMP] (WCSCMP): Define as __wcscmp instead of wcscmp. (wcscmp): Define as weak alias of WCSCMP. * wcsmbs/wcscoll.c (STRCOLL): Define as __wcscoll instead of wcscoll. (USE_HIDDEN_DEF): Define. [!USE_IN_EXTENDED_LOCALE_MODEL] (wcscoll): Define as weak alias of __wcscoll. Don't use libc_hidden_weak. * wcsmbs/wcscoll_l.c (STRCMP): Define as __wcscmp instead of wcscmp. * sysdeps/i386/i686/multiarch/wcscmp-c.c [SHARED] (libc_hidden_def): Define __GI___wcscmp instead of __GI_wcscmp. (weak_alias): Undefine and redefine. * sysdeps/i386/i686/multiarch/wcscmp.S (wcscmp): Rename to __wcscmp and define as weak alias of __wcscmp. * sysdeps/x86_64/wcscmp.S (wcscmp): Likewise. * include/wchar.h (__wcscmp): Declare. Use libc_hidden_proto. (__wcscoll): Likewise. (wcscmp): Don't use libc_hidden_proto. (wcscoll): Likewise. * posix/regcomp.c (build_range_exp): Call __wcscoll instead of wcscoll. * posix/regexec.c (check_node_accept_bytes): Likewise. * conform/Makefile (test-xfail-XPG3/regex.h/linknamespace): Remove variable. (test-xfail-XPG4/regex.h/linknamespace): Likewise. (test-xfail-POSIX/regex.h/linknamespace): Likewise.
* Fix pathconf statvfs namespace (bug 18507).Joseph Myers2015-06-097-10/+28
| | | | | | | | | | | | | | | | | | | | | | | | | | | pathconf uses __statvfs64, and fpathconf uses __fstatvfs64. On systems using sysdeps/unix/sysv/linux/wordsize-64, __statvfs64 then brings in the strong symbol statvfs, and __fstatvfs64 brings in the strong symbol fstatvfs, which are not in all the standards that have pathconf and fpathconf. This patch fixes this by making those symbols into weak aliases. Tested for x86_64 and x86 (testsuite, and that disassembly of installed shared libraries is unchanged by the patch). [BZ #18507] * sysdeps/unix/sysv/linux/fstatvfs.c (fstatvfs): Rename to __fstatvfs and define as weak alias of __fstatvfs. Use libc_hidden_weak. * sysdeps/unix/sysv/linux/statvfs.c (statvs): Rename to __statvfs and define as weak alias of __statvfs. Use libc_hidden_weak. * sysdeps/unix/sysv/linux/wordsize-64/fstatvfs.c (__fstatvfs64): Define as alias of __fstatvfs, not fstatvfs. (fstatvfs64): Likewise. * sysdeps/unix/sysv/linux/wordsize-64/statvfs.c (__statvfs64): Define as alias of __statvfs, not statvfs. (statvfs64): Likewise. * conform/Makefile (test-xfail-POSIX/unistd.h/linknamespace): Remove variable.
* Consolidate sched_getcpuAdhemerval Zanella2015-06-0913-203/+32
| | | | | | | | This patch consolidates the sched_getcpu implementations across all arches (except tile, which requires its own). This patch removes the powerpc, x86_64 and x32 specific files and change the default linux one to use INLINE_VSYSCALL where possible (for ports that implements it).
* This patch adds vector cosf tests.Andrew Senkevich2015-06-0916-4/+461
| | | | | | | | | | | | | | | | | | * math/Makefile: Added CFLAGS for new tests. * math/test-float-vlen16.h: New file. * math/test-float-vlen4.h: New file. * math/test-float-vlen8.h: New file. * math/test-double-vlen2.h: Fixed 2 argument macro and comment. * sysdeps/x86_64/fpu/Makefile: Added new tests and variables. * sysdeps/x86_64/fpu/libm-test-ulps: Regenerated. * sysdeps/x86_64/fpu/test-float-vlen16-wrappers.c: New file. * sysdeps/x86_64/fpu/test-float-vlen16.c: New file. * sysdeps/x86_64/fpu/test-float-vlen4-wrappers.c: New file. * sysdeps/x86_64/fpu/test-float-vlen4.c: New file. * sysdeps/x86_64/fpu/test-float-vlen8-avx2-wrappers.c: New file. * sysdeps/x86_64/fpu/test-float-vlen8-avx2.c: New file. * sysdeps/x86_64/fpu/test-float-vlen8-wrappers.c: New file. * sysdeps/x86_64/fpu/test-float-vlen8.c: New file.
* Vector cosf for x86_64.Andrew Senkevich2015-06-0920-3/+2458
| | | | | | | | | | | | | | | | | | | | | | | | | | | Here is implementation of vectorized cosf containing SSE, AVX, AVX2 and AVX512 versions according to Vector ABI <https://groups.google.com/forum/#!topic/x86-64-abi/LmppCfN1rZ4>. * sysdeps/x86_64/fpu/Makefile (libmvec-support): Added new files. * sysdeps/x86_64/fpu/Versions: New versions added. * sysdeps/x86_64/fpu/svml_s_cosf4_core.S: New file. * sysdeps/x86_64/fpu/multiarch/svml_s_cosf4_core.S: New file. * sysdeps/x86_64/fpu/multiarch/svml_s_cosf4_core_sse4.S: New file. * sysdeps/x86_64/fpu/svml_s_cosf8_core_avx.S: New file. * sysdeps/x86_64/fpu/svml_s_cosf8_core.S: New file. * sysdeps/x86_64/fpu/multiarch/svml_s_cosf8_core.S: New file. * sysdeps/x86_64/fpu/multiarch/svml_s_cosf8_core_avx2.S: New file. * sysdeps/x86_64/fpu/svml_s_cosf16_core.S: New file. * sysdeps/x86_64/fpu/multiarch/svml_s_cosf16_core.S: New file. * sysdeps/x86_64/fpu/multiarch/svml_s_cosf16_core_avx512.S: New file. * sysdeps/x86_64/fpu/svml_s_wrapper_impl.h: New file. * sysdeps/x86_64/fpu/svml_s_cosf_data.S: New file. * sysdeps/x86_64/fpu/svml_s_cosf_data.h: New file. * sysdeps/x86_64/fpu/multiarch/Makefile (libmvec-sysdep_routines): Added build of SSE, AVX2 and AVX512 IFUNC versions. * sysdeps/unix/sysv/linux/x86_64/libmvec.abilist: New versions added. * sysdeps/x86/fpu/bits/math-vector.h: Added SIMD declaration for cosf. * NEWS: Mention addition of x86_64 vector cosf.
* Addition of testing infrastructure for vector math functions.Andrew Senkevich2015-06-0918-9/+606
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We test vector math functions using scalar tests infrastructure with help of special wrappers from scalar versions to vector ones. Wrapper implemented using platform specific vector types and placed in separate file for compilation with architecture specific options, main part of test has no such options. With help of system of definitions unfolding of which is drived from test code we have wrapper called in individual testing function instead of scalar function. Also system of definitions includes generated during make check header math/libm-have-vector-test.h with series of conditional definitions which help to avoid build fails for functions having no vector versions; runtime architecture check to prevent runtime fails of test run on inappropriate hardware. * math/Makefile: Added rules for vector tests. * math/gen-libm-have-vector-test.sh: Added generation of wrapper declaration under condition. * math/test-double-vlen2.h: New file. * math/test-double-vlen4.h: New file. * math/test-double-vlen8.h: New file. * math/test-vec-loop.h: Added initialization macro. * sysdeps/x86_64/fpu/Makefile: Added variables for vector tests. * sysdeps/x86_64/fpu/libm-test-ulps: Regenarated. * sysdeps/x86_64/fpu/math-tests-arch.h: New file. * sysdeps/x86_64/fpu/test-double-vlen2-wrappers.c: New file. * sysdeps/x86_64/fpu/test-double-vlen2.c: New file. * sysdeps/x86_64/fpu/test-double-vlen4-avx2-wrappers.c: New file. * sysdeps/x86_64/fpu/test-double-vlen4-avx2.c: New file. * sysdeps/x86_64/fpu/test-double-vlen4-wrappers.c: New file. * sysdeps/x86_64/fpu/test-double-vlen4.c: New file. * sysdeps/x86_64/fpu/test-double-vlen8-wrappers.c: New file. * sysdeps/x86_64/fpu/test-double-vlen8.c: New file.
* Start of series of patches with x86_64 vector math functions.Andrew Senkevich2015-06-0926-1/+1499
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Here is implementation of cos containing SSE, AVX, AVX2 and AVX512 versions according to Vector ABI which had been discussed in <https://groups.google.com/forum/#!topic/x86-64-abi/LmppCfN1rZ4>. Vector math library build and ABI testing enabled by default for x86_64. * sysdeps/x86_64/fpu/Makefile: New file. * sysdeps/x86_64/fpu/Versions: New file. * sysdeps/x86_64/fpu/svml_d_cos_data.S: New file. * sysdeps/x86_64/fpu/svml_d_cos_data.h: New file. * sysdeps/x86_64/fpu/svml_d_cos2_core.S: New file. * sysdeps/x86_64/fpu/svml_d_cos4_core.S: New file. * sysdeps/x86_64/fpu/svml_d_cos4_core_avx.S: New file. * sysdeps/x86_64/fpu/svml_d_cos8_core.S: New file. * sysdeps/x86_64/fpu/svml_d_wrapper_impl.h: New file. * sysdeps/x86_64/fpu/multiarch/svml_d_cos2_core.S: New file. * sysdeps/x86_64/fpu/multiarch/svml_d_cos2_core_sse4.S: New file. * sysdeps/x86_64/fpu/multiarch/svml_d_cos4_core.S: New file. * sysdeps/x86_64/fpu/multiarch/svml_d_cos4_core_avx2.S: New file. * sysdeps/x86_64/fpu/multiarch/svml_d_cos8_core.S: New file. * sysdeps/x86_64/fpu/multiarch/svml_d_cos8_core_avx512.S: New file. * sysdeps/x86_64/fpu/multiarch/Makefile (libmvec-sysdep_routines): Added build of SSE, AVX2 and AVX512 IFUNC versions. * sysdeps/x86/fpu/bits/math-vector.h: Added SIMD declaration for cos. * math/bits/mathcalls.h: Added cos declaration with __MATHCALL_VEC. * sysdeps/x86_64/configure.ac: Options for libmvec build. * sysdeps/x86_64/configure: Regenerated. * sysdeps/x86_64/sysdep.h (cfi_offset_rel_rsp): New macro. * sysdeps/unix/sysv/linux/x86_64/libmvec.abilist: New file. * manual/install.texi (Configuring and compiling): Document --disable-mathvec. * INSTALL: Regenerated. * NEWS: Mention addition of libmvec and x86_64 vector cos.
* Remove unused PREDEFINED_CLASSES codeMarko Myllynen2015-06-093-92/+11
| | | | | | | | | | | | | | | Hi, AFAICS PREDEFINED_CLASSES is never defined thus the code is unused. It would seem that the code is related to LO_LTYPE which was discussed in the past but there are no any recent references: http://pubs.opengroup.org/onlinepubs/9638399/loltype.htm Patch below, compiles and passes make check. 2015-05-12 Marko Myllynen <myllynen@redhat.com> * locale/C-ctype.c (PREDEFINED_CLASSES): Remove. * locale/programs/ld-ctype.c: Likewise.
* This patch adds detection of availability for AVX512F and AVX512DQ ISAs.Andrew Senkevich2015-06-083-0/+42
| | | | | | | | * sysdeps/x86_64/multiarch/init-arch.h (bit_AVX512F_Usable, bit_AVX512DQ_Usable, bit_Opmask_state, bit_ZMM0_15_state, bit_ZMM16_31_state): New macro. * sysdeps/x86_64/multiarch/init-arch.c (__init_cpu_features): Check and set bit_AVX512F_Usable, bit_AVX512DQ_Usable.
* Say "C++ tests" in comment on __open_memstream declaration.Joseph Myers2015-06-082-1/+5
| | | | * include/stdio.h (__open_memstream): Say "C++ tests" in comment.
* mach: fix typoSamuel Thibault2015-06-062-1/+5
| | | | * mach/mach/mach_traps.h (thread_switch): Fix typo in comment.
* Fix open_memstream namespace (bug 18498).Joseph Myers2015-06-057-10/+25
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | open_memstream is new in the 2008 edition of POSIX. However, the older functions getopt, closelog and fmtmsg all bring in references to it. This patch fixes this in the usual way, making open_memstream into a weak alias of __open_memstream and calling __open_memstream from the relevant places. Tested for x86_64 and x86 (testsuite, and that disassembly of installed shared libraries is unchanged by the patch). 32-bit builds produce an XPASS for conform/POSIX/unistd.h/linknamespace after this patch (because the only cause of failure left there now is 64-bit specific); that will disappear once the 64-bit failure is resolved and the XFAIL removed at that time. [BZ #18498] * libio/memstream.c (open_memstream): Rename to __open_memstream and define as weak alias of __open_memstream. * include/stdio.h (__open_memstream): Declare. Use libc_hidden_proto. (open_memstream): Don't use libc_hidden_proto. * misc/syslog.c (__vsyslog_chk): Call __open_memstream instead of open_memstream. * posix/getopt.c (_getopt_internal_r): Likewise. * conform/Makefile (test-xfail-XPG3/stdio.h/linknamespace): Remove variable. (test-xfail-XPG4/stdio.h/linknamespace): Likewise. (test-xfail-UNIX98/stdio.h/linknamespace): Likewise. (test-xfail-XOPEN2K/unistd.h/linknamespace): Likewise.
* Fix regex wcrtomb namespace (bug 18496).Joseph Myers2015-06-053-3/+7
| | | | | | | | | | | | | | The regex code brings in references to wcrtomb, which isn't in all the standards that contain regex. This patch makes it call __wcrtomb instead (in fact some places already called __wcrtomb, so this patch makes it internally consistent about which name is used). Tested for x86_64 and x86 that installed stripped shared libraries are unchanged by the patch. [BZ #18496] * posix/regex_internal.c (build_wcs_upper_buffer): Call __wcrtomb instead of wcrtomb.
* Fix psignal, psiginfo declaration conditions (bug 18483).Joseph Myers2015-06-054-7/+12
| | | | | | | | | | | | | | | | | | | | | | | | | | | signal.h declares psignal and psiginfo if __USE_XOPEN2K - that is, for the 2001 edition of POSIX. These functions were actually added in the 2008 edition (as indicated in the header comments). This patch fixes the header conditionals. This fixes some linknamespace test failures because psiginfo uses fmemopen, which is also new in the 2008 edition, so before the header fix this appeared to the linknamespace tests as a 2001 function bringing in references to a 2008 function. The problem also appeared in conformtest header namespace test results (the conformtest data has correct conditionals for when these functions should be visible), but the affected headers still have other namespace problems so this doesn't fix any of those XFAILs. Tested for x86_64 and x86 (testsuite, and that installed stripped shared libraries are unchanged by the patch). [BZ #18483] * signal/signal.h [__USE_XOPEN2K] (psignal): Change condition to [__USE_XOPEN2K8]. Remove redundant #endif. [__USE_XOPEN2K] (psiginfo): Change condition to [__USE_XOPEN2K8]. Remove redundant #if. * conform/Makefile (test-xfail-XOPEN2K/signal.h/linknamespace): Remove variable. (test-xfail-XOPEN2K/sys/wait.h/linknamespace): Likewise. (test-xfail-XOPEN2K/ucontext.h/linknamespace): Likewise.
* Fix regex wctype namespace (bug 18495).Joseph Myers2015-06-057-8/+28
| | | | | | | | | | | | | | | | | | | | | | | | | | regcomp brings in references to various wctype functions that aren't in all the standards including regcomp. This patch fixes this in the usual way by using the __* versions of these functions (which already exist, but some didn't have libc_hidden_proto / libc_hidden_def before). Tested for x86_64 and x86 (testsuite, and that installed stripped shared libraries are unchanged by the patch). (Other wide character function references from the regex code mean that this patch by itself doesn't fix any XFAILed linknamespace test failures; further patches will be needed for that.) [BZ #18495] * wctype/wcfuncs.c (__iswalnum): Use libc_hidden_def. (__iswlower): Likewise. * include/wctype.h (__iswalnum): Declare. Use libc_hidden_proto. (__iswlower): Likewise. * posix/regcomp.c (re_compile_fastmap_iter): Call __towlower instead of towlower. * posix/regex_internal.c (build_wcs_upper_buffer): Call __iswlower instead of iswlower. Call __towupper instead of towupper. * posix/regex_internal.h (IS_WIDE_WORD_CHAR): Call __iswalnum instead of iswalnum.
* Commit 7fe9e2e089f4990b7d18d0798f591ab276b15f2b fixes [BZ# 17322]Florian Weimer2015-06-052-10/+11
|
* Avoid outputting to TTY after an expected memory corruption in testcaseTulio Magno Quites Machado Filho2015-06-053-16/+32
| | | | | | Protect TTY against an expected memory corruption from testcase tst-malloc-backtrace, which is expected to SIGABRT after a forced memory corruption.
* posix_fallocate: Emulation fixes and documentation [BZ #15661]Florian Weimer2015-06-054-38/+199
| | | | | | | | Handle signed integer overflow correctly. Detect and reject O_APPEND. Document drawbacks of emulation. This does not completely address bug 15661, but improves the situation somewhat.
* nptl: Rewrite cancellation macrosAdhemerval Zanella2015-06-0474-1161/+303
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This patch changes the way cancellation entrypoints are defined to instead call the macro SYSCALL_CANCEL. An usual cnacellation definition is defined as: if (SINGLE_THREAD_P) return INLINE_SYSCALL (syscall, NARGS, args...) int oldtype = LIBC_CANCEL_ASYNC (); return INLINE_SYSCALL (syscall, NARGS, args...) LIBC_CANCEL_RESET (oldtype); And it is rewrited as just: SYSCALL_CANCEL (syscall, args...) The idea is to remove LIBC_CANCEL_ASYNC/LIBC_CANCEL_RESET explicit usage. Tested on i386, x86_64, powerpc32, powerpc64le, arm, and aarch64. * sysdeps/unix/sysdep.h [SYSCALL_CANCEL]: New macro: define cancellable syscalls. (SYS_ify): Add guard to no redefine it. (INLINE_SYSCALL): Likewise. * sysdeps/unix/sysv/linux/accept4.c (accept4): Remove LIBC_CANCEL_ASYNC/INLINE_SYSCALL/LIBC_CANCEL_RESET and use SYSCALL_CANCEL instead. * sysdeps/unix/sysv/linux/alpha/fdatasync.c (__fdatasync): Likewise. * sysdeps/unix/sysv/linux/arm/pread.c (__libc_pread): Likewise. * sysdeps/unix/sysv/linux/arm/pread64.c (__libc_pread64): Likewise. * sysdeps/unix/sysv/linux/arm/pwrite.c (__libc_pwrite): Likewise. * sysdeps/unix/sysv/linux/arm/pwrite64.c (__libc_pwrite64): Likewise. * sysdeps/unix/sysv/linux/epoll_pwait.c (epoll_pwait): Likewise. * sysdeps/unix/sysv/linux/fallocate.c (fallocate): Likewise. * sysdeps/unix/sysv/linux/fallocate64.c (fallocate64): Likewise. * sysdeps/unix/sysv/linux/generic/open.c (__libc_open): Likewise. * sysdeps/unix/sysv/linux/generic/open64.c (__libc_open64): Likewise. * sysdeps/unix/sysv/linux/generic/pause.c (__libc_pause): Likewise. * sysdeps/unix/sysv/linux/generic/poll.c (__poll): Likewise. * sysdeps/unix/sysv/linux/generic/recv.c (__libc_recv): Likewise. * sysdeps/unix/sysv/linux/generic/select.c (__select): Likewise. * sysdeps/unix/sysv/linux/generic/send.c (__libc_send): Likewise. * sysdeps/unix/sysv/linux/generic/wordsize-32/pread.c (__libc_pread): Likewise. * sysdeps/unix/sysv/linux/generic/wordsize-32/pread64.c (__libc_pread64): Likewise. * sysdeps/unix/sysv/linux/generic/wordsize-32/preadv.c (__libc_preadv): Likewise. * sysdeps/unix/sysv/linux/generic/wordsize-32/preadv64.c (__libc_readv64): Likewise. * sysdeps/unix/sysv/linux/generic/wordsize-32/pwrite.c (__libc_pwrite): Likewise. * sysdeps/unix/sysv/linux/generic/wordsize-32/pwrite64.c (__libc_pwrite64): Likewise. * sysdeps/unix/sysv/linux/generic/wordsize-32/pwritev.c (__libc_pwritev): Likewise. * sysdeps/sysv/linux/generic/wordsize-32/pwritev64.c (__libc_pwritev64): Likewise. * sysdeps/unix/sysv/linux/i386/fcntl.c (__libc_fcntl): Likewise. * sysdeps/unix/sysv/linux/mips/mips32/sync_file_range.c (sync_file_range): Likewise. * sysdeps/unix/sysv/linux/mips/mips64/n32/fallocate.c (fallocate): Likewise. * sysdeps/unix/sysv/linux/mips/mips64/n32/fallocate64.c (fallocate64): Likewise. * sysdeps/unix/sysv/linux/mips/pread.c (__libc_pread): Likewise. * sysdeps/unix/sysv/linux/mips/pread64.c (__libc_pread64): Likewise. * sysdeps/unix/sysv/linux/mips/pwrite.c (__libc_pwrite): Likewise. * sysdeps/unix/sysv/linux/mips/pwrite64.c (__libc_pwrite64): Likewise. * sysdeps/unix/sysv/linux/msgrcv.c (__libc_msgrcv): Likewise. * sysdeps/unix/sysv/linux/msgsnd.c (__libc_msgsnd): Likewise. * sysdeps/unix/sysv/linux/open64.c (__libc_open64): Likewise. * sysdeps/unix/sysv/linux/openat.c (__libc_openat): Likewise. * sysdeps/unix/sysv/linux/powerpc/powerpc32/pread.c (__libc_pread): Likewise. * sysdeps/unix/sysv/linux/powerpc/powerpc32/pread64.c (__libc_read64): Likewise. * sysdeps/unix/sysv/linux/powerpc/powerpc32/pwrite.c (__libc_write): Likewise. * sysdeps/unix/sysv/linux/powerpc/powerpc32/pwrite64.c (__libc_write64): Likewise. * sysdeps/unix/sysv/linux/powerpc/powerpc64/fcntl.c (__libc_fcntl): Likewise. * sysdeps/unix/sysv/linux/powerpc/powerpc64/pread.c (__libc_pread): Likewise. * sysdeps/unix/sysv/linux/powerpc/powerpc64/pread64.c (__libc_pread64): Likewise. * sysdeps/unix/sysv/linux/powerpc/powerpc64/pwrite.c (__libc_pwrite): Likewise. * sysdeps/unix/sysv/linux/powerpc/powerpc64/pwrite64.c (__libc_pwrite64): Likewise. * sysdeps/sysv/linux/powerpc/powerpc64/sync_file_range.c (sync_file_range): Likewise. * sysdeps/unix/sysv/linux/ppoll.c (ppoll): Likewise. * sysdeps/unix/sysv/linux/pread.c (__libc_pread): Likewise. * sysdeps/unix/sysv/linux/pread64.c (__libc_pread64): Likewise. * sysdeps/unix/sysv/linux/preadv.c (__libc_preadv): Likewise. * sysdeps/unix/sysv/linux/pselect.c (__pselect): Likewise. * sysdeps/unix/sysv/linux/pwrite.c (__libc_pwrite): Likewise. * sysdeps/unix/sysv/linux/pwrite64.c (__libc_pwrite64): Likewise. * sysdeps/unix/sysv/linux/pwritev.c (PWRITEV): Likewise. * sysdeps/unix/sysv/linux/readv.c (__libc_readv): Likewise. * sysdeps/unix/sysv/linux/recvmmsg.c (recvmmsg): Likewise. * sysdeps/unix/sysv/linux/sendmmsg.c (sendmmsg): Likewise. * sysdeps/unix/sysv/linux/sh/pread.c (__libc_pread): Likewise. * sysdeps/unix/sysv/linux/sh/pread64.c (__libc_pread64): Likewise. * sysdeps/unix/sysv/linux/sh/pwrite.c (__libc_pwrite): Likewise. * sysdeps/unix/sysv/linux/sh/pwrite64.c (__libc_pwrite64): Likewise. * sysdeps/unix/sysv/linux/sigsuspend.c (__sigsuspend): Likewise. * sysdeps/unix/sysv/linux/sigtimedwait.c (__sigtimedwait): Likewise. * sysdeps/unix/sysv/linux/sigwaitinfo.c (__sigwaitinfo): Likewise. * sysdeps/unix/sysv/linux/sparc/sparc64/msgrcv.c (__libc_msgrcv): Likewise. * sysdeps/unix/sysv/linux/sync_file_range.c (sync_file_range): Likewise. * sysdeps/unix/sysv/linux/tcdrain.c (__libc_tcdrain): Likewise. * sysdeps/unix/sysv/linux/timer_routines.c (timer_helper_thread): Likewise. * sysdeps/unix/sysv/linux/wait.c (__libc_wait): Likewise. * sysdeps/unix/sysv/linux/waitid.c (__waitid): Likewise. * sysdeps/unix/sysv/linux/waitpid.c (__libc_waitpid): Likewise. * sysdeps/unix/sysv/linux/wordsize-64/fallocate.c (fallocate): Likewise. * sysdeps/unix/sysv/linux/wordsize-64/preadv.c (preadv): Likewise. * sysdeps/unix/sysv/linux/wordsize-64/pwritev.c (pwritev): Likewise. * sysdeps/unix/sysv/linux/writev.c (__libc_writev): Likewise. * sysdeps/unix/sysv/linux/x86_64/recv.c (__libc_recv): Likewise. * sysdeps/unix/sysv/linux/x86_64/send.c (__libc_send): Likewise.
* ARM: VDSO supportNathan Lynch2015-06-046-0/+99
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Beginning with the upcoming 4.1 release, Linux on a subset of 32-bit ARM hardware will provide fast user-space implementations of the following system calls: - gettimeofday - clock_gettime The kernel implementation depends on the ARMv7 Generic Timers Extension to accelerate these system calls. So CPUs such as Cortex-A15 and -A7 benefit, while Cortex-A9, -A8, and pre-v7 CPUs do not. On systems where the VDSO does not provide any speedup, the kernel prevents the relevant symbol lookups from succeeding. On OMAP5 (Cortex-A15) gettimeofday latency decreases from ~350ns to ~120ns. On BeagleBone Black (Cortex-A8) it goes from ~650ns to ~660ns, which to my mind is an acceptable cost. Verified that no new test failures are introduced on kernels with and without the VDSO. * sysdeps/unix/sysv/linux/arm/Makefile: (sysdep_routines): Include dl-vdso. * sysdeps/unix/sysv/linux/arm/init-first.c: New file: Use VDSO routines for gettimeofday, clock_gettime if available. * sysdeps/unix/sysv/linux/arm/libc-vdso.h: New file: Declare VDSO symbols. * sysdeps/unix/sysv/linux/arm/sysdep.h: [HAVE_GETTIMEOFDAY_VSYSCALL]: Define. [HAVE_CLOCK_GETTIME_VSYSCALL]: Define. * sysdeps/unix/sysv/linux/arm/Versions: Add __vdso_clock_gettime.
* Use inline syscalls for non-cancellable versionsAdhemerval Zanella2015-06-043-34/+60
| | | | | | This patch uses inline calls (through INLINE_SYSCALL macro) to define the non-cancellable functions macros to avoid use of the syscall_nocancel entrypoint.
* Fix missing wake-ups in pthread_rwlock_rdlock.Torvald Riegel2015-06-049-18/+297
| | | | | | | | | This adds wake-ups that would be missing if assuming that for a non-writer-preferring rwlock, if one thread has acquired a rdlock and does not release it, another thread will eventually acquire a rdlock too despite concurrent write lock acquisition attempts. BZ 14958 is about supporting this assumption. Strictly speaking, this isn't a valid test case, but nonetheless worth supporting (see comment 7 of BZ 14958).
* Fix lost wake-up when pthread_rwlock_timedrwlock times out.Torvald Riegel2015-06-045-2/+146
| | | | | | | | | | If we set up a rwlock to prefer writers (and disallow recursive rdlock acquisitions), then readers will block for writers that are blocked to acquire the lock (otherwise, readers could constantly enter and exit, and the writer would never get the lock). However, the existing implementation did not wake such readers when the writer timed out. This patch adds the missing wake-up. There's no similar case for writers being blocked on readers.
* NaCl: Implement nacl_interface_ext_supply entry point.Roland McGrath2015-06-036-2/+107
|
* Replace finite with isfinite.Wilco Dijkstra2015-06-034-3/+10
|
* This patch renames all uses of __isinf*, __isnan*, __finite* and __signbit* ↵Wilco Dijkstra2015-06-0390-175/+268
| | | | to use standard C99 macros. This has no effect on generated code.
* Fix fnmatch strnlen namespace (bug 18470).Joseph Myers2015-06-034-14/+19
| | | | | | | | | | | | | | | | | | | | | | | | | | | | fnmatch brings in references to strnlen, which isn't in all the standards that contain fnmatch (not added until the 2008 edition of POSIX), resulting in linknamespace test failures. (This is contrary to glibc conventions, rather than a standards conformance issue, because of the str* reservation.) This patch fixes this in the usual way, using __strnlen instead of strnlen. Tested for x86_64 and x86 (testsuite, and that installed stripped shared libraries are unchanged by the patch). [BZ #18470] * posix/fnmatch.c (fnmatch) [_LIBC]: Call __strnlen instead of strnlen. * conform/Makefile (test-xfail-XPG3/fnmatch.h/linknamespace): Remove variable. (test-xfail-XPG4/fnmatch.h/linknamespace): Likewise. (test-xfail-POSIX/fnmatch.h/linknamespace): Likewise. (test-xfail-POSIX/glob.h/linknamespace): Likewise. (test-xfail-POSIX/wordexp.h/linknamespace): Likewise. (test-xfail-UNIX98/fnmatch.h/linknamespace): Likewise. (test-xfail-UNIX98/glob.h/linknamespace): Likewise. (test-xfail-UNIX98/wordexp.h/linknamespace): Likewise. (test-xfail-XOPEN2K/fnmatch.h/linknamespace): Likewise. (test-xfail-XOPEN2K/glob.h/linknamespace): Likewise. (test-xfail-XOPEN2K/wordexp.h/linknamespace): Likewise.
* Fix fnmatch wmemchr namespace (bug 18468).Joseph Myers2015-06-035-5/+19
| | | | | | | | | | | | | | | | | fnmatch brings in references to wmemchr, which isn't in all the standards that contain fnmatch, resulting in linknamespace test failures. This patch fixes this in the usual way, making wmemchr into a weak alias for __wmemchr. Tested for x86_64 and x86 (testsuite, and that disassembly of installed shared libraries is unchanged by the patch). [BZ #18468] * wcsmbs/wmemchr.c (wmemchr): Rename to __wmemchr and define as weak alias of __wmemchr. Use libc_hidden_weak. * include/wchar.h (__wmemchr): Declare. Use libc_hidden_proto. * posix/fnmatch.c [HANDLE_MULTIBYTE] (MEMCHR): Use __wmemchr instead of wmemchr.
* BZ#18383: Another test case, with TLS refs and defs in separate TUs.Roland McGrath2015-06-025-3/+125
|
* Use better variable names in MIPS syscall macros.Joseph Myers2015-06-024-16/+25
| | | | | | | | | | | | | | | | | | | | | | | | Carlos noted in <https://sourceware.org/ml/libc-alpha/2015-05/msg00680.html> that various ports use potentially problematic short variables names in their syscall macros, which could shadow variables with the same name from containing scopes. This patch fixes variables called err and ret in MIPS macros. (I left result_var and _sys_result - separate variables in different macros, which need separate names - alone.) Tested for mips64 (all three ABIs) that installed stripped shared libraries are unchanged by this patch. * sysdeps/unix/sysv/linux/mips/mips32/sysdep.h (INLINE_SYSCALL): Use variable name _sc_err instead of err. [__mips16] (INTERNAL_SYSCALL_NCS): Use variable name _sc_ret instead of ret. * sysdeps/unix/sysv/linux/mips/mips64/n32/sysdep.h (INLINE_SYSCALL): Use variable name _sc_err instead of err. * sysdeps/unix/sysv/linux/mips/mips64/n64/sysdep.h (INLINE_SYSCALL): Likewise.
* Use libc_hidden_proto / libc_hidden_def with __strnlen.Joseph Myers2015-06-029-2/+28
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Various code in glibc uses __strnlen instead of strnlen for namespace reasons. However, __strnlen does not use libc_hidden_proto / libc_hidden_def (as is normally done for any function defined and called within the same library, whether or not exported from the library and whatever namespace it is in), so the compiler does not know that those calls are to a function within libc. This patch uses libc_hidden_proto / libc_hidden_def with __strnlen. On x86_64, it makes no difference to the installed stripped shared libraries. On 32-bit x86, it causes __strnlen calls to go to the same place as strnlen calls (the fallback strnlen implementation), rather than through a PLT entry for the strnlen IFUNC; I'm not sure of the logic behind when calls from within libc should use IFUNCs versus when they should go direct to a particular function implementation, but clearly it doesn't make sense for strnlen and __strnlen to be handled differently in this regard. Tested for x86_64 and x86 (testsuite, and comparison of installed shared libraries as described above). * string/strnlen.c [!STRNLEN] (__strnlen): Use libc_hidden_def. * include/string.h (__strnlen): Use libc_hidden_proto. * sysdeps/aarch64/strnlen.S (__strnlen): Use libc_hidden_def. * sysdeps/i386/i686/multiarch/strnlen-c.c [SHARED] (libc_hidden_def): Define __GI___strnlen as well as __GI_strnlen. * sysdeps/powerpc/powerpc32/power4/multiarch/strnlen-power7.S (libc_hidden_def): Undefine and redefine. * sysdeps/powerpc/powerpc32/power4/multiarch/strnlen-ppc32.c [SHARED] (libc_hidden_def): Define __GI___strnlen as well as __GI_strnlen. * sysdeps/powerpc/powerpc32/power7/strnlen.S (__strnlen): Use libc_hidden_def. * sysdeps/tile/tilegx/strnlen.c (__strnlen): Likewise.
* Fix fnmatch towlower namespace (bug 18469).Joseph Myers2015-06-025-6/+26
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | fnmatch brings in references to towlower (and thereby towupper), which isn't in all the standards that contain fnmatch, resulting in linknamespace test failures. (This is contrary to glibc conventions, rather than a standards conformance issue, because of the to* reservation.) This patch fixes this in the usual way, making those functions into weak aliases. Tested for x86_64 and x86 (testsuite, and that disassembly of installed shared libraries is unchanged by the patch). This is on top of <https://sourceware.org/ml/libc-alpha/2015-06/msg00019.html>, but the two patches should be independent. (The __attribute_pure__ on the declarations in include/wctype.h comes from GCC's built-in attributes for towlower and towupper, and is needed to get the same code generation for fnmatch before and after the patch. It seems likely there are cases where the declaration of __foo in the internal headers is missing attributes from foo in the public headers, built-in to GCC or both, but I don't know a good way to detect such missing attributes.) [BZ #18469] * wctype/wcfuncs.c (towlower): Rename to __towlower and define as weak alias of __towlower. Use libc_hidden_weak. (towupper): Rename to __towupper and define as weak alias of __towupper. Use libc_hidden_weak. * include/wctype.h (__towlower): Declare. Use libc_hidden_proto. (__towupper): Likewise. * posix/fnmatch.c [HANDLE_MULTIBYTE && _LIBC] (FOLD): Use __towlower instead of towlower.
* Fix setenv.c diagnostic pragma to be compatible with GCC 4.6Roland McGrath2015-06-022-1/+10
|