aboutsummaryrefslogtreecommitdiff
path: root/sysdeps
AgeCommit message (Collapse)Author
2016-11-17Make Alpha <sys/user.h> self-contained.Joseph Myers
The check-installed-headers tests show up that the Alpha <sys/user.h> is not self-contained, using size_t without including any header that defines it. This patch fixes it by including <stddef.h>, as done for other architectures' versions of this header. Tested for Alpha (compilation only). * sysdeps/unix/sysv/linux/alpha/sys/user.h: Include <stddef.h>.
2016-11-16New internal function __access_noerrnoAdhemerval Zanella
Implement an internal version of __access called __access_noerrno that avoids setting errno. This is useful to check accessibility of files very early on in process startup i.e. before TLS setup. This allows tunables to replace MALLOC_CHECK_ safely (i.e. check existence of /etc/suid-debug to enable/disable MALLOC_CHECK) and at the same time initialize very early so that it can override IFUNCs. Checked on x86_64. * hurd/hurd.h (__hurd_fail_noerrno): New function. * include/unistd.h [IS_IN (rtld) || !defined SHARED]: Declare __access_noerrno. * io/access.c (__access_noerrno): New function. * sysdeps/mach/hurd/access.c (hurd_fail_seterrno): New function. (hurd_fail_seterrno): Likewise. (access_common): Likewise. (__access_noerrno): Likewise. * sysdeps/nacl/access.c (__access_noerrno): Likewise. * sysdeps/unix/sysv/linux/access.c (__access_noerrno): Likewise. * sysdeps/nacl/nacl-interfaces.h (NACL_CALL_NOERRNO): New macro.
2016-11-16Fix SH4 register-dump.h for soft-float.Joseph Myers
This patch fixes SH4 register-dump.h to declare a variable inside the the build for soft-float. Tested (compilation only) for SH4 soft-float. * sysdeps/unix/sysv/linux/sh/sh4/register-dump.h (register_dump): Only declare fpregs if [__SH_FPU_ANY__].
2016-11-15Make SH ucontext always match current kernels.Joseph Myers
As discussed in the thread starting at <https://sourceware.org/ml/libc-alpha/2015-06/msg00657.html>, there are various problems with the sigcontext / mcontext / ucontext structures on SH. The soft-float SH4 case in fact does not build at present, with errors processing sysdeps/unix/sysv/linux/sh/sh4/ucontext_i.sym with gen-as-const.awk ("error: 'mcontext_t {aka struct <anonymous>}' has no member named 'fpregs'"). Linux 4.8 (commit bbe6c77857c38f4acbdc4fc70399515226d1859a) moved to always using the same sigcontext structure on SH, with room for floating-point registers whether or not present on the processor. This patch makes the glibc header match. Tested (compilation only) for sh4-linux-gnu hard float, and in conjunction with other fixes for soft float. * sysdeps/unix/sysv/linux/sh/sys/ucontext.h [__SH4__ || __SH4A__]: Make code unconditional. [!(__SH4__ || __SH4A__)]: Remove conditional code.
2016-11-15s390x: Add hidden definition for __sigsetjmpFlorian Weimer
2016-11-14Make tilegx32 install libraries in lib32 directories.Joseph Myers
This patch makes tilegx32 install libraries in lib32 directories, matching what GCC expects and avoiding conflict with 64-bit libraries installed in lib directories. Tested (compilation only) for tilegx (32-bit and 64-bit, BE and LE, GCC 5). * sysdeps/unix/sysv/linux/tile/tilegx/configure.ac: Use LIBC_SLIBDIR_RTLDDIR for tilegx32. * sysdeps/unix/sysv/linux/tile/tilegx/configure: Regenerated.
2016-11-11Make SH <sys/user.h> self-contained.Joseph Myers
The check-installed-headers tests show up that the SH <sys/user.h> is not self-contained, using size_t without including any header that defines it. This patch fixes it by including <stddef.h>, as done for other architectures' versions of this header. Tested for SH3 and SH4 (compilation only). * sysdeps/unix/sysv/linux/sh/sys/user.h: Include <stddef.h>.
2016-11-10Make sure tilepro uses kernel atomics fo atomic_storeChris Metcalf
It's not legal for raw stores to be mixed with atomic operations on tilepro, since the atomics are managed by kernel fast syscalls. It's possible for a hardware store and a kernel fast atomic to race with each other in such a way that the hardware store is lost. Suppose you have an initial zero value, and you race with a store of 2 and a kernel cmpxchg from 0 to 1. The legal output is only 2: either the store hit first and the cmpxchg failed, or the cmpxchg hit first and succeeded, then was overwritten by the 2. But if the kernel cmpxchg starts first and loads the zero, then the store hits and sets the value to 2, the cmpxchg will still decide it was successful and write the 1, leaving the value illegally set to 1. Using atomic_exchange variants to implement atomic_store fixes this problem for tilepro.
2016-11-10Refactor some libm type-generic macros.Joseph Myers
This patch refactors some type-generic libm macros, in both math.h and math_private.h, to be based on a common __MATH_TG macro rather than all replicating similar logic to choose a function to call based on the type of the argument. This should serve to illustrate what I think float128 support for such macros should look like: common macros such as __MATH_TG may need different definitions depending on whether float128 is supported in glibc, so that the individual macros themselves do not need conditionals on float128 support. Tested for x86_64, x86, mips64 and powerpc. * math/math.h (__MATH_TG): New macro. [__USE_ISOC99] (fpclassify): Define using __MATH_TG. [__USE_ISOC99] (signbit): Likewise. [__USE_ISOC99] (isfinite): Likewise. [__USE_ISOC99] (isnan): Likewise. [__USE_ISOC99] (isinf): Likewise. [__GLIBC_USE (IEC_60559_BFP_EXT)] (issignaling): Likewise. [__GLIBC_USE (IEC_60559_BFP_EXT)] (__MATH_EVAL_FMT2): New macro. [__GLIBC_USE (IEC_60559_BFP_EXT)] (iseqsig): Define using __MATH_TG and __MATH_EVAL_FMT2. * sysdeps/generic/math_private.h (fabs_tg): Define using __MATH_TG. * sysdeps/ieee754/ldbl-128ibm/bits/iscanonical.h [!__NO_LONG_DOUBLE_MATH] (__iscanonicalf): New macro. [!__NO_LONG_DOUBLE_MATH] (__iscanonical): Likewise. [!__NO_LONG_DOUBLE_MATH] (iscanonical): Define using __MATH_TG. * sysdeps/ieee754/ldbl-96/bits/iscanonical.h (__iscanonicalf): New macro. (__iscanonical): Likewise. (iscanonical): Define using __MATH_TG.
2016-11-10Fix sh4 build with __ASSUME_ST_INO_64_BIT redefinitionAdhemerval Zanella
Since 327792c sh4 builds fails with: ../sysdeps/unix/sysv/linux/kernel-features.h:49:0: error: "__ASSUME_ST_INO_64_BIT" redefined [-Werror] #define __ASSUME_ST_INO_64_BIT 1 ^ In file included from ../sysdeps/unix/sysv/linux/sysdep.h:19:0, from ../sysdeps/unix/sysv/linux/sh/sysdep.h:24, from ../sysdeps/unix/sysv/linux/sh/sh4/sysdep.h:4, from <stdin>:1: ../sysdeps/unix/sysv/linux/sh/kernel-features.h:47:0: note: this is the location of the previous definition #define __ASSUME_ST_INO_64_BIT 0 It is because sh4 kernel-features.sh is included multiple times without guards and this patch fixes by adding them. Tested on a sh4-linux-gnu build. * sysdeps/unix/sysv/linux/sh/kernel-features.h: Add include guards.
2016-11-10Consolidate Linux access implementationAdhemerval Zanella
This patch consolidates the Linux access implementation on sysdeps/unix/sysv/linux/access.c. Similar to auto-generation through syscalls.list, __NR_access is check and __NR_faccessat is used only for newer architectures (where __NR_access is not defined). Checked on x86_64. * sysdeps/unix/sysv/linux/access.c: New file. * sysdeps/unix/sysv/linux/generic/access.c: Remove file.
2016-11-10Add definitions to sysdeps/tile/tilepro/bits/wordsize.h.Steve Ellcey
* sysdeps/tile/tilepro/bits/wordsize.h: Define __WORDSIZE32_SIZE_ULONG and __WORDSIZE32_PTRDIFF_LONG.
2016-11-10Regenerate ULPs for aarch64Siddhesh Poyarekar
* sysdeps/aarch64/libm-test-ulps: Regenerated.
2016-11-09Consolidate Linux truncate implementationsAdhemerval Zanella
This patch consolidates all Linux truncate implementation on sysdeps/unix/sysv/linux/truncate{64}.c. It is based on {INTERNAL,INLINE}_SYSCALL patch [1] to simplify the syscall construction. General idea is to build ftruncate iff __OFF_T_MATCHES_OFF64_T is not defined, otherwise ftruncate64 will be build and ftruncate will be an alias. The fallocate will use old compat syscall and pass 32-bit off_t argument, while fallocate64 will handle the correct off64_t passing using __ALIGNMENT_ARG and SYSCALL_LL64 macros. Tested on x86_64, i386, aarch64, and armhf. * sysdeps/unix/sysv/linux/arm/truncate64.c: Remove file. * sysdeps/unix/sysv/linux/generic/wordsize-32/truncate.c: Likewise. * sysdeps/sysv/linux/generic/wordsize-32/truncate64.c: Likewise. * sysdeps/unix/sysv/linux/mips/mips32/truncate64.c: Likewise. * sysdeps/unix/sysv/linux/mips/mips64/truncate64.c: Likewise. * sysdeps/unix/sysv/linux/powerpc/powerpc32/truncate64.c: Likewise. * sysdeps/unix/sysv/linux/wordsize-64/truncate64.c: Likewise. * sysdeps/unix/sysv/linux/truncate.c: New file. * sysdeps/unix/sysv/linux/truncate64.c (truncate64): Use INLINE_SYSCALL_CALL, __ALIGNMENT_ARG and SYSCALL_LL64 macros. * sysdeps/unix/sysv/linux/mips/mips64/syscalls.list (truncate): Remove. * sysdeps/unix/sysv/linux/wordsize-64/syscalls.list (truncate): Likewise. [1] https://sourceware.org/ml/libc-alpha/2016-08/msg00646.html
2016-11-09Consolidate Linux ftruncate implementationsAdhemerval Zanella
THis patch consolidates all Linux ftruncate implementation on sysdeps/unix/sysv/linux/ftruncate{64}.c. It is based on {INTERNAL,INLINE}_SYSCALL patch [1] to simplify the syscall construction. General idea is to build ftruncate iff __OFF_T_MATCHES_OFF64_T is not defined, otherwise ftruncate64 will be build and ftruncate will be an alias. The fallocate will use old compat syscall and pass 32-bit off_t argument, while fallocate64 will handle the correct off64_t passing using __ALIGNMENT_ARG and SYSCALL_LL64 macros. Tested on x86_64, i386, aarch64, and armhf. * posix/tst-truncate-common.c: New file. * posix/tst-truncate.c: Use tst-truncate-common.c. * posix/tst-truncate64.c: Likewise and add LFS tests. * sysdeps/unix/sysv/linux/arm/ftruncate64.c: Remove file. * sysdeps/unix/sysv/linux/generic/wordsize-32/ftruncate.c: Likewise. * sysdeps/unix/sysv/linux/generic/wordsize-32/ftruncate64.c: Likewise. * sysdeps/unix/sysv/linux/mips/mips32/ftruncate64.c: Likewise. * sysdeps/unix/sysv/linux/mips/mips64/ftruncate64.c: Likewise. * sysdeps/unix/sysv/linux/powerpc/powerpc32/ftruncate64.c: Likewise. * sysdeps/unix/sysv/linux/wordsize-64/ftruncate64.c: Likewise. * sysdeps/unix/sysv/linux/ftruncate.c: New file. * sysdeps/unix/sysv/linux/ftruncate64.c (__ftruncate64): Use INLINE_SYSCALL_CALL, __ALIGNMENT_ARG and SYSCALL_LL64 macros. [__OFF_T_MATCHES_OFF64_T] (ftruncate): Add alias. * sysdeps/unix/sysv/linux/mips/mips64/syscalls.list (ftruncate): Remove. * sysdeps/unix/sysv/linux/wordsize-64/syscalls.list (ftruncate): Likewise. [1] https://sourceware.org/ml/libc-alpha/2016-08/msg00646.html
2016-11-08Add localplt.data for sh.Joseph Myers
This patch adds a localplt.data file for sh so that test passes. The architecture-specific entries are for _Unwind_Find_FDE, _exit and __errno_location. Tested for sh3 and sh4. * sysdeps/unix/sysv/linux/sh/localplt.data: New file.
2016-11-08Add localplt.data for hppa.Joseph Myers
This patch adds a localplt.data file for hppa so that test passes. Architecture maintainers should feel free to clean up the sysdeps code so that some or all of the system-specific entries libc.so: _exit libc.so: __sigsetjmp libc.so: _IO_funlockfile libc.so: sigprocmask libc.so: __errno_location libpthread.so: __errno_location are no longer needed. Tested for hppa. Note: check-execstack and check-textrel still fail; you may wish to look at those to get to a clean baseline there (they are less obvious for people not familiar with the architecture). * sysdeps/unix/sysv/linux/hppa/localplt.data: New file.
2016-11-08Update alpha localplt.data.Joseph Myers
This patch updates alpha localplt.data so the localplt test passes in my compile-only all-ABIs glibc testing. The failures I see without this patch are: Missing required PLT reference: ld.so: __tls_get_addr Missing required PLT reference: ld.so: free Now, __tls_get_addr can be made optional. For free, rather than making it optional as in libc.so it seems better to mark all the malloc-related symbols in both libc.so and ld.so as allowing an R_ALPHA_GLOB_DAT relocation as an alternative to using a PLT entry, so this patch does so. Tested for alpha. * sysdeps/unix/sysv/linux/alpha/localplt.data: Make __tls_get_addr optional in ld.so. Allow R_ALPHA_GLOB_DAT relocation for malloc, calloc, realloc, free, memalign and __libc_memalign rather than making them optional.
2016-11-08Update nios2 localplt.data.Joseph Myers
This patch updates nios2 localplt.data so the localplt test passes in my compile-only all-ABIs glibc testing. A new PLT entry for __extendsfdf2 is added. Tested for nios2. * sysdeps/unix/sysv/linux/nios2/localplt.data: Add __extendsfdf2 for libc.so.
2016-11-08Consolidate lseek/lseek64/llseek implementationsAdhemerval Zanella
This patch consolidates all Linux lseek/lseek64/llseek implementation in on on sysdeps/unix/sysv/linux/lseek{64}.c. It also removes the llseek file and instead consolidate the LFS lseek implementation on lseek64.c as for other LFS symbols implementations. The general idea is: - lseek: ABIs that not define __OFF_T_MATCHES_OFF64_T will preferable use __NR__llseek if kernel supports it, otherwise they will use __NR_lseek. ABIs that defines __OFF_T_MATCHES_OFF64_T won't produce any symbol. - lseek64: ABIs with __OFF_T_MATCHES_OFF64_T will preferable use __NR_lseek (since it will use 64-bit arguments without low/high splitting) and __NR__llseek if __NR_lseek is not defined (for some ILP32 ports). - llseek: files will be removed and symbols will be aliased ot lseek64. ABI without __OFF_T_MATCHES_OFF64_T and without __NR_llseek (basically MIPS64n32 so far) are covered by building lseek with off_t as expected and lseek64 using __NR_lseek (as expected for off64_t being passed using 64-bit registers). For this consolidation I mantained the x32 assembly specific implementation because to correctly fix this it would required both the x32 fix for {INLINE,INTERNAL}_SYSCALL [1] and a wrapper to correctly subscribe it to return 64 bits instead of default 32 bits (as for times). It could a future cleanup. It is based on my previous {INTERNAL,INLINE}_SYSCALL_CALL macro [2], although it is mainly for simplification. Tested on x86_64, i686, aarch64, armhf, and powerpc64le. * nptl/Makefile (libpthread-routines): Remove ptw-llseek and add ptw-lseek64. * sysdeps/unix/sysv/linux/Makefile (sysdeps_routines): Remove llseek. * sysdeps/unix/sysv/linux/alpha/Makefile (sysdeps_routines): Likewise. * sysdeps/unix/sysv/linux/generic/wordsize-32/llseek.c: Remove file. * sysdeps/unix/sysv/linux/generic/wordsize-32/lseek.c: Remove file. * sysdeps/unix/sysv/linux/mips/mips64/llseek.c: Likewise. * sysdeps/unix/sysv/linux/llseek.c: Remove file. * sysdeps/unix/sysv/linux/lseek.c: New file. * sysdeps/unix/sysv/linux/lseek64.c: Add default Linux implementation. * sysdeps/unix/sysv/linux/mips/mips64/syscalls.list: Remove lseek and __libc_lseek64 from auto-generation. * sysdeps/unix/sysv/linux/wordsize-64/syscalls.list: Likewise. * sysdeps/unix/sysv/linux/x86_64/x32/lseek64.S: New file. [1] https://sourceware.org/ml/libc-alpha/2016-08/msg00443.html [2] https://sourceware.org/ml/libc-alpha/2016-08/msg00646.html
2016-11-07Define __ASSUME_ST_INO_64_BIT on all platforms.Steve Ellcey
* sysdeps/unix/sysv/linux/alpha/kernel-features.h: #define __ASSUME_ST_INO_64_BIT as 0 * sysdeps/unix/sysv/linux/sh/kernel-features.h: Likewise. * sysdeps/unix/sysv/linux/fxstat64.c: Replace #ifdef with #if over the code where __ASSUME_ST_INO_64_BIT is used. * sysdeps/unix/sysv/linux/lxstat64.c: Likewise. * sysdeps/unix/sysv/linux/xstat64.c: Likewise. * sysdeps/unix/sysv/linux/xstatconv.c: Likewise.
2016-11-07nptl: Document the reason why __kind in pthread_mutex_t is part of the ABIFlorian Weimer
2016-11-04Fix sparc build due missing __WORDSIZE_TIME64_COMPAT32 definitionAdhemerval Zanella
This patch adds the missing Linux sparc definitions from d060cd0. Both value are copied from default sparc value [1] and with this fix now both sparc 32 and 64 bits builds on Linux. * sysdeps/unix/sysv/linux/sparc/bits/wordsize.h (__WORDSIZE_TIME64_COMPAT32): Define for both 32 and 64 bits. [1] sysdeps/sparc/sparc{32,64}/bits/wordsize.h
2016-11-04Fix alpha sqrt fegetenv namespace (bug 20768).Joseph Myers
On alpha, sqrt (a C90 function) brings in references to fegetenv (C99), resulting in linknamespace test failures: [initial] __sqrt -> [libm.a(w_sqrt.o)] __ieee754_sqrt -> [libm.a(e_sqrt.o)] __feholdexcept -> [libm.a(feholdexcpt.o)] fegetenv This patch fixes this by making __feholdexcept call __fegetenv instead of fegetenv. Tested for Alpha (compilation only). [BZ #20768] * sysdeps/alpha/fpu/feholdexcpt.c (__feholdexcept): Call __fegetenv instead of fegetenv.
2016-11-04Do not hardcode platform names in manual/libm-err-tab.pl (bug 14139).Joseph Myers
manual/libm-err-tab.pl hardcodes a list of names for particular platforms (mapping from sysdeps directory name to friendly name for the manual). This goes against the principle of keeping information about individual platforms in their corresponding sysdeps directory, and the list is also very out-of-date regarding supported platforms and their corresponding sysdeps directories. This patch fixes this by adding a libm-test-ulps-name file alongside each libm-test-ulps file. The script then gets the friendly name from that file, which is required to exist, so it no longer needs to allow for the mapping being missing. Tested for x86_64. [BZ #14139] * manual/libm-err-tab.pl (%pplatforms): Initialize to empty. (find_files): Obtain platform name from libm-test-ulps-name and store in %pplatforms. (canonicalize_platform): Remove. (print_platforms): Use $pplatforms directly. (by_platforms): Do not allow for platforms missing from %pplatforms. * sysdeps/aarch64/libm-test-ulps-name: New file. * sysdeps/alpha/fpu/libm-test-ulps-name: Likewise. * sysdeps/arm/libm-test-ulps-name: Likewise. * sysdeps/generic/libm-test-ulps-name: Likewise. * sysdeps/hppa/fpu/libm-test-ulps-name: Likewise. * sysdeps/i386/fpu/libm-test-ulps-name: Likewise. * sysdeps/i386/i686/fpu/multiarch/libm-test-ulps-name: Likewise. * sysdeps/ia64/fpu/libm-test-ulps-name: Likewise. * sysdeps/m68k/coldfire/fpu/libm-test-ulps-name: Likewise. * sysdeps/m68k/m680x0/fpu/libm-test-ulps-name: Likewise. * sysdeps/microblaze/libm-test-ulps-name: Likewise. * sysdeps/mips/mips32/libm-test-ulps-name: Likewise. * sysdeps/mips/mips64/libm-test-ulps-name: Likewise. * sysdeps/nios2/libm-test-ulps-name: Likewise. * sysdeps/powerpc/fpu/libm-test-ulps-name: Likewise. * sysdeps/powerpc/nofpu/libm-test-ulps-name: Likewise. * sysdeps/s390/fpu/libm-test-ulps-name: Likewise. * sysdeps/sh/libm-test-ulps-name: Likewise. * sysdeps/sparc/fpu/libm-test-ulps-name: Likewise. * sysdeps/tile/libm-test-ulps-name: Likewise. * sysdeps/x86_64/fpu/libm-test-ulps-name: Likewise.
2016-11-04Make MIPS <sys/user.h> self-contained.Joseph Myers
The check-installed-headers tests show up that the MIPS <sys/user.h> is not self-contained, using size_t without including any header that defines it. This patch fixes it by including <stddef.h>, as done for other architectures' versions of this header. Tested for MIPS (all 24 ABIs, compilation only). * sysdeps/unix/sysv/linux/mips/sys/user.h: Include <stddef.h>.
2016-11-04XFAIL check-execstack for MIPS.Joseph Myers
This patch marks the check-execstack test as expected to fail for MIPS, with a comment referencing previous RFC discussion of the changes that would be needed to support non-executable stacks on MIPS. Tested for MIPS (all 24 ABIs). * sysdeps/unix/sysv/linux/mips/Makefile [$(subdir) = elf] (test-xfail-check-execstack): New variable.
2016-11-04Add localplt.data for MIPS.Joseph Myers
This patch adds a localplt.data file for MIPS, reflecting the peculiarities of MIPS ELF that mean this test cannot detect PLT entries (there aren't any in shared libraries), not GOT entries (because of the implicit relocation). Tested for MIPS (all 24 ABIs). * sysdeps/mips/localplt.data: New file.
2016-11-04Define wordsize.h macros everywhereSteve Ellcey
* bits/wordsize.h: Add documentation. * sysdeps/aarch64/bits/wordsize.h : New file * sysdeps/generic/stdint.h (PTRDIFF_MIN, PTRDIFF_MAX): Update definitions. (SIZE_MAX): Change ifdef to if in __WORDSIZE32_SIZE_ULONG check. * sysdeps/gnu/bits/utmp.h (__WORDSIZE_TIME64_COMPAT32): Check with #if instead of #ifdef. * sysdeps/gnu/bits/utmpx.h (__WORDSIZE_TIME64_COMPAT32): Ditto. * sysdeps/mips/bits/wordsize.h (__WORDSIZE32_SIZE_ULONG, __WORDSIZE32_PTRDIFF_LONG, __WORDSIZE_TIME64_COMPAT32): Add or change defines. * sysdeps/powerpc/powerpc32/bits/wordsize.h: Likewise. * sysdeps/powerpc/powerpc64/bits/wordsize.h: Likewise. * sysdeps/s390/s390-32/bits/wordsize.h: Likewise. * sysdeps/s390/s390-64/bits/wordsize.h: Likewise. * sysdeps/sparc/sparc32/bits/wordsize.h: Likewise. * sysdeps/sparc/sparc64/bits/wordsize.h: Likewise. * sysdeps/tile/tilegx/bits/wordsize.h: Likewise. * sysdeps/tile/tilepro/bits/wordsize.h: Likewise. * sysdeps/unix/sysv/linux/alpha/bits/wordsize.h: Likewise. * sysdeps/unix/sysv/linux/powerpc/bits/wordsize.h: Likewise. * sysdeps/unix/sysv/linux/sparc/bits/wordsize.h: Likewise. * sysdeps/wordsize-32/bits/wordsize.h: Likewise. * sysdeps/wordsize-64/bits/wordsize.h: Likewise. * sysdeps/x86/bits/wordsize.h: Likewise.
2016-11-04An optimized memchr was missing for AArch64. This version is similar toWilco Dijkstra
strchr and is significantly faster than the C version. 2016-11-04 Wilco Dijkstra <wdijkstr@arm.com> Kevin Petit <kevin.petit@arm.com> * sysdeps/aarch64/memchr.S (__memchr): New file.
2016-11-04Handle tilegx* machine names.Joseph Myers
This patch makes sysdeps/tile/preconfigure handle tilegx* machine names instead of just plain tilegx. That matches GCC, and in particular allows a big-endian toolchain to use the tilegxbe-linux-gnu name when configuring both GCC and glibc. Tested with compilation for tilegxbe-linux-gnu, both 32-bit and 64-bit (building a subsequent GCC against that glibc still falls over because of both 32-bit and 64-bit libraries going in the lib directory, as noted at <https://sourceware.org/ml/libc-alpha/2016-11/msg00129.html>). * sysdeps/tile/preconfigure: Accept tilegx* instead of tilegx.
2016-10-31hurd: Fix spurious port deallocationBrent W. Baccala
* sysdeps/mach/hurd/dl-sysdep.c (__mmap): Do not deallocate memobj_wr when it is MACH_PORT_NULL.
2016-10-28Document a behavior of an elided pthread_rwlock_unlockTulio Magno Quites Machado Filho
Explain that pthread_rwlock_unlock may crash if called on a lock not held by the current thread.
2016-10-28powerpc: Fix TOC stub on powerpc64 clone()Tulio Magno Quites Machado Filho
Use a function call to _exit() so that the linker can create a TOC stub instead of just a branch. Tested on powerpc64.
2016-10-28crypt: Use internal names for the SHA-2 block functionsFlorian Weimer
These functions are externally visible with a static libcrypt library.
2016-10-28Check IFUNC definition in unrelocated shared library [BZ #20019]H.J. Lu
Calling an IFUNC function defined in unrelocated shared library may lead to segfault. This patch issues an error message to request relinking the shared library if it references IFUNC function defined in the unrelocated shared library. [BZ #20019] * sysdeps/i386/dl-machine.h (elf_machine_rel): Check IFUNC definition in unrelocated shared library. * sysdeps/x86_64/dl-machine.h (elf_machine_rela): Likewise.
2016-10-28i386: Support CFLAGS which imply -fno-omit-frame-pointer [BZ #20729]Florian Weimer
2016-10-27Fix a sparc header conformtest failure.David S. Miller
* sysdeps/unix/sysv/linux/sparc/sys/user.h: Include stddef.h
2016-10-26Add canonicalize, canonicalizef, canonicalizel.Joseph Myers
TS 18661-1 defines canonicalize functions to produce a canonical version of a floating-point representation. This patch implements these functions for glibc. As with the iscanonical macro, these functions are oriented to the decimal floating-point case, where some values have both canonical and noncanonical representations. However, the functions have a return value that says whether they succeeded in storing a canonical result; thus, they can fail for the case of an invalid representation (while still not making any particular choice from among multiple equally canonical valid representations of the same value). Since no floating-point formats in glibc actually have noncanonical valid representations, a type-generic implementation of these functions can be used that expects iscanonical to return 0 only for invalid representations. Now that iscanonical is used within libm.so, libm_hidden_proto / libm_hidden_def are added for __iscanonicall. The definition of these functions is intended to correspond to a convertFormat operation to the same floating-point format. Thus, they convert signaling NaNs to quiet NaNs, raising the "invalid" exception. Such a conversion "should" produce "the canonical version of that signaling NaN made quiet". libm-test.inc is made to check NaN payloads for the output of these functions, a new feature (at some point manipulation functions such as fabs and copysign should have tests added that verify payload preservation for them). As however some architectures may not follow the recommended practice of preserving NaN payloads when converting a signaling NaN to quiet, a new math-tests.h macro SNAN_TESTS_PRESERVE_PAYLOAD is added, and defined to 0 for non-NAN2008 MIPS; any other architectures seeing test failures for lack of payload preservation in this case should also define this macro to 0. (If any cases arise where the sign isn't preserved either, those should have a similar macro added.) The ldbl-96 and ldbl-128ibm tests of iscanonical are renamed and adapted to test canonicalizel as well on the same representations. Tested for x86_64, x86, mips64 and powerpc. * math/bits/mathcalls.h [__GLIBC_USE (IEC_60559_BFP_EXT)] (canonicalize): New declaration. * math/Versions (canonicalize): New libm symbol at version GLIBC_2.25. (canonicalizef): Likewise. (canonicalizel): Likewise. * math/Makefile (gen-libm-calls): Add s_canonicalizeF. * math/s_canonicalize_template.c: New file. * math/libm-test.inc: Update comment on functions tested and testing of NaN payloads. (TEST_NAN_PAYLOAD): New macro. (NO_TEST_INLINE): Update value. (XFAIL_TEST): Likewise. (ERRNO_UNCHANGED): Likewise. (ERRNO_EDOM): Likewise. (ERRNO_ERANGE): Likewise. (IGNORE_RESULT): Likewise. (NON_FINITE): Likewise. (TEST_SNAN): Likewise. (NO_TEST_MATHVEC): Likewise. (TEST_NAN_PAYLOAD_CANONICALIZE): New macro. (check_float_internal): Check NaN payloads if TEST_NAN_PAYLOAD. (struct test_Ffp_b1_data): New type. (RUN_TEST_Ffp_b1): New macro. (RUN_TEST_LOOP_Ffp_b1): Likewise. (canonicalize_test_data): New array. (canonicalize_test): New function. (main): Call canonicalize_test. * manual/arith.texi (FP Bit Twiddling): Document canonicalize, canonicalizef and canonicalizel. * manual/libm-err-tab.pl: Update comment on interfaces without ulps tabulated. * sysdeps/ieee754/ldbl-opt/nldbl-canonicalize.c: New file. * sysdeps/ieee754/ldbl-opt/s_canonicalizel.c: Likewise. * sysdeps/ieee754/ldbl-opt/Makefile (libnldbl-calls): Add canonicalize. (CFLAGS-nldbl-canonicalize.c): New variable. * sysdeps/ieee754/ldbl-128ibm/test-iscanonical-ldbl-128ibm.c: Move to ... * sysdeps/ieee754/ldbl-128ibm/test-canonical-ldbl-128ibm.c: ... here. (do_test): Also test canonicalizel. * sysdeps/ieee754/ldbl-128ibm/Makefile (tests): Change test-iscanonical-ldbl-128ibm to test-canonical-ldbl-128ibm. * sysdeps/ieee754/ldbl-128ibm/include/bits/iscanonical.h: New file. * sysdeps/ieee754/ldbl-128ibm/s_iscanonicall.c (__iscanonicall): Use libm_hidden_def. * sysdeps/ieee754/ldbl-96/test-iscanonical-ldbl-96.c: Move to ... * sysdeps/ieee754/ldbl-96/test-canonical-ldbl-96.c: ... here. (do_test): Also test canonicalizel. * sysdeps/ieee754/ldbl-96/Makefile (tests): Change test-iscanonical-ldbl-96 to test-canonical-ldbl-96. * sysdeps/ieee754/ldbl-96/include/bits/iscanonical.h: New file. * sysdeps/ieee754/ldbl-96/s_iscanonicall.c (__iscanonicall): Use libm_hidden_def. * sysdeps/generic/math-tests.h (SNAN_TESTS_PRESERVE_PAYLOAD): New macro. * sysdeps/mips/math-tests.h [__mips_hard_float && !__mips_nan2008] (SNAN_TESTS_PRESERVE_PAYLOAD): Likewise. * sysdeps/nacl/libm.abilist: Update. * sysdeps/unix/sysv/linux/aarch64/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/alpha/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/arm/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/hppa/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/i386/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/ia64/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/microblaze/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/mips/mips32/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/mips/mips64/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/nios2/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/powerpc/powerpc64/libm-le.abilist: Likewise. * sysdeps/unix/sysv/linux/powerpc/powerpc64/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/sh/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/tile/tilepro/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/x86_64/64/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist: Likewise.
2016-10-26Add getpayloadl to libnldbl.Joseph Myers
This patch adds getpayloadl to libnldbl, missed in my patch that originally implemented getpayload functions. Tested for powerpc. * sysdeps/ieee754/ldbl-opt/nldbl-getpayload.c: New file. * sysdeps/ieee754/ldbl-opt/Makefile (libnldbl-calls): Add getpayload. (CFLAGS-nldbl-getpayload.c): New variable.
2016-10-25Add strfromd, strfromf, and strfroml functionsGabriel F. T. Gomes
ISO/IEC TS 18661-1 adds several functions in the strfrom family to stdlib. This patch adds strfromd, strfromf, and strfroml. This is being done in preparation for the new floating-point type, float128. The added functions convert a floating-point value into a string, with configurable format.
2016-10-25Fix cmpli usage in power6 memset.Joseph Myers
Building glibc for powerpc64 with recent (2.27.51.20161012) binutils, with multi-arch enabled, I get the error: ../sysdeps/powerpc/powerpc64/power6/memset.S: Assembler messages: ../sysdeps/powerpc/powerpc64/power6/memset.S:254: Error: operand out of range (5 is not between 0 and 1) ../sysdeps/powerpc/powerpc64/power6/memset.S:254: Error: operand out of range (128 is not between 0 and 31) ../sysdeps/powerpc/powerpc64/power6/memset.S:254: Error: missing operand Indeed, cmpli is documented as a four-operand instruction, and looking at nearby code it seems likely cmpldi was intended. This patch fixes this powerpc64 code accordingly, and makes a corresponding change to the powerpc32 code. Tested for powerpc, powerpc64 and powerpc64le by Tulio Magno Quites Machado Filho * sysdeps/powerpc/powerpc32/power6/memset.S (memset): Use cmplwi instead of cmpli. * sysdeps/powerpc/powerpc64/power6/memset.S (memset): Use cmpldi instead of cmpli.
2016-10-24 * sysdeps/unix/sysv/linux/fxstat.c: Remove useless cast.Yury Norov
* sysdeps/unix/sysv/linux/lxstat.c: Likewise. * sysdeps/unix/sysv/linux/xstat.c: Likewise. * sysdeps/unix/sysv/linux/i386/fxstat.c: Likewise. * sysdeps/unix/sysv/linux/i386/lxstat.c: Likewise. * sysdeps/unix/sysv/linux/i386/xstat.c: Likewise.
2016-10-24Fix Linux sh4 pread/pwrite argument passingAdhemerval Zanella
Although conceptually correct for p{read,write}{64} offset argument passing, sh4 implementation does not generate the correct expected code. The __ALIGNMENT_ARG redefinition is incorrect for two reasons: 1. the kernel-features.h header is included multiple times (since it contains no guards) and 2. the value it redefines is also incorrect (should be '0, ' instead of empty definition). This patch fixes it by adding another macro, SYSCALL_LL_PRW{64}, meant to be used to pass the offset argument on p{read,write}64. It is basically the already define SYSCALL_LL{64} plus __ALIGNMENT_ARG unless __ASSUME_PRW_DUMMY_ARG is define. In this case an empty dummy argument is used regardless how __ALIGNMENT_ARG is defined (sh4 case). Checked on x86_64, i686, aarch64, armhf, and powerpc64le (basically a sanity check). Also, John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de> and James Clarke <jrtc27@jrtc27.com> help me check on a debian sh4 bootstrap using 2.24 plus this patch to verify it also corrected fixed the regression issue. I also verified the generated object for a 2.24 build and master with this patch for sh4 and both look identical. * sysdeps/unix/sysv/linux/pread.c (__libc_pread): Use SYSCALL_LL_PRW. * sysdeps/unix/sysv/linux/pwrite.c (__libc_pwrite): Likewise. * sysdeps/unix/sysv/linux/pread64.c (__libc_pread64): Use SYSCALL_LL64_PRW. * sysdeps/unix/sysv/linux/pwrite64.c (__libc_pwrite64): Likewise. * sysdeps/unix/sysv/linux/sh/kernel-features.h: Define __ASSUME_PRW_DUMMY_ARG. * sysdeps/unix/sysv/linux/sh/pread.c: Remove file. * sysdeps/unix/sysv/linux/sh/pread64.c: Likewise. * sysdeps/unix/sysv/linux/sh/pwrite.c: Likewise. * sysdeps/unix/sysv/linux/sh/pwrite64.c: Likewise. * sysdeps/unix/sysv/linux/sysdep.h: Define SYSCALL_LL_PRW and SYSCALL_LL_PRW64 based on __ASSUME_PRW_DUMMY_ARG.
2016-10-24Fix -Wformat-length warning in tst-setgetname.cSteve Ellcey
* sysdeps/unix/sysv/linux/tst-setgetname.c: Increase buffer size.
2016-10-21powerpc: Cleanup fenv_private.hPaul Murphy
Some of the masks are wrong, and the naming is confusing. There are two basic cases we really care about: 1. Stacking a new rounding mode when running certain sections of code, and pausing exception handling. 2. Likewise, but discarding any exceptions which occur while running under the new rounding mode. libc_feholdexcept_setround_ppc_ctx has been removed as it basically does the same thing as libc_feholdsetround_ppc_ctx but also clearing any sticky bits. The restore behavior is what differentiates these two cases as the SET_RESTORE_ROUND{,_NOEX} macros will either merge or discard all exceptions occurring during scope of their usage. Likewise, there are a number of routines to swap, replace, or merge FP environments. This change reduces much of the common and sometimes wrong code. Tested on ppc64le, with results before and after.
2016-10-20Use VSQRT instruction for ARM sqrt (bug 20660).Joseph Myers
This patch makes ARM sqrt and sqrtf use the VSQRT VFP square root instruction when available, instead of much larger generic code for computing square roots. Now, GCC will normally inline sqrt calls except for negative arguments where errno needs to be set, and because the benchtests fail to use -fno-builtin that means no significant difference in benchmark results for sqrt (note, however, there are lots of __ieee754_sqrt calls internally in libm, which are *not* inlined - although some architectures define __ieee754_sqrt in their math_private.h for that purpose, ARM doesn't - so improving out-of-line sqrt performance is still relevant to those other functions, if not for most ordinary direct users of sqrt). With the benchtests changed to use -fno-builtin for sqrt tests, typical performance results before the change are ("max" is wildly varying in any case): "duration": 9.88358e+09, "iterations": 4.8783e+07, "max": 457.764, "min": 183.105, "mean": 202.603 and after it are: "duration": 9.45663e+09, "iterations": 2.24385e+08, "max": 274.659, "min": 30.517, "mean": 42.1447 Tested for ARM (hard-float and soft-float). [BZ #20660] * sysdeps/arm/e_sqrt.c: New file. * sysdeps/arm/e_sqrtf.c: Likewise.
2016-10-19Stop powerpc copysignl raising "invalid" for sNaN argument (bug 20718).Joseph Myers
The powerpc (hard-float) implementations of copysignl, both 32-bit and 64-bit, raise spurious "invalid" exceptions when the first argument is a signaling NaN. copysign functions should never raise exceptions even for signaling NaNs. The problem is the use of an fcmpu instruction to test the sign of the high part of the long double argument. This patch fixes the functions to use fsel instead (as used for fabsl following my fixes for a similar bug there), or to examine the integer representation for older 32-bit processors without fsel. Tested for powerpc64 and powerpc32 (configurations with and without fsel used). [BZ #20718] * sysdeps/powerpc/powerpc32/fpu/s_copysignl.S (__copysignl): Do not use floating-point comparisons to test sign. * sysdeps/powerpc/powerpc64/fpu/s_copysignl.S (__copysignl): Likewise.
2016-10-19Add getpayload, getpayloadf, getpayloadl.Joseph Myers
TS 18661-1 defines functions for manipulating the payloads of NaNs. This patch implements the getpayload functions for glibc; these extract the NaN payload (from an argument passed as a pointer, for which corresponding libm-test support is added) and return it in the same floating-point type. The return value of these functions is unspecified for non-NaN arguments; the patch does the simplest thing to implement, which is that the functions do not check whether the argument is a NaN and just treat the relevant bits of the representation as a payload regardless. A conversion from integer to floating-point is used to produce the required return value, except in the ldbl-128 case; as 128-bit integers are not supported for all configurations using ldbl-128, the code constructs the required floating-point representation of the return value directly instead. Tested for x86_64, x86, mips64 and powerpc. * math/bits/mathcalls.h [__GLIBC_USE (IEC_60559_BFP_EXT)] (getpayload): New declaration. * math/Versions (getpayload): New libm symbol at version GLIBC_2.25. (getpayloadf): Likewise. (getpayloadl): Likewise. * math/Makefile (libm-calls): Add s_getpayloadF. * math/libm-test.inc: Include <nan-high-order-bit.h>. (struct test_f_f_data): Add comment. (RUN_TEST_fp_f): New macro. (RUN_TEST_LOOP_fp_f): Likewise. (getpayload_test_data): New array. (getpayload_test): New function. (main): Call getpayload_test. * math/gen-libm-test.pl (parse_args): Handle 'p' in argument descriptor. * manual/arith.texi (FP Bit Twiddling): Document getpayload, getpayloadf and getpayloadl. * manual/libm-err-tab.pl: Update comment on interfaces without ulps tabulated. * sysdeps/ieee754/dbl-64/s_getpayload.c: New file. * sysdeps/ieee754/dbl-64/wordsize-64/s_getpayload.c: Likewise. * sysdeps/ieee754/flt-32/s_getpayloadf.c: Likewise. * sysdeps/ieee754/ldbl-128/s_getpayloadl.c: Likewise. * sysdeps/ieee754/ldbl-128ibm/s_getpayloadl.c: Likewise. * sysdeps/ieee754/ldbl-96/s_getpayloadl.c: Likewise. * sysdeps/nacl/libm.abilist: Update. * sysdeps/unix/sysv/linux/aarch64/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/alpha/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/arm/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/hppa/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/i386/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/ia64/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/microblaze/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/mips/mips32/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/mips/mips64/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/nios2/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/powerpc/powerpc64/libm-le.abilist: Likewise. * sysdeps/unix/sysv/linux/powerpc/powerpc64/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/sh/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/tile/tilepro/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/x86_64/64/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist: Likewise.
2016-10-18Fix Linux fallocate tests for EOPNOTSUPPAdhemerval Zanella
The fallocate syscall might fail on Linux due missing support from underlying filesystem (for instance some NFS versions). This patch adds this check for fallocate tests. It also moves tst-fallocate{64} to 'io' folder (since it is on fallocate{64} is built). Checked on x86_64. * sysdeps/unix/sysv/linux/Makefile [$(subdir) = math] (tests): Move tst-fallocate{64}. * sysdeps/unix/sysv/linux/tst-fallocate-common.c: Check for EOPNOTSUPP on syscall return.