aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2017-06-26Call exit directly in clone (BZ #21512)Adhemerval Zanella
On aarch64, alpha, arm, hppa, mips, nios2, powerpc, sh, sparc, tile, and x86_64 the clone syscall jumps to _exit after the child execution and the function ends the process execution by calling exit_group. This behavior have a small issue where threads created with CLONE_THREAD using clone syscall directly will eventually exit the whole group altogether instead of just the thread created. Also, s390, microblaze, ia64, i386, and m68k differs by calling exit syscall directly. This patch changes all architectures to call the exit syscall directly, as for s390, microblaze, ia64, i386, and m68k. This do not have change glibc internal behavior in any sort, since the only usage of clone implementation in posix_spawn calls _exit directly in the created child (fork uses a direct call to clone). Checked on x86_64-linux-gnu, i686-linux-gnu, aarch64-linux-gnu, powerpc-linux-gnu, powerpc64le-linux-gnu, sparc64-linux-gnu, and sparcv9-linux-gnu. [BZ #21512] * sysdeps/unix/sysv/linux/aarch64/clone.S (__clone): Call exit syscall instead of jump to _exit. (CLONE_VM_BIT): Remove unused define. (CLONE_VM): Likewise. (CLONE_THREAD_BIT): Likewise. (CLONE_THREAD): Likewise. * sysdeps/unix/sysv/linux/alpha/clone.S (__clone): Likewise. (CLONE_VM): Remove unused define. * sysdeps/unix/sysv/linux/arm/clone.S (__clone): Likewise. (CLONE_VM): Remove unused define. (CLONE_THREAD): Likewise. * sysdeps/unix/sysv/linux/i386/clone.S (CLONE_VM): Likewise. * sysdeps/unix/sysv/linux/ia64/clone2.S (__clone2): Call exit syscall instead of jump to _exit. * sysdeps/unix/sysv/linux/hppa/clone.S (__clone): Likewise. * sysdeps/unix/sysv/linux/mips/clone.S (__clone): Likewise. (CLONE_VM): Remove unused define. (CLONE_THREAD): Likewise. * sysdeps/unix/sysv/linux/nios2/clone.S (__clone): Likewise. (CLONE_VM): Remove unused define. * sysdeps/unix/sysv/linux/powerpc/powerpc32/clone.S (__clone): Likewise. (CLONE_VM): Remove unused define. (CLONE_THREAD): Likewise. * sysdeps/unix/sysv/linux/powerpc/powerpc64/clone.S (__clone): Likewise. (CLONE_VM): Remove unused define. (CLONE_THREAD): Likewise. * sysdeps/unix/sysv/linux/sh/clone.S (__clone): Likewise. * sysdeps/unix/sysv/linux/sparc/sparc32/clone.S (__clone): Likewise. (CLONE_VM): Remove unused define. * sysdeps/unix/sysv/linux/sparc/sparc64/clone.S (__clone): Likewise. (CLONE_VM): Remove unused define. * sysdeps/unix/sysv/linux/tile/clone.S (__clone): Likewise. * sysdeps/unix/sysv/linux/x86_64/clone.S (__clone): Likewise. (CLONE_VM): Remove unused define. * sysdeps/unix/sysv/linux/Makefile (tests): Add tst-clone3. * sysdeps/unix/sysv/linux/tst-clone3.c: New file. Fix
2017-06-26powerpc64le: Enable float128Paul E. Murphy
This patch adds ULPs for the float128 type, updates the abilist for libc and libm, and adds the files bits/floatn.h and float128-abi.h, in order to enable the new type for powerpc64le. This patch also adds the implementation of sqrtf128 for powerpc64le, since it is not implemented in libgcc. The sfp-machine.h header is taken from libgcc. Tested for powerpc64le (GCC 6.2 and GCC 7.1), powerpc64 and s390x. * manual/math.texi (Mathematics): Mention the enabling of float128 for powerpc64le. * sysdeps/powerpc/bits/floatn.h: New file. * sysdeps/powerpc/fpu/libm-test-ulps: Regenerated. * sysdeps/powerpc/fpu/math_private.h: (__ieee754_sqrtf128): New inline override. * sysdeps/powerpc/powerpc64le/Implies-before: New file. * sysdeps/powerpc/powerpc64le/Makefile: New file. * sysdeps/powerpc/powerpc64le/fpu/e_sqrtf128.c: New file. * sysdeps/powerpc/powerpc64le/fpu/sfp-machine.h: New file. * sysdeps/powerpc/powerpc64le/power9/fpu/e_sqrtf128.c: New file. * sysdeps/unix/sysv/linux/powerpc/powerpc64/libc-le.abilist: Updated. * sysdeps/unix/sysv/linux/powerpc/powerpc64/libm-le.abilist: Likewise. * sysdeps/unix/sysv/linux/powerpc/powerpc64le/float128-abi.h: New file.
2017-06-26powerpc64le: Require at least POWER8 for powerpc64leGabriel F. T. Gomes
Support for powerpc64le requires POWER8 or newer processors. Builds for older processors are not tested. Require at least POWER8 to avoid unintentional builds. * sysdeps/powerpc/powerpc64le/configure.ac: Check for POWER8. * sysdeps/powerpc/powerpc64le/configure: Update.
2017-06-26powerpc64le: Check for compiler features for float128Gabriel F. T. Gomes
On powerpc64le, support for float128 will be enabled, which requires some compiler features to be present. This patch adds a configure test to check for such features, which are provided for powerpc64le since GCC 6.2. Tested for powerpc64 and powerpc64le. * INSTALL: Regenerate. * manual/install.texi (Recommended Tools for Compilation): Mention the powerpc64le-specific requirement in the manual. * sysdeps/powerpc/powerpc64le/configure.ac: New file with checks for the compiler features required for building float128. * sysdeps/powerpc/powerpc64le/configure: New, auto-generated file.
2017-06-26Prevent an implicit int promotion in malloc/tst-alloc_buffer.cTulio Magno Quites Machado Filho
According to ISO C11, section 6.5.3.3 "Unary arithmetic operators", the result of the ~ operator is the bitwise complement of its (promoted) operand. This can lead to a comparison of a char with another integer type. Tested on powerpc, powerpc64 and powerpc64le. * malloc/tst-alloc_buffer.c (test_misaligned): Cast to char before comparing with another char.
2017-06-25manual: Fix a minor grammatical error.Rical Jasan
* manual/math.texi: Fix a grammatical error.
2017-06-24resolv/tst-resolv-basic: Add test cases for bug 21295Florian Weimer
2017-06-24getaddrinfo: Merge IPv6 addresses and IPv4 addresses [BZ #21295]Dmitry Bilunov
2017-06-23Avoid .symver on common symbols [BZ #21666]H.J. Lu
The .symver directive on common symbol just creates a new common symbol, not an alias and the newer assembler with the bug fix for https://sourceware.org/bugzilla/show_bug.cgi?id=21661 will issue an error. Before the fix, we got $ readelf -sW libc.so | grep "loc[12s]" 5109: 00000000003a0608 8 OBJECT LOCAL DEFAULT 36 loc1 5188: 00000000003a0610 8 OBJECT LOCAL DEFAULT 36 loc2 5455: 00000000003a0618 8 OBJECT LOCAL DEFAULT 36 locs 6575: 00000000003a05f0 8 OBJECT GLOBAL DEFAULT 36 locs@GLIBC_2.2.5 7156: 00000000003a05f8 8 OBJECT GLOBAL DEFAULT 36 loc1@GLIBC_2.2.5 7312: 00000000003a0600 8 OBJECT GLOBAL DEFAULT 36 loc2@GLIBC_2.2.5 in libc.so. The versioned loc1, loc2 and locs have the wrong addresses. After the fix, we got $ readelf -sW libc.so | grep "loc[12s]" 6570: 000000000039e3b8 8 OBJECT GLOBAL DEFAULT 34 locs@GLIBC_2.2.5 7151: 000000000039e3c8 8 OBJECT GLOBAL DEFAULT 34 loc1@GLIBC_2.2.5 7307: 000000000039e3c0 8 OBJECT GLOBAL DEFAULT 34 loc2@GLIBC_2.2.5 [BZ #21666] * misc/regexp.c (loc1): Add __attribute__ ((nocommon)); (loc2): Likewise. (locs): Likewise.
2017-06-23inet_pton: Reject IPv6 addresses with many leading zeros [BZ #16637]Florian Weimer
2001:db8:00001::f is not a valid IPv6 address according to RFC 2373.
2017-06-23Clean pthread functions namespaces for C11 threadsAdhemerval Zanella
This patch adds internal definition (through {libc_}hidden_{proto,def}) and also change some strong to weak alias for symbols that might be used by C11 threads implementations. The patchset should not change libc/libpthread functional, although object changes are expected (since now internal symbols are used instead) and final exported symbols through GLIBC_PRIVATE is also expanded (to cover libpthread usage of __mmap{64}, __munmap, __mprotect). Checked with a build for all major ABI (aarch64-linux-gnu, alpha-linux-gnu, arm-linux-gnueabi, i386-linux-gnu, ia64-linux-gnu, m68k-linux-gnu, microblaze-linux-gnu [1], mips{64}-linux-gnu, nios2-linux-gnu, powerpc{64le}-linux-gnu, s390{x}-linux-gnu, sparc{64}-linux-gnu, tile{pro,gx}-linux-gnu, and x86_64-linux-gnu). * include/sched.h (__sched_get_priority_max): Add libc hidden proto. (__sched_get_prioriry_min): Likewise. * include/sys/mman.h (__mmap): Likewise. (__mmap64): Likewise. (__munmap): Likewise. (__mprotect): Likewise. * include/termios.h (__tcsetattr): Likewise. * include/time.h (__nanosleep): Use hidden_proto instead of libc_hidden_proto. * posix/nanosleep.c (__nanosleep): Likewise. * misc/Versions (libc): Export __mmap, __munmap, __mprotect, __sched_get_priority_min, and __sched_get_priority_max under GLIBC_PRIVATE. * nptl/allocatestack.c (__free_stacks): Use internal definition for libc symbols. (change_stack_perm): Likewise. (allocate_stack): Likewise. * sysdeps/posix/gethostname.c: Likewise. * nptl/tpp.c (__init_sched_fifo_prio): Likewise. * sysdeps/unix/sysv/linux/i386/smp.h (is_smp_system): Likewise. * sysdeps/unix/sysv/linux/powerpc/ioctl.c (__ioctl): Likewise. * nptl/pthreadP.h (__pthread_mutex_timedlock): Add definition. (__pthread_key_delete): Likewise. (__pthread_detach): Likewise. (__pthread_cancel): Likewise. (__pthread_mutex_trylock): Likewise. (__pthread_mutexattr_init): Likewise. (__pthread_mutexattr_settype): Likewise. * nptl/pthread_cancel.c (pthread_cancel): Change to internal name and create alias for exported one. * nptl/pthread_join.c (pthread_join): Likewise. * nptl/pthread_detach.c (pthread_detach): Likewise. * nptl/pthread_key_delete.c (pthread_key_delete): Likewise. * nptl/pthread_mutex_timedlock.c (pthread_mutex_timedlock): Likewise. * nptl/pthread_create.c: Change static requirements for pthread symbols. * nptl/pthread_equal.c (__pthread_equal): Change strong alias to weak for internal definition. * nptl/pthread_exit.c (__pthread_exit): Likewise. * nptl/pthread_getspecific.c (__pthread_getspecific): Likewise. * nptl/pthread_key_create.c (__pthread_key_create): Likewise. * nptl/pthread_mutex_destroy.c (__pthread_mutex_destroy): Likewise. * nptl/pthread_mutex_init.c (__pthread_mutex_init): Likewise. * nptl/pthread_mutex_lock.c (__pthread_mutex_lock): Likewise. * nptl/pthread_mutex_trylock.c (__pthread_mutex_trylock): Likewise. * nptl/pthread_mutex_unlock.c (__pthread_mutex_unlock): Likewise. * nptl/pthread_mutexattr_init.c (__pthread_mutexattr_init): Likwise. * nptl/pthread_mutexattr_settype.c (__pthread_mutexattr_settype): Likewise. * nptl/pthread_self.c (__pthread_self): Likewise. * nptl/pthread_setspecific.c (__pthread_setspecific): Likewise. * sysdeps/unix/sysv/linux/tcsetattr.c (tcsetattr): Likewise. * misc/mmap.c (__mmap): Add internal symbol definition. * misc/mmap.c (__mmap64): Likewise. * sysdeps/unix/sysv/linux/mmap.c (__mmap): Likewise. * sysdeps/unix/sysv/linux/mmap64.c (__mmap): Likewise. (__mmap64): Likewise. * sysdeps/unix/sysv/linux/i386/Versions (libc) [GLIBC_PRIVATE): Add __uname.
2017-06-23Update x86 ulps for GCC 7.Joseph Myers
Testing with GCC 7 for 32-bit x86 showed some ulps differences, presumably from variation in when values with excess precision get spilled to the stack and so lose that precision. This patch updates the libm-test-ulps files accordingly. * sysdeps/i386/fpu/libm-test-ulps: Update. * sysdeps/i386/i686/fpu/multiarch/libm-test-ulps: Likewise.
2017-06-23Make libm-test-support code clear exceptions after each test.Joseph Myers
The libm-test-support code clears exceptions at the end of test_exceptions. However, it's possible that exceptions get raised as part of the subsequent checks on the results of the function being tested, and such exceptions then carry through to the next test run and can cause that to fail spuriously. In particular, it's possible for the ulps calculation to raise exceptions in some cases. This patch puts exception clearing at the end of each of the check_* functions, alongside errno clearing, to avoid one test affecting the next in that way. Tested for x86_64 (in conjunction with float128 patches). * libm-test-support.c (check_float_internal): Clear exceptions at end of function. (check_int): Likewise. (check_long): Likewise. (check_bool): Likewise. (check_longlong): Likewise. (check_intmax_t): Likewise. (check_uintmax_t): Likewise.
2017-06-23Avoid localplt issues from x86 fereaiseexcept inline.Joseph Myers
Building for x86_64 with float128 support, I get a localplt test failure from lrintf128 calling feraiseexcept. The problem is that an inline optimized version of feraiseexcept calls __feraiseexcept_renamed in cases where it doesn't completely expand inline, and that in turn is redirected to feraiseexcept for a library call, so meaning the redirection of feraiseexcept to __GI_feraiseexcept inside libm is lost for that call. This patch fixes the problem by moving the redirect to an internal header in the _LIBC case, with the internal header using __GI_feraiseexcept where appropriate. Tested for x86_64 (in conjunction with float128 patches). * sysdeps/x86/fpu/bits/fenv.h [_LIBC] (__feraiseexcept_renamed): Do not declare. * sysdeps/x86/fpu/include/bits/fenv.h [_LIBC && __USE_EXTERN_INLINES] (__feraiseexcept_renamed): Declare here, redirected to __GI_feraiseexcept if [SHARED && IS_IN (libm)].
2017-06-23x86-64: Optimize L(between_2_3) in memcmp-avx2-movbe.SH.J. Lu
Turn movzbl -1(%rdi, %rdx), %edi movzbl -1(%rsi, %rdx), %esi orl %edi, %eax orl %esi, %ecx into movb -1(%rdi, %rdx), %al movb -1(%rsi, %rdx), %cl * sysdeps/x86_64/multiarch/memcmp-avx2-movbe.S (between_2_3): Replace movzbl and orl with movb.
2017-06-23Document _FloatN and _FloatNx versions of math functionsGabriel F. T. Gomes
The functions defined in ISO/IEC TS 18661-3 take floating-point arguments and return floating-point numbers of _FloatN and _FloatNx types. Apart from the type, these functions behave the same as their float, double, and long double counterparts. This patch adds the newer functions to the manual. * manual/arith.texi (Infinity and NaN): Document SNANFN and SNANFNx. (Error Reporting by Mathematical Functions): Document HUGE_VAL_FN and HUGE_VAL_FNx. (Absolute Value): Document fabsfN, fabsfNx, cabsfN, cabsfNx. Rephrase the paragraph that mentions that fabs, fabsf, and fabsl are in math.h, to avoid having to list the _FloatN and _FloatNx variants as well. Likewise for the cabs functions. (Normalization Functions): Document frexpfN, frexpfNx, ldexpfN, ldexpfNx, scalbnfN, scalbnfNx, scalblnfN, scalblnfNx. Mention that _FloatN and _FloatNx variants of scalbn and scalbln come from TS 18661-3, since this section explicitly states that these functions come from BSD. (Rounding Functions): Document ceilfN, ceilfNx, floorfN, floorfNx, truncfN, truncfNx, rintfN, rintfNx, nearbyintfN, nearbyintfNx, roundfN, roundfNx, roundevenfN, roundevenfNx, lrintfN, lrintfNx, llrintfN, llrintfNx, lroundfN, lroundfNx, llroundfN, llroundfNx, fromfpfN, fromfpfNx, ufromfpfN, ufromfpfNx, fromfpxfN, fromfpxfNx, ufromfpxfN, ufromfpxfNx, modffN, modffNx. (Remainder Functions): Document fmodfN, fmodfNx, remainderfN, remainderfNx. (Setting and modifying single bits of FP values): Document copysignfN, copysignfNx, nextafterfN, nextafterfNx, nextupfN, nextupfNx, nextdownfN, nextdownfNx, nanfN, nanfNx, canonicalizefN, canonicalizefNx, getpayloadfN, getpayloadfNx, setpayloadfN, setpayloadfNx, setpayloadsigfN, setpayloadsigfNx. (Floating-Point Comparison Functions): Document totalorderfN, totalorderfNx, totalordermagfN, totalordermagfNx. (Miscellaneous FP arithmetic functions): Document fminfN, fminfNx, fmaxfN, fmaxfNx, fminmagfN, fminmagfNx, fmaxmagfN, fmaxmagfNx, fdimfN, fdimfNx, fmafN, fmafNx. (Complex Numbers): Document the complex types: _FloatN complex and _FloatNx complex. (rojections, Conjugates, and Decomposing of Complex Numbers): Document crealfN, crealfNx, cimagfN, cimagfNx, conjfN, conjfNx, cargfN, cargfNx, cprojfN, cprojfNx. * manual/math.texi (Mathematics): Mention that the _FloatN and _FloatNx variants of the math functions come from TS 18661-3, unless otherwise stated. (Predefined Mathematical Constants): Document the _FloatN and _FloatNx variants of the macros prefixed with M_. (Trigonometric Functions): Document sinfN, sinfNx, cosfN, cosfNx, tanfN, tanfNx, sincosfN, sincosfNx, csinfN, csinfNx, ccosfN, ccosfNx, ctanfN, ctanfNx. (Inverse Trigonometric Functions): Document asinfN, asinfNx, acosfN, acosfNx, atanfN, atanfNx, atan2fN, atan2fNx. (Exponentiation and Logarithms): Document expfN, expfNx, exp2fN, exp2fNx, exp10fN, exp10fNx, logfN, logfNx, log10fN, log10fNx, log2fN, log2fNx, logbfN, logbfNx, ilogbfN, ilogbfNx, llogbfN, llogbfNx, powfN, powfNx, sqrtfN, sqrtfNx, cbrtfN, cbrtfNx, hypotfN, hypotfNx, expm1fN, expm1fNx, log1pfN, log1pfNx, cexpfN, cexpfNx, clogfN, clogfNx, clog10fN, clog10fNx, csqrtfN, csqrtfNx, cpowfN, cpowfNx. (Hyperbolic Functions): sinhfN, sinhfNx, coshfN, coshfNx, tanhfN, tanhfNx, csinhfN, csinhfNx, ccoshfN, ccoshfNx, ctanhfN, ctanhfNx, asinhfN, asinhfNx, acoshfN, acoshfNx, atanhfN, atanhfNx, casinhfN, casinhfNx, cacoshfN, cacoshfNx, catanhfN, catanhfNx. (Special Functions): Document erffN, erffNx, erfcfN, erfcfNx, lgammafN, lgammafNx, lgammarfN_r, lgammafNx_r, tgammafN, tgammafNx, j0fN, j0fNx, j1fN, j1fNx, jnfN, jnfNx, y0fN, y0fNx, y1fN, y1fNx, ynfN, ynfNx.
2017-06-23x86-64: Fix comment typo in memcmp-avx2-movbe.SFlorian Weimer
2017-06-23resolv/res_libc.c: Reformat to GNU styleFlorian Weimer
2017-06-23resolv: Clean up declarations of the __res_initstamp variableFlorian Weimer
2017-06-23x86-64: memcmp-avx2-movbe.S needs saturating subtraction [BZ #21662]Florian Weimer
This code: L(between_2_3): /* Load as big endian with overlapping loads and bswap to avoid branches. */ movzwl -2(%rdi, %rdx), %eax movzwl -2(%rsi, %rdx), %ecx shll $16, %eax shll $16, %ecx movzwl (%rdi), %edi movzwl (%rsi), %esi orl %edi, %eax orl %esi, %ecx bswap %eax bswap %ecx subl %ecx, %eax ret needs a saturating subtract because the full register is used. With this commit, only the lower 24 bits of the register are used, so a regular subtraction suffices. The test case change adds coverage for these kinds of bugs.
2017-06-23Add libio-mtsafe flags to the build of strfromf128Gabriel F. T. Gomes
Similar to the other functions in the strfrom class, strfromf128 calls __printf_fp in order to convert the floating-point value to characters. This requires the value of IO_MTSAFE_IO. Tested for powerpc64le and s390x. * sysdeps/ieee754/float128/Makefile (CFLAGS-strfromf128.c): Add $(libio-mtsafe) to get the value of IO_MTSAFE_IO.
2017-06-23Prepare the manual to display math errors for float128 functionsGabriel F. T. Gomes
When float128 support gets enabled for powerpc64le, the ULP errors for float128 functions need to be presented in the manual. This patch adds support for displaying them. Tested for powerpc64le and s390x. * manual/libm-err-tab.pl (@all_floats, %suffices, parse_ulps): Enable generation of float128 entries on the error table.
2017-06-23Include libc-header-start.h in include/float.hGabriel F. T. Gomes
The file include/float.h uses the macro __GLIBC_USE to test for TS 18661-3 support. Such macro is provided by bits/libc-header-start.h, so include it to get the definition. Tested for powerpc64le and s390x. * include/float.h: Include libc-header-start.h to get the definition of __GLIBC_USE.
2017-06-23Optimized version of powf()Paul Clarke
Most significant changes are code simplification and use of doubles for intermediate values. Also, some rearrangement to move early non-dependent code later, out of the faster paths. * sysdeps/ieee754/flt-32/e_powf.c: Optimized implementation utilizing rearranged code and doubles float types.
2017-06-23powerpc: Fix sinf() IFUNC fallback.Rogerio A. Cardoso
sysdeps/powerpc/powerpc64/fpu/multiarch/s_sinf-ppc64.c should fall back to sysdeps/powerpc/fpu/s_sinf.c not to sysdeps/ieee754/flt-32/s_sinf.c. * sysdeps/powerpc/powerpc64/fpu/multiarch/s_sinf-ppc64.c: Change s_sinf.c from sysdeps/ieee754/flt-32/ to sysdeps/powerpc/fpu/.
2017-06-23powerpc: fix sysconf support for cache geometriesPaul Clarke
Commit cdfbe5037f2f67bf5f560b73732b69d0fabe2314 added sysconf support for cache geometries on powerpc, but mishandled errno. For valid input parameters, sysconf() should not set errno. * sysdeps/unix/sysv/linux/powerpc/sysconf.c: Remove references to errno, and simplify remaining related code.
2017-06-23powerpc: Update AT_HWCAP[2] bitsTulio Magno Quites Machado Filho
Linux commit ID a4700a26107241cc7b9ac8528b2c6714ff99983d reserved 2 more bits for the instructions darn (Deliver a Random Number) and scv (System Call Vectored). Linux commit ID 6997e57d693b07289694239e52a10d2f02c3a46f reserved another bit for internal usage. * sysdeps/powerpc/bits/hwcap.h: Add PPC_FEATURE2_DARN and PPC_FEATURE2_SCV. * sysdeps/powerpc/dl-procinfo.c (_dl_powerpc_cap_flags): Add scv and darn.
2017-06-23powerpc: refactor strrchr IFUNCRajalakshmi Srinivasaraghavan
As done in commit 6d15a5c2e9450a1e926d5b4991759e1cfa50fccf clean up IFUNC implementation for power8 in order to remove unneeded macro definitions.
2017-06-23powerpc: Add optimized version of [l]lroundfRajalakshmi Srinivasaraghavan
This patch makes use of optimized double version of llround for single precision as both the versions return [long] long type.
2017-06-22Support _Float128 in ldbl-96 bits/iscanonical.h.Joseph Myers
This patch adds _Float128 support to the ldbl-96 bits/iscanonical.h, as needed for x86_64 / x86 / ia64 support of _Float128. Tested for x86_64 (in conjunction with float128 patches). * sysdeps/ieee754/ldbl-96/bits/iscanonical.h [__HAVE_DISTINCT_FLOAT128] (__iscanonicalf128): New macro.
2017-06-22Support _Float128 in math-tests.h.Joseph Myers
This patch makes math-tests.h, as used to describe support of given floating-point types for sNaNs, rounding modes and exceptions, handle distinguishing _Float128 from long double. This is needed for x86_64, where if building with GCC 6 or earlier there is no __builtin_nansq, so no way to get a signaling NaN of _Float128 type, so associated tests cannot be run (although glibc itself works fine, as there is never any need to create such an sNaN with a built-in function inside glibc). Tested for x86_64 (in conjunction with float128 patches). * sysdeps/generic/math-tests.h: Include <bits/floatn.h>. (MATH_TESTS_TG): New macro. (SNAN_TESTS_float128): Likewise. (ROUNDING_TESTS_float128): Likewise. (EXCEPTION_TESTS_float128): Likewise. (SNAN_TESTS): Define using MATH_TESTS_TG. (ROUNDING_TESTS): Likewise. (EXCEPTION_TESTS): Likewise.
2017-06-22Fix float128_private.h redefinition of SET_RESTORE_ROUNDL.Joseph Myers
As with other long double identifiers, float128_private.h has a redefinition of SET_RESTORE_ROUNDL. However, that redefinition is broken, since this is a macro with one argument being defined to take no arguments. This patch fixes the redefinition. (x86_64 needs the redefinition because SET_RESTORE_ROUNDL only changes the x87 rounding mode, whereas _Float128 arithmetic uses the SSE rounding mode instead on x86_64.) Tested for x86_64 (in conjunction with float128 patches). * sysdeps/ieee754/float128/float128_private.h [SET_RESTORE_ROUNDF128] (SET_RESTORE_ROUNDL): Take an argument and pass it to SET_RESTORE_ROUNDF128.
2017-06-22Make float128_private.h work with generic ieee754.h.Joseph Myers
float128_private.h redefines ieee754.h identifiers ieee854_long_double and IEEE854_LONG_DOUBLE_BIAS to map them to identifiers from ieee754_float128.h. This causes problems when ieee754.h is included after float128_private.h and it's a version of ieee754.h that also defines those identifiers; specifically, sysdeps/ieee754/ieee754.h, which defines those identifiers for the x86 extended format. This patch fixes this by ensuring an include of ieee754.h from float128_private.h before the redefinitions. Tested for x86_64 (in conjunction with float128 patches). * sysdeps/ieee754/float128/float128_private.h: Include <ieee754.h>.
2017-06-22Correct min_of_type handling of _Float128.Joseph Myers
The math_private.h macro min_of_type has broken _Float128 handling: instead of passing its type argument to the key __EXPR_FLT128 macro, it passes x, which is not a macro argument but whatever variable called x happens to be visible in the calling function. If that variable has the wrong type, the wrong one of long double and _Float128 can get chosen. In particular, this applies to some _Complex long double functions (where x happens to have type _Complex long double, resulting in min_of_type returning a _Float128 value when it should return a long double value). For some reason, this only caused test failures for me on x86_64 with GCC 6 but not GCC 7 (I suspect it triggers known bugs in conversions from x86 long double to _Float128 that are present in GCC 6's soft-fp). Tested for x86_64 (in conjunction with float128 patches). * sysdeps/generic/math_private.h (__EXPR_FLT128): Do not apply typeof to argument passed to __builtin_types_compatible_p. (min_of_type): Pass type argument, not x, to __EXPR_FLT128.
2017-06-22Make errno-setting libm templates include errno.h.Joseph Myers
Various type-generic libm wrapper templates, as used for float128, set errno but do not include errno.h. I presume they must get an implicit include from some internal header on powerpc64le; they don't get such an implicit include on x86_64. This patch adds the missing includes of errno.h to each such wrapper. Tested for x86_64 (in conjunction with float128 patches). * math/w_acos_template.c [__USE_WRAPPER_TEMPLATE]: Include <errno.h>. * math/w_acosh_template.c [__USE_WRAPPER_TEMPLATE]: Likewise. * math/w_asin_template.c [__USE_WRAPPER_TEMPLATE]: Likewise. * math/w_atanh_template.c [__USE_WRAPPER_TEMPLATE]: Likewise. * math/w_cosh_template.c [__USE_WRAPPER_TEMPLATE]: Likewise. * math/w_exp10_template.c [__USE_WRAPPER_TEMPLATE]: Likewise. * math/w_exp2_template.c [__USE_WRAPPER_TEMPLATE]: Likewise. * math/w_exp_template.c [__USE_WRAPPER_TEMPLATE]: Likewise. * math/w_fmod_template.c [__USE_WRAPPER_TEMPLATE]: Likewise. * math/w_hypot_template.c [__USE_WRAPPER_TEMPLATE]: Likewise. * math/w_j0_template.c [__USE_WRAPPER_TEMPLATE]: Likewise. * math/w_j1_template.c [__USE_WRAPPER_TEMPLATE]: Likewise. * math/w_jn_template.c [__USE_WRAPPER_TEMPLATE]: Likewise. * math/w_lgamma_r_template.c [__USE_WRAPPER_TEMPLATE]: Likewise. * math/w_lgamma_template.c [__USE_WRAPPER_TEMPLATE]: Likewise. * math/w_log10_template.c [__USE_WRAPPER_TEMPLATE]: Likewise. * math/w_log2_template.c [__USE_WRAPPER_TEMPLATE]: Likewise. * math/w_log_template.c [__USE_WRAPPER_TEMPLATE]: Likewise. * math/w_pow_template.c [__USE_WRAPPER_TEMPLATE]: Likewise. * math/w_remainder_template.c [__USE_WRAPPER_TEMPLATE]: Likewise. * math/w_sinh_template.c [__USE_WRAPPER_TEMPLATE]: Likewise. * math/w_sqrt_template.c [__USE_WRAPPER_TEMPLATE]: Likewise. * math/w_tgamma_template.c [__USE_WRAPPER_TEMPLATE]: Likewise.
2017-06-22Fix float128 uses of xlocale.h.Joseph Myers
Three float128 files still include xlocale.h after it was removed. I don't know why this didn't cause problems for powerpc64le float128 testing; it did cause problems for my x86_64 float128 testing. This patch changes the includes to use bits/types/locale_t.h. Tested for x86_64 (in conjunction with float128 patches). * sysdeps/ieee754/float128/strtof128_l.c: Include <bits/types/locale_t.h> instead of <xlocale.h>. * sysdeps/ieee754/float128/wcstof128.c: Likewise. * sysdeps/ieee754/float128/wcstof128_l.c: Likewise.
2017-06-22Add ChangeLog entries for the last 3 commitsSiddhesh Poyarekar
I forgot to add ChangeLog entries for my last three commits.
2017-06-22benchtests: New script to parse memcpy resultsSiddhesh Poyarekar
Read the memcpy results in json and print out the results in tabular form, in addition to generating a graph of the results to compare all of the implementations. The format of the output is extensible enough to allow this kind of analysis to be done on other string functions as well. * benchtests/scripts/benchout_strings.schema.json: New file. * benchtests/scripts/compare_strings.py: New file.
2017-06-22benchtests: Make memcpy benchmarks print results in jsonSiddhesh Poyarekar
Print the benchmark output for various memcpy benchmarks in json so that it can be predictably parsed and analyzed. * benchtests/bench-memcpy-large.c: Include json-lib.h. (do_one_test): Print json. (do_test): Likewise. (test_main): Likewise. * benchtests/bench-memcpy-random.c: Include json-lib.h. (do_one_test): Print json. (do_test): Likewise. (test_main): Likewise. * benchtests/bench-memcpy.c: Include json-lib.h. (do_one_test): Print json. (do_test): Likewise. (test_main): Likewise.
2017-06-22benchtests: Print string array elements, int and uint in jsonSiddhesh Poyarekar
Enhance the json module in benchtests to print signed and unsigned integers and string array elements. * benchtests/json-lib.h: Include inttypes.h. (json_attr_int, json_attr_int, json_element_string, json_element_int, json_element_uint): New functions. * benchtests/json-lib.c: (json_attr_int, json_attr_int, json_element_string, json_element_int, json_element_uint): New functions.
2017-06-22Describe remainder as primary and drem as alternative in the manualGabriel F. T. Gomes
In preparation for the documentation of _FloatN and _FloatNx variants of the remainder function, this patch changes the descriptions of remainder and drem, so that remainder is described as primary and drem as an alternative name for the same functionality. * manual/arith.texi (Remainder Functions): Describe remainder as primary and drem as an alternative name. Change the comment on remainder to ISO, since it is defined in ISO C99.
2017-06-22Provide an additional macro expansion for F128 in stdlib/tst-strtod.hGabriel F. T. Gomes
The macro F128 in stdlib/tst-strtod.h is defined to provide the literal suffix for _Float128 constants. It uses the macro __f128 (), which is defined in bits/floatn.h to provide the correct literal suffix depending on what is provided by the compiler. However, F128 was not being expanded and only worked correctly, when compiling with GCC 7 (or greater), since F128 is the literal suffix itself. This patch adds an additional macro expansion so that the macro F128 expands to the correct literal suffix on older compilers. * stdlib/tst-strtod.h (MMFUNC): New macro to provide an addition macro expansion. (GEN_TEST_STRTOD_FOREACH): Use MMFUNC for _Float128.
2017-06-22localedata: fur_IT: Fix spelling of Wednesday (Miercus)Rafal Luzynski
* localedata/locales/fur_IT (day, abday): reworded "Miarcus" to "Miercus" and abbreviated "Mia" to "Mie".
2017-06-22Bug 21533: Update to Unicode 10.0.0Mike FABIAN
* Unicode 10.0.0 Support: Character encoding, character type info, and transliteration tables are all updated to Unicode 10.0.0, using generator scripts contributed by Mike FABIAN (Red Hat).
2017-06-22inet: __inet6_scopeid_pton should accept node-local addresses [BZ #21657]Benjamin Cama
2017-06-21_nl_load_domain: Use calloc instead of allocaFlorian Weimer
2017-06-21Implement allocation buffers for internal useFlorian Weimer
This commit adds fixed-size allocation buffers. The primary use case is in NSS modules, where dynamically sized data is stored in a fixed-size buffer provided by the caller. Other uses include a replacement of mempcpy cascades (which is safer due to the size checking inherent to allocation buffers).
2017-06-21x86-64: Implement strcmp family IFUNC selectors in CH.J. Lu
Implement strcmp family IFUNC selectors in C. All internal calls within libc.so can use IFUNC on x86-64 since unlike x86, x86-64 supports PC-relative addressing to access the GOT entry so that it can call via PLT without using an extra register. For libc.a, we can't use IFUNC for functions which are called before IFUNC has been initialized. Use IFUNC internally reduces the icache footprint since libc.so and other codes in the process use the same implementations. This patch uses IFUNC for strcmp family functions within libc. * sysdeps/x86_64/multiarch/Makefile (sysdep_routines): Add strcmp-sse2, strcmp-sse4_2, strncmp-sse2, strncmp-sse4_2, strcasecmp_l-sse2, strcasecmp_l-sse4_2, strcasecmp_l-avx, strncase_l-sse2, strncase_l-sse4_2 and strncase_l-avx. * sysdeps/x86_64/multiarch/ifunc-strcasecmp.h: New file. * sysdeps/x86_64/multiarch/strcasecmp.c: Likewise. * sysdeps/x86_64/multiarch/strcasecmp_l-avx.S: Likewise. * sysdeps/x86_64/multiarch/strcasecmp_l-sse2.S: Likewise. * sysdeps/x86_64/multiarch/strcasecmp_l-sse4_2.S: Likewise. * sysdeps/x86_64/multiarch/strcasecmp_l.c: Likewise. * sysdeps/x86_64/multiarch/strcmp-sse2.S: Likewise. * sysdeps/x86_64/multiarch/strcmp-sse4_2.S: Likewise. * sysdeps/x86_64/multiarch/strcmp.c: Likewise. * sysdeps/x86_64/multiarch/strncase.c: Likewise. * sysdeps/x86_64/multiarch/strncase_l-avx.S : Likewise. * sysdeps/x86_64/multiarch/strncase_l-sse2.S: Likewise. * sysdeps/x86_64/multiarch/strncase_l-sse4_2.S: Likewise. * sysdeps/x86_64/multiarch/strncase_l.c: Likewise. * sysdeps/x86_64/multiarch/strncmp-sse2.S: Likewise. * sysdeps/x86_64/multiarch/strncmp-sse4_2.S: Likewise. * sysdeps/x86_64/multiarch/strncmp.c: Likewise. * sysdeps/x86_64/multiarch/strcasecmp_l.S: Removed. * sysdeps/x86_64/multiarch/strcmp.S: Likewise. * sysdeps/x86_64/multiarch/strncase_l.S: Likewise. * sysdeps/x86_64/multiarch/strncmp.S: Likewise. * sysdeps/x86_64/multiarch/strcmp-sse42.S: Include <sysdep.h>. (STRCMP_SSE42): New. Defined to __strcmp_sse42 if not defined. [USE_AS_STRCASECMP_L || USE_AS_STRNCASECMP_L]: Include "locale-defines.h". (UPDATE_STRNCMP_COUNTER): New. (SECTION): Likewise. (GLABEL): Likewise. (LABEL): Likewise. * sysdeps/x86_64/multiarch/strncmp-ssse3.S: Rewrite and enable for libc.a.
2017-06-21Fix tile SA_* conditions for POSIX.1:2008 (bug 21622).Joseph Myers
As shown by conform/ tests once the remaining namespace issues are fixed, the tile bits/sigaction.h fails to declare SA_RESETHAND, SA_RESTART and SA_NODEFER for non-XSI POSIX.1:2008 as other versions do. Those constants were moved from XSI to Base in the 2008 edition of POSIX. This patch fixes the conditions to match other versions of this header. Tested (compilation only) for tilegx-linux-gnu with build-many-glibcs.py. [BZ #21622] * sysdeps/unix/sysv/linux/tile/bits/sigaction.h (SA_RESTART): Define for [__USE_UNIX98 || __USE_XOPEN2K8], not [__USE_UNIX98 || __USE_MISC]. (SA_NODEFER): Likewise. (SA_RESETHAND): Likewise.
2017-06-21x86: Rename glibc.tune.ifunc to glibc.tune.hwcapsH.J. Lu
Rename glibc.tune.ifunc to glibc.tune.hwcaps and move it to sysdeps/x86/dl-tunables.list since it is x86 specicifc. Also change type of data_cache_size, data_cache_size and non_temporal_threshold to unsigned long int to match size_t. Remove usage DEFAULT_STRLEN from cpu-tunables.c. * elf/dl-tunables.list (glibc.tune.ifunc): Removed. * sysdeps/x86/dl-tunables.list (glibc.tune.hwcaps): New. Remove security_level on all fields. * manual/tunables.texi: Replace ifunc with hwcaps. * sysdeps/x86/cpu-features.c (TUNABLE_CALLBACK (set_ifunc)): Renamed to .. (TUNABLE_CALLBACK (set_hwcaps)): This. (init_cpu_features): Updated. * sysdeps/x86/cpu-features.h (cpu_features): Change type of data_cache_size, data_cache_size and non_temporal_threshold to unsigned long int. * sysdeps/x86/cpu-tunables.c (DEFAULT_STRLEN): Removed. (TUNABLE_CALLBACK (set_ifunc)): Renamed to ... (TUNABLE_CALLBACK (set_hwcaps)): This. Update comments. Don't use DEFAULT_STRLEN.