platform/upstream/glibc.git
7 years agoReduce total memory required to create all threads to 128MiB. This fixes
Paul Pluzhnikov [Tue, 26 Sep 2017 00:51:34 +0000 (17:51 -0700)]
Reduce total memory required to create all threads to 128MiB. This fixes
intermittent failure in stdlib/test-{atexit,at_quick_exit,...} tests
(Bug 22207).

7 years agonscd: Release read lock after resetting timeout.
DJ Delorie [Mon, 25 Sep 2017 23:43:09 +0000 (19:43 -0400)]
nscd: Release read lock after resetting timeout.

[BZ #22161]
* nscd/netgroupcache.c (addinnetgrX): Release read lock after
resetting timeout.

Reviewed-by: Jonathan Nieder <jrnieder@gmail.com>
Reviewed-by: Andreas Schwab <schwab@suse.de>
A lock is held by mempool_allocate() when CACHEABLE is true; we
must release this lock if we exit early.

7 years agoRevert "resolv_test.c: also cope with CONNREFUSED errors returned by recvfrom"
Samuel Thibault [Mon, 25 Sep 2017 18:47:51 +0000 (20:47 +0200)]
Revert "resolv_test.c: also cope with CONNREFUSED errors returned by recvfrom"

This reverts commit 6174537c24cfe324d6e8f5a2a421883df12b8b6a.

7 years agoFix typo in sincos32.h inclusion guard.
Stefan Liebler [Mon, 25 Sep 2017 13:56:22 +0000 (15:56 +0200)]
Fix typo in sincos32.h inclusion guard.

This patch fixes a typo in inclusion guard in sincos32.h.

ChangeLog:

* sysdeps/ieee754/dbl-64/sincos32.h
[SINCCOS32_H]: Remove define.
[SINCOS32_H]: Define.

7 years agoNew expf and exp2f version without SVID compat wrapper
Szabolcs Nagy [Tue, 12 Sep 2017 11:20:50 +0000 (12:20 +0100)]
New expf and exp2f version without SVID compat wrapper

This patch changes the expf and exp2f error handling semantics to only
set errno accoring to POSIX rules. New symbol version is introduced at
GLIBC_2.27.

The old wrappers are kept for compat symbols.

Internal calls to __expf now get the new error semantics, this seems to
only affect sysdeps/i386/fpu/s_expm1f.S where the errno-only behaviour
should be correct.

ia64 needed assembly change to have the new and compat versioned symbol
map to the same function.

All linux libm abilists are updated.

* math/Versions (expf): New libm symbol at GLIBC_2.27.
(exp2f): Likewise.
* math/w_exp2f.c: New file.
* math/w_expf.c: New file.
* math/w_exp2f_compat.c (__exp2f_compat): For compat symbol only.
* math/w_expf_compat.c (__expf_compat): Likewise.
* sysdeps/ia64/fpu/e_exp2f.S: Add versioned symbols.
* sysdeps/ia64/fpu/e_expf.S: Likewise.
* sysdeps/unix/sysv/linux/aarch64/libm.abilist: Update.
* 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.

7 years agoOptimized generic expf and exp2f with wrappers
Szabolcs Nagy [Wed, 6 Sep 2017 16:42:00 +0000 (17:42 +0100)]
Optimized generic expf and exp2f with wrappers

Based on new expf and exp2f code from
https://github.com/ARM-software/optimized-routines/

with wrapper on aarch64:
expf reciprocal-throughput: 2.3x faster
expf latency: 1.7x faster
without wrapper on aarch64:
expf reciprocal-throughput: 3.3x faster
expf latency: 1.7x faster
without wrapper on aarch64:
exp2f reciprocal-throughput: 2.8x faster
exp2f latency: 1.3x faster
libm.so size on aarch64:
.text size: -152 bytes
.rodata size: -1740 bytes
expf/exp2f worst case nearest rounding error: 0.502 ulp
worst case non-nearest rounding error: 1 ulp

Error checks are inline and errno setting is in separate tail called
functions, but the wrappers are kept in this patch to handle the
_LIB_VERSION==_SVID_ case.  (So e.g. errno is set twice for expf calls
and once for __expf_finite calls on targets where the new code is used.)

Double precision arithmetics is used which is expected to be faster on
most targets (including soft-float) than using single precision and it
is easier to get good precision result with it.

Const data is kept in a separate translation unit which complicates
maintenance a bit, but is expected to give good code for literal loads
on most targets and allows sharing data across expf, exp2f and powf.
(This data is disabled on i386, m68k and ia64 which have their own
expf, exp2f and powf code.)

Some details may need target specific tweaks:
- best convert and round to int operation in the arg reduction may be
different across targets.
- code was optimized on fma target, optimal polynomial eval may be
different without fma.
- gcc does not always generate good code for fp bit representation
access via unions or it may be inherently slow on some targets.

The libm-test-ulps will need adjustment because..
- The argument reduction ideally uses nearest rounded rint, but that is
not efficient on most targets, so the polynomial can get evaluated on a
wider interval in non-nearest rounding mode making 1 ulp errors common
in that case.
- The polynomial is evaluated such that it may have 1 ulp error on
negative tiny inputs with upward rounding.

* math/Makefile (type-float-routines): Add math_errf and e_exp2f_data.
* sysdeps/aarch64/fpu/math_private.h (TOINT_INTRINSICS): Define.
(roundtoint, converttoint): Likewise.
* sysdeps/ieee754/flt-32/e_expf.c: New implementation.
* sysdeps/ieee754/flt-32/e_exp2f.c: New implementation.
* sysdeps/ieee754/flt-32/e_exp2f_data.c: New file.
* sysdeps/ieee754/flt-32/math_config.h: New file.
* sysdeps/ieee754/flt-32/math_errf.c: New file.
* sysdeps/ieee754/flt-32/t_exp2f.h: Remove.
* sysdeps/i386/fpu/e_exp2f_data.c: New file.
* sysdeps/i386/fpu/math_errf.c: New file.
* sysdeps/ia64/fpu/e_exp2f_data.c: New file.
* sysdeps/ia64/fpu/math_errf.c: New file.
* sysdeps/m68k/m680x0/fpu/e_exp2f_data.c: New file.
* sysdeps/m68k/m680x0/fpu/math_errf.c: New file.

7 years agohurd: Fix exposition of s/gettimeofday through timespec_s/get
Samuel Thibault [Sun, 24 Sep 2017 23:55:02 +0000 (01:55 +0200)]
hurd: Fix exposition of s/gettimeofday through timespec_s/get

conform/ISO11/time.h/linknamespace complains that using timespec_get exposes
gettimeofday.

conform/POSIX/time.h/linknamespace complains that using clock_settime
exposes settimeofday.

* sysdeps/unix/clock_gettime.c (realtime_gettime, __clock_gettime): Use
__gettimeofday instead of gettimeofday.
* sysdeps/unix/clock_settime.c (__clock_settime): Use __settimeofday
instead of settimeofday.

7 years agoresolv_test.c: also cope with CONNREFUSED errors returned by recvfrom
Samuel Thibault [Sun, 10 Sep 2017 15:41:03 +0000 (17:41 +0200)]
resolv_test.c: also cope with CONNREFUSED errors returned by recvfrom

server_thread_udp_process_one already takes care of calling sendto()
instead of xsendto to be able to ignore the case where the client has
closed the socket.  Depending on the TCP/IP stack behavior, this error
could be notified later through recvfrom(), so we need to ignore it
there too.

* support/resolv_test.c (server_thread_udp_process_one): Call recvfrom
instead of xrecvfrom, and ignore ECONNREFUSED errors.

7 years agohurd: Fix bits/socket.h conformity
Samuel Thibault [Sun, 24 Sep 2017 20:20:10 +0000 (22:20 +0200)]
hurd: Fix bits/socket.h conformity

* sysdeps/mach/hurd/bits/socket.h: Include <bits/wordsize.h> instead
of <limits.h>
(__need_NULL): Do not define.
(__ss_aligntype): Use __WORDSIZE instead of ULONG_MAX to determine
alignment.
[!__USE_MISC] (pseudo_AF_XTP, pseudo_AF_RTIP, pseudo_AF_PIP,
CMGROUP_MAX, cmsgcred): Do not define.
(CMSG_FIRSTHDR, __cmsg_nxthdr): Use (struct cmsghdr *) 0 instead of
NULL.
* bits/socket.h: Likewise.

7 years agohurd: Make sure dl-sysdep.c defines proper symbol names
Samuel Thibault [Sun, 24 Sep 2017 15:54:02 +0000 (17:54 +0200)]
hurd: Make sure dl-sysdep.c defines proper symbol names

* sysdeps/mach/hurd/dl-sysdep.c (check_no_hidden): New macro.
(__open, __close, __libc_read, __libc_write, __writev, __libc_lseek64,
__mmap, __fxstat64, __xstat64, __access, __access_noerrno, __getpid,
__getcwd, __sbrk, __strtoul_internal, _exit, abort): Use check_no_hidden
to make sure that these symbols are defined.

7 years agoUse libm_alias_float in flt-32.
Joseph Myers [Fri, 22 Sep 2017 20:24:12 +0000 (20:24 +0000)]
Use libm_alias_float in flt-32.

This patch makes flt-32 libm functions use libm_alias_float to define
public interfaces (in cases where _Float32 aliases of those interfaces
would be appropriate, so not for finitef / isinff / isnanf).

Tested for x86_64.  Also tested with build-many-glibcs.py that
installed stripped shared libraries are unchanged by the patch.

* sysdeps/ieee754/flt-32/s_asinhf.c: Include <libm-alias-float.h>.
(asinhf): Define using libm_alias_float.
* sysdeps/ieee754/flt-32/s_atanf.c: Include <libm-alias-float.h>.
(atanf): Define using libm_alias_float.
* sysdeps/ieee754/flt-32/s_cbrtf.c: Include <libm-alias-float.h>.
(cbrtf): Define using libm_alias_float.
* sysdeps/ieee754/flt-32/s_ceilf.c: Include <libm-alias-float.h>.
(ceilf): Define using libm_alias_float.
* sysdeps/ieee754/flt-32/s_copysignf.c: Include
<libm-alias-float.h>.
(copysignf): Define using libm_alias_float.
* sysdeps/ieee754/flt-32/s_cosf.c: Include <libm-alias-float.h>.
(cosf): Define using libm_alias_float.
* sysdeps/ieee754/flt-32/s_erff.c: Include <libm-alias-float.h>.
(erff): Define using libm_alias_float.
(erfcf): Likewise.
* sysdeps/ieee754/flt-32/s_expm1f.c: Include <libm-alias-float.h>.
(expm1f): Define using libm_alias_float.
* sysdeps/ieee754/flt-32/s_fabsf.c: Include <libm-alias-float.h>.
(fabsf): Define using libm_alias_float.
* sysdeps/ieee754/flt-32/s_floorf.c: Include <libm-alias-float.h>.
(floorf): Define using libm_alias_float.
* sysdeps/ieee754/flt-32/s_frexpf.c: Include <libm-alias-float.h>.
(frexpf): Define using libm_alias_float.
* sysdeps/ieee754/flt-32/s_fromfpf.c (fromfpf): Define using
libm_alias_float.
* sysdeps/ieee754/flt-32/s_fromfpf_main.c: Include
<libm-alias-float.h>.
* sysdeps/ieee754/flt-32/s_fromfpxf.c (fromfpxf): Define using
libm_alias_float.
* sysdeps/ieee754/flt-32/s_getpayloadf.c: Include
<libm-alias-float.h>.
(getpayloadf): Define using libm_alias_float.
* sysdeps/ieee754/flt-32/s_llrintf.c: Include
<libm-alias-float.h>.
(llrintf): Define using libm_alias_float.
* sysdeps/ieee754/flt-32/s_llroundf.c: Include
<libm-alias-float.h>.
(llroundf): Define using libm_alias_float.
* sysdeps/ieee754/flt-32/s_logbf.c: Include <libm-alias-float.h>.
(logbf): Define using libm_alias_float.
* sysdeps/ieee754/flt-32/s_lrintf.c: Include <libm-alias-float.h>.
(lrintf): Define using libm_alias_float.
* sysdeps/ieee754/flt-32/s_lroundf.c: Include <libm-alias-float.h>.
(lroundf): Define using libm_alias_float.
* sysdeps/ieee754/flt-32/s_modff.c: Include <libm-alias-float.h>.
(modff): Define using libm_alias_float.
* sysdeps/ieee754/flt-32/s_nearbyintf.c: Include
<libm-alias-float.h>.
(nearbyintf): Define using libm_alias_float.
* sysdeps/ieee754/flt-32/s_nextafterf.c: Include
<libm-alias-float.h>.
(nextafterf): Define using libm_alias_float.
* sysdeps/ieee754/flt-32/s_nextupf.c: Include
<libm-alias-float.h>.
(nextupf): Define using libm_alias_float.
* sysdeps/ieee754/flt-32/s_remquof.c: Include
<libm-alias-float.h>.
(remquof): Define using libm_alias_float.
* sysdeps/ieee754/flt-32/s_rintf.c: Include <libm-alias-float.h>.
(rintf): Define using libm_alias_float.
* sysdeps/ieee754/flt-32/s_roundevenf.c: Include
<libm-alias-float.h>.
(roundevenf): Define using libm_alias_float.
* sysdeps/ieee754/flt-32/s_roundf.c: Include <libm-alias-float.h>.
(roundf): Define using libm_alias_float.
* sysdeps/ieee754/flt-32/s_setpayloadf.c (setpayloadf): Define
using libm_alias_float.
* sysdeps/ieee754/flt-32/s_setpayloadf_main.c: Include
<libm-alias-float.h>.
* sysdeps/ieee754/flt-32/s_setpayloadsigf.c (setpayloadsigf):
Define using libm_alias_float.
* sysdeps/ieee754/flt-32/s_sincosf.c: Include
<libm-alias-float.h>.
(sincosf): Define using libm_alias_float.
* sysdeps/ieee754/flt-32/s_sinf.c: Include <libm-alias-float.h>.
(sinf): Define using libm_alias_float.
* sysdeps/ieee754/flt-32/s_tanf.c: Include <libm-alias-float.h>.
(tanf): Define using libm_alias_float.
* sysdeps/ieee754/flt-32/s_tanhf.c: Include <libm-alias-float.h>.
(tanhf): Define using libm_alias_float.
* sysdeps/ieee754/flt-32/s_totalorderf.c: Include
<libm-alias-float.h>.
(totalorderf): Define using libm_alias_float.
* sysdeps/ieee754/flt-32/s_totalordermagf.c: Include
<libm-alias-float.h>.
(totalordermagf): Define using libm_alias_float.
* sysdeps/ieee754/flt-32/s_truncf.c: Include <libm-alias-float.h>.
(truncf): Define using libm_alias_float.
* sysdeps/ieee754/flt-32/s_ufromfpf.c (ufromfpf): Define using
libm_alias_float.
* sysdeps/ieee754/flt-32/s_ufromfpxf.c (ufromfpxf): Define using
libm_alias_float.

7 years agoLet fpclassify use the builtin when optimizing for size in C++ mode (bug 22146)
Gabriel F. T. Gomes [Wed, 20 Sep 2017 18:10:26 +0000 (15:10 -0300)]
Let fpclassify use the builtin when optimizing for size in C++ mode (bug 22146)

When optimization for size is on (-Os), fpclassify does not use the
type-generic __builtin_fpclassify builtin, instead it uses __MATH_TG.
However, when library support for float128 is available, __MATH_TG uses
__builtin_types_compatible_p, which is not available in C++ mode.

On the other hand, libstdc++ undefines (in cmath) many macros from
math.h, including fpclassify, so that it can provide its own functions.
However, during its configure tests, libstdc++ just tests for the
availability of the macros (it does not undefine them, nor does it
provide its own functions).

Finally, when libstdc++ is configured with optimization for size
enabled, its configure tests include math.h and get the definition of
fpclassify that uses __MATH_TG (and __builtin_types_compatible_p).
Since libstdc++ does not undefine the macros during its configure tests,
they fail.

This patch lets fpclassify use the builtin in C++ mode, even when
optimization for size is on.  This allows the configure test in
libstdc++ to work.

Tested for powerpc64le and x86_64.

[BZ #22146]
math/math.h: Let fpclassify use the builtin in C++ mode, even
when optimazing for size.

7 years agoRemove Banner mechanism.
Joseph Myers [Fri, 22 Sep 2017 17:43:42 +0000 (17:43 +0000)]
Remove Banner mechanism.

This patch removes the Banner mechanism, with the last remaining
Banner file replaced by a contrib.texi entry.  This accords with the
principle that the output of running libc.so.6 is not the place to
credit particular contributions (the manual is), and with all other
configuration options not mentioned there, it doesn't seem appropriate
to focus there on the one question of whether the one remaining piece
configured as an add-on was enabled or not.

Tested for x86_64.

* csu/Makefile (generated): Do not add version-info.h.
(before-compile): Likewise.
(all-Banner-files): Remove variable.
($(objpfx)version-info.h): Remove rule.
* csu/version.c (banner): Do not include "version-info.h".
* libidn/Banner: Remove.
* manual/contrib.texi (Simon Josefsson): New entry.

7 years agoRemove conditional on LDBL_MANT_DIG from e_lgammal_r.c
Gabriel F. T. Gomes [Sun, 10 Sep 2017 13:31:47 +0000 (10:31 -0300)]
Remove conditional on LDBL_MANT_DIG from e_lgammal_r.c

The IEEE 754 implementation of lgammal in sysdeps/ieee754/ldbl-128/ used
to be shared by IBM's implementation in sysdeps/ieee754/ldbl-128ibm/ (by
an inclusion of the source file).  In order for the algorithm to work
for IBM's implementation, a check for LDBL_MANT_DIG was required. Since
the source file is no longer shared, the requirement for the check is
gone.  This patch removes the conditionals.

Tested for powerpc64le and s390x.

* sysdeps/ieee754/ldbl-128/e_lgammal_r.c (__ieee754_lgammal_r):
Remove conditionals on LDBL_MANT_DIG.
* sysdeps/ieee754/ldbl-128ibm/e_lgammal_r.c
(__ieee754_lgammal_r): Likewise.

7 years agoldbl-128ibm: Automatic replacing of _Float128 and L()
Gabriel F. T. Gomes [Sat, 9 Sep 2017 22:37:11 +0000 (19:37 -0300)]
ldbl-128ibm: Automatic replacing of _Float128 and L()

The ldbl-128ibm implementation of j0l, j1l, lgammal_r, and cbrtl, as
well as the tables used by expl were copied from ldbl-128.  However, the
original files used _Float128 for the type and L() for the literal
suffix.  This patch uses the following sed command to rewrite _Float128
as long double and L(x) as xL (for e_expl.c, e_j0l.c, e_j1l.c,
e_lgammal_r.c, and t_expl.h):

  sed -i <filename> \
    -e "/^#define _Float128 long double/d" \
    -e "/^#define L(x) x ## L/d" \
    -e "/L(/s/)/L/" \
    -e "/L(/s/L(//" \
    -e "s/_Float128/long double/g"

For sysdeps/ieee754/ldbl-128ibm/s_cbrtl.c, this sed command incorrectly
replaces a few occurrences of L(), so the following command is used
instead:

  sed -i sysdeps/ieee754/ldbl-128ibm/s_cbrtl.c \
    -e "/^#define _Float128 long double/d" \
    -e "/^#define L(x) x ## L/d" \
    -e "s/L(0\.3\{40\})/0.3333333333333333333333333333333333333333L/" \
    -e "s/L(3\.7568280825958912391243e-1)/3.7568280825958912391243e-1L/" \
    -e "/L(/s/)/L/" \
    -e "/L(/s/L(//" \
    -e "s/_Float128/long double/g"

Tested for powerpc64le with patched [1] and unpatched gcc.

[1] https://gcc.gnu.org/ml/gcc-patches/2017-08/msg01028.html

* sysdeps/ieee754/ldbl-128ibm/e_expl.c: Remove definitions of
_Float128 and L().
* sysdeps/ieee754/ldbl-128ibm/e_j0l.c: Remove definitions of
_Float128 and L(). Replace _Float128 with long double and L(x)
with xL, throughout the file.
* sysdeps/ieee754/ldbl-128ibm/e_j1l.c: Likewise.
* sysdeps/ieee754/ldbl-128ibm/e_lgammal_r.c: Likewise.
* sysdeps/ieee754/ldbl-128ibm/s_cbrtl.c: Likewise.
* sysdeps/ieee754/ldbl-128ibm/t_expl.h: Likewise.

7 years agoldbl-128ibm: Copy implementations from ldbl-128 instead of including them
Gabriel F. T. Gomes [Mon, 4 Sep 2017 17:34:04 +0000 (14:34 -0300)]
ldbl-128ibm: Copy implementations from ldbl-128 instead of including them

Some files under sysdeps/ieee754/ldbl-128ibm/ are able to reuse the
implementation in sysdeps/ieee754/ldbl-128/ by defining _Float128 to
long double.  This relied on compiler support for _Float128 being
disabled.  On powerpc, such support was disabled by default, however, it
got enabled by default [1] in GCC 8.

This patch copies the implementations from ldbl-128 to ldbl-128ibm.  The
uses of _Float128 and L() are kept intact in this patch and are replaced
with a script in a subsequent patch.

[1] https://gcc.gnu.org/ml/gcc-patches/2017-08/msg01028.html

Tested for powerpc64 and powerpc64le.

* sysdeps/ieee754/ldbl-128ibm/e_expl.c: Include tables from
sysdeps/ieee754/ldbl-128ibm.
* sysdeps/ieee754/ldbl-128ibm/e_j0l.c: Copy contents from the
equivalent implementation in sysdeps/ieee754/ldbl-128/ instead
of including it.  Keep _Float128 and L() intact.  These will be
reviewed by a separate patch.
* sysdeps/ieee754/ldbl-128ibm/e_j1l.c: Likewise.
* sysdeps/ieee754/ldbl-128ibm/e_lgammal_r.c: Likewise.
* sysdeps/ieee754/ldbl-128ibm/s_cbrtl.c: Likewise.
* sysdeps/ieee754/ldbl-128ibm/t_expl.h: Likewise.

7 years agopowerpc: Add redirection for finitef128, isinf128, and isnanf128
Gabriel F. T. Gomes [Mon, 4 Sep 2017 16:07:18 +0000 (13:07 -0300)]
powerpc: Add redirection for finitef128, isinf128, and isnanf128

On powerpc64le, compiler support for float128 is not enabled by default
on gcc.  To enable it, the flag -mfloat128 must be passed as a command
line option to the compiler.  This means that only the few files that
actively have -mfloat128 passed as an argument get compiler support for
float128, whereas all other files don't.

When -mfloat128 becomes enabled by default on powerpc [1], all the files
that do not currently have compiler support for float128 enabled during
their compilation, will start to have it.  This will lead to build
errors in s_finite.c, s_isinf.c, and s_isnan.c.

The errors are due to the unintended macro expansion of __finitef128 to
__redirect_finitef128 in math/bits/mathcalls-helper-functions.h.  In
that header, __MATHDECL_1 takes '__finite' and 'f128' as arguments and
concatenates them.  However, since '__finite' has been redefined in
s_finite.c, the function declaration becomes __redirect_finitef128:

    extern int __redirect___finitef128 (_Float128 __value) __attribute__ ((__nothrow__ )) __attribute__ ((__const__));

This declaration itself is OK.  The problem arises when include/math.h
creates the hidden prototype ('hidden_proto (__finitef128)'), which
expands to:

    extern __typeof (__finitef128) __finitef128 __attribute__ ((visibility ("hidden")));

Since __finitef128 is not declared, __typeof fails.  This effect was
already true for the 'float' and 'long double' versions and is now true
for float128.  Likewise for isinsff128 and isnanf128.

This patch defines __finitef128 as __redirect___finitef128 in
sysdeps/powerpc/powerpc64/fpu/multiarch/s_finite.c, similarly to what's
done for the float and long double versions of these functions, to get
rid of the build error.  Likewise for isinff128 and isnanf128.

[1] https://gcc.gnu.org/ml/gcc-patches/2017-08/msg01028.html

Tested for powerpc64 and powerpc64le.

* sysdeps/powerpc/powerpc64/fpu/multiarch/s_finite.c
(__finitef128): Define to __redirect___finitef128.
* sysdeps/powerpc/powerpc64/fpu/multiarch/s_isinf.c
(__isinff128): Define to __redirect___isinff128.
* sysdeps/powerpc/powerpc64/fpu/multiarch/s_isnan.c
(__isnanf128): Define to __redirect___isnanf128.

7 years agopowerpc64le: Add -mfloat128 to tst-strtod-nan-locale testcase
Gabriel F. T. Gomes [Mon, 4 Sep 2017 15:48:31 +0000 (12:48 -0300)]
powerpc64le: Add -mfloat128 to tst-strtod-nan-locale testcase

On powerpc64le, not all files can have the flag -mfloat128 passed as an
option on the compile command, since that could conflict with other
flags, such as -mno-vsx.  Each file that needs the flag, gets it through
a CFLAGS-filename variable on sysdeps/powerpc/powerpc64le/Makefile.

The test cases tst-strtod-nan-locale and tst-wcstod-nan-locale are
missing this flag.

Tested for powerpc64le.

* sysdeps/powerpc/powerpc64le/Makefile
(CFLAGS-tst-strtod-nan-locale.c): New variable.
(CFLAGS-tst-wcstod-nan-locale.c): New variable.

7 years agoFix BZ# 22180.
Paul Pluzhnikov [Thu, 21 Sep 2017 19:14:41 +0000 (12:14 -0700)]
Fix BZ# 22180.

POSIX requires that dlclose() and exit() be thread safe, therefore
you can have one thread in the middle of dlclose() and another thread
executing exit() without causing any undefined behaviour on the part
of the implementation.

The existing implementation had a flaw that exit() exit handler processing
did not consider a concurrent dlclose() and would not mark already run
exit handlers using the ef_free flavour. The consequence of this is that
a concurrent exit() with dlclose() will run all the exit handlers that
dlclose() had not yet run, but then will block on the loader lock. The
concurrent dlclose() will continue to run all the exit handlers again
(twice) in violation of the Itanium C++ ABI requirements for __cxa_atexit().

This commit fixes this by having exit() mark all handlers with ef_free to
ensure that concurrent dlclose() won't re-run registered exit handlers that
have already run.

7 years agoRemove non-add-on Banner files.
Joseph Myers [Thu, 21 Sep 2017 17:49:51 +0000 (17:49 +0000)]
Remove non-add-on Banner files.

Various subdirectories of glibc include Banner files to put some text
in the output of executing libc.so.6, under "Available extensions".

Some of those subdirectories (e.g. crypt) may originally have been
add-ons (and so optional, so a particular glibc build might or might
not have included them), but except for libidn they aren't now (or if
only included in some builds, in the case of soft-fp, the inclusion
depends on the architecture for which glibc is configured rather than
having any glibc configuration for which it's an optional feature),
and it doesn't seem useful for the libc.so.6 output to call out a few
features like that.

This patch removes the non-add-on Banner files, updating contrib.texi
where they noted contributions not otherwise mentioned there.

Tested for x86_64.

* crypt/Banner: Remove file.
* nptl/Banner: Likewise.
* resolv/Banner: Likewise.
* soft-fp/Banner: Likewise.
* nptl/Makefile ($(objpfx)banner.h): Remove rule.
($(objpfx)version.d): Remove dependency on banner.h.
($(objpfx)version.os): Likewise.
* nptl/version.c (banner): Do not include banner.h.
* manual/contrib.texi: Update entries for Richard Henderson, Jakub
Jelinek and BIND code.

7 years agoImplement xdlopen, xdlsym and xdlclose routines which terminate test
Paul Pluzhnikov [Thu, 21 Sep 2017 02:37:45 +0000 (19:37 -0700)]
Implement xdlopen, xdlsym and xdlclose routines which terminate test
program with appropriate message if the corresponding dlfcn.h routine
returns an error.

Use them in stdlib/tst-tls-atexit.c

7 years agoAdd SSE4.1 trunc, truncf (bug 20142).
Joseph Myers [Wed, 20 Sep 2017 16:54:05 +0000 (16:54 +0000)]
Add SSE4.1 trunc, truncf (bug 20142).

This patch adds SSE4.1 versions of trunc and truncf, using the roundsd
/ roundss instructions, similar to the versions of ceil, floor, rint
and nearbyint functions we already have.  In my testing with the glibc
benchtests these are about 30% faster than the C versions for double,
20% faster for float.

Tested for x86_64.

[BZ #20142]
* sysdeps/x86_64/fpu/multiarch/Makefile (libm-sysdep_routines):
Add s_trunc-c, s_truncf-c, s_trunc-sse4_1 and s_truncf-sse4_1.
* sysdeps/x86_64/fpu/multiarch/s_trunc-c.c: New file.
* sysdeps/x86_64/fpu/multiarch/s_trunc-sse4_1.S: Likewise.
* sysdeps/x86_64/fpu/multiarch/s_trunc.c: Likewise.
* sysdeps/x86_64/fpu/multiarch/s_truncf-c.c: Likewise.
* sysdeps/x86_64/fpu/multiarch/s_truncf-sse4_1.S: Likewise.
* sysdeps/x86_64/fpu/multiarch/s_truncf.c: Likewise.

7 years agoOops. stdlib/test-atexit-race-common.c should have been part of 26e70aec7028feeb19674...
Paul Pluzhnikov [Wed, 20 Sep 2017 16:51:02 +0000 (09:51 -0700)]
Oops. stdlib/test-atexit-race-common.c should have been part of 26e70aec7028feeb196744eb97cd2dff3670b7aa

7 years agoFix BZ 14333
Paul Pluzhnikov [Wed, 20 Sep 2017 16:31:48 +0000 (09:31 -0700)]
Fix BZ 14333

7 years agoAdd exp2f and log2f benchmark trace
Szabolcs Nagy [Tue, 19 Sep 2017 13:48:13 +0000 (14:48 +0100)]
Add exp2f and log2f benchmark trace

exp2f and log2f benchmark traces are just copies of the existing
expf and logf traces from wrf_r.

* benchtests/Makefile: Add exp2f and log2f benchmarks.
* benchtests/exp2f-inputs: Copy of expf-inputs.
* benchtests/log2f-inputs: Copy of logf-inputs.

7 years agoFix fexecve build where syscall macros call sizeof.
Joseph Myers [Tue, 19 Sep 2017 15:50:38 +0000 (15:50 +0000)]
Fix fexecve build where syscall macros call sizeof.

The recent fexecve changes broke the build on (at least) alpha (maybe
other configurations, that was the first breakage I saw in my
build-many-glibcs.py run):

In file included from ../sysdeps/unix/sysv/linux/alpha/sysdep.h:29:0,
                 from ../sysdeps/alpha/nptl/tls.h:31,
                 from ../include/errno.h:25,
                 from ../sysdeps/unix/sysv/linux/fexecve.c:18:
../sysdeps/unix/sysv/linux/fexecve.c: In function 'fexecve':
../sysdeps/unix/alpha/sysdep.h:203:10: error: 'sizeof' on array function parameter 'argv' will return size of 'char * const*' [-Werror=sizeof-array-argument]
   (sizeof(arg) == 4 ? (long)(int)(long)(arg) : (long)(arg))
          ^
../sysdeps/unix/alpha/sysdep.h:302:26: note: in expansion of macro 'syscall_promote'
  register long _tmp_18 = syscall_promote (arg3);  \
                          ^~~~~~~~~~~~~~~
../sysdeps/unix/alpha/sysdep.h:173:2: note: in expansion of macro 'inline_syscall5'
  inline_syscall##nr(__NR_##name, args); \
  ^~~~~~~~~~~~~~
../sysdeps/unix/sysv/linux/alpha/sysdep.h:85:2: note: in expansion of macro 'INLINE_SYSCALL1'
  INLINE_SYSCALL1(name, nr, args);    \
  ^~~~~~~~~~~~~~~
../sysdeps/unix/sysv/linux/fexecve.c:42:3: note: in expansion of macro 'INLINE_SYSCALL'
   INLINE_SYSCALL (execveat, 5, fd, "", argv, envp, AT_EMPTY_PATH);
   ^~~~~~~~~~~~~~
../sysdeps/unix/sysv/linux/fexecve.c:33:30: note: declared here
 fexecve (int fd, char *const argv[], char *const envp[])
                              ^~~~

This patch fixes this similarly to previous fixes for such issues: use
&argv[0] and &envp[0] as the syscall macro arguments.  Tested
(compilation only) for alpha-linux-gnu with build-many-glibcs.py.

* sysdeps/unix/sysv/linux/fexecve.c (fexecve) [__NR_execveat]:
Explicitly take address of first element of array arguments in
call to INLINE_SYSCALL.

7 years agoUse execveat syscall in fexecve (bug 22134)
Andreas Schwab [Wed, 6 Sep 2017 15:29:29 +0000 (17:29 +0200)]
Use execveat syscall in fexecve (bug 22134)

By using execveat we no longer depend on /proc.  The execveat syscall was
introduced in 3.19, except for a few late comers.

7 years agoAdd logf trace
Wilco Dijkstra [Thu, 14 Sep 2017 12:26:23 +0000 (13:26 +0100)]
Add logf trace

Add a trace for logf.  This is a reduced trace based on 2.8 billion
samples extracted from wrf_r.

* benchtests/Makefile: Add logf benchmark.
* benchtests/logf-inputs: Add reduced trace from wrf_r.

7 years agoAdd expf trace
Wilco Dijkstra [Thu, 14 Sep 2017 12:22:06 +0000 (13:22 +0100)]
Add expf trace

Add a trace for expf.  This is a reduced trace based on 2.4 billion
samples extracted from wrf_r.

* benchtests/Makefile: Add expf benchmark.
* benchtests/expf-inputs: Add reduced trace from wrf_r.

7 years agoEnable unwind info in libc-start.c and backtrace.c
Wilco Dijkstra [Thu, 14 Sep 2017 11:47:35 +0000 (12:47 +0100)]
Enable unwind info in libc-start.c and backtrace.c

Add unwind info to __libc_start_main so that unwinding continues one
extra level to _start.  Similarly add unwind info to backtrace.
Given many targets require this, do this in a general way.

* csu/Makefile: Add -funwind-tables to libc-start.c.
* debug/Makefile: Add -funwind-tables to backtrace.c.
* sysdeps/aarch64/Makefile: Remove CFLAGS-backtrace.c.
* sysdeps/arm/Makefile: Likewise.
* sysdeps/i386/Makefile: Likewise.
* sysdeps/m68k/Makefile: Likewise.
* sysdeps/mips/Makefile: Likewise.
* sysdeps/nios2/Makefile: Likewise.
* sysdeps/sh/Makefile: Likewise.
* sysdeps/sparc/Makefile: Likewise.

7 years agoAdd benchtests for trunc and truncf.
Joseph Myers [Tue, 19 Sep 2017 12:59:01 +0000 (12:59 +0000)]
Add benchtests for trunc and truncf.

This patch adds benchtests for the trunc and truncf functions.  The
inputs listed are fairly arbitrary; I do not assert they are
representative of any particular application.

* benchtests/Makefile (bench-math): Add trunc and truncf.
(CFLAGS-bench-trunc.c): New variable.
(CFLAGS-bench-truncf.c): Likewise.
* benchtests/trunc-inputs: New file.
* benchtests/truncf-inputs: Likewise.

7 years agopowerpc: Avoid misaligned stores in memset
Rajalakshmi Srinivasaraghavan [Tue, 19 Sep 2017 08:25:49 +0000 (13:55 +0530)]
powerpc: Avoid misaligned stores in memset

As per the section "3.1.4.2 Alignment Interrupts" of the "POWER8 Processor
User's Manual for the Single-Chip Module", alignment interrupt is reported
for misaligned stores in  Caching-inhibited storage.  As memset is used in
some drivers for DMA (like xorg), this patch avoids misaligned stores for
sizes less than 8 in memset.

7 years agoFix powerpc64le problem from last ldbl-opt patch.
Joseph Myers [Mon, 18 Sep 2017 23:26:35 +0000 (23:26 +0000)]
Fix powerpc64le problem from last ldbl-opt patch.

This patch fixes a problem on powerpc64le that I missed in initial
testing of my last patch to ldbl-opt.  In the specific case of
powerpc64le, the weak aliases for exp10l and remainderl do not get
defined in the generic wrappers because of how those wrappers
undefine and redefine weak_alias.  This patch restores those aliases
in the ldbl-opt code.

Tested (compilation only) for powerpc64le with build-many-glibcs.py.

* sysdeps/ieee754/ldbl-opt/w_exp10l_compat.c [LIBM_SVID_COMPAT &&
!LONG_DOUBLE_COMPAT (libm, GLIBC_2_1)] (weak_alias): Undefine and
redefine.
[LIBM_SVID_COMPAT && !LONG_DOUBLE_COMPAT (libm, GLIBC_2_1)]
(exp10l): Define as weak alias.
* sysdeps/ieee754/ldbl-opt/w_remainderl_compat.c [LIBM_SVID_COMPAT
&& !LONG_DOUBLE_COMPAT (libm, GLIBC_2_0)] (weak_alias): Undefine
and redefine.
[LIBM_SVID_COMPAT && !LONG_DOUBLE_COMPAT (libm, GLIBC_2_0)]
(remainderl): Define as weak alias.

7 years agoUse libm_alias_ldouble in math/.
Joseph Myers [Mon, 18 Sep 2017 17:51:33 +0000 (17:51 +0000)]
Use libm_alias_ldouble in math/.

This patch converts libm function implementations in math/ from using
weak_alias to using libm_alias_ldouble to define public function
names, in cases where it would be appropriate to define _Float128 /
_Float64x aliases for those functions as well (in cases where either
or both of those types exist and have the same ABI as long double).
This eliminates many ldbl-opt wrappers round these function
implementations.

Tested for x86_64, and with build-many-glibcs.py.  All installed
stripped shared libraries are unchanged except for libm.so on
powerpc64le.  As noted for a previous patch, powerpc64le's use of
ldbl-opt means various long double functions get defined using
long_double_symbol which gives them an explicit symbol version in the
object files, and this patch results in some such functions using
weak_alias instead (because powerpc64le never had a previous version
of these functions for long double = double); both produce a valid
libm.so with the same public symbols at the same versions, but macros
expanding to call weak_alias is cleaner in this case.

* math/s_fmal.c: Include <libm-alias-ldouble.h>.
(fmal): Define using libm_alias_ldouble.
* math/w_acoshl_compat.c: Include <libm-alias-ldouble.h>.
(acoshl): Define using libm_alias_ldouble.
* math/w_acosl_compat.c: Include <libm-alias-ldouble.h>.
(acosl): Define using libm_alias_ldouble.
* math/w_asinl_compat.c: Include <libm-alias-ldouble.h>.
(asinl): Define using libm_alias_ldouble.
* math/w_atan2l_compat.c: Include <libm-alias-ldouble.h>.
(atan2l): Define using libm_alias_ldouble.
* math/w_atanhl_compat.c: Include <libm-alias-ldouble.h>.
(atanhl): Define using libm_alias_ldouble.
* math/w_coshl_compat.c: Include <libm-alias-ldouble.h>.
(coshl): Define using libm_alias_ldouble.
* math/w_exp10l_compat.c: Include <libm-alias-ldouble.h>.
(exp10l): Define using libm_alias_ldouble.
* math/w_exp2l_compat.c: Include <libm-alias-ldouble.h>.
(exp2l): Define using libm_alias_ldouble.
* math/w_expl_compat.c: Include <libm-alias-ldouble.h>.
(expl): Define using libm_alias_ldouble.
* math/w_fmodl_compat.c: Include <libm-alias-ldouble.h>.
(fmodl): Define using libm_alias_ldouble.
* math/w_hypotl_compat.c: Include <libm-alias-ldouble.h>.
(hypotl): Define using libm_alias_ldouble.
* math/w_j0l_compat.c: Include <libm-alias-ldouble.h>.
(j0l): Define using libm_alias_ldouble.
(y0l): Likewise.
* math/w_j1l_compat.c: Include <libm-alias-ldouble.h>.
(j1l): Define using libm_alias_ldouble.
(y1l): Likewise.
* math/w_jnl_compat.c: Include <libm-alias-ldouble.h>.
(jnl): Define using libm_alias_ldouble.
(ynl): Likewise.
* math/w_log10l_compat.c: Include <libm-alias-ldouble.h>.
(log10l): Define using libm_alias_ldouble.
* math/w_log2l_compat.c: Include <libm-alias-ldouble.h>.
(log2l): Define using libm_alias_ldouble.
* math/w_logl_compat.c: Include <libm-alias-ldouble.h>.
(logl): Define using libm_alias_ldouble.
* math/w_powl_compat.c: Include <libm-alias-ldouble.h>.
(powl): Define using libm_alias_ldouble.
* math/w_remainderl_compat.c: Include <libm-alias-ldouble.h>.
(remainderl): Define using libm_alias_ldouble.
* math/w_sinhl_compat.c: Include <libm-alias-ldouble.h>.
(sinhl): Define using libm_alias_ldouble.
* math/w_sqrtl_compat.c: Include <libm-alias-ldouble.h>.
(sqrtl): Define using libm_alias_ldouble.
* math/w_tgammal_compat.c: Include <libm-alias-ldouble.h>.
(tgammal): Define using libm_alias_ldouble.
* sysdeps/ieee754/ldbl-opt/w_exp10l_compat.c [LIBM_SVID_COMPAT]
(exp10l): Do not use long_double_symbol here.
* sysdeps/ieee754/ldbl-opt/w_remainderl_compat.c
[LIBM_SVID_COMPAT] (remainderl): Likewise.
* sysdeps/ieee754/ldbl-opt/s_fmal.c: Remove.
* sysdeps/ieee754/ldbl-opt/w_acoshl_compat.c: Likewise.
* sysdeps/ieee754/ldbl-opt/w_acosl_compat.c: Likewise.
* sysdeps/ieee754/ldbl-opt/w_asinl_compat.c: Likewise.
* sysdeps/ieee754/ldbl-opt/w_atan2l_compat.c: Likewise.
* sysdeps/ieee754/ldbl-opt/w_atanhl_compat.c: Likewise.
* sysdeps/ieee754/ldbl-opt/w_coshl_compat.c: Likewise.
* sysdeps/ieee754/ldbl-opt/w_expl_compat.c: Likewise.
* sysdeps/ieee754/ldbl-opt/w_fmodl_compat.c: Likewise.
* sysdeps/ieee754/ldbl-opt/w_hypotl_compat.c: Likewise.
* sysdeps/ieee754/ldbl-opt/w_j0l_compat.c: Likewise.
* sysdeps/ieee754/ldbl-opt/w_j1l_compat.c: Likewise.
* sysdeps/ieee754/ldbl-opt/w_jnl_compat.c: Likewise.
* sysdeps/ieee754/ldbl-opt/w_log10l_compat.c: Likewise.
* sysdeps/ieee754/ldbl-opt/w_log2l_compat.c: Likewise.
* sysdeps/ieee754/ldbl-opt/w_logl_compat.c: Likewise.
* sysdeps/ieee754/ldbl-opt/w_powl_compat.c: Likewise.
* sysdeps/ieee754/ldbl-opt/w_sinhl_compat.c: Likewise.
* sysdeps/ieee754/ldbl-opt/w_sqrtl_compat.c: Likewise.
* sysdeps/ieee754/ldbl-opt/w_tgammal_compat.c: Likewise.

7 years agoAArch64: use movz/movk instead of literal pools in start.S
Wang Boshi [Fri, 15 Sep 2017 16:53:23 +0000 (17:53 +0100)]
AArch64: use movz/movk instead of literal pools in start.S

eXecute-Only Memory (XOM) is a protection mechanism against some ROP
attacks. XOM sets the code as executable and unreadable, so the access
to any data, like literal pools, in the code section causes the fault
with XOM. The compiler can disable literal pools for C source files,
but not for assembly files, so I use movz/movk instead of literal pools
in start.S for XOM.

I add MOVL macro with movz/movk instructions like movl pseudo-instruction
in armasm, and use the macro instead of literal pools.

* sysdeps/aarch64/start.S: Use MOVL instead of literal pools.
* sysdeps/aarch64/sysdep.h (MOVL): Add MOVL macro.

7 years agoAdd missing libc_hidden_weak/def calls
Samuel Thibault [Sun, 17 Sep 2017 19:57:39 +0000 (21:57 +0200)]
Add missing libc_hidden_weak/def calls

* io/read.c (read): Add libc_hidden_weak.
* sysdeps/mach/hurd/read.c (read): Likewise.
* io/write.c (write): Likewise.
* sysdeps/mach/hurd/write.c (write): Likewise.
* io/pread64.c (__pread64): Likewise.
* sysdeps/mach/hurd/pread64.c (__pread64): Likewise.
* posix/pread64.c (__pread64): Add libc_hidden_def.

7 years agoAdd missing space.
Paul Pluzhnikov [Sat, 16 Sep 2017 17:55:55 +0000 (10:55 -0700)]
Add missing space.

7 years agoAdd missing space.
Paul Pluzhnikov [Sat, 16 Sep 2017 17:50:22 +0000 (10:50 -0700)]
Add missing space.

7 years agobenchtests: New -g option to generate graphs in compare_strings.py
Siddhesh Poyarekar [Sat, 16 Sep 2017 09:53:59 +0000 (15:23 +0530)]
benchtests: New -g option to generate graphs in compare_strings.py

The compare_strings.py option unconditionally generates a graph PNG
image of the input data, which can be unnecessary and slow.  Put this
behind an optional flag -g.

* benchtests/scripts/compare_strings.py: New option -g.
(draw_graph): Print a message that a graph is being generated.
(process_results): Generate graph only if -g is passed.
(main): Process option -g.

7 years agobenchtests: Make compare_strings.py output a bit prettier
Siddhesh Poyarekar [Sat, 16 Sep 2017 09:53:12 +0000 (15:23 +0530)]
benchtests: Make compare_strings.py output a bit prettier

Make the column widths for the outputs fixed so that they look a
little less messy.  They will still look bad with lots of IFUNCs (like
on x86) but it's still a step forward.

* benchtests/scripts/compare_strings.py (process_results):
Better spacing for output.

7 years agobenchtests: Use argparse to parse arguments
Siddhesh Poyarekar [Sat, 16 Sep 2017 06:17:32 +0000 (11:47 +0530)]
benchtests: Use argparse to parse arguments

Make the script more usable by adding proper command line options
along with a way to query the options.  The script is capable of doing
a bunch of things right now like choosing a base for comparison,
choosing to generate graphs, etc. and they should be accessible via
command line switches.

* benchtests/scripts/compare_strings.py: Use argparse.
* benchtests/README: Document existence of compare_strings.py.

7 years agoUse libm_alias_double in math/.
Joseph Myers [Fri, 15 Sep 2017 23:10:02 +0000 (23:10 +0000)]
Use libm_alias_double in math/.

This patch converts libm function implementations in math/ from using
weak_alias to using libm_alias_double to define public function names,
in cases where it would be appropriate to define _Float64 / _Float32x
aliases for those functions as well.  This eliminates many
NO_LONG_DOUBLE conditionals and ldbl-opt wrappers round these function
implementations.

Tested for x86_64.  Also tested with build-many-glibcs.py.  Binary
differences seen are that the different order in which remainder and
drem symbols get defined as a result of this patch (the same source
file defines the same aliases, but in a different order of definition)
changes the order of symbols in the final libm.so when long double =
double, and for ldbl-opt configurations, the compat symbols for Bessel
functions were previously defined by e.g. "compat_symbol (libm, j0,
j0l, GLIBC_2_0)", which declares j0l as a compat symbol based on j0
and so makes j0l weak because j0 is weak, and are now defined
(indirectly via the relevant macros) based on e.g. __j0, so are no
longer weak because __j0 isn't weak.

* math/s_fma.c: Include <libm-alias-double.h>.
(fma): Define using libm_alias_double.
* math/s_nextafter.c: Include <libm-alias-double.h>.
(nextafter): Define using libm_alias_double.
* math/w_acos_compat.c: Include <libm-alias-double.h>.
(acos): Define using libm_alias_double.
* math/w_acosh_compat.c: Include <libm-alias-double.h>.
(aocsh): Define using libm_alias_double.
* math/w_asin_compat.c: Include <libm-alias-double.h>.
(asin): Define using libm_alias_double.
* math/w_atan2_compat.c: Include <libm-alias-double.h>.
(atan2): Define using libm_alias_double.
* math/w_atanh_compat.c: Include <libm-alias-double.h>.
(atanh): Define using libm_alias_double.
* math/w_cosh_compat.c: Include <libm-alias-double.h>.
(cosh): Define using libm_alias_double.
* math/w_exp10_compat.c: Include <libm-alias-double.h>.
(exp10): Define using libm_alias_double.
* math/w_exp2_compat.c: Include <libm-alias-double.h>.
(exp2): Define using libm_alias_double.
* math/w_exp_compat.c: Include <libm-alias-double.h>.
(exp): Define using libm_alias_double.
* math/w_fmod_compat.c: Include <libm-alias-double.h>.
(fmod): Define using libm_alias_double.
* math/w_hypot_compat.c: Include <libm-alias-double.h>.
(hypot): Define using libm_alias_double.
* math/w_j0_compat.c: Include <libm-alias-double.h>.
(j0): Define using libm_alias_double.
(y0): Likewise.
* math/w_j1_compat.c: Include <libm-alias-double.h>.
(j1): Define using libm_alias_double.
(y1): Likewise.
* math/w_jn_compat.c: Include <libm-alias-double.h>.
(jn): Define using libm_alias_double.
(yn): Likewise.
* math/w_log10_compat.c: Include <libm-alias-double.h>.
(log10): Define using libm_alias_double.
* math/w_log2_compat.c: Include <libm-alias-double.h>.
(log2): Define using libm_alias_double.
* math/w_log_compat.c: Include <libm-alias-double.h>.
(log): Define using libm_alias_double.
* math/w_pow_compat.c: Include <libm-alias-double.h>.
(pow): Define using libm_alias_double.
* math/w_remainder_compat.c: Include <libm-alias-double.h>.
(remainder): Define using libm_alias_double.
* math/w_sinh_compat.c: Include <libm-alias-double.h>.
(sinh): Define using libm_alias_double.
* math/w_sqrt_compat.c: Include <libm-alias-double.h>.
(sqrt): Define using libm_alias_double.
* math/w_tgamma_compat.c: Include <libm-alias-double.h>.
(tgamma): Define using libm_alias_double.
* sysdeps/ieee754/ldbl-opt/s_nextafter.c [LONG_DOUBLE_COMPAT(libm,
GLIBC_2_0)] (nextafterl): Do not define compat symbol here.
* sysdeps/ieee754/ldbl-opt/w_exp10_compat.c
[LONG_DOUBLE_COMPAT(libm, GLIBC_2_1)] (exp10l): Likewise.
* sysdeps/ieee754/ldbl-opt/w_remainder_compat.c
[LONG_DOUBLE_COMPAT(libm, GLIBC_2_0)] (remainderl): Likewise.
* sysdeps/ieee754/ldbl-opt/w_acos_compat.c: Remove.
* sysdeps/ieee754/ldbl-opt/w_acosh_compat.c: Likewise.
* sysdeps/ieee754/ldbl-opt/w_asin_compat.c: Likewise.
* sysdeps/ieee754/ldbl-opt/w_atan2_compat.c: Likewise.
* sysdeps/ieee754/ldbl-opt/w_atanh_compat.c: Likewise.
* sysdeps/ieee754/ldbl-opt/w_cosh_compat.c: Likewise.
* sysdeps/ieee754/ldbl-opt/w_exp_compat.c: Likewise.
* sysdeps/ieee754/ldbl-opt/w_fmod_compat.c: Likewise.
* sysdeps/ieee754/ldbl-opt/w_hypot_compat.c: Likewise.
* sysdeps/ieee754/ldbl-opt/w_j0_compat.c: Likewise.
* sysdeps/ieee754/ldbl-opt/w_j1_compat.c: Likewise.
* sysdeps/ieee754/ldbl-opt/w_jn_compat.c: Likewise.
* sysdeps/ieee754/ldbl-opt/w_log10_compat.c: Likewise.
* sysdeps/ieee754/ldbl-opt/w_log2_compat.c: Likewise.
* sysdeps/ieee754/ldbl-opt/w_log_compat.c: Likewise.
* sysdeps/ieee754/ldbl-opt/w_pow_compat.c: Likewise.
* sysdeps/ieee754/ldbl-opt/w_sinh_compat.c: Likewise.
* sysdeps/ieee754/ldbl-opt/w_sqrt_compat.c: Likewise.
* sysdeps/ieee754/ldbl-opt/w_tgamma_compat.c: Likewise.

7 years agoRemove ENOSYS math/ function stubs.
Joseph Myers [Fri, 15 Sep 2017 20:05:09 +0000 (20:05 +0000)]
Remove ENOSYS math/ function stubs.

The math/ directory has various stub implementations of functions
(generally long double functions, plus sqrtf128) that set errno to
ENOSYS and print a message.

These are a relic of when the long double libm implementation in glibc
was originally incomplete.  They are only present for a limited set of
libm functions, not all those that would need implementing for any
hypothetical new long double format, and only for long double (plus
sqrtf128), not for other floating-point types.  I removed the
corresponding ENOSYS tests in the testsuite in
<https://sourceware.org/ml/libc-alpha/2013-05/msg00599.html>.

I think these stubs are an inherently different case from stubs for
functionality needing OS-specific implementations, since
floating-point formats are generally standardized between modern
processors (a new long double format does not seem likely - I'd expect
new ports all to have long double = binary128 or long double =
binary64 - though _Float16 functions *f16 are entirely possible in
future) and libm functions are generally only expected to fail for
domain / range / pole errors, not for other unknown system-specific
conditions the way the functions needing OS-specific implementations
may fail.

This patch removes these stub implementations.  The effect (which, as
noted above, was actually mostly already the case, given the
incompleteness of the set of stubs, and was certainly the case if you
wanted your libm port to *work* rather than just build) is that any
new long double format needs to provide a full set of functions for
the build to succeed; any port using ldbl-128 needs to provide sqrtl
(possibly using the soft-fp version from another port); any port using
ldbl-96 needs to provide all those functions that all of
x86_64/i386/ia64/m68k provide rather than getting from the ldbl-96
directory; any port with _Float128 as a type with a distinct format
needs to provide sqrtf128.

Tested for x86_64.  Also tested with build-many-glibcs.py that
installed stripped shared libraries are unchanged by the patch.

* math/e_acoshl.c: Remove.
* math/e_acosl.c: Likewise.
* math/e_asinl.c: Likewise.
* math/e_atan2l.c: Likewise.
* math/e_atanhl.c: Likewise.
* math/e_coshl.c: Likewise.
* math/e_expl.c: Likewise.
* math/e_fmodl.c: Likewise.
* math/e_gammal_r.c: Likewise.
* math/e_hypotl.c: Likewise.
* math/e_j0l.c: Likewise.
* math/e_j1l.c: Likewise.
* math/e_jnl.c: Likewise.
* math/e_lgammal_r.c: Likewise.
* math/e_log10l.c: Likewise.
* math/e_log2l.c: Likewise.
* math/e_logl.c: Likewise.
* math/e_powl.c: Likewise.
* math/e_rem_pio2l.c: Likewise.
* math/e_sinhl.c: Likewise.
* math/e_sqrtf128.c: Likewise.
* math/e_sqrtl.c: Likewise.
* math/k_cosl.c: Likewise.
* math/k_sinl.c: Likewise.
* math/k_tanl.c: Likewise.
* math/s_asinhl.c: Likewise.
* math/s_atanl.c: Likewise.
* math/s_cbrtl.c: Likewise.
* math/s_erfl.c: Likewise.
* math/s_expm1l.c: Likewise.
* math/s_log1pl.c: Likewise.
* math/s_tanhl.c: Likewise.

7 years ago[BZ #21745] powerpc: build some IFUNC math functions for libc and libm
Tulio Magno Quites Machado Filho [Fri, 15 Sep 2017 18:07:28 +0000 (15:07 -0300)]
[BZ #21745] powerpc: build some IFUNC math functions for libc and libm

Some math functions have to be distributed in libc because they're
required by printf.
libc and libm require their own builds of these functions, e.g. libc
functions have to call __stack_chk_fail_local in order to bypass the
PLT, while libm functions have to call __stack_chk_fail.

While math/Makefile treat the generic cases, i.e. s_isinff, the
multiarch Makefile has to treat its own files, i.e. s_isinff-ppc64.

[BZ #21745]
* sysdeps/powerpc/powerpc64/fpu/multiarch/Makefile:
[$(subdir) = math] (sysdep_calls): New variable.  Has the
previous contents of sysdep_routines, but re-sorted..
[$(subdir) = math] (sysdep_routines): Re-use the contents from
sysdep_calls.
[$(subdir) = math] (libm-sysdep_routines): Remove the functions
defined in sysdep_calls and replace by the respective m_* names.
* sysdeps/powerpc/powerpc64/fpu/multiarch/s_isnan-ppc64.S:
(compat_symbol): Undefine to avoid duplicated compat symbols in
libc.

7 years agoUse libm_alias_float in math/.
Joseph Myers [Fri, 15 Sep 2017 17:12:02 +0000 (17:12 +0000)]
Use libm_alias_float in math/.

This patch converts libm function implementations in math/ from using
weak_alias to using libm_alias_float to define public function names,
in cases where it would be appropriate to define _Float32 aliases for
those functions as well.  expf and exp2f are omitted from this patch,
given the in-progress patches that would change their symbol
versioning arrangements (at a later stage it will be necessary to add
macros that can be used for functions with such symbol versioning
arrangements - which will apply to lgammaf as well - but for the
initial patches in this area I'm just dealing with easy cases, and any
symbol versioning changes to these functions while the work is in
progress can effectively just undo the libm_alias_* changes as regards
those functions).

Tested for x86_64.  Also tested with build-many-glibcs.py that
installed stripped shared libraries are unchanged by the patch.

* math/s_fmaf.c: Include <libm-alias-float.h>.
(fmaf): Define using libm_alias_float.
* math/w_acosf_compat.c: Include <libm-alias-float.h>.
(acosf): Define using libm_alias_float.
* math/w_acoshf_compat.c: Include <libm-alias-float.h>.
(acoshf): Define using libm_alias_float.
* math/w_asinf_compat.c: Include <libm-alias-float.h>.
(asinf): Define using libm_alias_float.
* math/w_atan2f_compat.c: Include <libm-alias-float.h>.
(atan2f): Define using libm_alias_float.
* math/w_atanhf_compat.c: Include <libm-alias-float.h>.
(atanhf): Define using libm_alias_float.
* math/w_coshf_compat.c: Include <libm-alias-float.h>.
(coshf): Define using libm_alias_float.
* math/w_exp10f_compat.c: Include <libm-alias-float.h>.
(exp10f): Define using libm_alias_float.
* math/w_fmodf_compat.c: Include <libm-alias-float.h>.
(fmodf): Define using libm_alias_float.
* math/w_hypotf_compat.c: Include <libm-alias-float.h>.
(hypotf): Define using libm_alias_float.
* math/w_j0f_compat.c: Include <libm-alias-float.h>.
(j0f): Define using libm_alias_float.
(y0f): Likewise.
* math/w_j1f_compat.c: Include <libm-alias-float.h>.
(j1f): Define using libm_alias_float.
(y1f): Likewise.
* math/w_jnf_compat.c: Include <libm-alias-float.h>.
(jnf): Define using libm_alias_float.
(ynf): Likewise.
* math/w_log10f_compat.c: Include <libm-alias-float.h>.
(log10f): Define using libm_alias_float.
* math/w_log2f_compat.c: Include <libm-alias-float.h>.
(log2f): Define using libm_alias_float.
* math/w_logf_compat.c: Include <libm-alias-float.h>.
(logf): Define using libm_alias_float.
* math/w_powf_compat.c: Include <libm-alias-float.h>.
(powf): Define using libm_alias_float.
* math/w_remainderf_compat.c: Include <libm-alias-float.h>.
(remainderf): Define using libm_alias_float.
* math/w_sinhf_compat.c: Include <libm-alias-float.h>.
(sinhf): Define using libm_alias_float.
* math/w_sqrtf_compat.c: Include <libm-alias-float.h>.
(sqrtf): Define using libm_alias_float.
* math/w_tgammaf_compat.c: Include <libm-alias-float.h>.
(tgammaf): Define using libm_alias_float.

7 years agoMake more libm functions into weak aliases.
Joseph Myers [Thu, 14 Sep 2017 22:28:53 +0000 (22:28 +0000)]
Make more libm functions into weak aliases.

Many libm functions define the function as __<func> and then define
<func> as a weak alias.  This is not at all limited to cases where
there is an internal call that has namespace reasons to need to call
__<func> instead of <func>.

The common macros for creating libm function aliases work on the basis
of public function names all being aliases; that is, they define
aliases for functions using the above pattern.  Thus, where a function
just defines the public name <func> directly, changing that to be a
weak alias enables a subsequent conversion to the common macros to
retain the exact existing symbols (and so be testable by comparison of
stripped binaries).

This patch converts many existing functions to use the weak alias
pattern, as preparation for subsequent conversions to common macros.
I do expect that _FloatN/_FloatNx function aliases will end up needing
new variants of the common macros that do *not* create the original
float / double / long double name of a function - for cases where that
name is created specially to give it a particular symbol version, for
example - but for functions that can use the most common macros to
create all the public names as aliases, it makes sense for them to do
so.

Regarding the Bessel function wrappers in this patch: only float and
double wrappers are changed because the long double wrappers already
used the weak alias pattern.

Tested for x86_64, and with build-many-glibcs.py.

* include/math.h (roundeven): Change hidden_proto call to
__roundeven.
* math/w_j0_compat.c (j0): Rename to __j0 and define as weak
alias.
[NO_LONG_DOUBLE] (__j0l): New strong alias.
(y0): Rename to __y0 and define as weak alias.
[NO_LONG_DOUBLE] (__y0l): New strong alias.
* math/w_j0f_compat.c (j0f): Rename to __j0f and define as weak
alias.
(y0f): Rename to __y0f and define as weak alias.
* math/w_j1_compat.c (j1): Rename to __j1 and define as weak
alias.
[NO_LONG_DOUBLE] (__j1l): New strong alias.
(y1): Rename to __y1 and define as weak alias.
[NO_LONG_DOUBLE] (__y1l): New strong alias.
* math/w_j1f_compat.c (j1f): Rename to __j1f and define as weak
alias.
(y1f): Rename to __y1f and define as weak alias.
* math/w_jn_compat.c (jn): Rename to __jn and define as weak
alias.
[NO_LONG_DOUBLE] (__jnl): New strong alias.
(yn): Rename to __yn and define as weak alias.
[NO_LONG_DOUBLE] (__ynl): New strong alias.
* math/w_jnf_compat.c (jnf): Rename to __jnf and define as weak
alias.
(ynf): Rename to __ynf and define as weak alias.
* sysdeps/ieee754/dbl-64/s_fromfp.c (FUNC): Define to __fromfp.
(fromfp): Define as weak alias.
[NO_LONG_DOUBLE] (__fromfpl): New strong alias.
* sysdeps/ieee754/dbl-64/s_fromfpx.c (FUNC): Define to __fromfpx.
(fromfpx): Define as weak alias.
[NO_LONG_DOUBLE] (__fromfpxl): New strong alias.
* sysdeps/ieee754/dbl-64/s_getpayload.c (getpayload): Rename to
__getpayload and define as weak alias.
[NO_LONG_DOUBLE] (__getpayloadl): New strong alias.
* sysdeps/ieee754/dbl-64/s_roundeven.c (roundeven): Rename to
__roundeven and define as weak alias.
[NO_LONG_DOUBLE] (__roundevenl): New strong alias.
* sysdeps/ieee754/dbl-64/s_setpayload.c (FUNC): Define to
__setpayload.
(setpayload): Define as weak alias.
[NO_LONG_DOUBLE] (__setpayloadl): New strong alias.
* sysdeps/ieee754/dbl-64/s_setpayloadsig.c (FUNC): Define to
__setpayloadsig.
(setpayloadsig): Define as weak alias.
[NO_LONG_DOUBLE] (__setpayloadsigl): New strong alias.
* sysdeps/ieee754/dbl-64/s_totalorder.c (totalorder): Rename to
__totalorder and define as weak alias.
[NO_LONG_DOUBLE] (__totalorderl): New strong alias.
* sysdeps/ieee754/dbl-64/s_totalordermag.c (totalordermag): Rename
to __totalordermag and define as weak alias.
[NO_LONG_DOUBLE] (__totalordermagl): New strong alias.
* sysdeps/ieee754/dbl-64/s_ufromfp.c (FUNC): Define to __ufromfp.
(ufromfp): Define as weak alias.
[NO_LONG_DOUBLE] (__ufromfpl): New strong alias.
* sysdeps/ieee754/dbl-64/s_ufromfpx.c (FUNC): Define to
__ufromfpx.
(ufromfpx): Define as weak alias.
[NO_LONG_DOUBLE] (__ufromfpxl): New strong alias.
* sysdeps/ieee754/dbl-64/wordsize-64/s_getpayload.c (getpayload):
Rename to __getpayload and define as weak alias.
[NO_LONG_DOUBLE] (__getpayloadl): New strong alias.
* sysdeps/ieee754/dbl-64/wordsize-64/s_roundeven.c (roundeven):
Rename to __roundeven and define as weak alias.
[NO_LONG_DOUBLE] (__roundevenl): New strong alias.
* sysdeps/ieee754/dbl-64/wordsize-64/s_totalorder.c (totalorder):
Rename to __totalorder and define as weak alias.
[NO_LONG_DOUBLE] (__totalorderl): New strong alias.
* sysdeps/ieee754/dbl-64/wordsize-64/s_totalordermag.c
(totalordermag): Rename to __totalordermag and define as weak
alias.
[NO_LONG_DOUBLE] (__totalordermagl): New strong alias.
* sysdeps/ieee754/float128/float128_private.h (__getpayloadl): New
macro.
(__roundevenl): Likewise.
(__totalorderl): Likewise.
(__totalordermagl): Likewise
* sysdeps/ieee754/float128/s_fromfpf128.c (FUNC): Define to
__fromfpf128.
(fromfpf128): Define as weak alias.
* sysdeps/ieee754/float128/s_fromfpxf128.c (FUNC): Define to
__fromfpxf128.
(fromfpxf128): Define as weak alias.
* sysdeps/ieee754/float128/s_setpayloadf128.c (FUNC): Define to
__setpayloadf128.
(setpayloadf128): Define as weak alias.
* sysdeps/ieee754/float128/s_setpayloadsigf128.c (FUNC): Define to
__setpayloadsigf128.
(setpayloadsigf128): Define as weak alias.
* sysdeps/ieee754/float128/s_ufromfpf128.c (FUNC): Define to
__ufromfpf128.
(ufromfpf128): Define as weak alias.
* sysdeps/ieee754/float128/s_ufromfpxf128.c (FUNC): Define to
__ufromfpxf128.
(ufromfpxf128): Define as weak alias.
* sysdeps/ieee754/flt-32/s_fromfpf.c (FUNC): Define to __fromfpf.
(fromfpf): Define as weak alias.
* sysdeps/ieee754/flt-32/s_fromfpxf.c (FUNC): Define to
__fromfpxf.
(fromfpxf): Define as weak alias.
* sysdeps/ieee754/flt-32/s_getpayloadf.c (getpayloadf): Rename to
__getpayloadf and define as weak alias.
* sysdeps/ieee754/flt-32/s_roundevenf.c (roundevenf): Rename to
__roundevenf and define as weak alias.
* sysdeps/ieee754/flt-32/s_setpayloadf.c (FUNC): Define to
__setpayloadf.
(setpayloadf): Define as weak alias.
* sysdeps/ieee754/flt-32/s_setpayloadsigf.c (FUNC): Define to
__setpayloadsigf.
(setpayloadsigf): Define as weak alias.
* sysdeps/ieee754/flt-32/s_totalorderf.c (totalorderf): Rename to
__totalorderf and define as weak alias.
* sysdeps/ieee754/flt-32/s_totalordermagf.c (totalordermagf):
Rename to __totalordermagf and define as weak alias.
* sysdeps/ieee754/flt-32/s_ufromfpf.c (FUNC): Define to
__ufromfpf.
(ufromfpf): Define as weak alias.
* sysdeps/ieee754/flt-32/s_ufromfpxf.c (FUNC): Define to
__ufromfpxf.
(ufromfpxf): Define as weak alias.
* sysdeps/ieee754/ldbl-128/s_fromfpl.c (FUNC): Define to
__fromfpl.
(fromfpl): Define as weak alias.
* sysdeps/ieee754/ldbl-128/s_fromfpxl.c (FUNC): Define to
__fromfpxl.
(fromfpxl): Define as weak alias.
* sysdeps/ieee754/ldbl-128/s_getpayloadl.c (getpayloadl): Rename
to __getpayloadl and define as weak alias.
* sysdeps/ieee754/ldbl-128/s_roundevenl.c (roundevenl): Rename to
__roundevenl and define as weak alias.
* sysdeps/ieee754/ldbl-128/s_setpayloadl.c (FUNC): Define to
__setpayloadl.
(setpayloadl): Define as weak alias.
* sysdeps/ieee754/ldbl-128/s_setpayloadsigl.c (FUNC): Define to
__setpayloadsigl.
(setpayloadsigl): Define as weak alias.
* sysdeps/ieee754/ldbl-128/s_totalorderl.c (totalorderl): Rename
to __totalorderl and define as weak alias.
* sysdeps/ieee754/ldbl-128/s_totalordermagl.c (totalordermagl):
Rename to __totalordermagl and define as weak alias.
* sysdeps/ieee754/ldbl-128/s_ufromfpl.c (FUNC): Define to
__ufromfpl.
(ufromfpl): Define as weak alias.
* sysdeps/ieee754/ldbl-128/s_ufromfpxl.c (FUNC): Define to
__ufromfpxl.
(ufromfpxl): Define as weak alias.
* sysdeps/ieee754/ldbl-128ibm/s_fromfpl.c (FUNC): Define to
__fromfpl.
(fromfpl): Define as weak alias.
* sysdeps/ieee754/ldbl-128ibm/s_fromfpxl.c (FUNC): Define to
__fromfpxl.
(fromfpxl): Define as weak alias.
* sysdeps/ieee754/ldbl-128ibm/s_getpayloadl.c (getpayloadl):
Rename to __getpayloadl and define as weak alias.
* sysdeps/ieee754/ldbl-128ibm/s_roundevenl.c (roundevenl): Rename
to __roundevenl and define as weak alias.  Call __roundeven
instead of roundeven.
* sysdeps/ieee754/ldbl-128ibm/s_setpayloadl.c (FUNC): Define to
__setpayloadl.
(setpayloadl): Define as weak alias.
* sysdeps/ieee754/ldbl-128ibm/s_setpayloadsigl.c (FUNC): Define to
__setpayloadsigl.
(setpayloadsigl): Define as weak alias.
* sysdeps/ieee754/ldbl-128ibm/s_totalorderl.c (totalorderl):
Rename to __totalorderl and define as weak alias.
* sysdeps/ieee754/ldbl-128ibm/s_totalordermagl.c (totalordermagl):
Rename to __totalordermagl and define as weak alias.
* sysdeps/ieee754/ldbl-128ibm/s_ufromfpl.c (FUNC): Define to
__ufromfpl.
(ufromfpl): Define as weak alias.
* sysdeps/ieee754/ldbl-128ibm/s_ufromfpxl.c (FUNC): Define to
__ufromfpxl.
(ufromfpxl): Define as weak alias.
* sysdeps/ieee754/ldbl-96/s_fromfpl.c (FUNC): Define to
__fromfpl.
(fromfpl): Define as weak alias.
* sysdeps/ieee754/ldbl-96/s_fromfpxl.c (FUNC): Define to
__fromfpxl.
(fromfpxl): Define as weak alias.
* sysdeps/ieee754/ldbl-96/s_getpayloadl.c (getpayloadl): Rename to
__getpayloadl and define as weak alias.
* sysdeps/ieee754/ldbl-96/s_roundevenl.c (roundevenl): Rename to
__roundevenl and define as weak alias.
* sysdeps/ieee754/ldbl-96/s_setpayloadl.c (FUNC): Define to
__setpayloadl.
(setpayloadl): Define as weak alias.
* sysdeps/ieee754/ldbl-96/s_setpayloadsigl.c (FUNC): Define to
__setpayloadsigl.
(setpayloadsigl): Define as weak alias.
* sysdeps/ieee754/ldbl-96/s_totalorderl.c (totalorderl): Rename to
__totalorderl and define as weak alias.
* sysdeps/ieee754/ldbl-96/s_totalordermagl.c (totalordermagl):
Rename to __totalordermagl and define as weak alias.
* sysdeps/ieee754/ldbl-96/s_ufromfpl.c (FUNC): Define to
__ufromfpl.
(ufromfpl): Define as weak alias.
* sysdeps/ieee754/ldbl-96/s_ufromfpxl.c (FUNC): Define to
__ufromfpxl.
(ufromfpxl): Define as weak alias.

7 years agobenchtests: Reallocate buffers for memset
Siddhesh Poyarekar [Thu, 14 Sep 2017 17:09:49 +0000 (22:39 +0530)]
benchtests: Reallocate buffers for memset

Keeping the same buffers along with copying the same size of data into
the same location means that the first routine is typically the
slowest since it has to bear the cost of fetching data into to cache.
Reallocating buffers stabilizes numbers by a bit.

* benchtests/bench-string.h (realloc_bufs): New function.
(test_init): Call it.
* benchtests/bench-memset-large.c (do_test): Likewise.
* benchtests/bench-memset.c (do_test): Likewise.

7 years agobenchtests: Make memset benchmarks print json
Siddhesh Poyarekar [Thu, 14 Sep 2017 17:07:33 +0000 (22:37 +0530)]
benchtests: Make memset benchmarks print json

Make the memset benchmarks (bench-memset and bench-memset-large) print
their output in JSON so that they can be evaluated using the
compare_strings.py script.

* benchtests/bench-memset-large.c: Print output in JSON
format.
* benchtests/bench-memset.c: Likewise.

7 years agoAdd new codepage charmaps/IBM858 [BZ #21084]
Mike FABIAN [Thu, 7 Sep 2017 13:28:28 +0000 (15:28 +0200)]
Add new codepage charmaps/IBM858 [BZ #21084]

This code page is identical to code page 850 except that X'D5'
has been changed from LI61 (dotless i) to SC20 (euro symbol).

The code points from /x01 to /x1f in the /localedata/charmaps/IBM858
file have the same mapping as those in localedata/charmaps/ANSI_X3.4-1968.
That means they disagree with with

ftp://ftp.software.ibm.com/software/globalization/gcoc/attachments/CP00858.txt

in that range.
For example, localedata/charmaps/IBM858 and localedata/charmaps/ANSI_X3.4-1968 have:

   â€ś<U0001>     /x01         START OF HEADING (SOH)”

whereas CP00858.txt has:

   â€ś01 SS000000        Smiling Face”

That means that CP00858.txt is not really ASCII-compatible and to make
it ASCII-compatible we deviate fro CP00858.txt in the code points from /x01
to /x1f.

[BZ #21084]
* benchtests/strcoll-inputs/filelist#en_US.UTF-8: Add IBM858 and ibm858.c.
* iconvdata/Makefile: Add IBM858.
* iconvdata/gconv-modules: Add IBM858.
* iconvdata/ibm858.c: New file.
* iconvdata/tst-tables.sh: Add IBM858
* localedata/charmaps/IBM858: New file.

7 years agoRemoved redundant data (LC_TIME and LC_MESSAGES) for niu_NZ [BZ #22023]
Akhilesh Kumar [Tue, 29 Aug 2017 09:52:49 +0000 (15:22 +0530)]
Removed redundant data (LC_TIME and LC_MESSAGES) for niu_NZ [BZ #22023]

[BZ #22023]
* locales/niu_NZ (LC_TIME): copy "niu_NU".
* locales/niu_NZ (LC_MESSAGES): copy "niu_NU".

7 years agoFix LC_TELEPHONE for az_AZ [BZ #22112]
Akhilesh Kumar [Thu, 14 Sep 2017 03:17:45 +0000 (08:47 +0530)]
Fix LC_TELEPHONE for az_AZ [BZ #22112]

[BZ #22112]
* localedata/locales/az_AZ(LC_TELEPHONE): Fix int_select
and add tel_int_fmt.

7 years agoDefine and use libm_alias_float128.
Joseph Myers [Thu, 14 Sep 2017 01:11:46 +0000 (01:11 +0000)]
Define and use libm_alias_float128.

Continuing the process of setting up common macros for libm function
aliases, with a view to using them to define _FloatN / _FloatNx
aliases in future, this patch adds a libm_alias_float128 macro and
uses it in the type-generic templates.  (_Float128 functions will end
up with _Float64x aliases on powerpc64le, but not on x86_64/x86/ia64
because _Float64x has long double format there, and the macro will
provide a single place for the conditionals for that choice, as well
as for once ldbl-128 functions always build *f128 and need
conditionals for whether to have *l aliases.)

Tested for x86_64.  Also tested with build-many-glibcs.py that
installed stripped shared libraries are unchanged by the patch.

* sysdeps/generic/libm-alias-float128.h: New file.
* sysdeps/generic/math-type-macros-float128.h: Include
<libm-alias-float128.h>.
[!declare_mgen_alias] (declare_mgen_alias): Define macro.

7 years agoDefine and use libm_alias_ldouble.
Joseph Myers [Wed, 13 Sep 2017 22:17:23 +0000 (22:17 +0000)]
Define and use libm_alias_ldouble.

Continuing the process of setting up common macros for libm function
aliases, with a view to using them to define _FloatN / _FloatNx
aliases in future, this patch adds a libm_alias_ldouble macro and uses
it in the type-generic templates.

Since math-type-macros-ldouble.h already did the appropriate thing for
each symbol (weak_alias or long_double_symbol), this is just a
straightforward rearrangement of code, to make the required logic
available in a place that can also be used outside of the type-generic
templates in future (in particular, to eliminate various wrappers for
functions in ldbl-opt and ldbl-64-128).

Tested for x86_64.  Also tested with build-many-glibcs.py that
installed stripped shared libraries are unchanged by the patch.

* sysdeps/generic/libm-alias-ldouble.h: New file.
* sysdeps/ieee754/ldbl-opt/libm-alias-ldouble.h: Likewise.
* sysdeps/ieee754/ldbl-opt/math-type-macros-ldouble.h: Remove.
* sysdeps/generic/math-type-macros-ldouble.h: Include
<libm-alias-ldouble.h>.
[!declare_mgen_alias] (declare_mgen_alias): Define to use
libm_alias_ldouble.

7 years agoMove exp compat wrappers under math/
Szabolcs Nagy [Wed, 6 Sep 2017 15:48:41 +0000 (16:48 +0100)]
Move exp compat wrappers under math/

Move exp compat wrappers to math/w_exp{,f,l}_compat.c to be
consistent with other wrappers.

* sysdeps/ieee754/dbl-64/w_exp_compat.c: Move to...
* math/w_exp_compat.c: ... here.
* sysdeps/ieee754/flt-32/w_expf_compat.c: Move to...
* math/w_expf_compat.c: ... here.
* sysdeps/ieee754/ldbl-128/w_expl_compat.c: Move to...
* math/w_expl_compat.c: ... here.
* sysdeps/ieee754/ldbl-128ibm/w_expl_compat.c: Remove.
* sysdeps/ieee754/ldbl-96/w_expl_compat.c: Remove.
* sysdeps/ieee754/ldbl-opt/w_exp_compat.c: Use the new path.
* sysdeps/ieee754/ldbl-opt/w_expl_compat.c: Likewise.

7 years agoClear up log1p, ldexp, scalbn, scalbln compat handling.
Joseph Myers [Wed, 13 Sep 2017 15:47:26 +0000 (15:47 +0000)]
Clear up log1p, ldexp, scalbn, scalbln compat handling.

This patch cleans up how compat symbols / long double versioning are
handled for log1p, ldexp, scalbn and scalbln functions.

The general principle is to do as much as possible through the
type-generic templates.  Previously, when errno-setting wrappers were
added the compat long double symbols were left pointing directly to
the underlying implementations; they are moved to point to the
errno-setting wrappers.  For the functions also present in libc,
compat symbol handling for the libc copies needs to go in ldbl-opt
wrappers, but the type-generic templates can handle it for the libm
copies.  There is no need for w_scalbln_template.c to disable the
creation of an unused internal alias (such code made sense in the
context of patches trying to avoid any changes to generated code for
ease of comparison, but can be removed in a change that specifically
does intend to change details of where symbols point).

Tested for x86_64, and with build-many-glibcs.py.

* math/w_scalbln_template.c (strong_alias): Do not undefine and
redefine.
* sysdeps/ieee754/ldbl-opt/s_ldexp.c (declare_mgen_alias): Remove
macro.
(ldexpl): Only define as compat symbol for libc, not libm.
(scalbnl): Define as compat symbol for libc here.
* sysdeps/ieee754/ldbl-opt/s_ldexpl.c (declare_mgen_alias): Only
define for [IS_IN (libc)].
(__ldexpl_2): Remove alias.
(ldexpl): Only define with long_double_symbol if [IS_IN (libc)].
(scalbnl): Likewise.  Use __wrap_scalbnl not __ldexpl_2 as base
name in long_double_symbol call.
* sysdeps/ieee754/ldbl-opt/s_log1p.c: Remove file.
* sysdeps/ieee754/ldbl-opt/s_scalbln.c: Likewise.
* sysdeps/ieee754/ldbl-opt/s_scalbn.c: Likewise.
* sysdeps/ieee754/ldbl-opt/w_log1p.c: Likewise.
* sysdeps/ieee754/ldbl-opt/w_scalbln.c (declare_mgen_alias):
Remove macro.
[IS_IN (libc) && LONG_DOUBLE_COMPAT (libc, GLIBC_2_1)] (scalblnl):
Define as compat symbol.

7 years agoposix: Fix compat glob code on s390 and alpha
Adhemerval Zanella [Tue, 12 Sep 2017 21:52:05 +0000 (18:52 -0300)]
posix: Fix compat glob code on s390 and alpha

This patch fixes the compat glob implementation consolidation from
commit 116f1c64d with the following changes:

  - Add a compat implementation on s390 to avoid the architecture
    to build the symbols on default linux oldglob.c by setting
    GLOB_NO_OLD_VERSION.

  - Remove the duplicate rule to build oldglob on alpha.

Checked on s390-linux-gnu and alpha-linux-gnu using build-many-glibc.py.

* sysdeps/unix/sysv/linux/s390/s390-32/oldglob.c: New file.
* sysdeps/unix/sysv/linux/alpha/Makefile
[$(subdir) = csu] (sysdep_routines): Remove rule.

7 years agoDefine and use libm_alias_double.
Joseph Myers [Wed, 13 Sep 2017 01:13:30 +0000 (01:13 +0000)]
Define and use libm_alias_double.

Continuing the process of setting up common macros for libm function
aliases, with a view to using them to define _FloatN / _FloatNx
aliases in future, this patch adds a libm_alias_double macro and uses
it in the type-generic templates.

This macro handles defining aliases for double, and for long double in
the NO_LONG_DOUBLE case.  It also handles defining compat symbols for
long double = double for architectures that changed their long double
format.  By so doing, it eliminates the need for the
M_LIBM_NEED_COMPAT and declare_mgen_libm_compat macros; the single
declare_mgen_alias call in each template now suffices to define all
required compat symbols.  When used for more double functions (not
based on type-generic templates), I expect it will eliminate the need
for most ldbl-opt wrappers for such functions.

A few special cases are needed.  __clog10l is a public symbol (for
historical reasons) so needs to be given appropriate compat versions
for architectures that changed their long double format, but is not
defined as an alias using the normal macros since __clog10* are *not*
public symbols for _FloatN / _FloatNx types.  For scalbn, scalbln and
log1p, the changes adding errno setting support for those functions
left compat symbols pointing directly to the non-errno-setting
implementations.  There is no requirement for the compat symbols not
to set errno; that just made for the simplest patches at that time.
Now, with these common macros, it's natural to redirect the compat
symbols to the errno-setting wrappers, which I intend to do in a
separate patch.

Tested for x86_64, and with build-many-glibcs.py.  For ldbl-opt
platforms the stripped libm.so binaries are changed (disassembly
unchanged) because the details of how the clog10l compat symbol is
created mean it ceases to be weak as it was before; for other
platforms, stripped libm.so binaries are unchanged.

2017-09-13  Joseph Myers  <joseph@codesourcery.com>

* sysdeps/generic/libm-alias-double.h: New file.
* sysdeps/ieee754/ldbl-opt/libm-alias-double.h: Likewise.
* sysdeps/generic/math-type-macros-double.h: Include
<libm-alias-double.h>.
[declare_mgen_alias] (declare_mgen_alias): Define to use
libm_alias_double.
* sysdeps/generic/math-type-macros.h [!M_LIBM_NEED_COMPAT]
(M_LIBM_NEED_COMPAT): Remove macro.
[!M_LIBM_NEED_COMPAT] (declare_mgen_libm_compat): Likewise.
* sysdeps/ieee754/ldbl-opt/math-type-macros-double.h: Remove.
* math/cabs_template.c [M_LIBM_NEED_COMPAT]: Remove conditional
code.
* math/carg_template.c [M_LIBM_NEED_COMPAT]: Likewise.
* math/cimag_template.c [M_LIBM_NEED_COMPAT]: Likewise.
* math/conj_template.c [M_LIBM_NEED_COMPAT]: Likewise.
* math/creal_template.c [M_LIBM_NEED_COMPAT]: Likewise.
* math/s_cacos_template.c [M_LIBM_NEED_COMPAT]: Likewise.
* math/s_cacosh_template.c [M_LIBM_NEED_COMPAT]: Likewise.
* math/s_casin_template.c [M_LIBM_NEED_COMPAT]: Likewise.
* math/s_casinh_template.c [M_LIBM_NEED_COMPAT]: Likewise.
* math/s_catan_template.c [M_LIBM_NEED_COMPAT]: Likewise.
* math/s_catanh_template.c [M_LIBM_NEED_COMPAT]: Likewise.
* math/s_ccos_template.c [M_LIBM_NEED_COMPAT]: Likewise.
* math/s_ccosh_template.c [M_LIBM_NEED_COMPAT]: Likewise.
* math/s_cexp_template.c [M_LIBM_NEED_COMPAT]: Likewise.
* math/s_clog10_template.c [M_LIBM_NEED_COMPAT]: Likewise.
* math/s_clog_template.c [M_LIBM_NEED_COMPAT]: Likewise.
* math/s_cpow_template.c [M_LIBM_NEED_COMPAT]: Likewise.
* math/s_cproj_template.c [M_LIBM_NEED_COMPAT]: Likewise.
* math/s_csin_template.c [M_LIBM_NEED_COMPAT]: Likewise.
* math/s_csinh_template.c [M_LIBM_NEED_COMPAT]: Likewise.
* math/s_csqrt_template.c [M_LIBM_NEED_COMPAT]: Likewise.
* math/s_ctan_template.c [M_LIBM_NEED_COMPAT]: Likewise.
* math/s_ctanh_template.c [M_LIBM_NEED_COMPAT]: Likewise.
* math/s_fdim_template.c [M_LIBM_NEED_COMPAT]: Likewise.
* math/s_fmax_template.c [M_LIBM_NEED_COMPAT]: Likewise.
* math/s_fmin_template.c [M_LIBM_NEED_COMPAT]: Likewise.
* math/s_nan_template.c [M_LIBM_NEED_COMPAT]: Likewise.
* math/w_ilogb_template.c [M_LIBM_NEED_COMPAT]: Likewise.
* sysdeps/ieee754/ldbl-opt/s_clog10.c: New file.
* sysdeps/ieee754/ldbl-opt/s_ldexp.c (M_LIBM_NEED_COMPAT): Remove
macro.
(declare_mgen_alias): New macro.
* sysdeps/ieee754/ldbl-opt/w_log1p.c: New file.
* sysdeps/ieee754/ldbl-opt/w_scalbln.c: Likewise.
* sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fdim-vis3.c
(M_LIBM_NEED_COMPAT): Remove macro.
* sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fdim.c
[HAVE_AS_VIS3_SUPPORT]: Include <math_ldbl_opt.h> and
<first-versions.h>.
[HAVE_AS_VIS3_SUPPORT && LONG_DOUBLE_COMPAT (libm,
FIRST_VERSION_libm_fdiml)]: Define fdiml as compat symbol.

7 years agoRemove declare_mgen_alias_2.
Joseph Myers [Tue, 12 Sep 2017 20:00:00 +0000 (20:00 +0000)]
Remove declare_mgen_alias_2.

The libm template machinery includes a macro declare_mgen_alias_2, to
define two function aliases rather than one.  This macro is only used
in one place, to define ldexp and scalbn, and only has one nondefault
definition, for double in the case where long double has the same
format.  That definition is because declare_mgen_alias for double, in
that case, defines <internal-func>l as an alias of <internal-func>, so
cannot be called twice for aliases of the same function.

Now, I suspect the <internal-func>l aliases are generally not needed
(with maybe a few exceptions such as __clog10l, which is an exported
function).  But even in the presence of them, there is no need for a
special declare_mgen_alias_2 macro for this case.  This patch
eliminates the need for such a macro by defining __wrap_scalbn<suffix>
as an alias of __ldexp<suffix>, and then using that when defining the
scalbn public aliases.  This is similar to how such internal aliases
are created for functions with multiple symbol versions, for example.

Tested for x86_64, and with build-many-glibcs.py.  (There *are* some
cases where installed stripped shared libraries change - not in the
generated code but because such changes to static symbols on input to
ld, even nonexported symbols that don't affect the code or dynamic
symbols, can affect the particular representation in the output of
string tables, hash tables etc.)

* sysdeps/generic/math-type-macros.h [!declare_mgen_alias_2]
(declare_mgen_alias_2): Remove.
* sysdeps/generic/math-type-macros-double.h
[NO_LONG_DOUBLE && !declare_mgen_alias_2] (declare_mgen_alias_2):
Likewise.
* math/s_ldexp_template.c (M_SUF (__wrap_scalbn)): Define strong
alias.
(ldexp): Define with declare_mgen_alias.
(scalbn): Likewise.

7 years agoRemove compat from DEFAULT_CONFIG lookup strings
Steve Ellcey [Tue, 12 Sep 2017 17:21:48 +0000 (10:21 -0700)]
Remove compat from DEFAULT_CONFIG lookup strings

* grp/initgroups.c: Include config.h.
(DEFAULT_CONFIG): New macro.
(internal_getgrouplist): Use DEFAULT_CONFIG.
* nscd/initgrcache.c (addinitgroupsX): Likewise.
* nss/nsswitch.c (__nss_disable_nscd): Likewise.
(DEFAULT_DEFCONFIG): New macro.
(__nss_database_lookup): Use DEFAULT_DEFCONFIG.
* nss/grp-lookup.c: Include config.h
(DEFAULT_CONFIG): Set definition based on LINK_OBSOLETE_NSL.
* nss/pwd-lookup.c (DEFAULT_CONFIG): Likewise.
* nss/spwd-lookup.c (DEFAULT_CONFIG): Likewise.
* manual/nss.texi: Update default values section.

7 years agox86: Add MathVec_Prefer_No_AVX512 to cpu-features [BZ #21967]
H.J. Lu [Tue, 12 Sep 2017 14:46:11 +0000 (07:46 -0700)]
x86: Add MathVec_Prefer_No_AVX512 to cpu-features [BZ #21967]

AVX512 functions in mathvec are used on machines with AVX512.  An AVX2
wrapper is also provided and it can be used when the AVX512 version
isn't profitable.  MathVec_Prefer_No_AVX512 is addded to cpu-features.
If glibc.tune.hwcaps=MathVec_Prefer_No_AVX512 is set in GLIBC_TUNABLES
environment variable, the AVX2 wrapper will be used.

Tested on x86-64 machines with and without AVX512.  Also verified
glibc.tune.hwcaps=MathVec_Prefer_No_AVX512 on AVX512 machine.

[BZ #21967]
* sysdeps/x86/cpu-features.h (bit_arch_MathVec_Prefer_No_AVX512):
New.
(index_arch_MathVec_Prefer_No_AVX512): Likewise.
* sysdeps/x86/cpu-tunables.c (TUNABLE_CALLBACK (set_hwcaps)):
Handle MathVec_Prefer_No_AVX512.
* sysdeps/x86_64/fpu/multiarch/ifunc-mathvec-avx512.h
(IFUNC_SELECTOR): Return AVX2 version if MathVec_Prefer_No_AVX512
is set.

7 years agohurd: Fix build without NO_HIDDEN
Samuel Thibault [Mon, 11 Sep 2017 23:34:19 +0000 (01:34 +0200)]
hurd: Fix build without NO_HIDDEN

* posix/sched_primax.c (__sched_get_priority_max): Add
libc_hidden_def.
* posix/sched_primin.c (__sched_get_priority_min): Likewise.
* sysdeps/mach/hurd/mmap.c (__mmap): Likewise.
* sysdeps/mach/hurd/mmap64.c (__mmap64): Likewise.
* sysdeps/mach/hurd/mprotect.c (__mprotect): Likewise.
* sysdeps/mach/hurd/munmap.c (__munmap): Likewise.
* sysdeps/mach/hurd/dl-sysdep.c (__GI___getpid,
__GI___strtoul_internal, __GI_____strtoul_internal, __GI___chk_fail,
__GI___fortify_fail, __GI___assert_fail, __GI___assert_perror_fail):
Add aliases.

7 years agoDefine and use a libm_alias_float macro.
Joseph Myers [Mon, 11 Sep 2017 23:21:25 +0000 (23:21 +0000)]
Define and use a libm_alias_float macro.

Fully supporting TS 18661-3 _FloatN / _FloatNx types in the cases
where they have the same format as other supported types (in line with
the principles described at
<https://sourceware.org/ml/libc-alpha/2017-01/msg00333.html>) means
adding a lot of function aliases to libm (and a few to libc).  float
functions will have *f32 aliases, double functions will have *f32x and
*f64 aliases, long double functions may have *f64x, *f128 or both
aliases depending on the configuration, float128 functions have have
*f64x aliases depending on the configuration.

At present, most individual libm functions have their own weak_alias
calls to define the public names for those functions.  For TS 18661-3
support, it is desirable that functions not all need to duplicate the
logic for which alias names to define.

Thus, common macros for defining the public aliases to a libm function
make sense.  In the double and long double cases, such macros will
also help simplify existing code (with LONG_DOUBLE_COMPAT
etc. conditionals), by eliminating existing conditionals and ldbl-opt
/ ldbl-64-128 wrappers (using the generated ldbl-compat-choose.h to
allow a single macro definition to expand appropriately for each
symbol depending on LONG_DOUBLE_COMPAT for that symbol).

This patch starts the process of adding such macros with a
straightforward case: a libm_alias_float macro, initially only used in
the case of type-generic templates, to define aliases for float
functions (currently just the *f public names, in future also *f32).
Future patches are intended to add such macros for other types and to
extend the cases in which they are used, with a view to as many places
as possible using them before support for _FloatN / _FloatNx aliases
is enabled.  (I think it's inevitable that some places doing
architecture-specific things with aliases and symbol versioning may
end up needing to replicate logic for the new aliases, but hopefully
the number of such places can be kept to a minimum.)

The libm_alias_float macro takes unsuffixed names for both the
internal and public function names.  The need for unsuffixed public
names is obvious, since such macros will end up defining multiple
public names with different suffixes.  Unsuffixed internal names are
because I expect the ldbl-128 functions to end up in a form that
always defines *f128 names and sometimes also defines *l names - with
the main internal names being e.g. __ieee754_<func>f128 (so many
macros in float128_private.h can go away).  But __ieee754_<func>l
aliases will still be needed for e.g. use from math/ complex
functions, meaning the alias macro needs to see just __ieee754_<func>
as internal name so it can create an alias based on that name.  Since
libm_alias_float128 will thus need the unsuffixed internal name, it
seems to make sense for all such macros to receive the unsuffixed
name.

Tested for x86_64.  Also tested with build-many-glibcs.py that
installed stripped shared libraries are unchanged by the patch.

* sysdeps/generic/libm-alias-float.h: New file.
* sysdeps/generic/math-type-macros-float.h: Include
<libm-alias-float.h>.
[!declare_mgen_alias] (declare_mgen_alias): Define macro.

7 years agox86: Add x86_64 to x86-64 HWCAP [BZ #22093]
H.J. Lu [Mon, 11 Sep 2017 15:18:11 +0000 (08:18 -0700)]
x86: Add x86_64 to x86-64 HWCAP [BZ #22093]

Before glibc 2.26, ld.so set dl_platform to "x86_64" and searched the
"x86_64" subdirectory when loading a shared library.  ld.so in glibc
2.26 was changed to set dl_platform to "haswell" or "xeon_phi", based
on supported ISAs.  This led to shared library loading failure for
shared libraries placed under the "x86_64" subdirectory.

This patch adds "x86_64" to x86-64 dl_hwcap so that ld.so will always
search the "x86_64" subdirectory when loading a shared library.

NB: We can't set x86-64 dl_platform to "x86-64" since ld.so will skip
the "haswell" and "xeon_phi" subdirectories on "haswell" and "xeon_phi"
machines.

Tested on i686 and x86-64.

[BZ #22093]
* sysdeps/x86/cpu-features.c (init_cpu_features): Initialize
GLRO(dl_hwcap) to HWCAP_X86_64 for x86-64.
* sysdeps/x86/dl-hwcap.h (HWCAP_COUNT): Updated.
(HWCAP_IMPORTANT): Likewise.
(HWCAP_X86_64): New enum.
(HWCAP_X86_AVX512_1): Updated.
* sysdeps/x86/dl-procinfo.c (_dl_x86_hwcap_flags): Add "x86_64".
* sysdeps/x86_64/Makefile (tests): Add tst-x86_64-1.
(modules-names): Add x86_64/tst-x86_64mod-1.
(LDFLAGS-tst-x86_64mod-1.so): New.
($(objpfx)tst-x86_64-1): Likewise.
($(objpfx)x86_64/tst-x86_64mod-1.os): Likewise.
(tst-x86_64-1-clean): Likewise.
* sysdeps/x86_64/tst-x86_64-1.c: New file.
* sysdeps/x86_64/tst-x86_64mod-1.c: Likewise.

7 years agoUpdate translations
Siddhesh Poyarekar [Mon, 11 Sep 2017 00:20:49 +0000 (05:50 +0530)]
Update translations

7 years agosunrpc/tst-udp-nonblocking: Fix timeout value
Samuel Thibault [Sun, 10 Sep 2017 19:09:28 +0000 (21:09 +0200)]
sunrpc/tst-udp-nonblocking: Fix timeout value

This a follow-up to 00c3da4 ('sunrpc/tst-udp-timeout: Fix timeout value')

* sunrpc/tst-udp-nonblocking.c (do_test): Increase timeout to 0.75
seconds.

7 years agoFix $(error) use in Makefile
Samuel Thibault [Sun, 10 Sep 2017 15:39:39 +0000 (17:39 +0200)]
Fix $(error) use in Makefile

* elf/rtld-Rules: Fix $(error) use.

7 years agosunrpc/tst-udp-timeout: Fix timeout value
Samuel Thibault [Sun, 10 Sep 2017 12:37:28 +0000 (14:37 +0200)]
sunrpc/tst-udp-timeout: Fix timeout value

2.3 is not representable with double, and thus leads to rounding issues if
the clock is not very precise and the measured delay is then exactly 2.3.

* sunrpc/tst-udp-timeout.c (test_udp_server): Increase timeout to 2.5
seconds.

7 years agoFinish change from “Bengali” to “Bangla”
Mike FABIAN [Sat, 9 Sep 2017 10:01:06 +0000 (12:01 +0200)]
Finish change from â€śBengali” to â€śBangla”

“Bengali” still remained in some comments in the bn_BD locale file,
in iso-639.def and in a test input file. Change it there as well.
“Bangla” is now used as the English name for this language in CLDR.

[BZ #14925]
* libio/tst-widetext.input: Change â€śBengali” to â€śBangla”.
* locale/iso-639.def: Change â€śBengali” to â€śBangla”.
* localedata/locales/bn_BD: â€śBengali” was still used in some
comments. Change it to â€śBangla”.

7 years agoUpdate x86_64 ulps for AMD Ryzen.
Markus Trippelsdorf [Fri, 8 Sep 2017 19:57:12 +0000 (19:57 +0000)]
Update x86_64 ulps for AMD Ryzen.

* sysdeps/x86_64/fpu/libm-test-ulps: Update for AMD Ryzen.

7 years agoAdd thunderx2t99 and thunderx2t99p1 CPU names to tunables list
Steve Ellcey [Fri, 8 Sep 2017 18:02:09 +0000 (11:02 -0700)]
Add thunderx2t99 and thunderx2t99p1 CPU names to tunables list

* manual/tunables.texi (glibc.tune.cpu): Add thunderx2t99 and
thunderx2t99p1 to list of cpu names.
* sysdeps/unix/sysv/linux/aarch64/cpu-features.c (cpu_list):
Add thunderx2t99 and thunderx2t99p1 entries to cpu_list.

7 years agoFix glibc.tune.cpu tunable handling
Steve Ellcey [Fri, 8 Sep 2017 17:59:53 +0000 (10:59 -0700)]
Fix glibc.tune.cpu tunable handling

* sysdeps/unix/sysv/linux/aarch64/cpu-features.c (get_midr_from_mcpu):
Use strcmp instead of tunable_is_name.

7 years agoAdd Linux 4.13 constants to bits/fcntl-linux.h.
Joseph Myers [Fri, 8 Sep 2017 16:20:23 +0000 (16:20 +0000)]
Add Linux 4.13 constants to bits/fcntl-linux.h.

This patch adds new interfaces (F_GET_RW_HINT etc., and associated
RW[FH]_WRITE_LIFE_*) from Linux 4.13 to bits/fcntl-linux.h
(conditional on __USE_GNU).

Tested for x86_64.

* sysdeps/unix/sysv/linux/bits/fcntl-linux.h [__USE_GNU]
(F_GET_RW_HINT): New macro.
[__USE_GNU] (F_SET_RW_HINT): Likewise.
[__USE_GNU] (F_GET_FILE_RW_HINT): Likewise.
[__USE_GNU] (F_SET_FILE_RW_HINT): Likewise.
[__USE_GNU] (RWF_WRITE_LIFE_NOT_SET): Likewise.
[__USE_GNU] (RWH_WRITE_LIFE_NONE): Likewise.
[__USE_GNU] (RWH_WRITE_LIFE_SHORT): Likewise.
[__USE_GNU] (RWH_WRITE_LIFE_MEDIUM): Likewise.
[__USE_GNU] (RWH_WRITE_LIFE_LONG): Likewise.
[__USE_GNU] (RWH_WRITE_LIFE_EXTREME): Likewise.

7 years agoAdd fcntl sealing interfaces from Linux 3.17 to bits/fcntl-linux.h.
Joseph Myers [Fri, 8 Sep 2017 16:19:21 +0000 (16:19 +0000)]
Add fcntl sealing interfaces from Linux 3.17 to bits/fcntl-linux.h.

While reviewing Linux 4.13 for glibc header changes needed, I noticed
that bits/fcntl-linux.h was missing F_ADD_SEALS etc. from Linux 3.17.

I didn't find any discussion indicating this omission is deliberate.
Now, these interfaces can only be used with file descriptors created
with memfd_create, and we don't have a memfd_create wrapper in glibc
(a patch was submitted in October 2014, albeit without documentation /
tests, and discussions continued over the next few months, but without
consensus on whether to add the interface - and we still lack any
general consensus on syscall wrappers), but I don't think that's a
reason to exclude the constants from bits/fcntl-linux.h (especially as
the header does not look compatible with simultaneously including
linux/fcntl.h).

(Some of those 2014/2015 discussions raised concerns about difficulty
using the memfd_create / sealing interface, but those seem to me more
like a question of whether it should be part of the OS-independent GNU
API - in my view, even fairly specialized syscalls ought to have
wrappers added to glibc if not obsolescent, but there may be cases
where we only want to include them in the Linux-specific API and
anything in the OS-independent GNU API should be different - rather
than being relevant to whether constants for use with fcntl should
appear in headers.)

* sysdeps/unix/sysv/linux/bits/fcntl-linux.h [__USE_GNU]
(F_ADD_SEALS): New macro.
[__USE_GNU] (F_GET_SEALS): Likewise.
[__USE_GNU] (F_SEAL_SEAL): Likewise.
[__USE_GNU] (F_SEAL_SHRINK): Likewise.
[__USE_GNU] (F_SEAL_GROW): Likewise.
[__USE_GNU] (F_SEAL_WRITE): Likewise.

7 years agoposix: Use enum for __glob_pattern_type result
Adhemerval Zanella [Tue, 5 Sep 2017 14:02:24 +0000 (11:02 -0300)]
posix: Use enum for __glob_pattern_type result

This patch replaces the internal integer constant from
__glob_pattern_type return with a proper enum.

Checked on x86_64-linux-gnu and on a build using build-many-glibcs.py
for all major architectures.

* posix/glob_internal.h (glob_pattern_type_t): New enumeration.
(__glob_pattern_type): Use __glob_pat_types.
* posix/glob_pattern_p.c (__glob_pattern_p): Likewise.
* posix/glob.c (glob): Likewise.
(glob_in_dir): Likewise.

7 years agoposix: Consolidate Linux glob implementation
Adhemerval Zanella [Mon, 4 Sep 2017 21:07:03 +0000 (18:07 -0300)]
posix: Consolidate Linux glob implementation

This patch consolidates the glob implementation.  The main changes are:

  * On Linux all implementation now uses the default one at
    sysdeps/unix/sysv/linux/glob{free}{64}.c with the exception
    of alpha (which requires specific versioning) and s390-32 (which
    different than other 32 bits ports it does not add a compat one
    symbol for 2.1 version).

  * The default implementation uses XSTAT_IS_XSTAT64 to define whether
    both glob{free} and glob{free}64 should be different implementations.
    For archictures that define XSTAT_IS_XSTAT64, glob{free} is an alias
    to glob{free}64.

  * Move i386 olddirent.h header to Linux default directory, since it is
    the only header with this name and it is shared among different
    architectures (and used on compat glob symbol as well).

Checked on x86_64-linux-gnu and on a build using build-many-glibcs.py
for all major architectures.

* sysdeps/unix/sysv/linux/arm/glob64.c: Remove file.
* sysdeps/unix/sysv/linux/i386/glob64.c: Likewise.
* sysdeps/unix/sysv/linux/m68k/glob64.c: Likewise.
* sysdeps/unix/sysv/linux/mips/mips64/n64/glob64.c: Likewise.
* sysdeps/unix/sysv/linux/mips/mips64/n64/globfree64.c: Likewise.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/glob64.c: Likewise.
* sysdeps/unix/sysv/linux/sparc/sparc32/glob64.c: Likewise.
* sysdeps/unix/sysv/linux/wordsize-64/glob64.c: Likewise.
* sysdeps/unix/sysv/linux/wordsize-64/globfree64.c: Likewise.
* sysdeps/unix/sysv/linux/x86_64/x32/glob.c: Likewise.
* sysdeps/unix/sysv/linux/x86_64/x32/globfree.c: Likewise.
* sysdeps/wordsize-64/glob.c: Likewise.
* sysdeps/wordsize-64/glob64.c: Likewise.
* sysdeps/wordsize-64/globfree64.c: Likewise.
* sysdeps/unix/sysv/linux/glob.c: New file.
* sysdeps/unix/sysv/linux/glob64.c: Likewise.
* sysdeps/unix/sysv/linux/globfree.c: Likewise.
* sysdeps/unix/sysv/linux/globfree64.c: Likewise.
* sysdeps/unix/sysv/linux/s390/s390-32/glob64.c: Likewise.
* sysdeps/unix/sysv/linux/oldglob.c [SHLIB_COMPAT]: Also
adds !GLOB_NO_OLD_VERSION as an extra condition.
* sysdeps/unix/sysv/linux/i386/alphasort64.c: Include olddirent.h
using relative path instead of absolute one.
* sysdeps/unix/sysv/linux/i386/getdents64.c: Likewise.
* sysdeps/unix/sysv/linux/i386/readdir64.c: Likewise.
* sysdeps/unix/sysv/linux/i386/readdir64_r.c: Likewise.
* sysdeps/unix/sysv/linux/i386/versionsort64.c: Likewise.
* sysdeps/unix/sysv/linux/i386/olddirent.h: Move to ...
* sysdeps/unix/sysv/linux//olddirent.h: ... here.

7 years agoposix: fix glob bugs with long login names
Adhemerval Zanella [Mon, 4 Sep 2017 20:07:16 +0000 (17:07 -0300)]
posix: fix glob bugs with long login names

Current glob implementation allows unlimited user name for home
directory construction on GLOB_TILDE case.  To accomplish it glob
either construct a name on stack if size are small enough (based
on current alloca_used) or in heap otherwise.

This patch simplifies storage allocation by using the same scratch
buffer for both get_rlogin_r and getpwnam_r.

This also syncs with gnulib commit 064df0b (glob: fix bugs with long
login names).

Checked on x86_64-linux-gnu and on a build using build-many-glibcs.py
for all major architectures.

* posix/glob.c (GET_LOGIN_NAME_MAX): Remove.
(glob): Use the same scratch buffer for both getlogin_r and
getpwnam_r.  Don’t require preallocation of the login name.  This
simplifies storage allocation, and corrects the handling of
long login names.

7 years agoposix: Fix getpwnam_r usage (BZ #1062)
Adhemerval Zanella [Mon, 4 Sep 2017 20:00:03 +0000 (17:00 -0300)]
posix: Fix getpwnam_r usage (BZ #1062)

This patch fixes longstanding misuse of errno after getpwnam_r,
which returns an error number rather than setting errno.  This is
sync with gnulib commit 5db9301.

Checked on x86_64-linux-gnu and on a build using build-many-glibcs.py
for all major architectures.

[BZ #1062]
* posix/glob.c (glob): Port recent patches to platforms
lacking getpwnam_r.
(glob): Fix longstanding misuse of errno after getpwnam_r, which
returns an error number rather than setting errno.

7 years agoSync scratch_buffer with gnulib
Adhemerval Zanella [Mon, 4 Sep 2017 19:44:12 +0000 (16:44 -0300)]
Sync scratch_buffer with gnulib

This patch syncs the scratch_buffer grom gnulib commit 3866ef6 with
GLIBC code.

Checked on x86_64-linux-gnu and on a build using build-many-glibcs.py
for all major architectures.

* include/scratch_buffer.h (scratch_buffer): Use a C99 align method
instead of GCC extension.
* malloc/scratch_buffer_grow.c [!_LIBC]: Include libc-config.h.
* malloc/scratch_buffer_grow_preserve.c [!_LIBC]: Likewise.
* malloc/scratch_buffer_set_array_size.c [!_LIBC]: Likewise.

7 years agoposix: Allow glob to match dangling symlinks [BZ #866]
Adhemerval Zanella [Mon, 4 Sep 2017 19:22:28 +0000 (16:22 -0300)]
posix: Allow glob to match dangling symlinks [BZ #866]

This patch makes glob match dangling symlinks.  Compared to other glob
implementation (*BSD, bash, musl, and other shells as well), GLIBC seems
the be the only one that does not match dangling symlinks.  As for
comment #5 in BZ #866, POSIX does not have any strict specification for
dangling symlinks match and it is reasonable that trying to glob everything
in a path should return all types of files (such as for a 'rm *').  Also,
comment #7 shows even more example where GLIBC current behavior is
unexepected.

I avoided adding another GNU specific flag to set this behavior and
instead make it the default.  Although this change the semanthic from
previous implementation, I think adding another compat symbol to be
really unecessary as from aforementioned reasons (current behavior not
defined in any standard, general idea of different implementation is
to list dangling symbols).

This also sync glob with gnulib commit fd1daf4 (glob: match dangling
symlinks).

Checked on x86_64-linux-gnu and on a build using build-many-glibcs.py
for all major architectures.

[BZ #866]
[BZ #1062]
* posix/Makefile (tests): Remove bug-glob1 and tst-glob_symlinks.
* posix/bug-glob1.c: Remove file.
* posix/tst-glob_symlinks.c: New file.
* posix/glob.c (__lstat64): New macro.
(is_dir): New function.
(glob, glob_in_dir): Match symlinks even if they are dangling.
(link_stat, link_exists_p): Remove.  All uses removed.

7 years agoposix: accept inode 0 is a valid inode number (BZ #19971)
Adhemerval Zanella [Mon, 4 Sep 2017 17:55:25 +0000 (14:55 -0300)]
posix: accept inode 0 is a valid inode number (BZ #19971)

According to this kernel commit 2adc376c55194, d_ino 0 is a regular inode
number on Linux (which also matches POSIX, as it does not treat the value
as special).  This patch makes glob accept is a valid inode number.

This is also a sync with gnulib commit c8e57c1.

Checked on x86_64-linux-gnu and on a build using build-many-glibcs.py
for all major architectures.

[BZ #1062]
[BZ #19971]
* posix/glob.c (struct readdir_result): Remove skip_entry member.
(readdir_result_skip_entry, D_INO_TO_RESULT): Remove.
All uses removed.

7 years agoposix: Sync glob with gnulib [BZ #1062]
Adhemerval Zanella [Mon, 4 Sep 2017 17:53:38 +0000 (14:53 -0300)]
posix: Sync glob with gnulib [BZ #1062]

This patch syncs posix/glob.c implementation with gnulib version
b5ec983 (glob: simplify symlink detection).  The only difference
to gnulib code is

  * DT_UNKNOWN, DT_DIR, and DT_LNK definition in the case there
    were not already defined.  Gnulib code which uses
    HAVE_STRUCT_DIRENT_D_TYPE will redefine them wrongly because
    GLIBC does not define HAVE_STRUCT_DIRENT_D_TYPE.  Instead
    the patch check for each definition instead.

Also, the patch requires additional globfree and globfree64 files
for compatibility version on some architectures.  Also the code
simplification leads to not macro simplification (not need for
NO_GLOB_PATTERN_P anymore).

Checked on x86_64-linux-gnu and on a build using build-many-glibcs.py
for all major architectures.

[BZ #1062]
* posix/Makefile (routines): Add globfree, globfree64, and
glob_pattern_p.
* posix/flexmember.h: New file.
* posix/glob_internal.h: Likewise.
* posix/glob_pattern_p.c: Likewise.
* posix/globfree.c: Likewise.
* posix/globfree64.c: Likewise.
* sysdeps/gnu/globfree64.c: Likewise.
* sysdeps/unix/sysv/linux/alpha/globfree.c: Likewise.
* sysdeps/unix/sysv/linux/mips/mips64/n64/globfree64.c: Likewise.
* sysdeps/unix/sysv/linux/oldglob.c: Likewise.
* sysdeps/unix/sysv/linux/wordsize-64/globfree64.c: Likewise.
* sysdeps/unix/sysv/linux/x86_64/x32/globfree.c: Likewise.
* sysdeps/wordsize-64/globfree.c: Likewise.
* sysdeps/wordsize-64/globfree64.c: Likewise.
* posix/glob.c (HAVE_CONFIG_H): Use !_LIBC instead.
[NDEBUG): Remove comments.
(GLOB_ONLY_P, _AMIGA, VMS): Remove define.
(dirent_type): New type.  Use uint_fast8_t not
uint8_t, as C99 does not require uint8_t.
(DT_UNKNOWN, DT_DIR, DT_LNK): New macros.
(struct readdir_result): Use dirent_type.  Do not define skip_entry
unless it is needed; this saves a byte on platforms lacking d_ino.
(readdir_result_type, readdir_result_skip_entry):
New functions, replacing ...
(readdir_result_might_be_symlink, readdir_result_might_be_dir):
 these functions, which were removed.  This makes the callers
easier to read.  All callers changed.
(D_INO_TO_RESULT): Now empty if there is no d_ino.
(size_add_wrapv, glob_use_alloca): New static functions.
(glob, glob_in_dir): Check for size_t overflow in several places,
and fix some size_t checks that were not quite right.
Remove old code using SHELL since Bash no longer
uses this.
(glob, prefix_array): Separate MS code better.
(glob_in_dir): Remove old Amiga and VMS code.
(globfree, __glob_pattern_type, __glob_pattern_p): Move to
separate files.
(glob_in_dir): Do not rely on undefined behavior in accessing
struct members beyond their bounds.  Use a flexible array member
instead
(link_stat): Rename from link_exists2_p and return -1/0 instead of
0/1.  Caller changed.
(glob): Fix memory leaks.
* posix/glob64 (globfree64): Move to separate file.
* sysdeps/gnu/glob64.c (NO_GLOB_PATTERN_P): Remove define.
(globfree64): Remove hidden alias.
* sysdeps/unix/sysv/linux/Makefile (sysdeps_routines): Add
oldglob.
* sysdeps/unix/sysv/linux/alpha/glob.c (__new_globfree): Move to
separate file.
* sysdeps/unix/sysv/linux/i386/glob64.c (NO_GLOB_PATTERN_P): Remove
define.
Move compat code to separate file.
* sysdeps/wordsize-64/glob.c (globfree): Move definitions to
separate file.

7 years agoUse "static const char domain[] ="
H.J. Lu [Thu, 7 Sep 2017 20:56:58 +0000 (13:56 -0700)]
Use "static const char domain[] ="

* resolv/tst-resolv-qtypes.c (domain): Changed to
"const char domain[] =".

7 years agoUse MPFR 3.1.6 in build-many-glibcs.py.
Joseph Myers [Thu, 7 Sep 2017 14:50:32 +0000 (14:50 +0000)]
Use MPFR 3.1.6 in build-many-glibcs.py.

* scripts/build-many-glibcs.py (Context.checkout): Default MPFR
version to 3.1.6.

7 years agoUpdate netinet/tcp.h from Linux 4.13.
Joseph Myers [Thu, 7 Sep 2017 14:29:38 +0000 (14:29 +0000)]
Update netinet/tcp.h from Linux 4.13.

This patch updates sysdeps/gnu/netinet/tcp.h to include new
definitions from include/uapi/linux/tcp.h in Linux 4.13.

Tested for x86_64.

* sysdeps/gnu/netinet/tcp.h (TCP_ULP): New macro.
(TCP_MD5SIG_EXT): Likewise.
(TCP_MD5SIG_FLAG_PREFIX): Likewise.
(struct tcp_md5sig): Replace __tcpm_pad1 by tcpm_flags and
tcpm_prefixlen.  Rename __tcpm_pad2 to __tcpm_pad.

7 years agoAdd SOL_TLS definition from Linux 4.13.
Joseph Myers [Thu, 7 Sep 2017 14:28:36 +0000 (14:28 +0000)]
Add SOL_TLS definition from Linux 4.13.

This patch adds the new SOL_TLS constant from Linux 4.13 to the Linux
bits/socket.h.

Tested for x86_64.

* sysdeps/unix/sysv/linux/bits/socket.h (SOL_TLS): New macro.

7 years agoUse ASCII in LC_TIME of om_ET for better readability
Mike FABIAN [Thu, 7 Sep 2017 07:43:35 +0000 (09:43 +0200)]
Use ASCII in LC_TIME of om_ET for better readability

* localedata/locales/om_ET (LC_TIME): use ASCII for better readability.

7 years agoRemove redundant LC_TIME data in om_KE which is identical to the data in om_ET
Akhilesh Kumar [Thu, 7 Sep 2017 03:03:25 +0000 (08:33 +0530)]
Remove redundant LC_TIME data in om_KE which is identical to the data in om_ET

[BZ #22100]
* locales/om_KE (LC_TIME): copy "om_ET".

7 years agohurd: fix gethostname(NULL, 0)
Samuel Thibault [Wed, 6 Sep 2017 22:51:17 +0000 (00:51 +0200)]
hurd: fix gethostname(NULL, 0)

* hurd/get-host.c (_hurd_get_host_config): Also check that more == 0
before assuming that the file is empty.  Avoid testing buffer content
when nread == 0.

7 years agoAdd ChangeLog bugzilla mark for previous commit
Adhemerval Zanella [Wed, 6 Sep 2017 17:52:56 +0000 (14:52 -0300)]
Add ChangeLog bugzilla mark for previous commit

7 years agoRemove remaining _HAVE_STRING_ARCH_* definitions (BZ #18858)
Adhemerval Zanella [Wed, 6 Sep 2017 17:35:23 +0000 (14:35 -0300)]
Remove remaining _HAVE_STRING_ARCH_* definitions (BZ #18858)

Since the removal of bits/string.h, _HAVE_STRING_ARCH_* are no
longer used.  This patch removes the unused macros from i686
and x86_64 sysdeps folder.

Checked on x86_64-linux-gnu and i686-linux-gnu.

* sysdeps/i386/i686/multiarch/strncpy.c (_HAVE_STRING_ARCH_strncpy):
Remove define.
* sysdeps/x86_64/multiarch/stpcpy.c (_HAVE_STRING_ARCH_stpcpy):
Likewise.
* sysdeps/x86_64/multiarch/strcspn.c (_HAVE_STRING_ARCH_strcspn):
Likewise.
* sysdeps/x86_64/multiarch/strncat.c (_HAVE_STRING_ARCH_strncat):
Likewise.
* sysdeps/x86_64/multiarch/strncpy.c (_HAVE_STRING_ARCH_strncpy):
Likewise.
* sysdeps/x86_64/multiarch/strpbrk.c (_HAVE_STRING_ARCH_strpbrk):
Likewise.
* sysdeps/x86_64/multiarch/strspn.c (_HAVE_STRING_ARCH_strspn):
Likewise.

7 years ago__libc_dynarray_emplace_enlarge: Add missing else
Florian Weimer [Wed, 6 Sep 2017 09:25:14 +0000 (11:25 +0200)]
__libc_dynarray_emplace_enlarge: Add missing else

Before, arrays of small elements received a starting allocation size of
8, not 16.

7 years agoresolv: __resolv_conf_attach must not free passed conf object [BZ #22096]
Florian Weimer [Wed, 6 Sep 2017 13:32:43 +0000 (15:32 +0200)]
resolv: __resolv_conf_attach must not free passed conf object [BZ #22096]

7 years agoresolv: Fix memory leak with OOM during resolv.conf parsing [BZ #22095]
Florian Weimer [Wed, 6 Sep 2017 13:20:25 +0000 (15:20 +0200)]
resolv: Fix memory leak with OOM during resolv.conf parsing [BZ #22095]

7 years agonss_dns: Remove dead PTR IPv4-to-IPv6 mapping code
Florian Weimer [Wed, 6 Sep 2017 13:11:44 +0000 (15:11 +0200)]
nss_dns: Remove dead PTR IPv4-to-IPv6 mapping code

7 years agotst-res_use_inet6: Enhance test to cover IPv4-to-IPv6 address mapping
Florian Weimer [Wed, 6 Sep 2017 11:43:01 +0000 (13:43 +0200)]
tst-res_use_inet6: Enhance test to cover IPv4-to-IPv6 address mapping

This requires more control over the response data, so it is now
determined by flags embedded in the query name.

7 years agoImprove utf8_gen.py to set the width for characters with Prepended_Concatenation_Mark...
Mike FABIAN [Wed, 6 Sep 2017 09:19:33 +0000 (11:19 +0200)]
Improve utf8_gen.py to set the width for characters with Prepended_Concatenation_Mark property to 1

[BZ #22070]
* localedata/unicode-gen/utf8_gen.py: Set the width for
characters with Prepended_Concatenation_Mark property to 1
* localedata/charmaps/UTF-8: Updated using the improved script.

7 years agoWrite all ranges of neighbouring characters with the same width using the range notat...
Mike FABIAN [Fri, 18 Aug 2017 08:12:29 +0000 (10:12 +0200)]
Write all ranges of neighbouring characters with the same width using the range notation in charmaps/UTF-8

Writing ranges of neighbouring characters with the same with like this

    <U000E0100>...<U000E01EF> 0

in charmaps/UTF-8 is more efficient than writing many single character lines
like:

    <U000E0100> 0
    <U000E0101> 0
    ...

[BZ #21750]
* unicode-gen/utf8_gen.py: Write all ranges of neighbouring characters
with the same width using the range notation in charmaps/UTF-8.

7 years agoPrefer new libm function wrappers for !LIBM_SVID_COMPAT.
Joseph Myers [Tue, 5 Sep 2017 23:35:55 +0000 (23:35 +0000)]
Prefer new libm function wrappers for !LIBM_SVID_COMPAT.

The initial obsoletion of SVID libm error handling left the old
wrappers and __kernel_standard still being used for new ports and
static linking, just with macro definitions of _LIB_VERSION and
matherr that meant symbols with those names were never actually used
and the code for different error handling variants could be optimized
out.

This patch cleans things up further by eliminating the
__kernel_standard use for new ports and static linking.  Now, the old
wrappers no longer generate any code in the !LIBM_SVID_COMPAT case,
while the new errno-only wrappers that were added for float128 support
are now also used for float, double and long double in that case.

The changes are generally straightforward.  The w_scalb*_compat
wrappers continue to be used (scalb is obsolescent in the sense of not
being supported for float128, but is present in supported standards -
the 2001 edition of POSIX and earlier XSI versions - so remains
supported for static linking and new ports, as do the float and long
double variants that are existing GNU extensions).  Those wrappers
would only call __kernel_standard in the _LIB_VERSION == _SVID_ case.
Since we would like to be able to compile most of glibc without
optimization, relying on a static function whose only use is under an
if (0) condition being optimized away to avoid an undefined
__kernel_standard reference may not be a good idea.  Thus, the
relevant code in the scalb wrappers has LIBM_SVID_COMPAT conditionals
added to guarantee it's not built at all in the case where
__kernel_standard does not exist.

Just as i386 has its own w_sqrt_compat.c, so w_sqrt.c is also added.
ia64 gets dummy w_*.c to prevent those files being built where they
would conflict with the ia64 libm, as with its existing w_*_compat.c.

Conditions disabling code for !LIBM_SVID_COMPAT are needed in both the
math/ wrappers and in the long double wrappers in ldbl-opt (to avoid
them setting up aliases and symbol versions for undefined symbols).  I
hope that future cleanups to how libm function aliases and symbol
versioning are done will eliminate the need for most of the ldbl-opt
wrappers.

Tested for x86_64 and x86, and with build-many-glibcs.py.

* sysdeps/generic/math-type-macros-double.h: Include
<math-svid-compat.h>.
(__USE_WRAPPER_TEMPLATE): Define to !LIBM_SVID_COMPAT.
* sysdeps/generic/math-type-macros-float.h: Include
<math-svid-compat.h>.
(__USE_WRAPPER_TEMPLATE): Define to !LIBM_SVID_COMPAT.
* sysdeps/generic/math-type-macros-ldouble.h: Include
<math-svid-compat.h>.
(__USE_WRAPPER_TEMPLATE): Define to !LIBM_SVID_COMPAT.
* math/lgamma-compat.h (BUILD_LGAMMA): Include LIBM_SVID_COMPAT
condition.
* math/w_acos_compat.c: Condition contents on [LIBM_SVID_COMPAT].
* math/w_acosf_compat.c: Likewise.
* math/w_acosh_compat.c: Likewise.
* math/w_acoshf_compat.c: Likewise.
* math/w_acoshl_compat.c: Likewise.
* math/w_acosl_compat.c: Likewise.
* math/w_asin_compat.c: Likewise.
* math/w_asinf_compat.c: Likewise.
* math/w_asinl_compat.c: Likewise.
* math/w_atan2_compat.c: Likewise.
* math/w_atan2f_compat.c: Likewise.
* math/w_atan2l_compat.c: Likewise.
* math/w_atanh_compat.c: Likewise.
* math/w_atanhf_compat.c: Likewise.
* math/w_atanhl_compat.c: Likewise.
* math/w_cosh_compat.c: Likewise.
* math/w_coshf_compat.c: Likewise.
* math/w_coshl_compat.c: Likewise.
* math/w_exp10_compat.c: Likewise.
* math/w_exp10f_compat.c: Likewise.
* math/w_exp10l_compat.c: Likewise.
* math/w_exp2_compat.c: Likewise.
* math/w_exp2f_compat.c: Likewise.
* math/w_exp2l_compat.c: Likewise.
* math/w_fmod_compat.c: Likewise.
* math/w_fmodf_compat.c: Likewise.
* math/w_fmodl_compat.c: Likewise.
* math/w_hypot_compat.c: Likewise.
* math/w_hypotf_compat.c: Likewise.
* math/w_hypotl_compat.c: Likewise.
* math/w_j0_compat.c: Likewise.
* math/w_j0f_compat.c: Likewise.
* math/w_j0l_compat.c: Likewise.
* math/w_j1_compat.c: Likewise.
* math/w_j1f_compat.c: Likewise.
* math/w_j1l_compat.c: Likewise.
* math/w_jn_compat.c: Likewise.
* math/w_jnf_compat.c: Likewise.
* math/w_jnl_compat.c: Likewise.
* math/w_lgamma_r_compat.c: Likewise.
* math/w_lgammaf_r_compat.c: Likewise.
* math/w_lgammal_r_compat.c: Likewise.
* math/w_log10_compat.c: Likewise.
* math/w_log10f_compat.c: Likewise.
* math/w_log10l_compat.c: Likewise.
* math/w_log2_compat.c: Likewise.
* math/w_log2f_compat.c: Likewise.
* math/w_log2l_compat.c: Likewise.
* math/w_log_compat.c: Likewise.
* math/w_logf_compat.c: Likewise.
* math/w_logl_compat.c: Likewise.
* math/w_pow_compat.c: Likewise.
* math/w_powf_compat.c: Likewise.
* math/w_powl_compat.c: Likewise.
* math/w_remainder_compat.c: Likewise.
* math/w_remainderf_compat.c: Likewise.
* math/w_remainderl_compat.c: Likewise.
* math/w_sinh_compat.c: Likewise.
* math/w_sinhf_compat.c: Likewise.
* math/w_sinhl_compat.c: Likewise.
* math/w_sqrt_compat.c: Likewise.
* math/w_sqrtf_compat.c: Likewise.
* math/w_sqrtl_compat.c: Likewise.
* math/w_tgamma_compat.c: Likewise.
* math/w_tgammaf_compat.c: Likewise.
* math/w_tgammal_compat.c: Likewise.
* math/w_scalb_compat.c (sysv_scalb): Condition definition on
[LIBM_SVID_COMPAT].
(__scalb): Condition call to sysv_scalb on [LIBM_SVID_COMPAT].
* math/w_scalbf_compat.c (sysv_scalbf): Condition definition on
[LIBM_SVID_COMPAT].
(__scalbf): Condition call to sysv_scalbf on [LIBM_SVID_COMPAT].
* math/w_scalbl_compat.c (sysv_scalbl): Condition definition on
[LIBM_SVID_COMPAT].
(__scalbl): Condition call to sysv_scalbl on [LIBM_SVID_COMPAT].
* sysdeps/i386/fpu/w_sqrt.c: New file.
* sysdeps/ia64/fpu/w_acos.c: Likewise.
* sysdeps/ia64/fpu/w_acosf.c: Likewise.
* sysdeps/ia64/fpu/w_acosh.c: Likewise.
* sysdeps/ia64/fpu/w_acoshf.c: Likewise.
* sysdeps/ia64/fpu/w_acoshl.c: Likewise.
* sysdeps/ia64/fpu/w_acosl.c: Likewise.
* sysdeps/ia64/fpu/w_asin.c: Likewise.
* sysdeps/ia64/fpu/w_asinf.c: Likewise.
* sysdeps/ia64/fpu/w_asinl.c: Likewise.
* sysdeps/ia64/fpu/w_atan2.c: Likewise.
* sysdeps/ia64/fpu/w_atan2f.c: Likewise.
* sysdeps/ia64/fpu/w_atan2l.c: Likewise.
* sysdeps/ia64/fpu/w_atanh.c: Likewise.
* sysdeps/ia64/fpu/w_atanhf.c: Likewise.
* sysdeps/ia64/fpu/w_atanhl.c: Likewise.
* sysdeps/ia64/fpu/w_cosh.c: Likewise.
* sysdeps/ia64/fpu/w_coshf.c: Likewise.
* sysdeps/ia64/fpu/w_coshl.c: Likewise.
* sysdeps/ia64/fpu/w_exp.c: Likewise.
* sysdeps/ia64/fpu/w_exp10.c: Likewise.
* sysdeps/ia64/fpu/w_exp10f.c: Likewise.
* sysdeps/ia64/fpu/w_exp10l.c: Likewise.
* sysdeps/ia64/fpu/w_exp2.c: Likewise.
* sysdeps/ia64/fpu/w_exp2f.c: Likewise.
* sysdeps/ia64/fpu/w_exp2l.c: Likewise.
* sysdeps/ia64/fpu/w_expf.c: Likewise.
* sysdeps/ia64/fpu/w_expl.c: Likewise.
* sysdeps/ia64/fpu/w_fmod.c: Likewise.
* sysdeps/ia64/fpu/w_fmodf.c: Likewise.
* sysdeps/ia64/fpu/w_fmodl.c: Likewise.
* sysdeps/ia64/fpu/w_hypot.c: Likewise.
* sysdeps/ia64/fpu/w_hypotf.c: Likewise.
* sysdeps/ia64/fpu/w_hypotl.c: Likewise.
* sysdeps/ia64/fpu/w_lgamma_r.c: Likewise.
* sysdeps/ia64/fpu/w_lgammaf_r.c: Likewise.
* sysdeps/ia64/fpu/w_lgammal_r.c: Likewise.
* sysdeps/ia64/fpu/w_log.c: Likewise.
* sysdeps/ia64/fpu/w_log10.c: Likewise.
* sysdeps/ia64/fpu/w_log10f.c: Likewise.
* sysdeps/ia64/fpu/w_log10l.c: Likewise.
* sysdeps/ia64/fpu/w_log2.c: Likewise.
* sysdeps/ia64/fpu/w_log2f.c: Likewise.
* sysdeps/ia64/fpu/w_log2l.c: Likewise.
* sysdeps/ia64/fpu/w_logf.c: Likewise.
* sysdeps/ia64/fpu/w_logl.c: Likewise.
* sysdeps/ia64/fpu/w_pow.c: Likewise.
* sysdeps/ia64/fpu/w_powf.c: Likewise.
* sysdeps/ia64/fpu/w_powl.c: Likewise.
* sysdeps/ia64/fpu/w_remainder.c: Likewise.
* sysdeps/ia64/fpu/w_remainderf.c: Likewise.
* sysdeps/ia64/fpu/w_remainderl.c: Likewise.
* sysdeps/ia64/fpu/w_sinh.c: Likewise.
* sysdeps/ia64/fpu/w_sinhf.c: Likewise.
* sysdeps/ia64/fpu/w_sinhl.c: Likewise.
* sysdeps/ia64/fpu/w_sqrt.c: Likewise.
* sysdeps/ia64/fpu/w_sqrtf.c: Likewise.
* sysdeps/ia64/fpu/w_sqrtl.c: Likewise.
* sysdeps/ia64/fpu/w_tgamma.c: Likewise.
* sysdeps/ia64/fpu/w_tgammaf.c: Likewise.
* sysdeps/ia64/fpu/w_tgammal.c: Likewise.
* sysdeps/ieee754/dbl-64/w_exp_compat.c: Condition contents on
[LIBM_SVID_COMPAT].
* sysdeps/ieee754/flt-32/w_expf_compat.c: Likewise.
* sysdeps/ieee754/k_standard.c: Likewise.
* sysdeps/ieee754/k_standardf.c: Likewise.
* sysdeps/ieee754/k_standardl.c: Likewise.
* sysdeps/ieee754/ldbl-128/w_expl_compat.c: Likewise.
* sysdeps/ieee754/ldbl-128ibm/w_expl_compat.c: Likewise.
* sysdeps/ieee754/ldbl-96/w_expl_compat.c: Likewise.
* sysdeps/ieee754/ldbl-64-128/w_expl_compat.c: Condition
long_double_symbol call on [LIBM_SVID_COMPAT].
* sysdeps/ieee754/ldbl-opt/w_acoshl_compat.c: Likewise.
* sysdeps/ieee754/ldbl-opt/w_acosl_compat.c: Likewise.
* sysdeps/ieee754/ldbl-opt/w_asinl_compat.c: Likewise.
* sysdeps/ieee754/ldbl-opt/w_atan2l_compat.c: Likewise.
* sysdeps/ieee754/ldbl-opt/w_atanhl_compat.c: Likewise.
* sysdeps/ieee754/ldbl-opt/w_coshl_compat.c: Likewise.
* sysdeps/ieee754/ldbl-opt/w_fmodl_compat.c: Likewise.
* sysdeps/ieee754/ldbl-opt/w_hypotl_compat.c: Likewise.
* sysdeps/ieee754/ldbl-opt/w_j0l_compat.c: Likewise.
* sysdeps/ieee754/ldbl-opt/w_j1l_compat.c: Likewise.
* sysdeps/ieee754/ldbl-opt/w_jnl_compat.c: Likewise.
* sysdeps/ieee754/ldbl-opt/w_lgammal_r_compat.c: Likewise.
* sysdeps/ieee754/ldbl-opt/w_log10l_compat.c: Likewise.
* sysdeps/ieee754/ldbl-opt/w_log2l_compat.c: Likewise.
* sysdeps/ieee754/ldbl-opt/w_logl_compat.c: Likewise.
* sysdeps/ieee754/ldbl-opt/w_powl_compat.c: Likewise.
* sysdeps/ieee754/ldbl-opt/w_remainderl_compat.c: Likewise.
* sysdeps/ieee754/ldbl-opt/w_sinhl_compat.c: Likewise.
* sysdeps/ieee754/ldbl-opt/w_sqrtl_compat.c: Likewise.
* sysdeps/ieee754/ldbl-opt/w_tgammal_compat.c: Likewise.
* sysdeps/ieee754/ldbl-opt/w_exp10l_compat.c: Condition
long_double_symbol and compat_symbol calls on [LIBM_SVID_COMPAT].

7 years agoFix tests that are testing obsoleted functionality
Steve Ellcey [Tue, 5 Sep 2017 19:24:00 +0000 (12:24 -0700)]
Fix tests that are testing obsoleted functionality

* include/shlib-compat.h (TEST_COMPAT): New Macro.
* malloc/tst-mallocstate.c: Convert from test-skeleton
to test-driver.  Ifdef code using TEST_COMPAT macro.
* math/test-matherr-2.c: Ifdef test using TEST_COMPAT macro.
* math/test-matherr.c: Likewise.

7 years agoFix pcprofiledump cross-endian condition (bug 22086).
Joseph Myers [Tue, 5 Sep 2017 15:14:09 +0000 (15:14 +0000)]
Fix pcprofiledump cross-endian condition (bug 22086).

debug/pcprofiledump.c contains code that tries to handle other-endian
data.  This uses a condition "(word & 0xfffffff0) == bswap_32
(0xdeb00000)".  This condition is always false (the LHS always has the
low four bits zero, the RHS doesn't); a correct comparison would use
0x0fffffff.  This results in -Werror=tautological-compare build
failures with the tile version of bits/byteswap.h and mainline GCC.

https://sourceware.org/ml/libc-testresults/2017-q3/msg00400.html

pcprofiledump.c: In function 'main':
pcprofiledump.c:118:39: error: bitwise comparison always evaluates to false
[-Werror=tautological-compare]
   int must_swap = (word & 0xfffffff0) == bswap_32 (0xdeb00000);
                                       ^~

This patch fixes the condition.  Tested for x86_64, and with
build-many-glibcs.py that it fixes the build for tilegx-linux-gnu.
(Note that I have not tested the actual pcprofiledump functionality,
native or cross endian, which lacks any testsuite coverage.)

[BZ #22086]
* debug/pcprofiledump.c (main): Use byte-swapped mask when
comparing word with byte-swapped constant.