Commit Graph

11992 Commits

Author SHA1 Message Date
Adhemerval Zanella
8c78faa9ef Fix concurrent changes on nscd aware files (BZ #23178)
As indicated by BZ#23178, concurrent access on some files read by nscd
may result non expected data send through service requisition.  This is
due 'sendfile' Linux implementation where for sockets with zero-copy
support, callers must ensure the transferred portions of the the file
reffered by input file descriptor remain unmodified until the reader
on the other end of socket has consumed the transferred data.

I could not find any explicit documentation stating this behaviour on
Linux kernel documentation.  However man-pages sendfile entry [1] states
in NOTES the aforementioned remark.  It was initially pushed on man-pages
with an explicit testcase [2] that shows changing the file used in
'sendfile' call prior the socket input data consumption results in
previous data being lost.

From commit message it stated on tested Linux version (3.15) only TCP
socket showed this issues, however on recent kernels (4.4) I noticed the
same behaviour for local sockets as well.

Since sendfile on HURD is a read/write operation and the underlying
issue on Linux, the straightforward fix is just remove sendfile use
altogether.  I am really skeptical it is hitting some hotstop (there
are indication over internet that sendfile is helpfull only for large
files, more than 10kb) here to justify that extra code complexity or
to pursuit other possible fix (through memory or file locks for
instance, which I am not sure it is doable).

Checked on x86_64-linux-gnu.

	[BZ #23178]
	* nscd/nscd-client.h (sendfileall): Remove prototype.
	* nscd/connections.c [HAVE_SENDFILE] (sendfileall): Remove function.
	(handle_request): Use writeall instead of sendfileall.
	* nscd/aicache.c (addhstaiX): Likewise.
	* nscd/grpcache.c (cache_addgr): Likewise.
	* nscd/hstcache.c (cache_addhst): Likewise.
	* nscd/initgrcache.c (addinitgroupsX): Likewise.
	* nscd/netgroupcache.c (addgetnetgrentX, addinnetgrX): Likewise.
	* nscd/pwdcache.c (cache_addpw): Likewise.
	* nscd/servicescache.c (cache_addserv): Likewise.
	* sysdeps/unix/sysv/linux/Makefile [$(subdir) == nscd]
	(sysdep-CFLAGS): Remove -DHAVE_SENDFILE.
	* sysdeps/unix/sysv/linux/kernel-features.h (__ASSUME_SENDFILE):
	Remove define.

[1] http://man7.org/linux/man-pages/man2/sendfile.2.html
[2] 7b6a329977 (diff-efd6af3a70f0f07c578e85b51e83b3c3)
2018-05-16 13:44:53 -03:00
H.J. Lu
04958880e0 x86-64: Use IFUNC strncat inside libc.so
Unlike i386, we can call hidden IFUNC functions inside libc.so since
x86-64 PLT is always PIC.

Tested on x86-64.

	* sysdeps/x86_64/multiarch/strncat-c.c (STRNCAT_PRIMARY): Removed.
	Include <string/strncat.c>.
	* sysdeps/x86_64/multiarch/strncat.c (__strncat): New strong
	alias.
	(__GI___strncat): New hidden alias.
2018-05-16 09:04:35 -07:00
Joseph Myers
c9992d13c4 Update MIPS libm-test-ulps.
* sysdeps/mips/mips32/libm-test-ulps: Update.
	* sysdeps/mips/mips64/libm-test-ulps: Likewise.
2018-05-16 15:35:26 +00:00
Florian Weimer
9761bf4dfa math: Merge strtod_nan_*.h into math-type-macros-*.h
This change will eventually make it possible to compile
stdlib/strtod_nan_main.c as part of math/s_nan_template.c.
2018-05-16 06:03:08 +02:00
Joseph Myers
69a01461ee Add narrowing multiply functions.
This patch adds the narrowing multiply functions from TS 18661-1 to
glibc's libm: fmul, fmull, dmull, f32mulf64, f32mulf32x, f32xmulf64
for all configurations; f32mulf64x, f32mulf128, f64mulf64x,
f64mulf128, f32xmulf64x, f32xmulf128, f64xmulf128 for configurations
with _Float64x and _Float128; __nldbl_dmull for ldbl-opt.

The changes are mostly essentially the same as for the narrowing add
functions, so the description of those generally applies to this patch
as well.  f32xmulf64 for i386 cannot use precision control as used for
add and subtract, because that would result in double rounding for
subnormal results, so that uses round-to-odd with long double
intermediate result instead.  The soft-fp support involves adding a
new FP_TRUNC_COOKED since soft-fp multiplication uses cooked inputs
and outputs.

Tested for x86_64, x86, mips64 (all three ABIs, both hard and soft
float) and powerpc, and with build-many-glibcs.py.

	* math/Makefile (libm-narrow-fns): Add mul.
	(libm-test-funcs-narrow): Likewise.
	* math/Versions (GLIBC_2.28): Add narrowing multiply functions.
	* math/bits/mathcalls-narrow.h (mul): Use __MATHCALL_NARROW.
	* math/gen-auto-libm-tests.c (test_functions): Add mul.
	* math/math-narrow.h (CHECK_NARROW_MUL): New macro.
	(NARROW_MUL_ROUND_TO_ODD): Likewise.
	(NARROW_MUL_TRIVIAL): Likewise.
	* soft-fp/op-common.h (FP_TRUNC_COOKED): Likewise.
	* sysdeps/ieee754/float128/float128_private.h (__fmull): New
	macro.
	(__dmull): Likewise.
	* sysdeps/ieee754/ldbl-opt/Makefile (libnldbl-calls): Add fmul and
	dmul.
	(CFLAGS-nldbl-dmul.c): New variable.
	(CFLAGS-nldbl-fmul.c): Likewise.
	* sysdeps/ieee754/ldbl-opt/Versions (GLIBC_2.28): Add
	__nldbl_dmull.
	* sysdeps/ieee754/ldbl-opt/nldbl-compat.h (__nldbl_dmull): New
	prototype.
	* manual/arith.texi (Misc FP Arithmetic): Document fmul, fmull,
	dmull, fMmulfN, fMmulfNx, fMxmulfN and fMxmulfNx.
	* math/auto-libm-test-in: Add tests of mul.
	* math/auto-libm-test-out-narrow-mul: New generated file.
	* math/libm-test-narrow-mul.inc: New file.
	* sysdeps/i386/fpu/s_f32xmulf64.c: Likewise.
	* sysdeps/ieee754/dbl-64/s_f32xmulf64.c: Likewise.
	* sysdeps/ieee754/dbl-64/s_fmul.c: Likewise.
	* sysdeps/ieee754/float128/s_f32mulf128.c: Likewise.
	* sysdeps/ieee754/float128/s_f64mulf128.c: Likewise.
	* sysdeps/ieee754/float128/s_f64xmulf128.c: Likewise.
	* sysdeps/ieee754/ldbl-128/s_dmull.c: Likewise.
	* sysdeps/ieee754/ldbl-128/s_f64xmulf128.c: Likewise.
	* sysdeps/ieee754/ldbl-128/s_fmull.c: Likewise.
	* sysdeps/ieee754/ldbl-128ibm/s_dmull.c: Likewise.
	* sysdeps/ieee754/ldbl-128ibm/s_fmull.c: Likewise.
	* sysdeps/ieee754/ldbl-96/s_dmull.c: Likewise.
	* sysdeps/ieee754/ldbl-96/s_fmull.c: Likewise.
	* sysdeps/ieee754/ldbl-opt/nldbl-dmul.c: Likewise.
	* sysdeps/ieee754/ldbl-opt/nldbl-fmul.c: Likewise.
	* sysdeps/ieee754/soft-fp/s_dmull.c: Likewise.
	* sysdeps/ieee754/soft-fp/s_fmul.c: Likewise.
	* sysdeps/ieee754/soft-fp/s_fmull.c: Likewise.
	* sysdeps/powerpc/fpu/libm-test-ulps: Update.
	* sysdeps/mach/hurd/i386/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/aarch64/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/alpha/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/arm/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/hppa/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/i386/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/ia64/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/microblaze/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/mips/mips32/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/mips/mips64/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/nios2/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc64/libm-le.abilist: Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc64/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/riscv/rv64/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/x86_64/64/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist: Likewise.
2018-05-16 00:05:28 +00:00
H.J. Lu
a15529fda8 i386: Replace PREINIT_FUNCTION@PLT with *%eax in call
Since we have loaded address of PREINIT_FUNCTION into %eax, we can
avoid extra branch to PLT slot.

	* sysdeps/i386/crti.S (_init): Replace PREINIT_FUNCTION@PLT
	with *%eax in call.

Acked-by: Christian Brauner (Ubuntu) <christian@brauner.io>
2018-05-14 09:24:06 -07:00
H.J. Lu
98ee36c7a4 x86: Add sysdeps/x86/ldsodefs.h
Merge sysdeps/i386/ldsodefs.h and sysdeps/x86_64/ldsodefs.h into
sysdeps/x86/ldsodefs.h.

Tested on i686 and x86-64.

	* sysdeps/i386/ldsodefs.h: Removed.
	* sysdeps/x86_64/ldsodefs.h: Moved to ...
	* sysdeps/x86/ldsodefs.h: This.
	(La_i86_regs): New.
	(La_i86_retval): Likewise.
	(ARCH_PLTENTER_MEMBERS): Add i86_gnu_pltenter.
	(ARCH_PLTEXIT_MEMBERS): i86_gnu_pltexit.

Acked-by: Christian Brauner (Ubuntu) christian@brauner.io
2018-05-14 09:19:41 -07:00
H.J. Lu
e322ec3282 x86-64: Remove the unnecessary testl in strlen-avx2.S
Since the result of testl is never used, this patch removes it.

Tested on 64-bit AVX2 machine.

	* sysdeps/x86_64/multiarch/strlen-avx2.S (STRLEN): Remove the
	unnecessary testl.
2018-05-14 03:41:35 -07:00
Alan Modra
0937e209a7 R_PARISC_TLS_DTPOFF32 reloc handling
* sysdeps/hppa/dl-machine.h (elf_machine_rela): Add
	R_PARISC_TLS_DTPOFF32 reloc addend.
2018-05-13 08:32:28 +09:30
Tulio Magno Quites Machado Filho
5db7d705db powerpc: Fix the compiler type used with C++ when -mabi=ieeelongdouble
When compiling C++ code with -mabi=ieeelongdouble, KCtype is
unavailable and the long double type should be used instead.

This is also providing macro __HAVE_FLOAT128_UNLIKE_LDBL in order to
identify the kind of long double type is being used in the current
compilation unit.
Notice that bits/floatn.h cannot benefit from the new macro due to order
of header inclusion.

	* bits/floatn-common.h: Define __HAVE_FLOAT128_UNLIKE_LDBL.
	* math/math.h: Restrict the prototype definition for the functions
	issignaling(_Float128) and iszero(_Float128); and template
	__iseqsig_type<_Float128>, from __HAVE_DISTINCT_FLOAT128 to
	__HAVE_FLOAT128_UNLIKE_LDBL.
	* sysdeps/powerpc/bits/floatn.h [__HAVE_FLOAT128
	&& (!__GNUC_PREREQ (7, 0) || defined __cplusplus)
	&& __LDBL_MANT_DIG__ == 113]: Use long double suffix for
	__f128() constants; define the type _Float128 as long double;
	and reuse long double in __CFLOAT128.

Signed-off-by: Tulio Magno Quites Machado Filho <tuliom@linux.ibm.com>
2018-05-11 18:05:03 -03:00
Joseph Myers
b4d5b8b021 Do not include math-barriers.h in math_private.h.
This patch continues the math_private.h cleanup by stopping
math_private.h from including math-barriers.h and making the users of
the barrier macros include the latter header directly.  No attempt is
made to remove any math_private.h includes that are now unused, except
in strtod_l.c where that is done to avoid line number changes in
assertions, so that installed stripped shared libraries can be
compared before and after the patch.  (I think the floating-point
environment support in math_private.h should also move out - some
architectures already have fenv_private.h as an architecture-internal
header included from their math_private.h - and after moving that out
might be a better time to identify unused math_private.h includes.)

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

	* sysdeps/generic/math_private.h: Do not include
	<math-barriers.h>.
	* stdlib/strtod_l.c: Include <math-barriers.h> instead of
	<math_private.h>.
	* math/fromfp.h: Include <math-barriers.h>.
	* math/math-narrow.h: Likewise.
	* math/s_nextafter.c: Likewise.
	* math/s_nexttowardf.c: Likewise.
	* sysdeps/aarch64/fpu/s_llrint.c: Likewise.
	* sysdeps/aarch64/fpu/s_llrintf.c: Likewise.
	* sysdeps/aarch64/fpu/s_lrint.c: Likewise.
	* sysdeps/aarch64/fpu/s_lrintf.c: Likewise.
	* sysdeps/i386/fpu/s_nextafterl.c: Likewise.
	* sysdeps/i386/fpu/s_nexttoward.c: Likewise.
	* sysdeps/i386/fpu/s_nexttowardf.c: Likewise.
	* sysdeps/ieee754/dbl-64/e_atan2.c: Likewise.
	* sysdeps/ieee754/dbl-64/e_atanh.c: Likewise.
	* sysdeps/ieee754/dbl-64/e_exp.c: Likewise.
	* sysdeps/ieee754/dbl-64/e_exp2.c: Likewise.
	* sysdeps/ieee754/dbl-64/e_j0.c: Likewise.
	* sysdeps/ieee754/dbl-64/e_sqrt.c: Likewise.
	* sysdeps/ieee754/dbl-64/s_expm1.c: Likewise.
	* sysdeps/ieee754/dbl-64/s_fma.c: Likewise.
	* sysdeps/ieee754/dbl-64/s_fmaf.c: Likewise.
	* sysdeps/ieee754/dbl-64/s_log1p.c: Likewise.
	* sysdeps/ieee754/dbl-64/s_nearbyint.c: Likewise.
	* sysdeps/ieee754/dbl-64/wordsize-64/s_nearbyint.c: Likewise.
	* sysdeps/ieee754/flt-32/e_atanhf.c: Likewise.
	* sysdeps/ieee754/flt-32/e_j0f.c: Likewise.
	* sysdeps/ieee754/flt-32/s_expm1f.c: Likewise.
	* sysdeps/ieee754/flt-32/s_log1pf.c: Likewise.
	* sysdeps/ieee754/flt-32/s_nearbyintf.c: Likewise.
	* sysdeps/ieee754/flt-32/s_nextafterf.c: Likewise.
	* sysdeps/ieee754/k_standardl.c: Likewise.
	* sysdeps/ieee754/ldbl-128/e_asinl.c: Likewise.
	* sysdeps/ieee754/ldbl-128/e_expl.c: Likewise.
	* sysdeps/ieee754/ldbl-128/e_powl.c: Likewise.
	* sysdeps/ieee754/ldbl-128/s_fmal.c: Likewise.
	* sysdeps/ieee754/ldbl-128/s_nearbyintl.c: Likewise.
	* sysdeps/ieee754/ldbl-128/s_nextafterl.c: Likewise.
	* sysdeps/ieee754/ldbl-128/s_nexttoward.c: Likewise.
	* sysdeps/ieee754/ldbl-128/s_nexttowardf.c: Likewise.
	* sysdeps/ieee754/ldbl-128ibm/e_asinl.c: Likewise.
	* sysdeps/ieee754/ldbl-128ibm/s_fmal.c: Likewise.
	* sysdeps/ieee754/ldbl-128ibm/s_nextafterl.c: Likewise.
	* sysdeps/ieee754/ldbl-128ibm/s_nexttoward.c: Likewise.
	* sysdeps/ieee754/ldbl-128ibm/s_nexttowardf.c: Likewise.
	* sysdeps/ieee754/ldbl-128ibm/s_rintl.c: Likewise.
	* sysdeps/ieee754/ldbl-96/e_atanhl.c: Likewise.
	* sysdeps/ieee754/ldbl-96/e_j0l.c: Likewise.
	* sysdeps/ieee754/ldbl-96/s_fma.c: Likewise.
	* sysdeps/ieee754/ldbl-96/s_fmal.c: Likewise.
	* sysdeps/ieee754/ldbl-96/s_nexttoward.c: Likewise.
	* sysdeps/ieee754/ldbl-96/s_nexttowardf.c: Likewise.
	* sysdeps/ieee754/ldbl-opt/s_nexttowardfd.c: Likewise.
	* sysdeps/m68k/m680x0/fpu/s_nextafterl.c: Likewise.
2018-05-11 15:11:38 +00:00
Siddhesh Poyarekar
db725a458e aarch64,falkor: Ignore prefetcher tagging for smaller copies
For smaller and medium sized copies, the effect of hardware
prefetching are not as dominant as instruction level parallelism.
Hence it makes more sense to load data into multiple registers than to
try and route them to the same prefetch unit.  This is also the case
for the loop exit where we are unable to latch on to the same prefetch
unit anyway so it makes more sense to have data loaded in parallel.

The performance results are a bit mixed with memcpy-random, with
numbers jumping between -1% and +3%, i.e. the numbers don't seem
repeatable.  memcpy-walk sees a 70% improvement (i.e. > 2x) for 128
bytes and that improvement reduces down as the impact of the tail copy
decreases in comparison to the loop.

	* sysdeps/aarch64/multiarch/memcpy_falkor.S (__memcpy_falkor):
	Use multiple registers to copy data in loop tail.
2018-05-11 00:11:52 +05:30
Siddhesh Poyarekar
70c97f8493 aarch64,falkor: Ignore prefetcher hints for memmove tail
The tail of the copy loops are unable to train the falkor hardware
prefetcher because they load from a different base compared to the hot
loop.  In this case avoid serializing the instructions by loading them
into different registers.  Also peel the last iteration of the loop
into the tail (and have them use different registers) since it gives
better performance for medium sizes.

This results in performance improvements of between 3% and 20% over
the current falkor implementation for sizes between 128 bytes and 1K
on the memmove-walk benchmark, thus mostly covering the regressions
seen against the generic memmove.

	* sysdeps/aarch64/multiarch/memmove_falkor.S
	(__memmove_falkor): Use multiple registers to move data in
	loop tail.
2018-05-11 00:08:02 +05:30
Joseph Myers
8f5b00d375 Move math_check_force_underflow macros to separate math-underflow.h.
This patch continues cleaning up math_private.h by moving the
math_check_force_underflow set of macros to a separate header
math-underflow.h.

This header is included by the files that need it rather than from
math_private.h.  Moving these macros to a separate file removes the
math_private.h uses of macros from float.h, so the inclusion of
float.h in math_private.h is also removed; files that were depending
on that inclusion are fixed to include float.h directly.  The
inclusion of math-barriers.h from math_private.h will be removed in a
separate patch.

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

	* math/math-underflow.h: New file.
	* sysdeps/generic/math_private.h: Do not include <float.h>.
	(fabs_tg): Remove macro.  Moved to math-underflow.h.
	(min_of_type_f): Likewise.
	(min_of_type_): Likewise.
	(min_of_type_l): Likewise.
	(min_of_type_f128): Likewise.
	(min_of_type): Likewise.
	(math_check_force_underflow): Likewise.
	(math_check_force_underflow_nonneg): Likewise.
	(math_check_force_underflow_complex): Likewise.
	* math/e_exp2_template.c: Include <math-underflow.h>.
	* math/k_casinh_template.c: Likewise.
	* math/s_catan_template.c: Likewise.
	* math/s_catanh_template.c: Likewise.
	* math/s_ccosh_template.c: Likewise.
	* math/s_cexp_template.c: Likewise.
	* math/s_clog10_template.c: Likewise.
	* math/s_clog_template.c: Likewise.
	* math/s_csin_template.c: Likewise.
	* math/s_csinh_template.c: Likewise.
	* math/s_csqrt_template.c: Likewise.
	* math/s_ctan_template.c: Likewise.
	* math/s_ctanh_template.c: Likewise.
	* sysdeps/ieee754/dbl-64/e_asin.c: Likewise.
	* sysdeps/ieee754/dbl-64/e_atanh.c: Likewise.
	* sysdeps/ieee754/dbl-64/e_exp2.c: Likewise.
	* sysdeps/ieee754/dbl-64/e_gamma_r.c: Likewise.
	* sysdeps/ieee754/dbl-64/e_hypot.c: Likewise.
	* sysdeps/ieee754/dbl-64/e_j1.c: Likewise.
	* sysdeps/ieee754/dbl-64/e_jn.c: Likewise.
	* sysdeps/ieee754/dbl-64/e_pow.c: Likewise.
	* sysdeps/ieee754/dbl-64/e_sinh.c: Likewise.
	* sysdeps/ieee754/dbl-64/s_asinh.c: Likewise.
	* sysdeps/ieee754/dbl-64/s_atan.c: Likewise.
	* sysdeps/ieee754/dbl-64/s_erf.c: Likewise.
	* sysdeps/ieee754/dbl-64/s_expm1.c: Likewise.
	* sysdeps/ieee754/dbl-64/s_log1p.c: Likewise.
	* sysdeps/ieee754/dbl-64/s_sin.c: Likewise.
	* sysdeps/ieee754/dbl-64/s_sincos.c: Likewise.
	* sysdeps/ieee754/dbl-64/s_tan.c: Likewise.
	* sysdeps/ieee754/dbl-64/s_tanh.c: Likewise.
	* sysdeps/ieee754/flt-32/e_asinf.c: Likewise.
	* sysdeps/ieee754/flt-32/e_atanhf.c: Likewise.
	* sysdeps/ieee754/flt-32/e_gammaf_r.c: Likewise.
	* sysdeps/ieee754/flt-32/e_j1f.c: Likewise.
	* sysdeps/ieee754/flt-32/e_jnf.c: Likewise.
	* sysdeps/ieee754/flt-32/e_sinhf.c: Likewise.
	* sysdeps/ieee754/flt-32/k_sinf.c: Likewise.
	* sysdeps/ieee754/flt-32/k_tanf.c: Likewise.
	* sysdeps/ieee754/flt-32/s_asinhf.c: Likewise.
	* sysdeps/ieee754/flt-32/s_atanf.c: Likewise.
	* sysdeps/ieee754/flt-32/s_erff.c: Likewise.
	* sysdeps/ieee754/flt-32/s_expm1f.c: Likewise.
	* sysdeps/ieee754/flt-32/s_log1pf.c: Likewise.
	* sysdeps/ieee754/flt-32/s_tanhf.c: Likewise.
	* sysdeps/ieee754/ldbl-128/e_asinl.c: Likewise.
	* sysdeps/ieee754/ldbl-128/e_atanhl.c: Likewise.
	* sysdeps/ieee754/ldbl-128/e_expl.c: Likewise.
	* sysdeps/ieee754/ldbl-128/e_gammal_r.c: Likewise.
	* sysdeps/ieee754/ldbl-128/e_hypotl.c: Likewise.
	* sysdeps/ieee754/ldbl-128/e_j1l.c: Likewise.
	* sysdeps/ieee754/ldbl-128/e_jnl.c: Likewise.
	* sysdeps/ieee754/ldbl-128/e_sinhl.c: Likewise.
	* sysdeps/ieee754/ldbl-128/k_sincosl.c: Likewise.
	* sysdeps/ieee754/ldbl-128/k_sinl.c: Likewise.
	* sysdeps/ieee754/ldbl-128/k_tanl.c: Likewise.
	* sysdeps/ieee754/ldbl-128/s_asinhl.c: Likewise.
	* sysdeps/ieee754/ldbl-128/s_atanl.c: Likewise.
	* sysdeps/ieee754/ldbl-128/s_erfl.c: Likewise.
	* sysdeps/ieee754/ldbl-128/s_expm1l.c: Likewise.
	* sysdeps/ieee754/ldbl-128/s_log1pl.c: Likewise.
	* sysdeps/ieee754/ldbl-128/s_tanhl.c: Likewise.
	* sysdeps/ieee754/ldbl-128ibm/e_asinl.c: Likewise.
	* sysdeps/ieee754/ldbl-128ibm/e_atanhl.c: Likewise.
	* sysdeps/ieee754/ldbl-128ibm/e_gammal_r.c: Likewise.
	* sysdeps/ieee754/ldbl-128ibm/e_hypotl.c: Likewise.
	* sysdeps/ieee754/ldbl-128ibm/e_j1l.c: Likewise.
	* sysdeps/ieee754/ldbl-128ibm/e_jnl.c: Likewise.
	* sysdeps/ieee754/ldbl-128ibm/e_powl.c: Likewise.
	* sysdeps/ieee754/ldbl-128ibm/e_sinhl.c: Likewise.
	* sysdeps/ieee754/ldbl-128ibm/k_sincosl.c: Likewise.
	* sysdeps/ieee754/ldbl-128ibm/k_sinl.c: Likewise.
	* sysdeps/ieee754/ldbl-128ibm/k_tanl.c: Likewise.
	* sysdeps/ieee754/ldbl-128ibm/s_asinhl.c: Likewise.
	* sysdeps/ieee754/ldbl-128ibm/s_atanl.c: Likewise.
	* sysdeps/ieee754/ldbl-128ibm/s_erfl.c: Likewise.
	* sysdeps/ieee754/ldbl-128ibm/s_fmal.c: Likewise.
	* sysdeps/ieee754/ldbl-128ibm/s_tanhl.c: Likewise.
	* sysdeps/ieee754/ldbl-96/e_asinl.c: Likewise.
	* sysdeps/ieee754/ldbl-96/e_atanhl.c: Likewise.
	* sysdeps/ieee754/ldbl-96/e_gammal_r.c: Likewise.
	* sysdeps/ieee754/ldbl-96/e_hypotl.c: Likewise.
	* sysdeps/ieee754/ldbl-96/e_j1l.c: Likewise.
	* sysdeps/ieee754/ldbl-96/e_jnl.c: Likewise.
	* sysdeps/ieee754/ldbl-96/e_sinhl.c: Likewise.
	* sysdeps/ieee754/ldbl-96/k_sinl.c: Likewise.
	* sysdeps/ieee754/ldbl-96/k_tanl.c: Likewise.
	* sysdeps/ieee754/ldbl-96/s_asinhl.c: Likewise.
	* sysdeps/ieee754/ldbl-96/s_erfl.c: Likewise.
	* sysdeps/ieee754/ldbl-96/s_tanhl.c: Likewise.
	* sysdeps/powerpc/fpu/e_hypot.c: Likewise.
	* sysdeps/x86/fpu/powl_helper.c: Likewise.
	* sysdeps/ieee754/dbl-64/s_nextup.c: Include <float.h>.
	* sysdeps/ieee754/flt-32/s_nextupf.c: Likewise.
	* sysdeps/ieee754/ldbl-128/s_nextupl.c: Likewise.
	* sysdeps/ieee754/ldbl-128ibm/s_nextupl.c: Likewise.
	* sysdeps/ieee754/ldbl-96/s_nextupl.c: Likewise.
2018-05-10 00:53:04 +00:00
Joseph Myers
9ed2e15ff4 Move math_opt_barrier, math_force_eval to separate math-barriers.h.
This patch continues cleaning up math_private.h by moving the
math_opt_barrier and math_force_eval macros to a separate header
math-barriers.h.

At present, those macros are inside a "#ifndef math_opt_barrier" in
math_private.h to allow architectures to override them and then use
a separate math-barriers.h header, no such #ifndef or #include_next is
needed; architectures just have their own alternative version of
math-barriers.h when providing their own optimized versions that avoid
going through memory unnecessarily.  The generic math-barriers.h has a
comment added to document these two macros.

In this patch, math_private.h is made to #include <math-barriers.h>,
so files using these macros do not need updating yet.  That is because
of uses of math_force_eval in math_check_force_underflow and
math_check_force_underflow_nonneg, which are still defined in
math_private.h.  Once those are moved out to a separate header, that
separate header can be made to include <math-barriers.h>, as can the
other files directly using these barrier macros, and then the include
of <math-barriers.h> from math_private.h can be removed.

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

	* sysdeps/generic/math-barriers.h: New file.
	* sysdeps/generic/math_private.h [!math_opt_barrier]
	(math_opt_barrier): Move to math-barriers.h.
	[!math_opt_barrier] (math_force_eval): Likewise.
	* sysdeps/aarch64/fpu/math-barriers.h: New file.
	* sysdeps/aarch64/fpu/math_private.h (math_opt_barrier): Move to
	math-barriers.h.
	(math_force_eval): Likewise.
	* sysdeps/alpha/fpu/math-barriers.h: New file.
	* sysdeps/alpha/fpu/math_private.h (math_opt_barrier): Move to
	math-barriers.h.
	(math_force_eval): Likewise.
	* sysdeps/x86/fpu/math-barriers.h: New file.
	* sysdeps/i386/fpu/fenv_private.h (math_opt_barrier): Move to
	math-barriers.h.
	(math_force_eval): Likewise.
	* sysdeps/m68k/m680x0/fpu/math_private.h: Move to....
	* sysdeps/m68k/m680x0/fpu/math-barriers.h: ... here.  Adjust
	multiple-include guard for rename.
	* sysdeps/powerpc/fpu/math-barriers.h: New file.
	* sysdeps/powerpc/fpu/math_private.h (math_opt_barrier): Move to
	math-barriers.h.
	(math_force_eval): Likewise.
2018-05-09 19:45:47 +00:00
Joseph Myers
aaee3cd88e Move math_narrow_eval to separate math-narrow-eval.h.
This patch continues cleaning up the math_private.h header, which
contains lots of different definitions many of which are only needed
by a limited subset of files using that header (and some of which are
overridden by architectures that only want to override selected parts
of the header), by moving the math_narrow_eval macro out to a separate
math-narrow-eval.h header, only included by those files that need it.
That header is placed in include/ (since it's used in stdlib/, not
just files built in math/, but no sysdeps variants are needed at
present).

Tested for x86_64, and with build-many-glibcs.py.  (Installed stripped
shared libraries change because of line numbers in assertions in
strtod_l.c.)

	* include/math-narrow-eval.h: New file.  Contents moved from ....
	* sysdeps/generic/math_private.h: ... here.
	(math_narrow_eval): Remove macro.  Moved to math-narrow-eval.h.
	[FLT_EVAL_METHOD != 0] (excess_precision): Likewise.
	* math/s_fdim_template.c: Include <math-narrow-eval.h>.
	* stdlib/strtod_l.c: Likewise.
	* sysdeps/i386/fpu/s_f32xaddf64.c: Likewise.
	* sysdeps/i386/fpu/s_f32xsubf64.c: Likewise.
	* sysdeps/i386/fpu/s_fdim.c: Likewise.
	* sysdeps/ieee754/dbl-64/e_cosh.c: Likewise.
	* sysdeps/ieee754/dbl-64/e_gamma_r.c: Likewise.
	* sysdeps/ieee754/dbl-64/e_j1.c: Likewise.
	* sysdeps/ieee754/dbl-64/e_jn.c: Likewise.
	* sysdeps/ieee754/dbl-64/e_lgamma_r.c: Likewise.
	* sysdeps/ieee754/dbl-64/e_sinh.c: Likewise.
	* sysdeps/ieee754/dbl-64/gamma_productf.c: Likewise.
	* sysdeps/ieee754/dbl-64/k_rem_pio2.c: Likewise.
	* sysdeps/ieee754/dbl-64/lgamma_neg.c: Likewise.
	* sysdeps/ieee754/dbl-64/s_erf.c: Likewise.
	* sysdeps/ieee754/dbl-64/s_llrint.c: Likewise.
	* sysdeps/ieee754/dbl-64/s_lrint.c: Likewise.
	* sysdeps/ieee754/flt-32/e_coshf.c: Likewise.
	* sysdeps/ieee754/flt-32/e_exp2f.c: Likewise.
	* sysdeps/ieee754/flt-32/e_expf.c: Likewise.
	* sysdeps/ieee754/flt-32/e_gammaf_r.c: Likewise.
	* sysdeps/ieee754/flt-32/e_j1f.c: Likewise.
	* sysdeps/ieee754/flt-32/e_jnf.c: Likewise.
	* sysdeps/ieee754/flt-32/e_lgammaf_r.c: Likewise.
	* sysdeps/ieee754/flt-32/e_sinhf.c: Likewise.
	* sysdeps/ieee754/flt-32/k_rem_pio2f.c: Likewise.
	* sysdeps/ieee754/flt-32/lgamma_negf.c: Likewise.
	* sysdeps/ieee754/flt-32/s_erff.c: Likewise.
	* sysdeps/ieee754/flt-32/s_llrintf.c: Likewise.
	* sysdeps/ieee754/flt-32/s_lrintf.c: Likewise.
	* sysdeps/ieee754/ldbl-96/gamma_product.c: Likewise.
2018-05-09 00:15:10 +00:00
Andreas Schwab
0555c47719 Fix comment typo 2018-05-08 14:59:13 +02:00
H.J. Lu
50d7d351b5 x86-64/memset: Mark the debugger symbol as hidden
When MEMSET_SYMBOL (__memset, erms) is provided for debugger, mark it
as hidden so that it will be local to the library.

	* sysdeps/x86_64/multiarch/memset-vec-unaligned-erms.S
	(MEMSET_SYMBOL (__memset, erms)): Mark the debugger symbol as
	hidden.
2018-05-07 11:01:48 -07:00
Joseph Myers
b289cd9db8 Ignore absolute symbols in ABI tests.
A recent binutils patch
<https://sourceware.org/ml/binutils/2018-04/msg00336.html> stops the
MIPS linker including the _gp_disp absolute symbol in dynamic symbol
tables.

With older binutils, it is included for MIPS o32 (despite the use of
symbol versioning), and this means that all the ABI test baselines for
MIPS o32 include "_gp_disp _gp_disp A".  This symbol is not
meaningfully part of the ABI for shared libraries, since it always has
to be resolved at static link time to the local definition for the
linked object.

All the other absolute symbols in ABI test baselines are the names of
symbol versions.  I don't think the mere existence of a symbol version
with a given name - as opposed to the contents of that version if
nonempty - is part of the ABI either.  Thus, this patch allows the ABI
tests to pass both before and after the binutils change by changing
abilist.awk not to include absolute symbols in its output, and
changing the baselines accordingly.

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

	* scripts/abilist.awk: Ignore absolute symbols.
	* sysdeps/mach/hurd/i386/ld.abilist: Remove absolute symbols.
	* sysdeps/mach/hurd/i386/libBrokenLocale.abilist: Likewise.
	* sysdeps/mach/hurd/i386/libanl.abilist: Likewise.
	* sysdeps/mach/hurd/i386/libc.abilist: Likewise.
	* sysdeps/mach/hurd/i386/libcrypt.abilist: Likewise.
	* sysdeps/mach/hurd/i386/libdl.abilist: Likewise.
	* sysdeps/mach/hurd/i386/libm.abilist: Likewise.
	* sysdeps/mach/hurd/i386/libnsl.abilist: Likewise.
	* sysdeps/mach/hurd/i386/libpthread.abilist: Likewise.
	* sysdeps/mach/hurd/i386/libresolv.abilist: Likewise.
	* sysdeps/mach/hurd/i386/librt.abilist: Likewise.
	* sysdeps/mach/hurd/i386/libutil.abilist: Likewise.
	* sysdeps/unix/sysv/linux/aarch64/ld.abilist: Likewise.
	* sysdeps/unix/sysv/linux/aarch64/libBrokenLocale.abilist: Likewise.
	* sysdeps/unix/sysv/linux/aarch64/libanl.abilist: Likewise.
	* sysdeps/unix/sysv/linux/aarch64/libc.abilist: Likewise.
	* sysdeps/unix/sysv/linux/aarch64/libcrypt.abilist: Likewise.
	* sysdeps/unix/sysv/linux/aarch64/libdl.abilist: Likewise.
	* sysdeps/unix/sysv/linux/aarch64/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/aarch64/libnsl.abilist: Likewise.
	* sysdeps/unix/sysv/linux/aarch64/libpthread.abilist: Likewise.
	* sysdeps/unix/sysv/linux/aarch64/libresolv.abilist: Likewise.
	* sysdeps/unix/sysv/linux/aarch64/librt.abilist: Likewise.
	* sysdeps/unix/sysv/linux/aarch64/libthread_db.abilist: Likewise.
	* sysdeps/unix/sysv/linux/aarch64/libutil.abilist: Likewise.
	* sysdeps/unix/sysv/linux/alpha/ld.abilist: Likewise.
	* sysdeps/unix/sysv/linux/alpha/libBrokenLocale.abilist: Likewise.
	* sysdeps/unix/sysv/linux/alpha/libanl.abilist: Likewise.
	* sysdeps/unix/sysv/linux/alpha/libc.abilist: Likewise.
	* sysdeps/unix/sysv/linux/alpha/libcrypt.abilist: Likewise.
	* sysdeps/unix/sysv/linux/alpha/libdl.abilist: Likewise.
	* sysdeps/unix/sysv/linux/alpha/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/alpha/libnsl.abilist: Likewise.
	* sysdeps/unix/sysv/linux/alpha/libpthread.abilist: Likewise.
	* sysdeps/unix/sysv/linux/alpha/libresolv.abilist: Likewise.
	* sysdeps/unix/sysv/linux/alpha/librt.abilist: Likewise.
	* sysdeps/unix/sysv/linux/alpha/libthread_db.abilist: Likewise.
	* sysdeps/unix/sysv/linux/alpha/libutil.abilist: Likewise.
	* sysdeps/unix/sysv/linux/arm/ld.abilist: Likewise.
	* sysdeps/unix/sysv/linux/arm/libBrokenLocale.abilist: Likewise.
	* sysdeps/unix/sysv/linux/arm/libanl.abilist: Likewise.
	* sysdeps/unix/sysv/linux/arm/libc.abilist: Likewise.
	* sysdeps/unix/sysv/linux/arm/libcrypt.abilist: Likewise.
	* sysdeps/unix/sysv/linux/arm/libdl.abilist: Likewise.
	* sysdeps/unix/sysv/linux/arm/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/arm/libnsl.abilist: Likewise.
	* sysdeps/unix/sysv/linux/arm/libpthread.abilist: Likewise.
	* sysdeps/unix/sysv/linux/arm/libresolv.abilist: Likewise.
	* sysdeps/unix/sysv/linux/arm/librt.abilist: Likewise.
	* sysdeps/unix/sysv/linux/arm/libthread_db.abilist: Likewise.
	* sysdeps/unix/sysv/linux/arm/libutil.abilist: Likewise.
	* sysdeps/unix/sysv/linux/hppa/ld.abilist: Likewise.
	* sysdeps/unix/sysv/linux/hppa/libBrokenLocale.abilist: Likewise.
	* sysdeps/unix/sysv/linux/hppa/libanl.abilist: Likewise.
	* sysdeps/unix/sysv/linux/hppa/libc.abilist: Likewise.
	* sysdeps/unix/sysv/linux/hppa/libcrypt.abilist: Likewise.
	* sysdeps/unix/sysv/linux/hppa/libdl.abilist: Likewise.
	* sysdeps/unix/sysv/linux/hppa/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/hppa/libnsl.abilist: Likewise.
	* sysdeps/unix/sysv/linux/hppa/libpthread.abilist: Likewise.
	* sysdeps/unix/sysv/linux/hppa/libresolv.abilist: Likewise.
	* sysdeps/unix/sysv/linux/hppa/librt.abilist: Likewise.
	* sysdeps/unix/sysv/linux/hppa/libthread_db.abilist: Likewise.
	* sysdeps/unix/sysv/linux/hppa/libutil.abilist: Likewise.
	* sysdeps/unix/sysv/linux/i386/ld.abilist: Likewise.
	* sysdeps/unix/sysv/linux/i386/libBrokenLocale.abilist: Likewise.
	* sysdeps/unix/sysv/linux/i386/libanl.abilist: Likewise.
	* sysdeps/unix/sysv/linux/i386/libc.abilist: Likewise.
	* sysdeps/unix/sysv/linux/i386/libcrypt.abilist: Likewise.
	* sysdeps/unix/sysv/linux/i386/libdl.abilist: Likewise.
	* sysdeps/unix/sysv/linux/i386/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/i386/libnsl.abilist: Likewise.
	* sysdeps/unix/sysv/linux/i386/libpthread.abilist: Likewise.
	* sysdeps/unix/sysv/linux/i386/libresolv.abilist: Likewise.
	* sysdeps/unix/sysv/linux/i386/librt.abilist: Likewise.
	* sysdeps/unix/sysv/linux/i386/libthread_db.abilist: Likewise.
	* sysdeps/unix/sysv/linux/i386/libutil.abilist: Likewise.
	* sysdeps/unix/sysv/linux/ia64/ld.abilist: Likewise.
	* sysdeps/unix/sysv/linux/ia64/libBrokenLocale.abilist: Likewise.
	* sysdeps/unix/sysv/linux/ia64/libanl.abilist: Likewise.
	* sysdeps/unix/sysv/linux/ia64/libc.abilist: Likewise.
	* sysdeps/unix/sysv/linux/ia64/libcrypt.abilist: Likewise.
	* sysdeps/unix/sysv/linux/ia64/libdl.abilist: Likewise.
	* sysdeps/unix/sysv/linux/ia64/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/ia64/libnsl.abilist: Likewise.
	* sysdeps/unix/sysv/linux/ia64/libpthread.abilist: Likewise.
	* sysdeps/unix/sysv/linux/ia64/libresolv.abilist: Likewise.
	* sysdeps/unix/sysv/linux/ia64/librt.abilist: Likewise.
	* sysdeps/unix/sysv/linux/ia64/libthread_db.abilist: Likewise.
	* sysdeps/unix/sysv/linux/ia64/libutil.abilist: Likewise.
	* sysdeps/unix/sysv/linux/m68k/coldfire/ld.abilist: Likewise.
	* sysdeps/unix/sysv/linux/m68k/coldfire/libBrokenLocale.abilist:
	Likewise.
	* sysdeps/unix/sysv/linux/m68k/coldfire/libanl.abilist: Likewise.
	* sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist: Likewise.
	* sysdeps/unix/sysv/linux/m68k/coldfire/libcrypt.abilist: Likewise.
	* sysdeps/unix/sysv/linux/m68k/coldfire/libdl.abilist: Likewise.
	* sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/m68k/coldfire/libnsl.abilist: Likewise.
	* sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist: Likewise.
	* sysdeps/unix/sysv/linux/m68k/coldfire/libresolv.abilist: Likewise.
	* sysdeps/unix/sysv/linux/m68k/coldfire/librt.abilist: Likewise.
	* sysdeps/unix/sysv/linux/m68k/coldfire/libthread_db.abilist: Likewise.
	* sysdeps/unix/sysv/linux/m68k/coldfire/libutil.abilist: Likewise.
	* sysdeps/unix/sysv/linux/m68k/m680x0/ld.abilist: Likewise.
	* sysdeps/unix/sysv/linux/m68k/m680x0/libBrokenLocale.abilist:
	Likewise.
	* sysdeps/unix/sysv/linux/m68k/m680x0/libanl.abilist: Likewise.
	* sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist: Likewise.
	* sysdeps/unix/sysv/linux/m68k/m680x0/libcrypt.abilist: Likewise.
	* sysdeps/unix/sysv/linux/m68k/m680x0/libdl.abilist: Likewise.
	* sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/m68k/m680x0/libnsl.abilist: Likewise.
	* sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist: Likewise.
	* sysdeps/unix/sysv/linux/m68k/m680x0/libresolv.abilist: Likewise.
	* sysdeps/unix/sysv/linux/m68k/m680x0/librt.abilist: Likewise.
	* sysdeps/unix/sysv/linux/m68k/m680x0/libthread_db.abilist: Likewise.
	* sysdeps/unix/sysv/linux/m68k/m680x0/libutil.abilist: Likewise.
	* sysdeps/unix/sysv/linux/microblaze/ld.abilist: Likewise.
	* sysdeps/unix/sysv/linux/microblaze/libBrokenLocale.abilist: Likewise.
	* sysdeps/unix/sysv/linux/microblaze/libanl.abilist: Likewise.
	* sysdeps/unix/sysv/linux/microblaze/libc.abilist: Likewise.
	* sysdeps/unix/sysv/linux/microblaze/libcrypt.abilist: Likewise.
	* sysdeps/unix/sysv/linux/microblaze/libdl.abilist: Likewise.
	* sysdeps/unix/sysv/linux/microblaze/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/microblaze/libnsl.abilist: Likewise.
	* sysdeps/unix/sysv/linux/microblaze/libpthread.abilist: Likewise.
	* sysdeps/unix/sysv/linux/microblaze/libresolv.abilist: Likewise.
	* sysdeps/unix/sysv/linux/microblaze/librt.abilist: Likewise.
	* sysdeps/unix/sysv/linux/microblaze/libthread_db.abilist: Likewise.
	* sysdeps/unix/sysv/linux/microblaze/libutil.abilist: Likewise.
	* sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist: Likewise.
	* sysdeps/unix/sysv/linux/mips/mips32/ld.abilist: Likewise.
	* sysdeps/unix/sysv/linux/mips/mips32/libBrokenLocale.abilist:
	Likewise.
	* sysdeps/unix/sysv/linux/mips/mips32/libanl.abilist: Likewise.
	* sysdeps/unix/sysv/linux/mips/mips32/libcidn.abilist: Likewise.
	* sysdeps/unix/sysv/linux/mips/mips32/libcrypt.abilist: Likewise.
	* sysdeps/unix/sysv/linux/mips/mips32/libdl.abilist: Likewise.
	* sysdeps/unix/sysv/linux/mips/mips32/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/mips/mips32/libnsl.abilist: Likewise.
	* sysdeps/unix/sysv/linux/mips/mips32/libnss_compat.abilist: Likewise.
	* sysdeps/unix/sysv/linux/mips/mips32/libnss_db.abilist: Likewise.
	* sysdeps/unix/sysv/linux/mips/mips32/libnss_dns.abilist: Likewise.
	* sysdeps/unix/sysv/linux/mips/mips32/libnss_files.abilist: Likewise.
	* sysdeps/unix/sysv/linux/mips/mips32/libnss_hesiod.abilist: Likewise.
	* sysdeps/unix/sysv/linux/mips/mips32/libnss_nis.abilist: Likewise.
	* sysdeps/unix/sysv/linux/mips/mips32/libnss_nisplus.abilist: Likewise.
	* sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist: Likewise.
	* sysdeps/unix/sysv/linux/mips/mips32/libresolv.abilist: Likewise.
	* sysdeps/unix/sysv/linux/mips/mips32/librt.abilist: Likewise.
	* sysdeps/unix/sysv/linux/mips/mips32/libthread_db.abilist: Likewise.
	* sysdeps/unix/sysv/linux/mips/mips32/libutil.abilist: Likewise.
	* sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist: Likewise.
	* sysdeps/unix/sysv/linux/mips/mips64/libBrokenLocale.abilist:
	Likewise.
	* sysdeps/unix/sysv/linux/mips/mips64/libanl.abilist: Likewise.
	* sysdeps/unix/sysv/linux/mips/mips64/libcrypt.abilist: Likewise.
	* sysdeps/unix/sysv/linux/mips/mips64/libdl.abilist: Likewise.
	* sysdeps/unix/sysv/linux/mips/mips64/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/mips/mips64/libnsl.abilist: Likewise.
	* sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist: Likewise.
	* sysdeps/unix/sysv/linux/mips/mips64/librt.abilist: Likewise.
	* sysdeps/unix/sysv/linux/mips/mips64/libthread_db.abilist: Likewise.
	* sysdeps/unix/sysv/linux/mips/mips64/libutil.abilist: Likewise.
	* sysdeps/unix/sysv/linux/mips/mips64/n32/ld.abilist: Likewise.
	* sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist: Likewise.
	* sysdeps/unix/sysv/linux/mips/mips64/n32/libresolv.abilist: Likewise.
	* sysdeps/unix/sysv/linux/mips/mips64/n64/ld.abilist: Likewise.
	* sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist: Likewise.
	* sysdeps/unix/sysv/linux/mips/mips64/n64/libresolv.abilist: Likewise.
	* sysdeps/unix/sysv/linux/nios2/ld.abilist: Likewise.
	* sysdeps/unix/sysv/linux/nios2/libBrokenLocale.abilist: Likewise.
	* sysdeps/unix/sysv/linux/nios2/libanl.abilist: Likewise.
	* sysdeps/unix/sysv/linux/nios2/libc.abilist: Likewise.
	* sysdeps/unix/sysv/linux/nios2/libcrypt.abilist: Likewise.
	* sysdeps/unix/sysv/linux/nios2/libdl.abilist: Likewise.
	* sysdeps/unix/sysv/linux/nios2/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/nios2/libnsl.abilist: Likewise.
	* sysdeps/unix/sysv/linux/nios2/libpthread.abilist: Likewise.
	* sysdeps/unix/sysv/linux/nios2/libresolv.abilist: Likewise.
	* sysdeps/unix/sysv/linux/nios2/librt.abilist: Likewise.
	* sysdeps/unix/sysv/linux/nios2/libthread_db.abilist: Likewise.
	* sysdeps/unix/sysv/linux/nios2/libutil.abilist: Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist: Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc32/ld.abilist: Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc32/libBrokenLocale.abilist:
	Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc32/libanl.abilist: Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc32/libcrypt.abilist: Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc32/libdl.abilist: Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc32/libnsl.abilist: Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist:
	Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc32/libresolv.abilist:
	Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc32/librt.abilist: Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc32/libthread_db.abilist:
	Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc32/libutil.abilist: Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist:
	Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist:
	Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc64/ld-le.abilist: Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc64/ld.abilist: Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc64/libBrokenLocale-le.abilist:
	Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc64/libBrokenLocale.abilist:
	Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc64/libanl-le.abilist:
	Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc64/libanl.abilist: Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc64/libc-le.abilist: Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc64/libc.abilist: Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc64/libcrypt-le.abilist:
	Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc64/libcrypt.abilist: Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc64/libdl-le.abilist: Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc64/libdl.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/powerpc/powerpc64/libnsl-le.abilist:
	Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc64/libnsl.abilist: Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc64/libpthread-le.abilist:
	Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc64/libpthread.abilist:
	Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc64/libresolv-le.abilist:
	Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc64/libresolv.abilist:
	Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc64/librt-le.abilist: Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc64/librt.abilist: Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc64/libthread_db-le.abilist:
	Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc64/libthread_db.abilist:
	Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc64/libutil-le.abilist:
	Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc64/libutil.abilist: Likewise.
	* sysdeps/unix/sysv/linux/riscv/rv64/ld.abilist: Likewise.
	* sysdeps/unix/sysv/linux/riscv/rv64/libBrokenLocale.abilist:
	Likewise.
	* sysdeps/unix/sysv/linux/riscv/rv64/libanl.abilist: Likewise.
	* sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist: Likewise.
	* sysdeps/unix/sysv/linux/riscv/rv64/libcrypt.abilist: Likewise.
	* sysdeps/unix/sysv/linux/riscv/rv64/libdl.abilist: Likewise.
	* sysdeps/unix/sysv/linux/riscv/rv64/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/riscv/rv64/libnsl.abilist: Likewise.
	* sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist: Likewise.
	* sysdeps/unix/sysv/linux/riscv/rv64/libresolv.abilist: Likewise.
	* sysdeps/unix/sysv/linux/riscv/rv64/librt.abilist: Likewise.
	* sysdeps/unix/sysv/linux/riscv/rv64/libthread_db.abilist: Likewise.
	* sysdeps/unix/sysv/linux/riscv/rv64/libutil.abilist: Likewise.
	* sysdeps/unix/sysv/linux/s390/libanl.abilist: Likewise.
	* sysdeps/unix/sysv/linux/s390/s390-32/ld.abilist: Likewise.
	* sysdeps/unix/sysv/linux/s390/s390-32/libBrokenLocale.abilist:
	Likewise.
	* sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist: Likewise.
	* sysdeps/unix/sysv/linux/s390/s390-32/libcrypt.abilist: Likewise.
	* sysdeps/unix/sysv/linux/s390/s390-32/libdl.abilist: Likewise.
	* sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/s390/s390-32/libnsl.abilist: Likewise.
	* sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist: Likewise.
	* sysdeps/unix/sysv/linux/s390/s390-32/libresolv.abilist: Likewise.
	* sysdeps/unix/sysv/linux/s390/s390-32/librt.abilist: Likewise.
	* sysdeps/unix/sysv/linux/s390/s390-32/libthread_db.abilist: Likewise.
	* sysdeps/unix/sysv/linux/s390/s390-32/libutil.abilist: Likewise.
	* sysdeps/unix/sysv/linux/s390/s390-64/ld.abilist: Likewise.
	* sysdeps/unix/sysv/linux/s390/s390-64/libBrokenLocale.abilist:
	Likewise.
	* sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist: Likewise.
	* sysdeps/unix/sysv/linux/s390/s390-64/libcrypt.abilist: Likewise.
	* sysdeps/unix/sysv/linux/s390/s390-64/libdl.abilist: Likewise.
	* sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/s390/s390-64/libnsl.abilist: Likewise.
	* sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist: Likewise.
	* sysdeps/unix/sysv/linux/s390/s390-64/libresolv.abilist: Likewise.
	* sysdeps/unix/sysv/linux/s390/s390-64/librt.abilist: Likewise.
	* sysdeps/unix/sysv/linux/s390/s390-64/libthread_db.abilist: Likewise.
	* sysdeps/unix/sysv/linux/s390/s390-64/libutil.abilist: Likewise.
	* sysdeps/unix/sysv/linux/sh/ld.abilist: Likewise.
	* sysdeps/unix/sysv/linux/sh/libBrokenLocale.abilist: Likewise.
	* sysdeps/unix/sysv/linux/sh/libanl.abilist: Likewise.
	* sysdeps/unix/sysv/linux/sh/libc.abilist: Likewise.
	* sysdeps/unix/sysv/linux/sh/libcrypt.abilist: Likewise.
	* sysdeps/unix/sysv/linux/sh/libdl.abilist: Likewise.
	* sysdeps/unix/sysv/linux/sh/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/sh/libnsl.abilist: Likewise.
	* sysdeps/unix/sysv/linux/sh/libpthread.abilist: Likewise.
	* sysdeps/unix/sysv/linux/sh/libresolv.abilist: Likewise.
	* sysdeps/unix/sysv/linux/sh/librt.abilist: Likewise.
	* sysdeps/unix/sysv/linux/sh/libthread_db.abilist: Likewise.
	* sysdeps/unix/sysv/linux/sh/libutil.abilist: Likewise.
	* sysdeps/unix/sysv/linux/sparc/sparc32/ld.abilist: Likewise.
	* sysdeps/unix/sysv/linux/sparc/sparc32/libBrokenLocale.abilist:
	Likewise.
	* sysdeps/unix/sysv/linux/sparc/sparc32/libanl.abilist: Likewise.
	* sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist: Likewise.
	* sysdeps/unix/sysv/linux/sparc/sparc32/libcrypt.abilist: Likewise.
	* sysdeps/unix/sysv/linux/sparc/sparc32/libdl.abilist: Likewise.
	* sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/sparc/sparc32/libnsl.abilist: Likewise.
	* sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist: Likewise.
	* sysdeps/unix/sysv/linux/sparc/sparc32/libresolv.abilist: Likewise.
	* sysdeps/unix/sysv/linux/sparc/sparc32/librt.abilist: Likewise.
	* sysdeps/unix/sysv/linux/sparc/sparc32/libthread_db.abilist: Likewise.
	* sysdeps/unix/sysv/linux/sparc/sparc32/libutil.abilist: Likewise.
	* sysdeps/unix/sysv/linux/sparc/sparc64/ld.abilist: Likewise.
	* sysdeps/unix/sysv/linux/sparc/sparc64/libBrokenLocale.abilist:
	Likewise.
	* sysdeps/unix/sysv/linux/sparc/sparc64/libanl.abilist: Likewise.
	* sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist: Likewise.
	* sysdeps/unix/sysv/linux/sparc/sparc64/libcrypt.abilist: Likewise.
	* sysdeps/unix/sysv/linux/sparc/sparc64/libdl.abilist: Likewise.
	* sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/sparc/sparc64/libnsl.abilist: Likewise.
	* sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist: Likewise.
	* sysdeps/unix/sysv/linux/sparc/sparc64/libresolv.abilist: Likewise.
	* sysdeps/unix/sysv/linux/sparc/sparc64/librt.abilist: Likewise.
	* sysdeps/unix/sysv/linux/sparc/sparc64/libthread_db.abilist: Likewise.
	* sysdeps/unix/sysv/linux/sparc/sparc64/libutil.abilist: Likewise.
	* sysdeps/unix/sysv/linux/x86_64/64/ld.abilist: Likewise.
	* sysdeps/unix/sysv/linux/x86_64/64/libBrokenLocale.abilist: Likewise.
	* sysdeps/unix/sysv/linux/x86_64/64/libanl.abilist: Likewise.
	* sysdeps/unix/sysv/linux/x86_64/64/libc.abilist: Likewise.
	* sysdeps/unix/sysv/linux/x86_64/64/libcrypt.abilist: Likewise.
	* sysdeps/unix/sysv/linux/x86_64/64/libdl.abilist: Likewise.
	* sysdeps/unix/sysv/linux/x86_64/64/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/x86_64/64/libnsl.abilist: Likewise.
	* sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist: Likewise.
	* sysdeps/unix/sysv/linux/x86_64/64/libresolv.abilist: Likewise.
	* sysdeps/unix/sysv/linux/x86_64/64/librt.abilist: Likewise.
	* sysdeps/unix/sysv/linux/x86_64/64/libthread_db.abilist: Likewise.
	* sysdeps/unix/sysv/linux/x86_64/64/libutil.abilist: Likewise.
	* sysdeps/unix/sysv/linux/x86_64/libmvec.abilist: Likewise.
	* sysdeps/unix/sysv/linux/x86_64/x32/ld.abilist: Likewise.
	* sysdeps/unix/sysv/linux/x86_64/x32/libBrokenLocale.abilist: Likewise.
	* sysdeps/unix/sysv/linux/x86_64/x32/libanl.abilist: Likewise.
	* sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist: Likewise.
	* sysdeps/unix/sysv/linux/x86_64/x32/libcrypt.abilist: Likewise.
	* sysdeps/unix/sysv/linux/x86_64/x32/libdl.abilist: Likewise.
	* sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/x86_64/x32/libnsl.abilist: Likewise.
	* sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist: Likewise.
	* sysdeps/unix/sysv/linux/x86_64/x32/libresolv.abilist: Likewise.
	* sysdeps/unix/sysv/linux/x86_64/x32/librt.abilist: Likewise.
	* sysdeps/unix/sysv/linux/x86_64/x32/libthread_db.abilist: Likewise.
	* sysdeps/unix/sysv/linux/x86_64/x32/libutil.abilist: Likewise.
2018-05-04 15:46:32 +00:00
Stefan Liebler
1660901840 Fix blocking pthread_join. [BZ #23137]
On s390 (31bit) if glibc is build with -Os, pthread_join sometimes
blocks indefinitely. This is e.g. observable with
testcase intl/tst-gettext6.

pthread_join is calling lll_wait_tid(tid), which performs the futex-wait
syscall in a loop as long as tid != 0 (thread is alive).

On s390 (and build with -Os), tid is loaded from memory before
comparing against zero and then the tid is loaded a second time
in order to pass it to the futex-wait-syscall.
If the thread exits in between, then the futex-wait-syscall is
called with the value zero and it waits until a futex-wake occurs.
As the thread is already exited, there won't be a futex-wake.

In lll_wait_tid, the tid is stored to the local variable __tid,
which is then used as argument for the futex-wait-syscall.
But unfortunately the compiler is allowed to reload the value
from memory.

With this patch, the tid is loaded with atomic_load_acquire.
Then the compiler is not allowed to reload the value for __tid from memory.

ChangeLog:

	[BZ #23137]
	* sysdeps/nptl/lowlevellock.h (lll_wait_tid):
	Use atomic_load_acquire to load __tid.
2018-05-04 10:00:59 +02:00
H.J. Lu
15c19147a8 x86-64/swapcontext: Restore the pointer into %rdx after syscall
To prepare for shadow stack support, restore the pointer into %rdx after
syscall and use %rdx, instead of %rsi, to restore context.  There is no
functional change.

Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
Reviewed-by: Carlos O'Donell <carlos@redhat.com>

	* sysdeps/unix/sysv/linux/x86_64/swapcontext.S (__swapcontext):
	Restore the pointer into %rdx, after syscall and use %rdx,
	instead of %rsi, to restore context.
2018-05-02 06:26:19 -07:00
H.J. Lu
8b8f32b280 x86-64/setcontext: Pop the pointer into %rdx after syscall
To prepare for shadow stack support, pop the pointer into %rdx after
syscall and use %rdx, instead of %rsi, to restore context.  There is
no functional change.

Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
Reviewed-by: Carlos O'Donell <carlos@redhat.com>

	* sysdeps/unix/sysv/linux/x86_64/setcontext.S (__setcontext):
	Pop the pointer into %rdx after syscall and use %rdx, instead
	of %rsi, to restore context.
2018-05-02 06:21:24 -07:00
H.J. Lu
d6cc1829aa x86: Use pad in pthread_unwind_buf to preserve shadow stack register
The pad array in struct pthread_unwind_buf is used by setjmp to save
shadow stack register.  We assert that size of struct pthread_unwind_buf
is no less than offset of shadow stack pointer + shadow stack pointer
size.

Since functions, like LIBC_START_MAIN, START_THREAD_DEFN as well as
these with thread cancellation, call setjmp, but never return after
__libc_unwind_longjmp, __libc_unwind_longjmp, which is defined as
__libc_longjmp on x86, doesn't need to restore shadow stack register.
__libc_longjmp, which is a private interface for thread cancellation
implementation in libpthread, is changed to call __longjmp_cancel,
instead of __longjmp.  __longjmp_cancel is a new internal function
in libc, which is similar to __longjmp, but doesn't restore shadow
stack register.

The compatibility longjmp and siglongjmp in libpthread.so are changed
to call __libc_siglongjmp, instead of __libc_longjmp, so that they will
restore shadow stack register.

Tested with build-many-glibcs.py.

Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
Reviewed-by: Carlos O'Donell <carlos@redhat.com>

	* nptl/pthread_create.c (START_THREAD_DEFN): Clear previous
	handlers after setjmp.
	* setjmp/longjmp.c (__libc_longjmp): Don't define alias if
	defined.
	* sysdeps/unix/sysv/linux/x86/setjmpP.h: Include
	<libc-pointer-arith.h>.
	(_JUMP_BUF_SIGSET_BITS_PER_WORD): New.
	(_JUMP_BUF_SIGSET_NSIG): Changed to 96.
	(_JUMP_BUF_SIGSET_NWORDS): Changed to use ALIGN_UP and
	_JUMP_BUF_SIGSET_BITS_PER_WORD.
	* sysdeps/x86/Makefile (sysdep_routines): Add __longjmp_cancel.
	* sysdeps/x86/__longjmp_cancel.S: New file.
	* sysdeps/x86/longjmp.c: Likewise.
	* sysdeps/x86/nptl/pt-longjmp.c: Likewise.
2018-05-02 06:17:41 -07:00
Adhemerval Zanella
cf2478d53a Deprecate ustat syscall interface
As for sysctl, ustat has been deprecated in favor of {f}statfs.  Also
some newer ports which uses generic interface builds a stub version that
returns ENOSYS.

This patch deprecates ustat interface by removing ustat.h related headers,
adding a compatibility symbol, and avoiding new ports to build and provide
the symbol.

Checked on x86_64-linux-gnu and i686-linux-gnu.  Also checked with a
check-abi on all affected ABIs.

	* NEWS: Add ustat.h deprecation entry.
	* bits/ustat.h: Remove file.
	* misc/sys/ustat.h: Likewise.
	* misc/ustat.h: Likewise.
	* sysdeps/unix/sysv/linux/generic/ustat.c: Likewise.
	* misc/Makefile (headers): Remove ustat.h and sys/ustat.h.
	* misc/ustat.c (__ustat): Rename to __old_ustat and export only in
	compatibility mode.
	* sysdeps/unix/sysv/linux/ustat.c (__ustat): Likewise.
	* sysdeps/unix/sysv/linux/mips/ustat.c: Define DEV_TO_KDEV and use
	generic Linux implementation.
2018-05-02 08:43:31 -03:00
Adhemerval Zanella
c57bf7c15b Consolidate Linux readahead implementation
This patch consolidate Linux readahead implementation on generic
sysdeps/unix/sysv/linux/readahead.c one.  The changes are:

  - Assume __NR_readahead existence with current minimum kernel of 3.2
    for all architectures.

  - Use INLINE_SYSCALL_CALL, __ALIGNMENT_ARG, and SYSCALL_LL64 to pass
    the 64 bit offset.  This allows architectures with different abis
    to use the same implementation.

  - Remove arch-specific readahead implementations.

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

	* sysdeps/unix/sysv/linux/arm/readahead.c: Remove file.
	* sysdeps/unix/sysv/linux/mips/mips32/readahead.c: Likewise.
	* sysdeps/unix/sysv/linux/mips/mips64/n32/syscalls.list (readahead):
	Remove.
	* sysdeps/unix/sysv/linux/mips/mips64/n64/syscalls.list: Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc32/syscalls.list: Likewise.
	* sysdeps/unix/sysv/linux/wordsize-64/syscalls.list: Likewise.
	* sysdeps/unix/sysv/linux/readahead.c (__readahead): Assume
	__NR_readahead existence, and use INLINE_SYSCALL_CALL, __ALIGNMENT_ARG,
	and SYSCALL_LL64.
2018-04-27 17:38:43 -03:00
Gabriel F. T. Gomes
3a33b06969 powerpc64*: fix the order of implied sysdeps directories
The creation of the divergent sysdeps directory for powerpc64le

commit 2f7f3cd8cd
Author: Paul E. Murphy <murphyp@linux.vnet.ibm.com>
Date:   Fri Jul 15 18:04:40 2016 -0500

    powerpc64le: Create divergent sysdep directory for powerpc64le.

allowed float128 to be enabled for powerpc64le (little-endian) and not
for powerpc64 (big-endian).  Since the only intended difference between
them was the presence or absence of the float128 interface, the sysdeps
directory for powerpc64le explicitly reused the files from powerpc64
(through the use of Implies files).

Although this works, it also means that files under the powerpc64
directory might be preferred over files under powerpc64le.  For
instance, on a build for powerpc64le with target set to power9, a file
from powerpc64/power5 might get built, even though a file with the same
name exists in powerpc64le/power8.  That happens because the processor
hierarchy was only defined in the sysdeps directory for powerpc64 (and
borrowed by powerpc64le).

This patch fixes this behavior, by creating new subdirectories under
powerpc64 (i.e.: powerpc64/be and powerpc64/le) and creating new Implies
files to provide the hierarchy of processors for powerpc64 and
powerpc64le separately.  These changes have no effect on installed,
stripped binaries (which remain unchanged).

Tested that installed stripped binaries are unchanged and that there are
no regressions on powerpc64 and powerpc64le.
2018-04-27 16:32:01 -03:00
Joseph Myers
a3fb6b6bc3 Remove tilegx port.
Since tile support has been removed from the Linux kernel for 4.17,
this patch removes the (unmaintained) port to tilegx from glibc (the
tilepro support having been previously removed).  This reflects the
general principle that a glibc port needs upstream support for the
architecture in all the components it build-depends on (so binutils,
GCC and the Linux kernel, for the normal case of a port supporting the
Linux kernel but no other OS), in order to be maintainable.

Apart from removal of sysdeps/tile and sysdeps/unix/sysv/linux/tile,
there are updates to various comments referencing tile for which
removal of those references seemed appropriate.  The configuration is
removed from README and from build-many-glibcs.py.  contrib.texi keeps
mention of removed contributions, but I updated Chris Metcalf's entry
to reflect that he also contributed the non-removed support for the
generic Linux kernel syscall interface.
__ASSUME_FADVISE64_64_NO_ALIGN support is removed, as it was only used
by tile.

	* sysdeps/tile: Remove.
	* sysdeps/unix/sysv/linux/tile: Likewise.
	* README (tilegx-*-linux-gnu): Remove from list of supported
	configurations.
	* manual/contrib.texi (Contributors): Mention Chris Metcalf's
	contribution of support for generic Linux kernel syscall
	interface.
	* scripts/build-many-glibcs.py (Context.add_all_configs): Remove
	tilegx configurations.
	(Config.install_linux_headers): Do not handle tile.
	* sysdeps/unix/sysv/linux/aarch64/ldsodefs.h: Do not mention Tile
	in comment.
	* sysdeps/unix/sysv/linux/nios2/Makefile: Likewise.
	* sysdeps/unix/sysv/linux/posix_fadvise.c: Likewise.
	[__ASSUME_FADVISE64_64_NO_ALIGN] (__ALIGNMENT_ARG): Remove
	conditional undefine and redefine.
	* sysdeps/unix/sysv/linux/posix_fadvise64.c: Do not mention Tile
	in comment.
	[__ASSUME_FADVISE64_64_NO_ALIGN] (__ALIGNMENT_ARG): Remove
	conditional undefine and redefine.
2018-04-27 19:11:24 +00:00
Tulio Magno Quites Machado Filho
81b49e9692 Increase robustness of internal dlopen() by using RTLD_NOW [BZ #22766]
Prevent random runtime crashes due to missing symbols caused by mixed
libnss_* versions.

	[BZ #22766]
	* include/dlfcn.h [__libc_dl_open]: Replace RTLD_LAZY with RTLD_NOW.
	* sysdeps/gnu/unwind-resume.c (__lib_gcc_s_init): Replace
	__libc_dlopen_mode() using RTLD_NOW with __libc_dlopen.
	* sysdeps/nptl/unwind-forcedunwind.c: Likewise.

Signed-off-by: Tulio Magno Quites Machado Filho <tuliom@linux.ibm.com>
Reviewed-by: Carlos O'Donell <carlos@redhat.com>
2018-04-26 10:41:43 -03:00
Adhemerval Zanella
7d80f48e93 Consolidate getdirentries{64} implementation
This patch consolidates Linux getdirentries{64} implementation on just
the default sysdeps/unix/sysv/linux/getdirentries{64} ones.  The default
implementation handles the Linux requirements:

  * getdirentries is only built for _DIRENT_MATCHES_DIRENT64 being 0.

  * getdirentries64 is always built and aliased to getdents for ABIs
    that define _DIRENT_MATCHES_DIRENT64 to 1.

Checked on aarch64-linux-gnu, x86_64-linux-gnu, i686-linux-gnu,
sparcv9-linux-gnu, sparc64-linux-gnu, powerpc-linux-gnu, and
powerpc64le-linux-gnu.

	* sysdeps/unix/sysv/linux/getdirentries.c (getdirentries): Build iff
	_DIRENT_MATCHES_DIRENT64 is not defined.
	* sysdeps/unix/sysv/linux/getdirentries64.c (getdirentries64): Open
	implementation and alias to getdirentries if _DIRENT_MATCHES_DIRENT64
	is defined.
	* sysdeps/unix/sysv/linux/wordsize-64/getdirentries.c: Remove file.
	* sysdeps/unix/sysv/linux/wordsize-64/getdirentries64.c: Remove file.
2018-04-25 17:55:33 -03:00
Joseph Myers
5e14bb9793 Fix Hurd glibc build with GCC 8.
The build of glibc for Hurd has been failing with GCC mainline because
of the checks that aliases have the same type as the symbol aliased;
the Hurd dl-sysdep.c has a macro that defines aliases without using
the proper type.  When GCC 8 branches (soon), I intend to make it the
default version in build-many-glibcs.py, so these failures would mean
the default build-many-glibcs.py build fails for Hurd again.

This patch fixes the Hurd build with GCC 8 by changing the macro that
defines the problem aliases to use the correct type for them.  An
include of <not-errno.h> is needed to avoid this use of typeof
resulting in an error for __access_noerrno not being declared.

Tested compilation for i686-gnu with build-many-glibcs.py.

	* sysdeps/mach/hurd/dl-sysdep.c: Include <not-errno.h>.
	(check_no_hidden): Use type of original function when declaring
	alias.
2018-04-24 16:33:47 +00:00
Joseph Myers
9320ca88a1 Add PTRACE_SECCOMP_GET_METADATA from Linux 4.16 to sys/ptrace.h.
This patch adds the PTRACE_SECCOMP_GET_METADATA constant from Linux
4.16 to all relevant sys/ptrace.h files.  A type struct
__ptrace_seccomp_metadata, analogous to other such types, is also
added.

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

	* sysdeps/unix/sysv/linux/sys/ptrace.h
	(PTRACE_SECCOMP_GET_METADATA): New enum value and macro.
	* sysdeps/unix/sysv/linux/bits/ptrace-shared.h
	(struct __ptrace_seccomp_metadata): New type.
	* sysdeps/unix/sysv/linux/aarch64/sys/ptrace.h
	(PTRACE_SECCOMP_GET_METADATA): Likewise.
	* sysdeps/unix/sysv/linux/arm/sys/ptrace.h
	(PTRACE_SECCOMP_GET_METADATA): Likewise.
	* sysdeps/unix/sysv/linux/ia64/sys/ptrace.h
	(PTRACE_SECCOMP_GET_METADATA): Likewise.
	* sysdeps/unix/sysv/linux/powerpc/sys/ptrace.h
	(PTRACE_SECCOMP_GET_METADATA): Likewise.
	* sysdeps/unix/sysv/linux/s390/sys/ptrace.h
	(PTRACE_SECCOMP_GET_METADATA): Likewise.
	* sysdeps/unix/sysv/linux/sparc/sys/ptrace.h
	(PTRACE_SECCOMP_GET_METADATA): Likewise.
	* sysdeps/unix/sysv/linux/tile/sys/ptrace.h
	(PTRACE_SECCOMP_GET_METADATA): Likewise.
	* sysdeps/unix/sysv/linux/x86/sys/ptrace.h
	(PTRACE_SECCOMP_GET_METADATA): Likewise.
2018-04-24 12:11:35 +00:00
Adhemerval Zanella
af7e376b00 Consolidate alphasort{64} and versionsort{64} implementation
This patch consolidates both alphasort{64} and versionsort{64}
implementation on just the default dirent/alphasort{64}c and
dirent/versionsort{64} respectively.  It changes the logic
to follow the conventions used on other code consolidation:

  * the non-LFS variant is only built for _DIRENT_MATCHES_DIRENT64 being 0.

  * the LFS variant is always built and aliased to getdents for ABIs
    that define _DIRENT_MATCHES_DIRENT64 to 1.

Also on Linux the compat symbol for old non-LFS dirent64 definition
requires a platform-specific scandir64.c.  For powerpc32 and sparcv9
it requires to add specific arch-implementation to override the
generic Linux one because neither ABI exports an compat symbol for
non-LFS alphasort64 and versionsort64 variant.  It is most likely a
bug and it is also not one that can be fixed (in that there would be
existing binaries expecting both meanings of that symbol at its single
existing version, with binaries expecting the new meaning probably much
more common than those expecting the original meaning of that symbol at
that version).

Checked on aarch64-linux-gnu, x86_64-linux-gnu, i686-linux-gnu,
sparcv9-linux-gnu, sparc64-linux-gnu, powerpc-linux-gnu, and
powerpc64le-linux-gnu.

	* dirent/alphasort.c (alphasort): Build iff _DIRENT_MATCHES_DIRENT64 is
	defined.
	* dirent/versionsort.c (versionsort): Likewise.
	* dirent/alphasort64.c (alphasort64): Build regardless and alias to
	alphasort if _DIRENT_MATCHES_DIRENT64 is defined.
	* dirent/versionsort64.c (versionsort64): Likewise.
	* sysdeps/unix/sysv/linux/i386/alphasort64.c: Remove file.
	* sysdeps/unix/sysv/linux/arm/alphasort64.c: Likewise.
	* sysdeps/unix/sysv/linux/arm/versionsort64.c: Likewise.
	* sysdeps/unix/sysv/linux/m68k/alphasort64.c: Likewise.
	* sysdeps/unix/sysv/linux/m68k/versionsort64.c: Likewise.
	* sysdeps/unix/sysv/linux/s390/s390-32/alphasort64.c: Likewise.
	* sysdeps/unix/sysv/linux/s390/s390-32/versionsort64.c: Likewise.
	* sysdeps/unix/sysv/linux/i386/versionsort64.c: Likewise.
	* sysdeps/unix/sysv/linux/alphasort64.c: New file.
	* sysdeps/unix/sysv/linux/versionsort64.c: Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc32/alphasort64.c: Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc32/versionsort64.c: Likewise.
	* sysdeps/unix/sysv/linux/sparc/sparc32/alphasort64.c: Likewise.
	* sysdeps/unix/sysv/linux/sparc/sparc32/versionsort64.c: Likewise.
2018-04-23 17:35:16 -03:00
Joseph Myers
573963e32f Define XTABS to TAB3 on alpha to match Linux 4.16.
This patch makes the alpha bits/termios.h define XTABS to TAB3, so
matching a change made in Linux 4.16 as well as matching other
architectures where the values are already equal.

Tested with build-many-glibcs.py for alpha-linux-gnu.

	* sysdeps/unix/sysv/linux/alpha/bits/termios.h [__USE_MISC]
	(XTABS): Define to TAB3.
2018-04-20 19:52:02 +00:00
Adhemerval Zanella
0900a84959 Update hppa libm-test-ulps
* sysdeps/hppa/fpu/libm-test-ulps: Update.
2018-04-20 15:36:41 -03:00
Adhemerval Zanella
c0123b3b11 Consolidate scandir{at}{64} implementation
This patch consolidates scandir{at}{64} implementation on just
the default dirent/scandir{at}{64}{_r}.c ones.  It changes the logic
to follow the conventions used on other code consolidation:

  * scandir{at} is only built for _DIRENT_MATCHES_DIRENT64 being 0.

  * scandir{at}{64} is always built and aliased to getdents for ABIs
    that define _DIRENT_MATCHES_DIRENT64 to 1.

Also on Linux the compat symbol for old non-LFS dirent64 definition
requires a platform-specific scandir64.c.

Checked on aarch64-linux-gnu, x86_64-linux-gnu, i686-linux-gnu,
sparcv9-linux-gnu, sparc64-linux-gnu, powerpc-linux-gnu, and
powerpc64le-linux-gnu.

	* dirent/scandir-tail-common.c: New file.
	* dirent/scandir-tail.c: Use scandir-tail-common.c.
	(__scandir_tail): Build iff _DIRENT_MATCHES_DIRENT64 is not defined.
	* dirent/scandir.c: Use scandir-tail-common.c.
	* dirent/scandirat.c: Likewise.
	* dirent/scandir64-tail.c: Use scandir-tail-common.c.
	* dirent/scandir64.c (scandir64): Always build and alias to scandir
	if _DIRENT_MATCHES_DIRENT64 is defined.
	* dirent/scandirat64.c (scandirat64): Likewise.
	* include/dirent.h (__scandir_tail): Only define iff
	_DIRENT_MATCHES_DIRENT64 is not defined.
	(__scandir64_tail): Define regardless.
	(__scandirat, scandirat64): Remove libc_hidden_proto.
	* sysdeps/unix/sysv/linux/arm/scandir64.c: Remove file.
	* sysdeps/unix/sysv/linux/m68k/scandir64.c: Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc32/scandir64.c: Likewise.
	* sysdeps/unix/sysv/linux/s390/s390-32/scandir64.c: Likewise.
	* sysdeps/unix/sysv/linux/i386/scandir64.c: Likewise.
	* sysdeps/unix/sysv/linux/sparc/sparc32/scandir64.c: Likewise.
	* sysdeps/unix/sysv/linux/scandir64.c: New file.
2018-04-20 13:57:12 -03:00
Joseph Myers
458b94f63e Update aarch64 bits/hwcap.h, dl-procinfo.c for Linux 4.16 HWCAP_ASIMDFHM.
This patch updates the aarch64 bits/hwcap.h and dl-procinfo.c for the
new HWCAP_ASIMDFHM value in Linux 4.16.

Tested with build-many-glibcs.py for aarch64-linux-gnu.

	* sysdeps/unix/sysv/linux/aarch64/bits/hwcap.h (HWCAP_ASIMDFHM):
	New macro.
	* sysdeps/unix/sysv/linux/aarch64/dl-procinfo.c (_DL_HWCAP_COUNT):
	Increase to 24.
	(_dl_aarch64_cap_flags): Add asimdfhm.
2018-04-20 16:36:00 +00:00
Samuel Thibault
f00b62ec89 hurd: XFAIL appearance of sched_param and sched_priority from <sys/types.h>
Reported at BZ #23088.

	* sysdeps/mach/hurd/i386/Makefile
	(test-xfail-POSIX/fcntl.h/conform): Add.
	(test-xfail-POSIX/signal.h/conform): Add.
	(test-xfail-POSIX/semaphore.h/conform): Add.
	(test-xfail-POSIX/regex.h/conform): Add.
	(test-xfail-POSIX/aio.h/conform): Add.
	(test-xfail-POSIX/mqueue.h/conform): Add.
	(test-xfail-POSIX/sys/types.h/conform): Add.
	(test-xfail-UNIX98/fcntl.h/conform): Add.
	(test-xfail-UNIX98/netdb.h/conform): Add.
	(test-xfail-UNIX98/signal.h/conform): Add.
	(test-xfail-UNIX98/semaphore.h/conform): Add.
	(test-xfail-UNIX98/regex.h/conform): Add.
	(test-xfail-UNIX98/aio.h/conform): Add.
	(test-xfail-UNIX98/ftw.h/conform): Add.
	(test-xfail-UNIX98/mqueue.h/conform): Add.
	(test-xfail-UNIX98/netinet/in.h/conform): Add.
	(test-xfail-UNIX98/sys/wait.h/conform): Add.
	(test-xfail-UNIX98/sys/sem.h/conform): Add.
	(test-xfail-UNIX98/sys/uio.h/conform): Add.
	(test-xfail-UNIX98/sys/socket.h/conform): Add.
	(test-xfail-UNIX98/sys/types.h/conform): Add.
	(test-xfail-UNIX98/stdlib.h/conform): Add.
	(test-xfail-UNIX98/arpa/inet.h/conform): Add.
	(test-xfail-POSIX2008/fcntl.h/conform): Add.
	(test-xfail-POSIX2008/netdb.h/conform): Add.
	(test-xfail-POSIX2008/signal.h/conform): Add.
	(test-xfail-POSIX2008/semaphore.h/conform): Add.
	(test-xfail-POSIX2008/regex.h/conform): Add.
	(test-xfail-POSIX2008/aio.h/conform): Add.
	(test-xfail-POSIX2008/mqueue.h/conform): Add.
	(test-xfail-POSIX2008/netinet/in.h/conform): Add.
	(test-xfail-POSIX2008/sys/wait.h/conform): Add.
	(test-xfail-POSIX2008/sys/socket.h/conform): Add.
	(test-xfail-POSIX2008/sys/types.h/conform): Add.
	(test-xfail-POSIX2008/arpa/inet.h/conform): Add.
	(test-xfail-XOPEN2K/fcntl.h/conform): Add.
	(test-xfail-XOPEN2K/netdb.h/conform): Add.
	(test-xfail-XOPEN2K/signal.h/conform): Add.
	(test-xfail-XOPEN2K/semaphore.h/conform): Add.
	(test-xfail-XOPEN2K/regex.h/conform): Add.
	(test-xfail-XOPEN2K/aio.h/conform): Add.
	(test-xfail-XOPEN2K/ftw.h/conform): Add.
	(test-xfail-XOPEN2K/mqueue.h/conform): Add.
	(test-xfail-XOPEN2K/netinet/in.h/conform): Add.
	(test-xfail-XOPEN2K/sys/wait.h/conform): Add.
	(test-xfail-XOPEN2K/sys/sem.h/conform): Add.
	(test-xfail-XOPEN2K/sys/uio.h/conform): Add.
	(test-xfail-XOPEN2K/sys/socket.h/conform): Add.
	(test-xfail-XOPEN2K/sys/types.h/conform): Add.
	(test-xfail-XOPEN2K/stdlib.h/conform): Add.
	(test-xfail-XOPEN2K/arpa/inet.h/conform): Add.
	(test-xfail-XOPEN2K8/fcntl.h/conform): Add.
	(test-xfail-XOPEN2K8/netdb.h/conform): Add.
	(test-xfail-XOPEN2K8/signal.h/conform): Add.
	(test-xfail-XOPEN2K8/semaphore.h/conform): Add.
	(test-xfail-XOPEN2K8/regex.h/conform): Add.
	(test-xfail-XOPEN2K8/aio.h/conform): Add.
	(test-xfail-XOPEN2K8/ftw.h/conform): Add.
	(test-xfail-XOPEN2K8/mqueue.h/conform): Add.
	(test-xfail-XOPEN2K8/netinet/in.h/conform): Add.
	(test-xfail-XOPEN2K8/sys/wait.h/conform): Add.
	(test-xfail-XOPEN2K8/sys/sem.h/conform): Add.
	(test-xfail-XOPEN2K8/sys/uio.h/conform): Add.
	(test-xfail-XOPEN2K8/sys/socket.h/conform): Add.
	(test-xfail-XOPEN2K8/sys/types.h/conform): Add.
	(test-xfail-XOPEN2K8/stdlib.h/conform): Add.
	(test-xfail-XOPEN2K8/arpa/inet.h/conform): Add.
2018-04-20 01:56:57 +02:00
Samuel Thibault
c5896a4595 Revert "hurd: Fix mach installed headers test"
This reverts commit d4379e0216: the proper
headers are actually already getting installed.
2018-04-20 01:27:13 +02:00
Samuel Thibault
81b032c833 Drop fpregset unused symbol exposition
* sysdeps/arm/sys/ucontext.h: Remove fpregset struct name, unused and
	non-compliant.
	* sysdeps/i386/sys/ucontext.h: Likewise.
	* sysdeps/m68k/sys/ucontext.h: Likewise.
	* sysdeps/mips/sys/ucontext.h: Likewise.
	* sysdeps/unix/sysv/linux/hppa/sys/ucontext.h: Likewise.
2018-04-20 01:27:13 +02:00
Samuel Thibault
5dbfe13b35 hurd: Fix hurd installed headers test
* sysdeps/hurd/include/hurd.h [!_ISOMAC]: Do not declare libc hidden
	prototypes.
	* sysdeps/hurd/include/hurd/fd.h [!_ISOMAC]: Likewise.
	* sysdeps/hurd/include/hurd/signal.h [!_ISOMAC]: Likewise.
2018-04-20 00:16:40 +02:00
Samuel Thibault
5cd2931ab8 hurd: fix sigevent's sigev_notify_attributes field type
* sysdeps/pthread/bits/types/sigevent_t.h: New file, based on the
	generic version but include <bits/pthreadtypes.h> to make struct
	sigevent's sigev_notify_attributes field a pthread_attr_t*.
2018-04-19 21:43:44 +02:00
Chung-Lin Tang
9f0437e862 Update sysdeps/nios2/libm-test-ulps 2018-04-19 12:00:58 -07:00
Samuel Thibault
e60c3f2bb7 hurd: Avoid exposing all <sched.h> symbols from sys/types.h
* bits/sched.h: Include <bits/types/struct_sched_param.h> and move struct
	sched_param definition to it.
	* sysdeps/unix/sysv/linux/bits/sched.h: Likewise.
	* bits/types/struct_sched_param.h: New file.
	* sysdeps/htl/bits/types/struct___pthread_attr.h: Include
	<bits/types/struct_sched_param.h> instead of <sched.h>.
	* posix/Makefile (headers): Add bits/types/struct_sched_param.h.
2018-04-19 20:24:36 +02:00
Adhemerval Zanella
50511ca466 Fix mips64n32 getdents alias
Fix commit 298d0e3 for mips64n32, checked on a mips64n32-linux-gnu build.

	* sysdeps/unix/sysv/linux/mips/mips64/getdents64.c (__getdents64):
	Only alias to __getdents for _DIRENT_MATCHES_DIRENT64.
2018-04-19 15:21:07 -03:00
Samuel Thibault
77b9339028 hurd: Fix symbols exposition
* bits/in.h [!__USE_MISC]: Do not define struct ip_opts.
	* conform/data/netinet/in.h-data: Allow sin_ and sin6_ prefix.
	* sysdeps/gnu/bits/msq.h (struct msqid_ds): Use __wait_queue struct
	instead of wait_queue.
	* sysdeps/gnu/bits/shm.h (struct shmid_ds): Use __vm_area_struct
	instead of vm_area_struct.
2018-04-19 20:14:45 +02:00
Adhemerval Zanella
298d0e3129 Consolidate Linux getdents{64} implementation
This patch consolidates Linux getdents{64} implementation on just
the default sysdeps/unix/sysv/linux/getdents{64}{_r}.c ones.

Although this symbol is used only internally, the non-LFS version
still need to be build due the non-LFS getdirentries which requires
its semantic.

The non-LFS default implementation now uses the wordsize-32 as base
which uses getdents64 syscall plus adjustment for overflow (it allows
to use the same code for architectures that does not support non-LFS
getdents syscall).  It has two main differences to wordsize-32 one:

  - DIRENT_SET_DP_INO is added to handle alpha requirement to zero
    the padding.

  - alloca is removed by allocating a bounded temporary buffer (it
    increases stack usage by roughly 276 bytes).

The default implementation handle the Linux requirements:

  * getdents is only built for _DIRENT_MATCHES_DIRENT64 being 0.

  * getdents64 is always built and aliased to getdents for ABIs
    that define _DIRENT_MATCHES_DIRENT64 to 1.

  * A compat symbol is added for getdents64 for ABI that used to
    export the old non-LFS version.

Checked on aarch64-linux-gnu, x86_64-linux-gnu, i686-linux-gnu,
sparcv9-linux-gnu, sparc64-linux-gnu, powerpc-linux-gnu, and
powerpc64le-linux-gnu.

	* sysdeps/unix/sysv/linux/alpha/getdents.c: Add comments with alpha
	requirements.
	 (_DIRENT_MATCHES_DIRENT64): Undef
	* sysdeps/unix/sysv/linux/alpha/getdents64.c: Likewise.
	* sysdeps/unix/sysv/linux/arm/getdents64.c: Remove file.
	* sysdeps/unix/sysv/linux/generic/getdents.c: Likewise.
	* sysdeps/unix/sysv/linux/generic/getdents64.c: Likewise.
	* sysdeps/unix/sysv/linux/generic/wordsize-32/getdents.c: Likewise.
	* sysdeps/unix/sysv/linux/getdents.c: Simplify implementation by
	use getdents64 syscalls as base.
	* sysdeps/unix/sysv/linux/getdents64.c: Likewise and add compatibility
	symbol if required.
	* sysdeps/unix/sysv/linux/hppa/getdents64.c: Likewise.
	* sysdeps/unix/sysv/linux/i386/getdents64.c: Likewise.
	* sysdeps/unix/sysv/linux/m68k/getdents64.c: Likewise.
	* sysdeps/unix/sysv/linux/powerpc/getdents64.c: Likewise.
	* sysdeps/unix/sysv/linux/s390/s390-32/getdents64.c: Likewise.
	* sysdeps/unix/sysv/linux/sparc/sparc32/getdents64.c: Likewise.
	* sysdeps/unix/sysv/linux/wordsize-64/getdents.c: Likewise.
	* sysdeps/unix/sysv/linux/wordsize-64/getdents64.c: Likewise.
	* sysdeps/unix/sysv/linux/sparc/sparc64/get_clockfreq.c
	(__get_clockfreq_via_proc_openprom): Use __getdents64.
	* sysdeps/unix/sysv/linux/mips/mips64/getdents64.c: New file.
2018-04-19 08:49:52 -03:00
Samuel Thibault
f55a4fdefb hurd: Update struct statfs according to struct statvfs
* sysdeps/mach/hurd/bits/statfs.h (struct statfs): Make f_bsize,
	f_namemax, f_frsize, and f_flag fields unsigned long int instead of
	unsigned int.
	(struct statfs64): Likewise.
2018-04-19 02:25:03 +02:00
Samuel Thibault
9d9f8f03af hurd: Fix standard compliance of some statvfs fields
Standards require that the f_bsize, f_frsize, f_flag and f_namemax fields be
unsigned long.  They used to be only unsigned on hurd, which happens to be
compatible with unsigned long on the only existing, 32bit, port.  We can
thus merely fix the type.

	* sysdeps/mach/hurd/bits/statvfs.h (struct statvfs): Make f_bsize,
	f_namemax, f_frsize, and f_flag fields unsigned long int instead of
	unsigned int.
	(struct statvfs64): Likewise.
2018-04-19 02:05:54 +02:00
Samuel Thibault
0dd25301f6 hurd: xfail some structure fields ABI incompatibility with standards
* sysdeps/mach/hurd/i386/Makefile [$(subdir) = conform]
	(conformtest-xfail-conds): Add i386-gnu.
	* conform/data/fcntl.h-data (flock.l_type, flock.l_whence): XFAIL for
	i386-gnu.
	* conform/data/sys/ipc.h-data (ipc_perm.uid, ipc_perm.gid,
	ipc_perm.cuid, ipc_perm.cgid): Likewise.
	* conform/data/sys/msg.h-data (msqid_ds.msg_lspid,
	msqid_ds.msg_lrpid): Likewise.
	* conform/data/sys/shm.h-data (shmid_ds.shm_lpid, shmid_ds.shm_cpid):
	Likewise.
	* conform/data/sys/stat.h-data (stat.st_dev): Likewise.
	* conform/data/sys/statvfs.h-data (statvfs.f_fsid): Likewise.
2018-04-19 01:52:51 +02:00
Samuel Thibault
c15f10ee78 Revert "Fix sched_param"
This reverts commit 783c482030 which
accidentaly flew out.
2018-04-19 00:09:58 +02:00
Samuel Thibault
783c482030 Fix sched_param 2018-04-18 21:07:44 +02:00
Samuel Thibault
c4375964db hurd: Fix spurious installation of headers defining hidden prototypes
* sysdeps/mach/include/lock-intern.h: Move to include/.
	* sysdeps/mach/include/mach.h: Move to include/.
	* sysdeps/mach/include/mach/mig_support.h: Move to include/mach/.
	* sysdeps/mach/include/mach_error.h: Move to include/.
2018-04-18 02:07:17 +02:00
Adhemerval Zanella
743b9c2a98 arm: Remove ununsed ARM code in optimized implementation
This patch removes the ununsed ARM code path for armv6t2 memchr and
strlen and armv7 memch and strcmp.  In all implementation, the ARM
code is not used in any possible build (unless glibc is explicit
build with the non-documented NO_THUMB compiler flag) and for armv7
the resulting code either produces wrong results (memchr) and throw
build error (strcmp).

Checked on arm-linux-gnueabihf built targeting both armv6 and
armv7.

	* sysdeps/arm/armv6t2/memchr.S (memchr): Remove ARM code path.
	* sysdeps/arm/armv6t2/strlen.S (memchr): Likewise.
	* sysdeps/arm/armv7/multiarch/memchr_neon.S (memchr): Likewise.
	* sysdeps/arm/armv7/strcmp.S (strcmp): Likewise.
2018-04-16 17:24:31 -03:00
Patrick McGehearty
a14d8acd32 Improves __ieee754_exp(x) performance by 18-37% when |x| < 1.0397
Adds a fast path to e_exp.c when |x| < 1.03972053527832.
When values are tested in isolation, reduction in execution
time is: aarch 30%, sparc 18%, x86 37%.
When comparing benchtests/bench.out which includes values
outside that range, the gains are:
aarch 8%, sparc 5%, x86 9%.

make check is clean (no increase in ulp for any math test).
Testing 20M values for each rounding mode in that range shows
approximately one in 200 values is off by 1 ulp. No value tested
for exp(x) changed by 2 or more ulp.

No observed change in performance or accuracy for x outside
fast path range.

These changes will be active for all platforms that don't provide
their own exp() routines. They will also be active for ieee754
versions of ccos, ccosh, cosh, csin, csinh, sinh, exp10, gamma, and
erf.
2018-04-15 18:46:37 -04:00
DJ Delorie
a700e7cb37 Update kernel version in syscall-names.list to 4.16.
Linux 4.16 does not add any new syscalls; this patch updates the
version number in syscall-names.list to reflect that it's still
current for 4.16.

Tested for x86_64 (compilation with build-many-glibcs.py, using Linux
4.16).

	* sysdeps/unix/sysv/linux/syscall-names.list: Update kernel
	version to 4.16.
2018-04-12 15:25:50 -04:00
Stefan Liebler
d8abfab7d4 S390: Fix struct sigaction for 31bit in kernel_sigaction.h.
The recent commit b4a5d26d88
"linux: Consolidate sigaction implementation" changed the definition
of struct sigaction for s390 (31bit). Unfortunately the order of the
fields were wrong.

This leads to blocking testcases e.g. nptl/tst-sem11.
A thread which blocks due to sem_wait() is cancelled via pthread_cancel()
and the signal-handler sigcancel_handler (see <glibc-src>/nptl/nptl-init.c
is called.
But it just returns as the siginfo_t argument is not setup by the kernel.
Then the main-thread is blocking due to pthread_join().

The flag SA_SIGINFO is set in sa_flags in struct sigaction and
is copied to the "kernel_sigaction.h" struct by the sigaction() call,
but due to the wrong ordering of the struct fields,
the kernel does not recognize it.
2018-04-12 09:37:26 +02:00
Adhemerval Zanella
942de61a89 Consolidate Linux readdir{64}{_r} implementation
This patch consolidates Linux readdir{64}{_r} implementation on just
the default sysdeps/unix/sysv/linux/readdir{64}{_r}.c ones.  The
default implementation handle the Linux requirements:

  * readdir{_r} is only built for _DIRENT_MATCHES_DIRENT64 being 0.

  * readdir64{_r} is always built and aliased to readdir{_r} for
    ABI that define _DIRENT_MATCHES_DIRENT64.

  * A compat symbol is added for readdir64{_r} for ABI that used to
    export the old non-LFS version.

Checked on aarch64-linux-gnu, x86_64-linux-gnu, i686-linux-gnu,
sparcv9-linux-gnu, sparc64-linux-gnu, powerpc-linux-gnu, and
powerpc64le-linux-gnu.

	* sysdeps/posix/readdir.c (__READDIR, __GETDENTS, DIRENTY_TYPE,
	__READDIR_ALIAS): Undefine after usage.
	* sysdeps/posix/readdir_r.c (__READDIR_R, __GETDENTS, DIRENT_TYPE,
	__READDIR_R_ALIAS): Likewise.
	* sysdeps/unix/sysv/linux/arm/readdir64.c: Remove file.
	* sysdeps/unix/sysv/linux/arm/readdir64_r.c: Likewise.
	* sysdeps/unix/sysv/linux/m68k/readdir64.c: Likewise.
	* sysdeps/unix/sysv/linux/m68k/readdir64_r.c: Likewise.
	* sysdeps/unix/sysv/linux/powerpc/readdir64.c: Likewise.
	* sysdeps/unix/sysv/linux/powerpc/readdir64_r.c: Likewise.
	* sysdeps/unix/sysv/linux/i386/readdir64.c: Likewise.
	* sysdeps/unix/sysv/linux/i386/readdir64_r.c: Likewise.
	* sysdeps/unix/sysv/linux/s390/s390-32/readdir64.c: Likewise.
	* sysdeps/unix/sysv/linux/s390/s390-32/readdir64_r.c: Likewise.
	* sysdeps/unix/sysv/linux/sparc/sparc32/readdir64.c: Likewise.
	* sysdeps/unix/sysv/linux/sparc/sparc32/readdir64_r.c: Likewise.
	* sysdeps/unix/sysv/linux/wordsize-64/readdir.c: Likewise.
	* sysdeps/unix/sysv/linux/wordsize-64/readdir64.c: Likewise.
	* sysdeps/unix/sysv/linux/wordsize-64/readdir64_r.c: Likewise.
	* sysdeps/unix/sysv/linux/wordsize-64/readdir_r.c: Likewise.
	* sysdeps/unix/sysv/linux/readdir.c: New file.
	* sysdeps/unix/sysv/linux/readdir_r.c: Likewise.
	* sysdeps/unix/sysv/linux/readdir64.c: Add compat symbol if required.
	* sysdeps/unix/sysv/linux/readdir64_r.c: Likewise.
2018-04-06 17:49:02 -03:00
Adhemerval Zanella
243f59e5aa Update i386 libm-test-ulps.
Updated ulps after recent commit "[PATCH 1/7] sin/cos slow paths:
avoid slow paths for small inputs"
(19a8b9a300).

	* sysdeps/i386/i686/fpu/multiarch/libm-test-ulps: Update.
2018-04-06 17:24:15 -03:00
Adhemerval Zanella
bbc2062a75 Update SPARC libm-test-ulps.
* sysdeps/sparc/fpu/libm-test-ulps: Update.
2018-04-05 17:10:03 -03:00
Adhemerval Zanella
fa7c619978 Update ARM libm-test-ulps.
* sysdeps/arm/libm-test-ulps: Update.
2018-04-05 17:10:03 -03:00
Adhemerval Zanella
b4a5d26d88 linux: Consolidate sigaction implementation
This patch consolidates all Linux sigaction implementations on the default
sysdeps/unix/sysv/linux/sigaction.c.  The idea is remove redundant code
and simplify new ports addition by following the current generic
Linux User API (UAPI).

The UAPI for new ports defines a generic extensible sigaction struct as:

  struct sigaction
  {
    __sighandler_t sa_handler;
    unsigned long sa_flags;
  #ifdef SA_RESTORER
    void (*sa_restorer) (void);
  #endif
    sigset_t sa_mask;
  };

Where SA_RESTORER is just placed for compatibility reasons (news ports
should not add it).  A similar definition is used on generic
kernel_sigaction.h.

The user exported sigaction definition is not changed, so for most
architectures it requires an adjustment to kernel expected one for the
syscall.

The main changes are:

  - All architectures now define and use a kernel_sigaction struct meant
    for the syscall, even for the architectures where the user sigaction
    has the same layout of the kernel expected one (s390-64 and ia64).
    Although it requires more work for these architectures, it simplifies
    the generic implementation. Also, sigaction is hardly a hotspot where
    micro optimization would play an important role.

  - The generic kernel_sigaction definition is now aligned with expected
    UAPI one for newer ports, where SA_RESTORER and sa_restorer are not
    expected to be defined.  This means adding kernel_sigaction for
    current architectures that does define it (m68k, nios2, powerpc, s390,
    sh, sparc, and tile) and which rely on previous generic definition.

  - Remove old MIPS usage of sa_restorer.  This was removed since 2.6.27
    (2957c9e61ee9c - "[MIPS] IRIX: Goodbye and thanks for all the fish").

  - The remaining arch-specific sigaction.c are to handle ABI idiosyncrasies
    (like SPARC kernel ABI for rt_sigaction that requires an additional
    stub argument).

So for new ports the generic implementation should work if its uses
Linux UAPI.  If SA_RESTORER is still required (due some architecture
limitation), it should define its own kernel_sigaction.h, define it and
include generic header (assuming it still uses the default generic kernel
layout).

Checked on x86_64-linux-gnu, i686-linux-gnu, arm-linux-gnueabihf,
aarch64-linux-gnu, sparc64-linux-gnu, sparcv9-linux-gnu, powerpc-linux-gnu,
powerpc64-linux-gnu, ia64-linux-gnu and alpha-linux-gnu.  I also checked the
build on all remaining affected ABIs.

	* sysdeps/unix/sysv/linux/aarch64/sigaction.c: Use default Linux version
	as base implementation.
	* sysdeps/unix/sysv/linux/arm/sigaction.c: Likewise.
	* sysdeps/unix/sysv/linux/i386/sigaction.c: Likewise.
	* sysdeps/unix/sysv/linux/sparc/sparc32/sigaction.c: Likewise.
	* sysdeps/unix/sysv/linux/sparc/sparc64/sigaction.c: Likewise.
	* sysdeps/unix/sysv/linux/x86_64/sigaction.c: Likewise.
	* sysdeps/unix/sysv/linux/alpha/kernel_sigaction.h: Add include guards,
	remove unrequired definitions and update comments.
	* sysdeps/unix/sysv/linux/kernel_sigaction.h: Likewise.
	* sysdeps/unix/sysv/linux/mips/kernel_sigaction.h: Likewise.
	* sysdeps/unix/sysv/linux/ia64/kernel_sigaction.h: New file.
	* sysdeps/unix/sysv/linux/m68k/kernel_sigaction.h: Likewise.
	* sysdeps/unix/sysv/linux/nios2/kernel_sigaction.h: Likewise.
	* sysdeps/unix/sysv/linux/powerpc/kernel_sigaction: Likewise.
	* sysdeps/unix/sysv/linux/s390/kernel_sigaction.h: Likewise.
	* sysdeps/unix/sysv/linux/sh/kernel_sigaction.h: Likewise.
	* sysdeps/unix/sysv/linux/sparc/kernel_sigaction.h: Likewise.
	* sysdeps/unix/sysv/linux/tile/kernel_sigaction.h: Likewise.
	* sysdeps/unix/sysv/linux/ia64/sigaction.c: Remove file.
	* sysdeps/unix/sysv/linux/mips/sigaction.c: Likewise.
	* sysdeps/unix/sysv/linux/s390/s390-64/sigaction.c: Likewise.
	* sysdeps/unix/sysv/linux/sigaction.c: Add STUB, SET_SA_RESTORER,
	and RESET_SA_RESTORER hooks.
2018-04-05 17:09:50 -03:00
Stefan Liebler
db9e55ff36 S390: Regenerate ULPs.
Updated ulps after recent commit
"[PATCH 1/7] sin/cos slow paths: avoid slow paths for small inputs"
(19a8b9a300).

ChangeLog:

	* sysdeps/s390/fpu/libm-test-ulps: Regenerated.
2018-04-05 16:24:06 +02:00
Samuel Thibault
08e92e2443 Revert "hurd: Avoid PLTs for longjmp & siglongjmp"
This reverts commit e5f9508a32.
2018-04-05 09:38:58 +02:00
Samuel Thibault
c120981d72 hurd: Avoid PLT for dirfd
* include/dirent.h (dirfd): Add hidden proto.
	* dirent/dirfd.c (dirfd): Add hidden def.
	* sysdeps/mach/hurd/dirfd.c (dirfd): Add hidden def.
	* sysdeps/posix/dirfd.c (dirfd): Add hidden def.
2018-04-05 01:52:29 +02:00
Samuel Thibault
e5f9508a32 hurd: Avoid PLTs for longjmp & siglongjmp
* include/setjmp.h (longjmp, siglongjmp): Add hidden protos.
	* setjmp/longjmp.c (longjmp, siglongjmp): Add hidden defs.
	* sysdeps/s390/longjmp.c (longjmp, siglongjmp): Add hidden defs.
2018-04-04 23:19:18 +00:00
Tulio Magno Quites Machado Filho
b2fd61ca9b powerpc: Update sin, cos and sincos ULPs
* sysdeps/powerpc/fpu/libm-test-ulps: Increase double-precision
	sin, cos and sincos to 1 ULP.

Signed-off-by: Tulio Magno Quites Machado Filho <tuliom@linux.ibm.com>
2018-04-04 19:17:13 -03:00
Maciej W. Rozycki
e7feec374c elf: Correct absolute (SHN_ABS) symbol run-time calculation [BZ #19818]
Do not relocate absolute symbols by the base address.  Such symbols have
SHN_ABS as the section index and their value is not supposed to be
affected by relocation as per the ELF gABI[1]:

"SHN_ABS
    The symbol has an absolute value that will not change because of
    relocation."

The reason for our non-conformance here seems to be an old SysV linker
bug causing symbols like _DYNAMIC to be incorrectly emitted as absolute
symbols[2].  However in a previous discussion it was pointed that this
is seriously flawed by preventing the lone purpose of the existence of
absolute symbols from being used[3]:

"On the contrary, the only interpretation that makes sense to me is that
it will not change because of relocation at link time or at load time.
Absolute symbols, from the days of the earliest linking loaders, have
been used to represent addresses that are outside the address space of
the module (e.g., memory-mapped addresses or kernel gateway pages).
They've even been used to represent true symbolic constants (e.g.,
system entry point numbers, sizes, version numbers).  There's no other
way to represent a true absolute symbol, while the meaning you seek is
easily represented by giving the symbol a non-negative st_shndx value."

and we ought to stop supporting our current broken interpretation.

Update processing for dladdr(3) and dladdr1(3) so that SHN_ABS symbols
are ignored, because under the corrected interpretation they do not
represent addresses within a mapped file and therefore are not supposed
to be considered.

References:

[1] "System V Application Binary Interface - DRAFT - 19 October 2010",
    The SCO Group, Section "Symbol Table",
    <http://www.sco.com/developers/gabi/2012-12-31/ch4.symtab.html>

[2] Alan Modra, "Absolute symbols"
    <https://sourceware.org/ml/binutils/2012-05/msg00019.html>

[3] Cary Coutant, "Re: Absolute symbols"
    <https://sourceware.org/ml/binutils/2012-05/msg00020.html>

	[BZ #19818]
	* sysdeps/generic/ldsodefs.h (SYMBOL_ADDRESS): Handle SHN_ABS
	symbols.
	* elf/dl-addr.c (determine_info): Ignore SHN_ABS symbols.
	* elf/tst-absolute-sym.c: New file.
	* elf/tst-absolute-sym-lib.c: New file.
	* elf/tst-absolute-sym-lib.lds: New file.
	* elf/Makefile (tests): Add `tst-absolute-sym'.
	(modules-names): Add `tst-absolute-sym-lib'.
	(LDLIBS-tst-absolute-sym-lib.so): New variable.
	($(objpfx)tst-absolute-sym-lib.so): New dependency.
	($(objpfx)tst-absolute-sym): New dependency.
2018-04-04 23:09:37 +01:00
Maciej W. Rozycki
10a446ddcc elf: Unify symbol address run-time calculation [BZ #19818]
Wrap symbol address run-time calculation into a macro and use it
throughout, replacing inline calculations.

There are a couple of variants, most of them different in a functionally
insignificant way.  Most calculations are right following RESOLVE_MAP,
at which point either the map or the symbol returned can be checked for
validity as the macro sets either both or neither.  In some places both
the symbol and the map has to be checked however.

My initial implementation therefore always checked both, however that
resulted in code larger by as much as 0.3%, as many places know from
elsewhere that no check is needed.  I have decided the size growth was
unacceptable.

Having looked closer I realized that it's the map that is the culprit.
Therefore I have modified LOOKUP_VALUE_ADDRESS to accept an additional
boolean argument telling it to access the map without checking it for
validity.  This in turn has brought quite nice results, with new code
actually being smaller for i686, and MIPS o32, n32 and little-endian n64
targets, unchanged in size for x86-64 and, unusually, marginally larger
for big-endian MIPS n64, as follows:

i686:
   text    data     bss     dec     hex filename
 152255    4052     192  156499   26353 ld-2.27.9000-base.so
 152159    4052     192  156403   262f3 ld-2.27.9000-elf-symbol-value.so
MIPS/o32/el:
   text    data     bss     dec     hex filename
 142906    4396     260  147562   2406a ld-2.27.9000-base.so
 142890    4396     260  147546   2405a ld-2.27.9000-elf-symbol-value.so
MIPS/n32/el:
   text    data     bss     dec     hex filename
 142267    4404     260  146931   23df3 ld-2.27.9000-base.so
 142171    4404     260  146835   23d93 ld-2.27.9000-elf-symbol-value.so
MIPS/n64/el:
   text    data     bss     dec     hex filename
 149835    7376     408  157619   267b3 ld-2.27.9000-base.so
 149787    7376     408  157571   26783 ld-2.27.9000-elf-symbol-value.so
MIPS/o32/eb:
   text    data     bss     dec     hex filename
 142870    4396     260  147526   24046 ld-2.27.9000-base.so
 142854    4396     260  147510   24036 ld-2.27.9000-elf-symbol-value.so
MIPS/n32/eb:
   text    data     bss     dec     hex filename
 142019    4404     260  146683   23cfb ld-2.27.9000-base.so
 141923    4404     260  146587   23c9b ld-2.27.9000-elf-symbol-value.so
MIPS/n64/eb:
   text    data     bss     dec     hex filename
 149763    7376     408  157547   2676b ld-2.27.9000-base.so
 149779    7376     408  157563   2677b ld-2.27.9000-elf-symbol-value.so
x86-64:
   text    data     bss     dec     hex filename
 148462    6452     400  155314   25eb2 ld-2.27.9000-base.so
 148462    6452     400  155314   25eb2 ld-2.27.9000-elf-symbol-value.so

	[BZ #19818]
	* sysdeps/generic/ldsodefs.h (LOOKUP_VALUE_ADDRESS): Add `set'
	parameter.
	(SYMBOL_ADDRESS): New macro.
	[!ELF_FUNCTION_PTR_IS_SPECIAL] (DL_SYMBOL_ADDRESS): Use
	SYMBOL_ADDRESS for symbol address calculation.
	* elf/dl-runtime.c (_dl_fixup): Likewise.
	(_dl_profile_fixup): Likewise.
	* elf/dl-symaddr.c (_dl_symbol_address): Likewise.
	* elf/rtld.c (dl_main): Likewise.
	* sysdeps/aarch64/dl-machine.h (elf_machine_rela): Likewise.
	* sysdeps/alpha/dl-machine.h (elf_machine_rela): Likewise.
	* sysdeps/arm/dl-machine.h (elf_machine_rel): Likewise.
	(elf_machine_rela): Likewise.
	* sysdeps/hppa/dl-machine.h (elf_machine_rela): Likewise.
	* sysdeps/hppa/dl-symaddr.c (_dl_symbol_address): Likewise.
	* sysdeps/i386/dl-machine.h (elf_machine_rel): Likewise.
	(elf_machine_rela): Likewise.
	* sysdeps/ia64/dl-machine.h (elf_machine_rela): Likewise.
	* sysdeps/m68k/dl-machine.h (elf_machine_rela): Likewise.
	* sysdeps/microblaze/dl-machine.h (elf_machine_rela): Likewise.
	* sysdeps/mips/dl-machine.h (ELF_MACHINE_BEFORE_RTLD_RELOC):
	Likewise.
	(elf_machine_reloc): Likewise.
	(elf_machine_got_rel): Likewise.
	* sysdeps/mips/dl-trampoline.c (__dl_runtime_resolve): Likewise.
	* sysdeps/nios2/dl-machine.h (elf_machine_rela): Likewise.
	* sysdeps/powerpc/powerpc32/dl-machine.h (elf_machine_rela):
	Likewise.
	* sysdeps/powerpc/powerpc64/dl-machine.h (elf_machine_rela):
	Likewise.
	* sysdeps/riscv/dl-machine.h (elf_machine_rela): Likewise.
	* sysdeps/s390/s390-32/dl-machine.h (elf_machine_rela):
	Likewise.
	* sysdeps/s390/s390-64/dl-machine.h (elf_machine_rela):
	Likewise.
	* sysdeps/sh/dl-machine.h (elf_machine_rela): Likewise.
	* sysdeps/sparc/sparc32/dl-machine.h (elf_machine_rela):
	Likewise.
	* sysdeps/sparc/sparc64/dl-machine.h (elf_machine_rela):
	Likewise.
	* sysdeps/tile/dl-machine.h (elf_machine_rela): Likewise.
	* sysdeps/x86_64/dl-machine.h (elf_machine_rela): Likewise.

Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
2018-04-04 23:09:37 +01:00
Zack Weinberg
9185f86d8f Make sysdeps/generic/internal-signals.h less stubby.
Three of the functions defined by internal-signals.h were not actually
fulfilling their contracts when the sysdeps/generic version of that
file was used.  Also, the Linux version included several more headers
than the generic version, which is the root cause of a build failure
on Hurd (already addressed in another way, but I think it is proper to
make the headers match).

	* sysdeps/generic/internal-signals.h: Include signal.h,
	sigsetops.h, and stdbool.h.
	(__libc_signal_block_all): Actually block all signals.
	(__libc_signal_block_app): Likewise.
	(__libc_signal_restore_set): Actually restore the signal mask.
2018-04-04 12:37:23 -04:00
Samuel Thibault
397f5789da hurd: Fix typo
* sysdeps/mach/hurd/if_index.c (__if_nametoindex): Fix typo in IFNAMSIZ.
2018-04-04 02:31:23 +02:00
Samuel Thibault
ff297b70b5 hurd: Add missing symbols
* sysdeps/mach/hurd/i386/exc2signal.c (_hurd_exception2signal): Add
	hidden def.
	* mach/spin-lock.c (__mutex_unlock): Add hidden def.
2018-04-04 02:17:49 +02:00
Samuel Thibault
cd104f4ff4 hurd: Fix missing trailing NUL in __if_nametoindex
* sysdeps/mach/hurd/if_index.c (__if_nametoindex): Pass the whole buffer
size to strncpy.
2018-04-04 00:01:19 +02:00
Samuel Thibault
92846492dc hurd: Make __if_nametoindex return ENODEV if ifname is too long
rather than truncating it.

	* sysdeps/mach/hurd/if_index.c (__if_nametoindex): Return ENODEV if
	ifname is too long.
2018-04-03 23:14:11 +02:00
Samuel Thibault
5e17a480f8 Revert parts of "hurd: Avoid more libc.so local PLTs"
This reverts parts of commit 82dbf555a4.
2018-04-03 23:06:00 +02:00
Samuel Thibault
51722f4dc7 Revert "s390x: Fix hidden aliases"
This reverts commit 811836a411.
2018-04-03 22:59:25 +02:00
H.J. Lu
f2652643d7 Update RWF_SUPPORTED for Linux kernel 4.16 [BZ #22947]
Add RWF_APPEND to RWF_SUPPORTED to support Linux kernel 4.16.

	[BZ #22947]
	* bits/uio-ext.h (RWF_APPEND): New.
	* sysdeps/unix/sysv/linux/bits/uio-ext.h (RWF_APPEND): Likewise.
	* manual/llio.texi: Document RWF_APPEND.
	* misc/tst-preadvwritev2-common.c (RWF_APPEND): New.
	(RWF_SUPPORTED): Add RWF_APPEND.
2018-04-03 12:19:29 -07:00
Adhemerval Zanella
d2dc5467c6 Filter out NPTL internal signals (BZ #22391)
This patch filters out the internal NPTL signals (SIGCANCEL/SIGTIMER and
SIGSETXID) from signal functions.  GLIBC on Linux requires both signals to
proper implement pthread cancellation, posix timers, and set*id posix
thread synchronization.

And not filtering out the internal signal is troublesome:

  - A conformant program on a architecture that does not filter out the
    signals might inadvertently disable pthread asynchronous cancellation,
    set*id synchronization or posix timers.

  - It might also to security issues if SIGSETXID is masked and set*id
    functions are called (some threads might have effective user or group
    id different from the rest).

The changes are basically:

  - Change __is_internal_signal to bool and used on all signal function
    that has a signal number as input.  Also for signal function which accepts
    signals sets (sigset_t) it assumes that canonical function were used to
    add/remove signals which lead to some input simplification.

  - Fix tst-sigset.c to avoid check for SIGCANCEL/SIGTIMER and SIGSETXID.
    It is rewritten to check each signal indidually and to check realtime
    signals using canonical macros.

  - Add generic __clear_internal_signals and __is_internal_signal
    version since both symbols are used on generic implementations.

  - Remove superflous sysdeps/nptl/sigfillset.c.

  - Remove superflous SIGTIMER handling on Linux __is_internal_signal
    since it is the same of SIGCANCEL.

  - Remove dangling define and obvious comment on nptl/sigaction.c.

Checked on x86_64-linux-gnu.

	[BZ #22391]
	* nptl/sigaction.c (__sigaction): Use __is_internal_signal to
	check for internal nptl signals.
	* nptl/sigaction.c (__sigaction): Likewise.
	* signal/sigaddset.c (sigaddset): Likewise.
	* signal/sigdelset.c (sigdelset): Likewise.
	* sysdeps/posix/signal.c (__bsd_signal): Likewise.
	* sysdeps/posix/sigset.c (sigset): Call and check sigaddset return
	value.
	* signal/sigfillset.c (sigfillset): User __clear_internal_signals
	to filter out internal nptl signals.
	* signal/tst-sigset.c (do_test): Check ech signal indidually and
	also check realtime signals using standard macros.
	* sysdeps/generic/internal-signals.h (__clear_internal_signals,
	__is_internal_signal, __libc_signal_block_all,
	__libc_signal_block_app, __libc_signal_restore_set): New functions.
	* sysdeps/nptl/sigfillset.c: Remove file.
	* sysdeps/unix/sysv/linux/internal-signals.h (__is_internal_signal):
	Change return to bool.
	(__clear_internal_signals): Remove SIGTIMER clean since it is
	equal to SIGCANEL on Linux.
	* sysdeps/unix/sysv/linux/sigtimedwait.c (__sigtimedwait): Assume
	signal set was constructed using standard functions.

Reported-by: Yury Norov <ynorov@caviumnetworks.com>
2018-04-03 13:30:49 -03:00
Samuel Thibault
511ed56f2e hurd: Fix buffer overrun in __if_nametoindex
and building with mainline GCC which reports it.

	* sysdeps/mach/hurd/if_index.c (__if_nametoindex): Always end
	ifr.fr_name with a NUL caracter.
2018-04-03 18:06:15 +02:00
Wilco Dijkstra
e88ecbbfe8 [PATCH 7/7] sin/cos slow paths: refactor sincos implementation
Refactor the sincos implementation - rather than rely on odd partial inlining
of preprocessed portions from sin and cos, explicitly write out the cases.
This makes sincos much easier to maintain and provides an additional 16-20%
speedup between 0 and 2^27.  The overall speedup of sincos is 48% over this range.
Between 0 and PI it is 66% faster.

	* sysdeps/ieee754/dbl-64/s_sin.c (__sin): Cleanup ifdefs.
	(__cos): Likewise.
	* sysdeps/ieee754/dbl-64/s_sin.c (__sincos): Refactor using the same
	logic as sin and cos.
2018-04-03 16:52:18 +01:00
Wilco Dijkstra
aef3e2558a [PATCH 6/7] sin/cos slow paths: refactor duplicated code into dosin
Refactor duplicated code into do_sin.  Since all calls to do_sin use copysign to
set the sign of the result, move it inside do_sin.  Small inputs use a separate
polynomial, so move this into do_sin as well (the check is based on the more
conservative case when doing large range reduction, but could be relaxed).

	* sysdeps/ieee754/dbl-64/s_sin.c (do_sin): Use TAYLOR_SIN for small
	inputs.  Return correct sign.
	(do_sincos): Remove small input check before do_sin, let do_sin set
	the sign.
	(__sin): Likewise.
	(__cos): Likewise.
2018-04-03 16:52:17 +01:00
Wilco Dijkstra
72f6e9a3e3 [PATCH 5/7] sin/cos slow paths: remove unused slowpath functions
Remove all unused slowpath functions.

	* sysdeps/ieee754/dbl-64/s_sin.c (TAYLOR_SLOW): Remove.
	(do_cos_slow): Likewise.
	(do_sin_slow): Likewise.
	(reduce_and_compute): Likewise.
	(slow): Likewise.
	(slow1): Likewise.
	(slow2): Likewise.
	(sloww): Likewise.
	(sloww1): Likewise.
	(sloww2): Likewise.
	(bslow): Likewise.
	(bslow1): Likewise.
	(bslow2): Likewise.
	(cslow2): Likewise.
2018-04-03 16:52:17 +01:00
Wilco Dijkstra
649095838b [PATCH 4/7] sin/cos slow paths: remove slow paths from huge range reduction
For huge inputs use the improved do_sincos function as well.  Now no cases use
the correction factor returned by do_sin, do_cos and TAYLOR_SIN, so remove it.

	* sysdeps/ieee754/dbl-64/s_sin.c (TAYLOR_SIN): Remove cor parameter.
	(do_cos): Remove corp parameter and calculations.
	(do_sin): Likewise.
	(do_sincos): Remove cor variable.
	(__sin): Use do_sincos for huge inputs.
	(__cos): Likewise.
	* sysdeps/ieee754/dbl-64/s_sincos.c (__sincos): Likewise.
	(reduce_and_compute_sincos): Remove unused function.
2018-04-03 16:52:17 +01:00
Wilco Dijkstra
d9469deb14 [PATCH 3/7] sin/cos slow paths: remove slow paths from small range reduction
This patch improves the accuracy of the range reduction.  When the input is
large (2^27) and very close to a multiple of PI/2, using 110 bits of PI is not
enough.  Improve range reduction accuracy to 136 bits.  As a result the special
checks for results close to zero can be removed.  The ULP of the polynomials is
at worst 0.55ULP, so there is no reason for the slow functions, and they can be
removed.

	* sysdeps/ieee754/dbl-64/s_sin.c (reduce_sincos_1): Rename to
	reduce_sincos, improve accuracy to 136 bits.
	(do_sincos_1): Rename to do_sincos, remove fallbacks to slow functions.
	(__sin): Use improved reduction and simplified do_sincos calculation.
	(__cos): Likewise.
	* sysdeps/ieee754/dbl-64/s_sincos.c (__sincos): Likewise.
2018-04-03 16:52:17 +01:00
Wilco Dijkstra
7a5640f23a [PATCH 2/7] sin/cos slow paths: remove large range reduction
This patch removes the large range reduction code and defers to the huge range
reduction code.  The first level range reducer supports inputs up to 2^27,
which is way too large given that inputs for sin/cos are typically small
(< 10), and optimizing for a smaller range would give a significant speedup.

Input values above 2^27 are practically never used, so there is no reason for
supporting range reduction between 2^27 and 2^48.  Removing it significantly
simplifies code and enables further speedups.  There is about a 2.3x slowdown
in this range due to __branred being extremely slow  (a better algorithm could
easily more than double performance).

	* sysdeps/ieee754/dbl-64/s_sin.c (reduce_sincos_2): Remove function.
	(do_sincos_2): Likewise.
	(__sin): Remove middle range reduction case.
	(__cos): Likewise.
	* sysdeps/ieee754/dbl-64/s_sincos.c (__sincos): Remove middle range
	reduction case.
2018-04-03 16:52:17 +01:00
Wilco Dijkstra
19a8b9a300 [PATCH 1/7] sin/cos slow paths: avoid slow paths for small inputs
This series of patches removes the slow patchs from sin, cos and sincos.
Besides greatly simplifying the implementation, the new version is also much
faster for inputs up to PI (41% faster) and for large inputs needing range
reduction (27% faster).

ULP is ~0.55 with no errors found after testing 1.6 billion inputs across most
of the range with mpsin and mpcos.  The number of incorrectly rounded results
(ie. ULP >0.5) is at most ~2750 per million inputs between 0.125 and 0.5,
the average is ~850 per million between 0 and PI.

Tested on AArch64 and x86_64 with no regressions.

The first patch removes the slow paths for the cases where the input is small
and doesn't require range reduction.  Update ULP tables for sin, cos and sincos
on AArch64 and x86_64.

	* sysdeps/aarch64/libm-test-ulps: Update ULP for sin, cos, sincos.
	* sysdeps/ieee754/dbl-64/s_sin.c (__sin): Remove slow paths for small
	inputs.
	(__cos): Likewise.
	* sysdeps/x86_64/fpu/libm-test-ulps: Update ULP for sin, cos, sincos.
2018-04-03 16:52:16 +01:00
Adhemerval Zanella
8e4754ed7e Assume O_DIRECTORY for opendir
This patch assumes O_DIRECTORY works as defined by POSIX on opendir
implementation (aligning with other glibc code, for instance pwd).  This
allows remove both the fallback code to handle system with missing or
broken O_DIRECTORY along with the Linux specific opendir.c which just
advertise the working flag.

Checked on aarch64-linux-gnu, x86_64-linux-gnu, i686-linux-gnu,
sparcv9-linux-gnu, sparc64-linux-gnu, powerpc-linux-gnu, and
powerpc64le-linux-gnu.

	* sysdeps/posix/opendir.c (o_directory_works, tryopen_o_directory):
	Remove definitions.
	(opendir_oflags): Use O_DIRECTORY regardless.
	(__opendir, __opendirat): Remove need_isdir_precheck usage.
	* sysdeps/unix/sysv/linux/opendir.c: Remove file.
2018-04-03 08:57:17 -03:00
Samuel Thibault
811836a411 s390x: Fix hidden aliases
* sysdeps/s390/longjmp.c (__libc_longjmp, __libc_siglongjmp): New
	hidden defs.
2018-04-03 13:52:29 +02:00
Samuel Thibault
82dbf555a4 hurd: Avoid more libc.so local PLTs
* hurd/catch-signal.c (__hurd_catch_signal): Call __libc_siglongjmp
	instead if siglongjmp.
	(hurd_safe_memmove): Call __libc_longjmp instead of longjmp.
	* hurd/hurdfault.c (faulted): Call __libc_longjmp instead of longjmp.
	* include/setjmp.h (__libc_siglongjmp, __libc_longjmp): New hidden
	prototypes.
	* libio/iolibio.h (_IO_puts): New hidden prototype.
	* libio/ioputs.c (_IO_puts): New hidden def.
	* setjmp/longjmp.c (__libc_longjmp, __libc_siglongjmp): New hidden
	defs.
	* sysdeps/mach/hurd/sigwait.c (__sigwait): Call __libc_longjmp instead
	of longjmp.
2018-04-03 00:36:33 +00:00
Samuel Thibault
a758c29399 hurd: Avoid more libc.so PLTs
* sysdeps/hurd/include/hurd/signal.h (_hurd_raise_signal): Add hidden
	prototype.
	* hurd/hurd-raise.c (_hurd_raise_signal): Add hidden def.
	* hurd/Makefile ($(inlines:%=$(objpfx)%.c): Define
	_HEADER_H_HIDDEN_DEF macro.
	* sysdeps/hurd/include/hurd/fd.h (_hurd_fd_error,
	_hurd_fd_error_signal): Add hidden prototype.
	[_HURD_FD_H_HIDDEN_DEF] (_hurd_fd_error, _hurd_fd_error_signal): Add
	hidden def.
2018-04-02 23:40:26 +00:00
Samuel Thibault
7a8f45e302 hurd: Avoid some libc.so PLTs
* hurd/catch-signal.c (hurd_catch_signal): Rename to
	__hurd_catch_signal.
	(hurd_catch_signal): New strong alias.
	(hurd_safe_memset, hurd_safe_copyout, hurd_safe_copyin): Call
	__hurd_catch_signal instead of hurd_catch_signal.
	* hurd/exc2signal.c (_hurd_exception2signal): Add hidden def.
	* hurd/hurdexec.c (_hurd_init): Add hidden def.
	* hurd/hurdinit.c (_hurd_init): Add hidden def.
	* hurd/hurdsig.c: Include <mach/mig_support.h>.
	(_hurd_thread_sigstate): Add hidden def.
	(_hurd_internal_post_signal): Use __mutex_unlock instead of
	mutex_unlock.
	* hurd/intern-fd.c (_hurd_intern_fd): Add hidden def.
	* hurd/intr-msg.c (_hurd_intr_rpc_mach_msg): Add hidden def.
	* hurd/path-lookup.c (hurd_file_name_path_lookup): Rename to
	__hurd_file_name_path_lookup.
	(hurd_file_name_path_lookup): New strong alias.
	(file_name_path_lookup): Call __hurd_file_name_path_lookup instead of
	hurd_file_name_path_lookup.
	* mach/errstring.c (mach_error_type): Add hidden def.
	* mach/msg-destroy.c (__mach_msg_destroy): Add hidden def.
	* mach/mutex-init.c (__mutex_init): Add hidden def.
	* mach/spin-lock.c (__spin_lock_locked, __spin_lock, __spin_unlock,
	__spin_try_lock, __mutex_lock, __mutex_trylock): Add hidden defs.
	* mach/spin-solid.c (__spin_lock_solid): Add hidden def.
	* sysdeps/mach/hurd/getcwd.c
	(_hurd_canonicalize_directory_name_internal): Rename to
	__hurd_canonicalize_directory_name_internal.
	(_hurd_canonicalize_directory_name_internal): New strong alias.
	(__canonicalize_directory_name_internal, __getcwd): Call
	__hurd_canonicalize_directory_name_internal instead of
	_hurd_canonicalize_directory_name_internal.
	* sysdeps/mach/hurd/mig-reply.c: Include <mach/mig_support.h>.
	(__mig_get_reply_port, __mig_dealloc_reply_port, __mig_init): Add
	hidden defs.
	* sysdeps/hurd/include/hurd.h: New file.
	* sysdeps/hurd/include/hurd/fd.h: New file.
	* sysdeps/hurd/include/hurd/signal.h: New file.
	* sysdeps/mach/include/lock-intern.h: New file.
	* sysdeps/mach/include/mach.h: New file.
	* sysdeps/mach/include/mach/mig_support.h: New file.
	* sysdeps/mach/include/mach_error.h: New file.
2018-04-02 22:08:55 +00:00
Samuel Thibault
02008f8301 hurd: whitelist ld.so PLTs supposed to be avoided by rtld_hidden
* sysdeps/mach/hurd/localplt.data (ld.so): Add _dl_allocate_tls,
_dl_allocate_tls_init, _dl_exception_create, _dl_exception_create_format,
_dl_exception_free, _dl_find_dso_for_object, _dl_init_first, _dl_mcount,
___tls_get_addr, __tunable_get_val.
2018-04-02 23:47:56 +02:00
Samuel Thibault
a83ed7ad78 hurd: Update localplt.data
* sysdeps/mach/hurd/localplt.data: Inherit sysdeps/generic/localplt.data
and comment functions currently unused.
2018-04-02 23:43:33 +02:00
Samuel Thibault
b332b7aa55 hurd: Add __errno_location to overridable ld.so symbols
* sysdeps/mach/hurd/localplt.data (ld.so): Add __errno_location.
2018-04-02 23:32:48 +02:00
Samuel Thibault
171488a2de hurd: whitelist rtld symbols expected to be overridable
* sysdeps/mach/hurd/localplt.data: New file.
2018-04-02 23:02:02 +02:00
Samuel Thibault
dba2bdbe75 hurd: Avoid some PLTs in libc and librt
* hurd/hurdauth.c (_S_msg_add_auth): Call __vm_allocate and
	__vm_deallocate instead of vm_allocate and vm_deallocate.
	* hurd/hurdmsg.c (_S_msg_set_env_variable): Call __setenv instead of
	setenv.
	* hurd/hurdprio.c (_hurd_priority_which_map): Call __geteuid instead
	of geteuid.
	* hurd/path-lookup.c (file_name_path_scan): Call __strdup instead of
	strdup.
	* hurd/siginfo.c: Include <libioP.h>.
	(_hurd_siginfo_handler): Call _IO_puts instead of puts.
	* hurd/xattr.c (_hurd_xattr_get, _hurd_xattr_set): Call __munmap instead of
	munmap.
	* io/fts.c (fts_build): Call __dirfd instead of dirfd.
	* mach/devstream.c: Include <libioP.h>.
	(dealloc_ref): Call __mach_port_deallocate instead of
	mach_port_deallocate.
	(mach_open_devstream): Call _IO_fopencookie instead of fopencookie.
	Call __mach_port_deallocate instead of mach_port_deallocate.
	* stdlib/canonicalize.c (__realpath): Call __pathconf instead of
	pathconf.
	* sysdeps/mach/hurd/ifreq.c (__ifreq): Call __munmap instead of
	munmap.
	* sysdeps/mach/hurd/ifreq.h (__if_freereq): Likewise.
	* sysdeps/mach/hurd/ptrace.c (ptrace): Call __kill instead of kill.
	* sysdeps/mach/hurd/sendfile64.c (sendfile64): Call __munmap instead
	of munmap.
	* sysdeps/mach/hurd/socketpair.c (__socketpair): Call __close instead
	of close.
	* sysdeps/posix/clock_getres.c (realtime_getres): Call __sysconf
	instead of sysconf.
	* sysdeps/pthread/timer_gettime.c (timer_gettime): Call
	__clock_gettime instead of clock_gettime.
	* sysdeps/pthread/timer_routines.c (thread_func): Likewise.
	* sysdeps/pthread/timer_settime.c (timer_settime): Likewise.
	* sysdeps/unix/bsd/gtty.c (gtty): Call __ioctl instead of ioctl.
	* sysdeps/unix/bsd/stty.c (stty): Likewise.
	* sysdeps/unix/bsd/tcflow.c (tcflow): Call __tcgetattr instead of
	tcgetattr.
	* sysdeps/unix/clock_nanosleep.c (__clock_nanosleep): Call
	__clock_gettime and __nanosleep instead of clock_gettime and
	nanosleep.
2018-04-02 19:07:52 +00:00
Samuel Thibault
f6fb29d22e hurd: Avoid local PLTs in libpthread.
* htl/cthreads-compat.c (__cthread_detach): Call __pthread_detach
	instead of pthread_detach.
	(__cthread_fork): Call __pthread_create instead of pthread_create.
	(__cthread_keycreate): Call __pthread_key_create instead of
	pthread_key_create.
	(__cthread_getspecific): Call __pthread_getspecific instead of
	pthread_getspecific.
	(__cthread_setspecific): Call __pthread_setspecific instead of
	pthread_setspecific.
	* htl/pt-alloc.c (__pthread_alloc): Call __pthread_mutex_lock and
	__pthread_mutex_unlock instead of pthread_mutex_lock and
	pthread_mutex_unlock.
	* htl/pt-cleanup.c (__pthread_get_cleanup_stack): Rename to
	___pthread_get_cleanup_stack.
	(__pthread_get_cleanup_stack): New strong alias.
	* htl/pt-create.c: Include <pthreadP.h>.
	(entry_point): Call __pthread_exit instead of pthread_exit.
	(pthread_create): Rename to __pthread_create.
	(pthread_create): New strong alias.
	* htl/pt-detach.c (pthread_detach): Rename to __pthread_detach.
	(pthread_detach): New strong alias.
	(__pthread_detach): Call __pthread_cond_broadcast instead of
	pthread_cond_broadcast.
	* htl/pt-exit.c (__pthread_exit): Call __pthread_setcancelstate
	instead of pthread_setcancelstate.
	* htl/pt-testcancel.c: Include <pthreadP.h>.
	(pthread_testcancel): Call __pthread_exit instead of pthread_exit.
	* sysdeps/htl/pt-attr-getstack.c: Include <pthreadP.h>
	(__pthread_attr_getstack): Call __pthread_attr_getstackaddr and
	__pthread_attr_getstacksize instead of pthread_attr_getstackaddr and
	pthread_attr_getstacksize.
	* sysdeps/htl/pt-attr-getstackaddr.c (pthread_attr_getstackaddr):
	Rename to __pthread_attr_getstackaddr.
	(pthread_attr_getstackaddr): New strong alias.
	* sysdeps/htl/pt-attr-getstacksize.c (pthread_attr_getstacksize):
	Rename to __pthread_attr_getstacksize.
	(pthread_attr_getstacksize): New strong alias.
	* sysdeps/htl/pt-attr-setstack.c: Include <pthreadP.h>.
	(pthread_attr_setstack): Rename to __pthread_attr_setstack.
	(pthread_attr_setstack): New strong alias.
	(__pthread_attr_setstack): Call __pthread_attr_getstacksize,
	__pthread_attr_setstacksize and __pthread_attr_setstackaddr instead of
	pthread_attr_getstacksize, pthread_attr_setstacksize and
	pthread_attr_setstackaddr.
	* sysdeps/htl/pt-attr-setstackaddr.c (pthread_attr_setstackaddr):
	Rename to __pthread_attr_setstackaddr.
	(pthread_attr_setstackaddr): New strong alias.
	* sysdeps/htl/pt-attr-setstacksize.c (pthread_attr_setstacksize):
	Rename to __pthread_attr_setstacksize.
	(pthread_attr_setstacksize): New strong alias.
	* sysdeps/htl/pt-cond-timedwait.c: Include <pthreadP.h>.
	(__pthread_cond_timedwait_internal): Use __pthread_exit instead of
	pthread_exit.
	* sysdeps/htl/pt-key-create.c: Include <pthreadP.h>.
	(__pthread_key_create): New hidden def.
	* sysdeps/htl/pt-key.h: Include <pthreadP.h>.
	* sysdeps/htl/pthreadP.h (_pthread_mutex_init,
	__pthread_cond_broadcast, __pthread_create, __pthread_detach,
	__pthread_exit, __pthread_key_create, __pthread_getspecific,
	__pthread_setspecific, __pthread_setcancelstate,
	__pthread_attr_getstackaddr, __pthread_attr_setstackaddr,
	__pthread_attr_getstacksize, __pthread_attr_setstacksize,
	__pthread_attr_setstack, ___pthread_get_cleanup_stack): New
	declarations.
	(__pthread_key_create, _pthread_mutex_init): New hidden declarations.
	* sysdeps/mach/hurd/htl/pt-attr-setstackaddr.c
	(pthread_attr_setstackaddr): Rename to __pthread_attr_setstackaddr.
	(pthread_attr_setstackaddr): New strong alias.
	* sysdeps/mach/hurd/htl/pt-attr-setstacksize.c
	(pthread_attr_setstacksize): Rename to __pthread_attr_setstacksize.
	(pthread_attr_setstacksize): New strong alias.
	* sysdeps/mach/hurd/htl/pt-docancel.c: Include <pthreadP.h>.
	(call_exit): Call __pthread_exit instead of pthread_exit.
	* sysdeps/mach/hurd/htl/pt-mutex-init.c: Include <pthreadP.h>.
	(_pthread_mutex_init): New hidden definition.
	* sysdeps/mach/hurd/htl/pt-sysdep.c: Include <pthreadP.h>.
	(_init_routine): Call __pthread_attr_init and __pthread_attr_setstack
	instead of pthread_attr_init and pthread_attr_setstack.
2018-04-02 18:08:37 +00:00
Samuel Thibault
fa9e15558d hurd: Fix exposition of UTIME_NOW, UTIME_OMIT
* sysdeps/mach/hurd/bits/stat.h [!__USE_MISC && __USE_ATFILE]
	(UTIME_NOW, UTIME_OMIT): Define macros.
2018-04-02 17:07:11 +02:00
Samuel Thibault
ad2b41bfd8 hurd: Bump remaining LGPL2+ htl licences to LGPL 2.1+
* htl/Makefile: Bump licence to LGPL 2.1+.
	* htl/alloca_cutoff.c: Likewise.
	* htl/cthreads-compat.c: Likewise.
	* htl/lockfile.c: Likewise.
	* htl/pt-alloc.c: Likewise.
	* htl/pt-cancel.c: Likewise.
	* htl/pt-cleanup.c: Likewise.
	* htl/pt-create.c: Likewise.
	* htl/pt-dealloc.c: Likewise.
	* htl/pt-detach.c: Likewise.
	* htl/pt-exit.c: Likewise.
	* htl/pt-getattr.c: Likewise.
	* htl/pt-initialize.c: Likewise.
	* htl/pt-internal.h: Likewise.
	* htl/pt-join.c: Likewise.
	* htl/pt-self.c: Likewise.
	* htl/pt-setcancelstate.c: Likewise.
	* htl/pt-setcanceltype.c: Likewise.
	* htl/pt-sigmask.c: Likewise.
	* htl/pt-spin-inlines.c: Likewise.
	* htl/pt-testcancel.c: Likewise.
	* htl/pt-yield.c: Likewise.
	* htl/tests/test-1.c: Likewise.
	* htl/tests/test-10.c: Likewise.
	* htl/tests/test-11.c: Likewise.
	* htl/tests/test-12.c: Likewise.
	* htl/tests/test-13.c: Likewise.
	* htl/tests/test-14.c: Likewise.
	* htl/tests/test-15.c: Likewise.
	* htl/tests/test-16.c: Likewise.
	* htl/tests/test-17.c: Likewise.
	* htl/tests/test-2.c: Likewise.
	* htl/tests/test-3.c: Likewise.
	* htl/tests/test-4.c: Likewise.
	* htl/tests/test-5.c: Likewise.
	* htl/tests/test-6.c: Likewise.
	* htl/tests/test-7.c: Likewise.
	* htl/tests/test-8.c: Likewise.
	* htl/tests/test-9.c: Likewise.
	* htl/tests/test-__pthread_destroy_specific-skip.c: Likewise.
	* sysdeps/htl/bits/cancelation.h: Likewise.
	* sysdeps/htl/bits/pthread-np.h: Likewise.
	* sysdeps/htl/bits/pthread.h: Likewise.
	* sysdeps/htl/bits/pthreadtypes.h: Likewise.
	* sysdeps/htl/bits/semaphore.h: Likewise.
	* sysdeps/htl/bits/types/__pthread_key.h: Likewise.
	* sysdeps/htl/bits/types/struct___pthread_attr.h: Likewise.
	* sysdeps/htl/bits/types/struct___pthread_barrier.h: Likewise.
	* sysdeps/htl/bits/types/struct___pthread_barrierattr.h: Likewise.
	* sysdeps/htl/bits/types/struct___pthread_cond.h: Likewise.
	* sysdeps/htl/bits/types/struct___pthread_condattr.h: Likewise.
	* sysdeps/htl/bits/types/struct___pthread_mutex.h: Likewise.
	* sysdeps/htl/bits/types/struct___pthread_mutexattr.h: Likewise.
	* sysdeps/htl/bits/types/struct___pthread_once.h: Likewise.
	* sysdeps/htl/bits/types/struct___pthread_rwlock.h: Likewise.
	* sysdeps/htl/bits/types/struct___pthread_rwlockattr.h: Likewise.
	* sysdeps/htl/old_pt-atfork.c: Likewise.
	* sysdeps/htl/pt-atfork.c: Likewise.
	* sysdeps/htl/pt-attr-destroy.c: Likewise.
	* sysdeps/htl/pt-attr-getdetachstate.c: Likewise.
	* sysdeps/htl/pt-attr-getguardsize.c: Likewise.
	* sysdeps/htl/pt-attr-getinheritsched.c: Likewise.
	* sysdeps/htl/pt-attr-getschedparam.c: Likewise.
	* sysdeps/htl/pt-attr-getschedpolicy.c: Likewise.
	* sysdeps/htl/pt-attr-getscope.c: Likewise.
	* sysdeps/htl/pt-attr-getstack.c: Likewise.
	* sysdeps/htl/pt-attr-getstackaddr.c: Likewise.
	* sysdeps/htl/pt-attr-getstacksize.c: Likewise.
	* sysdeps/htl/pt-attr-init.c: Likewise.
	* sysdeps/htl/pt-attr-setdetachstate.c: Likewise.
	* sysdeps/htl/pt-attr-setguardsize.c: Likewise.
	* sysdeps/htl/pt-attr-setinheritsched.c: Likewise.
	* sysdeps/htl/pt-attr-setschedparam.c: Likewise.
	* sysdeps/htl/pt-attr-setschedpolicy.c: Likewise.
	* sysdeps/htl/pt-attr-setscope.c: Likewise.
	* sysdeps/htl/pt-attr-setstack.c: Likewise.
	* sysdeps/htl/pt-attr-setstackaddr.c: Likewise.
	* sysdeps/htl/pt-attr-setstacksize.c: Likewise.
	* sysdeps/htl/pt-attr.c: Likewise.
	* sysdeps/htl/pt-barrier-destroy.c: Likewise.
	* sysdeps/htl/pt-barrier-init.c: Likewise.
	* sysdeps/htl/pt-barrier-wait.c: Likewise.
	* sysdeps/htl/pt-barrier.c: Likewise.
	* sysdeps/htl/pt-barrierattr-destroy.c: Likewise.
	* sysdeps/htl/pt-barrierattr-getpshared.c: Likewise.
	* sysdeps/htl/pt-barrierattr-init.c: Likewise.
	* sysdeps/htl/pt-barrierattr-setpshared.c: Likewise.
	* sysdeps/htl/pt-cond-brdcast.c: Likewise.
	* sysdeps/htl/pt-cond-destroy.c: Likewise.
	* sysdeps/htl/pt-cond-init.c: Likewise.
	* sysdeps/htl/pt-cond-signal.c: Likewise.
	* sysdeps/htl/pt-cond-timedwait.c: Likewise.
	* sysdeps/htl/pt-cond-wait.c: Likewise.
	* sysdeps/htl/pt-cond.c: Likewise.
	* sysdeps/htl/pt-condattr-destroy.c: Likewise.
	* sysdeps/htl/pt-condattr-getclock.c: Likewise.
	* sysdeps/htl/pt-condattr-getpshared.c: Likewise.
	* sysdeps/htl/pt-condattr-init.c: Likewise.
	* sysdeps/htl/pt-condattr-setclock.c: Likewise.
	* sysdeps/htl/pt-condattr-setpshared.c: Likewise.
	* sysdeps/htl/pt-destroy-specific.c: Likewise.
	* sysdeps/htl/pt-equal.c: Likewise.
	* sysdeps/htl/pt-getconcurrency.c: Likewise.
	* sysdeps/htl/pt-getcpuclockid.c: Likewise.
	* sysdeps/htl/pt-getschedparam.c: Likewise.
	* sysdeps/htl/pt-getspecific.c: Likewise.
	* sysdeps/htl/pt-init-specific.c: Likewise.
	* sysdeps/htl/pt-key-create.c: Likewise.
	* sysdeps/htl/pt-key-delete.c: Likewise.
	* sysdeps/htl/pt-key.h: Likewise.
	* sysdeps/htl/pt-mutex-destroy.c: Likewise.
	* sysdeps/htl/pt-mutex-getprioceiling.c: Likewise.
	* sysdeps/htl/pt-mutex-init.c: Likewise.
	* sysdeps/htl/pt-mutex-lock.c: Likewise.
	* sysdeps/htl/pt-mutex-setprioceiling.c: Likewise.
	* sysdeps/htl/pt-mutex-timedlock.c: Likewise.
	* sysdeps/htl/pt-mutex-trylock.c: Likewise.
	* sysdeps/htl/pt-mutex-unlock.c: Likewise.
	* sysdeps/htl/pt-mutexattr-destroy.c: Likewise.
	* sysdeps/htl/pt-mutexattr-getprioceiling.c: Likewise.
	* sysdeps/htl/pt-mutexattr-getprotocol.c: Likewise.
	* sysdeps/htl/pt-mutexattr-getpshared.c: Likewise.
	* sysdeps/htl/pt-mutexattr-gettype.c: Likewise.
	* sysdeps/htl/pt-mutexattr-init.c: Likewise.
	* sysdeps/htl/pt-mutexattr-setprioceiling.c: Likewise.
	* sysdeps/htl/pt-mutexattr-setprotocol.c: Likewise.
	* sysdeps/htl/pt-mutexattr-setpshared.c: Likewise.
	* sysdeps/htl/pt-mutexattr-settype.c: Likewise.
	* sysdeps/htl/pt-mutexattr.c: Likewise.
	* sysdeps/htl/pt-once.c: Likewise.
	* sysdeps/htl/pt-rwlock-attr.c: Likewise.
	* sysdeps/htl/pt-rwlock-destroy.c: Likewise.
	* sysdeps/htl/pt-rwlock-init.c: Likewise.
	* sysdeps/htl/pt-rwlock-rdlock.c: Likewise.
	* sysdeps/htl/pt-rwlock-timedrdlock.c: Likewise.
	* sysdeps/htl/pt-rwlock-timedwrlock.c: Likewise.
	* sysdeps/htl/pt-rwlock-tryrdlock.c: Likewise.
	* sysdeps/htl/pt-rwlock-trywrlock.c: Likewise.
	* sysdeps/htl/pt-rwlock-unlock.c: Likewise.
	* sysdeps/htl/pt-rwlock-wrlock.c: Likewise.
	* sysdeps/htl/pt-rwlockattr-destroy.c: Likewise.
	* sysdeps/htl/pt-rwlockattr-getpshared.c: Likewise.
	* sysdeps/htl/pt-rwlockattr-init.c: Likewise.
	* sysdeps/htl/pt-rwlockattr-setpshared.c: Likewise.
	* sysdeps/htl/pt-setconcurrency.c: Likewise.
	* sysdeps/htl/pt-setschedparam.c: Likewise.
	* sysdeps/htl/pt-setschedprio.c: Likewise.
	* sysdeps/htl/pt-setspecific.c: Likewise.
	* sysdeps/htl/pt-spin.c: Likewise.
	* sysdeps/htl/pt-startup.c: Likewise.
	* sysdeps/htl/pthread.h: Likewise.
	* sysdeps/htl/sem-close.c: Likewise.
	* sysdeps/htl/sem-destroy.c: Likewise.
	* sysdeps/htl/sem-getvalue.c: Likewise.
	* sysdeps/htl/sem-init.c: Likewise.
	* sysdeps/htl/sem-open.c: Likewise.
	* sysdeps/htl/sem-post.c: Likewise.
	* sysdeps/htl/sem-timedwait.c: Likewise.
	* sysdeps/htl/sem-trywait.c: Likewise.
	* sysdeps/htl/sem-unlink.c: Likewise.
	* sysdeps/htl/sem-wait.c: Likewise.
	* sysdeps/hurd/htl/pt-kill.c: Likewise.
	* sysdeps/i386/htl/pt-machdep.h: Likewise.
	* sysdeps/mach/htl/pt-block.c: Likewise.
	* sysdeps/mach/htl/pt-spin.c: Likewise.
	* sysdeps/mach/htl/pt-stack-alloc.c: Likewise.
	* sysdeps/mach/htl/pt-thread-alloc.c: Likewise.
	* sysdeps/mach/htl/pt-thread-start.c: Likewise.
	* sysdeps/mach/htl/pt-thread-terminate.c: Likewise.
	* sysdeps/mach/htl/pt-timedblock.c: Likewise.
	* sysdeps/mach/htl/pt-wakeup.c: Likewise.
	* sysdeps/mach/hurd/htl/bits/pthread-np.h: Likewise.
	* sysdeps/mach/hurd/htl/bits/types/struct___pthread_mutex.h: Likewise.
	* sysdeps/mach/hurd/htl/pt-attr-setstackaddr.c: Likewise.
	* sysdeps/mach/hurd/htl/pt-attr-setstacksize.c: Likewise.
	* sysdeps/mach/hurd/htl/pt-docancel.c: Likewise.
	* sysdeps/mach/hurd/htl/pt-hurd-cond-timedwait.c: Likewise.
	* sysdeps/mach/hurd/htl/pt-hurd-cond-wait.c: Likewise.
	* sysdeps/mach/hurd/htl/pt-mutex-consistent.c: Likewise.
	* sysdeps/mach/hurd/htl/pt-mutex-destroy.c: Likewise.
	* sysdeps/mach/hurd/htl/pt-mutex-getprioceiling.c: Likewise.
	* sysdeps/mach/hurd/htl/pt-mutex-init.c: Likewise.
	* sysdeps/mach/hurd/htl/pt-mutex-lock.c: Likewise.
	* sysdeps/mach/hurd/htl/pt-mutex-setprioceiling.c: Likewise.
	* sysdeps/mach/hurd/htl/pt-mutex-timedlock.c: Likewise.
	* sysdeps/mach/hurd/htl/pt-mutex-transfer-np.c: Likewise.
	* sysdeps/mach/hurd/htl/pt-mutex-trylock.c: Likewise.
	* sysdeps/mach/hurd/htl/pt-mutex-unlock.c: Likewise.
	* sysdeps/mach/hurd/htl/pt-mutex.h: Likewise.
	* sysdeps/mach/hurd/htl/pt-mutexattr-destroy.c: Likewise.
	* sysdeps/mach/hurd/htl/pt-mutexattr-getprioceiling.c: Likewise.
	* sysdeps/mach/hurd/htl/pt-mutexattr-getprotocol.c: Likewise.
	* sysdeps/mach/hurd/htl/pt-mutexattr-getpshared.c: Likewise.
	* sysdeps/mach/hurd/htl/pt-mutexattr-getrobust.c: Likewise.
	* sysdeps/mach/hurd/htl/pt-mutexattr-gettype.c: Likewise.
	* sysdeps/mach/hurd/htl/pt-mutexattr-init.c: Likewise.
	* sysdeps/mach/hurd/htl/pt-mutexattr-setprioceiling.c: Likewise.
	* sysdeps/mach/hurd/htl/pt-mutexattr-setprotocol.c: Likewise.
	* sysdeps/mach/hurd/htl/pt-mutexattr-setpshared.c: Likewise.
	* sysdeps/mach/hurd/htl/pt-mutexattr-setrobust.c: Likewise.
	* sysdeps/mach/hurd/htl/pt-mutexattr-settype.c: Likewise.
	* sysdeps/mach/hurd/htl/pt-sigstate-destroy.c: Likewise.
	* sysdeps/mach/hurd/htl/pt-sigstate-init.c: Likewise.
	* sysdeps/mach/hurd/htl/pt-sigstate.c: Likewise.
	* sysdeps/mach/hurd/htl/pt-sysdep.c: Likewise.
	* sysdeps/mach/hurd/htl/pt-sysdep.h: Likewise.
	* sysdeps/mach/hurd/i386/htl/pt-machdep.c: Likewise.
	* sysdeps/mach/hurd/i386/htl/pt-setup.c: Likewise.
2018-04-02 16:37:36 +02:00
Samuel Thibault
deed72f6b0 hurd: Remove bogus net/if_ppp.h
It was not even compilable anyway.

	* sysdeps/mach/hurd/net/if_ppp.h: Remove file.
	* sysdeps/mach/hurd/Makefile (sysdep_headers): Remove net/if_ppp.h.
2018-04-02 02:07:33 +02:00
Samuel Thibault
8e2666ea9a hurd: Advertise libpthread
* sysdeps/mach/hurd/bits/local_lim.h (_POSIX_THREAD_KEYS_MAX,
_POSIX_THREAD_DESTRUCTOR_ITERATIONS, _POSIX_THREAD_THREADS_MAX): Define
macros.
* sysdeps/mach/hurd/bits/posix_opt.h (_POSIX_THREADS,
_POSIX_THREAD_ATTR_STACKSIZE, _POSIX_THREAD_ATTR_STACKADDR,
_POSIX_SEMAPHORES, _POSIX_READER_WRITER_LOCKS, _POSIX_TIMEOUTS,
_POSIX_SPIN_LOCKS, _POSIX_BARRIERS): Define macros to 200809L.
2018-04-02 01:57:47 +02:00
Samuel Thibault
a3bac9c2f2 hurd libpthread: add function missing in ABI list
* sysdeps/mach/hurd/i386/libpthread.abilist (__pthread_self): Add.
2018-04-02 01:53:46 +02:00
Samuel Thibault
33574c17ee hurd: Add hurd thread library
Contributed by

Agustina Arzille <avarzille@riseup.net>
Amos Jeffries <squid3@treenet.co.nz>
David Michael <fedora.dm0@gmail.com>
Marco Gerards <marco@gnu.org>
Marcus Brinkmann <marcus@gnu.org>
Neal H. Walfield <neal@gnu.org>
Pino Toscano <toscano.pino@tiscali.it>
Richard Braun <rbraun@sceen.net>
Roland McGrath <roland@gnu.org>
Samuel Thibault <samuel.thibault@ens-lyon.org>
Thomas DiModica <ricinwich@yahoo.com>
Thomas Schwinge <tschwinge@gnu.org>

	* htl: New directory.
	* sysdeps/htl: New directory.
	* sysdeps/hurd/htl: New directory.
	* sysdeps/i386/htl: New directory.
	* sysdeps/mach/htl: New directory.
	* sysdeps/mach/hurd/htl: New directory.
	* sysdeps/mach/hurd/i386/htl: New directory.
	* nscd/Depend, resolv/Depend, rt/Depend: Add htl dependency.
	* sysdeps/mach/hurd/i386/Implies: Add mach/hurd/i386/htl imply.
	* sysdeps/mach/hurd/i386/libpthread.abilist: New file.
2018-04-02 01:44:14 +02:00
Samuel Thibault
03e2aa50fd hurd: avoid letting signals go to thread created by timer_create
* sysdeps/pthread/timer_routines.c (__timer_thread_start): Block all
signals in thread created for runing timers.
2018-04-02 01:32:11 +02:00
Florian Weimer
4d76d3e59d Linux i386: tst-bz21269 triggers SIGBUS on some kernels
In addition to SIGSEGV and SIGILL, SIGBUS is also a possible signal
generated by the kernel.
2018-03-29 11:42:24 +02:00
Adhemerval Zanella
d39c0a459e sparc: Fix arch_fork definition
This patch fixes 3dc214977 for sparc.  Different than other architectures
SPARC kernel Kconfig does not define CONFIG_CLONE_BACKWARDS, however it
has the same ABI as if it did, implemented by sparc-specific code
(sparc_do_fork).

It also has a unique return value convention for clone:

   Parent -->  %o0 == child's  pid, %o1 == 0
   Child  -->  %o0 == parent's pid, %o1 == 1

Which required a special macro to correct issue the syscall
(INLINE_CLONE_SYSCALL).

Checked on sparc64-linux-gnu and sparcv9-linux-gnu.

	* sysdeps/unix/sysv/linux/arch-fork.h [__ASSUME_CLONE_BACKWARDS]
	(arch_fork): Issue INLINE_CLONE_SYSCALL if defined.
	* sysdeps/unix/sysv/linux/sparc/kernel-features.h
	(__ASSUME_CLONE_BACKWARDS): Define.
2018-03-27 21:28:58 -03:00
Jesse Hathaway
cc8a1620eb getlogin_r: return early when linux sentinel value is set
When there is no login uid Linux sets /proc/self/loginid to the sentinel
value of, (uid_t) -1. If this is set we can return early and avoid
needlessly looking up the sentinel value in any configured nss
databases.

Checked on aarch64-linux-gnu.

	* sysdeps/unix/sysv/linux/getlogin_r.c (__getlogin_r_loginuid): Return
	early when linux sentinel value is set.

Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
2018-03-27 21:28:36 -03:00
Samuel Thibault
8bfd94d0dc hurd: advertise process memory locking option
mlock/unlockall were already implemented.

* sysdeps/mach/hurd/bits/posix_opt.h (_POSIX_MEMLOCK): Define.
2018-03-27 23:20:07 +02:00
Joseph Myers
5f45f96ad0 Unify umount function implementations (bug 16552).
Linux kernel architectures have various arrangements for umount
syscalls.  There is a syscall that takes flags, and an older one that
does not.  Newer architectures have only the one taking flags, under
the name umount2 (or under the name umount, in the ia64 case).  Older
architectures may have both, under the names umount2 and umount (or
under the names umount and oldumount, in the alpha case).  glibc then
has several similar implementations of the umount function (no flags)
in terms of either the __umount2 function, or the corresponding
syscall, or in terms of the old syscall under either of its names.

This patch simplifies the implementations in glibc by always using the
__umount2 function to implement the umount function on all systems
using the Linux kernel.  The linux/generic implementation is moved to
sysdeps/unix/sysv/linux (without any changes to code or comments) and
all the other variants are removed.  (This will have the effect of
causing the new syscall to be used in some cases that previously used
the old one, but as discussed for previous changes, such a change to
the underlying syscalls used is OK.)

There remain two variants of how the __umount2 function is
implemented, either in umount2.S, or, for ia64, in syscalls.list.

Tested with build-many-glibcs.py.

	[BZ #16552]
	* sysdeps/unix/sysv/linux/generic/umount.c: Move to ....
	* sysdeps/unix/sysv/linux/umount.c: ... here.
	* sysdeps/unix/sysv/linux/arm/umount.c: Remove file.
	* sysdeps/unix/sysv/linux/hppa/umount.c: Likewise.
	* sysdeps/unix/sysv/linux/ia64/umount.c: Likewise.
	* sysdeps/unix/sysv/linux/mips/mips64/umount.c: Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc64/umount.c: Likewise.
	* sysdeps/unix/sysv/linux/umount.S: Likewise.
	* sysdeps/unix/sysv/linux/x86_64/umount.c: Likewise.
2018-03-26 21:18:28 +00:00
Samuel Thibault
2d813d7b77 hurd: Regenerate errno.h header
* sysdeps/mach/hurd/bits/errno.h: Regenerate.
2018-03-25 20:17:35 +00:00
Samuel Thibault
978a6803e2 hurd: Fix calling __pthread_initialize_minimal in shared case
* sysdeps/generic/ldsodefs.h [SHARED] (__pthread_initialize_minimal):
	Declare function.
2018-03-25 00:59:18 +01:00
Samuel Thibault
bcfa607b26 hurd: Initialize TLS and libpthread before signal thread start
* sysdeps/generic/libc-start.h [!SHARED] (ARCH_SETUP_TLS): Define to
__libc_setup_tls.
* sysdeps/unix/sysv/linux/powerpc/libc-start.h [!SHARED]
(ARCH_SETUP_TLS): Likewise.
* sysdeps/mach/hurd/libc-start.h: New file copied from
sysdeps/generic/libc-start.h, but define ARCH_SETUP_TLS to empty.
* csu/libc-start.c [!SHARED] (LIBC_START_MAIN): Call ARCH_SETUP_TLS instead
of __libc_setup_tls.
* sysdeps/mach/hurd/i386/init-first.c [!SHARED] (init1): Call
__libc_setup_tls before initializing libpthread and running _hurd_init which
starts the signal thread.
2018-03-25 00:52:39 +01:00
Andrew Senkevich
cd66c0e584 Fix i386 memmove issue (bug 22644).
[BZ #22644]
	* sysdeps/i386/i686/multiarch/memcpy-sse2-unaligned.S: Fixed
	branch conditions.
	* string/test-memmove.c (do_test2): New testcase.
2018-03-23 16:19:45 +01:00
Joseph Myers
a44061398c Remove unused frame.h header, sigcontextinfo.h macros.
The glibc-internal header frame.h was used in the old
debug/backtrace.c but is now unused.  Similarly, there are some
sigcontextinfo.h macros that are used nowhere in glibc -
ADVANCE_STACK_FRAME and FIRST_FRAME_POINTER were used in the old
debug/backtrace.c, while SIGCONTEXT_EXTRA_ARGS, GET_FRAME, GET_STACK
and CALL_SIGHANDLER were unused even before the removal of that old
implementation (beyond uses of SIGCONTEXT_EXTRA_ARGS in definitions of
CALL_SIGHANDLER).  This patch removes all the unused frame.h headers
and definitions of those macros.

Tested with build-many-glibcs.py.

	* sysdeps/generic/frame.h: Remove file.
	* sysdeps/arm/frame.h: Likewise.
	* sysdeps/hppa/frame.h: Likewise.
	* sysdeps/generic/sigcontextinfo.h (SIGCONTEXT_EXTRA_ARGS): Remove
	macro.
	(GET_FRAME): Likewise.
	(GET_STACK): Likewise.
	(CALL_SIGHANDLER): Likewise.
	* sysdeps/mach/hurd/i386/sigcontextinfo.h (SIGCONTEXT_EXTRA_ARGS):
	Likewise.
	(GET_FRAME): Likewise.
	(GET_STACK): Likewise.
	(CALL_SIGHANDLER): Likewise.
	* sysdeps/unix/sysv/linux/alpha/sigcontextinfo.h
	(SIGCONTEXT_EXTRA_ARGS): Likewise.
	(GET_FRAME): Likewise.
	(GET_STACK): Likewise.
	(CALL_SIGHANDLER): Likewise.
	* sysdeps/unix/sysv/linux/arm/sigcontextinfo.h
	(SIGCONTEXT_EXTRA_ARGS): Likewise.
	(GET_FRAME): Likewise.
	(GET_STACK): Likewise.
	(ADVANCE_STACK_FRAME): Likewise.
	(CALL_SIGHANDLER): Likewise.
	* sysdeps/unix/sysv/linux/i386/sigcontextinfo.h
	(SIGCONTEXT_EXTRA_ARGS): Likewise.
	(GET_FRAME): Likewise.
	(GET_STACK): Likewise.
	(CALL_SIGHANDLER): Likewise.
	* sysdeps/unix/sysv/linux/ia64/sigcontextinfo.h
	(SIGCONTEXT_EXTRA_ARGS): Likewise.
	(GET_FRAME): Likewise.
	(GET_STACK): Likewise.
	(CALL_SIGHANDLER): Likewise.
	* sysdeps/unix/sysv/linux/m68k/sigcontextinfo.h
	(SIGCONTEXT_EXTRA_ARGS): Likewise.
	(GET_FRAME): Likewise.
	(GET_STACK): Likewise.
	(CALL_SIGHANDLER): Likewise.
	* sysdeps/unix/sysv/linux/microblaze/sigcontextinfo.h
	(SIGCONTEXT_EXTRA_ARGS): Likewise.
	(GET_FRAME): Likewise.
	(GET_STACK): Likewise.
	(CALL_SIGHANDLER): Likewise.
	* sysdeps/unix/sysv/linux/mips/sigcontextinfo.h
	(SIGCONTEXT_EXTRA_ARGS): Likewise.
	(GET_FRAME): Likewise.
	(GET_STACK): Likewise.
	(CALL_SIGHANDLER): Likewise.
	* sysdeps/unix/sysv/linux/powerpc/sigcontextinfo.h
	(SIGCONTEXT_EXTRA_ARGS): Likewise.
	(GET_FRAME): Likewise.
	(GET_STACK): Likewise.
	(CALL_SIGHANDLER): Likewise.
	* sysdeps/unix/sysv/linux/riscv/sigcontextinfo.h
	(SIGCONTEXT_EXTRA_ARGS): Likewise.
	(GET_FRAME): Likewise.
	(GET_STACK): Likewise.
	(CALL_SIGHANDLER): Likewise.
	* sysdeps/unix/sysv/linux/s390/sigcontextinfo.h
	(SIGCONTEXT_EXTRA_ARGS): Likewise.
	(GET_FRAME): Likewise.
	(GET_STACK): Likewise.
	(CALL_SIGHANDLER): Likewise.
	* sysdeps/unix/sysv/linux/sh/sigcontextinfo.h
	(SIGCONTEXT_EXTRA_ARGS): Likewise.
	(GET_FRAME): Likewise.
	(GET_STACK): Likewise.
	(CALL_SIGHANDLER): Likewise.
	* sysdeps/unix/sysv/linux/sparc/sparc32/sigcontextinfo.h
	(SIGCONTEXT_EXTRA_ARGS): Likewise.
	(FIRST_FRAME_POINTER): Likewise.
	(ADVANCE_STACK_FRAME): Likewise.
	(GET_STACK): Likewise.
	(GET_FRAME): Likewise.
	(CALL_SIGHANDLER): Likewise.
	* sysdeps/unix/sysv/linux/sparc/sparc64/sigcontextinfo.h
	(SIGCONTEXT_EXTRA_ARGS): Likewise.
	(ADVANCE_STACK_FRAME): Likewise.
	(GET_STACK): Likewise.
	(GET_FRAME): Likewise.
	(CALL_SIGHANDLER): Likewise.
	* sysdeps/unix/sysv/linux/tile/sigcontextinfo.h
	(SIGCONTEXT_EXTRA_ARGS): Likewise.
	(GET_FRAME): Likewise.
	(GET_STACK): Likewise.
	(CALL_SIGHANDLER): Likewise.
	* sysdeps/unix/sysv/linux/x86_64/sigcontextinfo.h
	(SIGCONTEXT_EXTRA_ARGS): Likewise.
	(GET_FRAME): Likewise.
	(GET_STACK): Likewise.
	(CALL_SIGHANDLER): Likewise.
2018-03-22 16:40:51 +00:00
Joseph Myers
ffec7b2740 Use x86_64 backtrace as generic version.
No glibc configuration uses the present debug/backtrace.c, whereas
several #include the x86_64 version.  The x86_64 version is
effectively a generic one (using _Unwind_Backtrace from libgcc, which
works much more reliably than the built-in functions used by
debug/backtrace.c).  This patch moves it to debug/backtrace.c and
removes all the #includes of the x86_64 version from other
architectures which are no longer required.

I do not know whether all the other architecture-specific backtrace
implementations that are based on _Unwind_Backtrace are required, or
whether, where their differences from the generic version do something
useful, suitable hooks could be added to the generic version to reduce
the duplication involved.

Tested with build-many-glibcs.py that installed stripped shared
libraries are unchanged by this patch.

	* sysdeps/x86_64/backtrace.c: Move to ....
	* debug/backtrace.c: ... here.
	* sysdeps/aarch64/backtrace.c: Remove file.
	* sysdeps/alpha/backtrace.c: Likewise.
	* sysdeps/hppa/backtrace.c: Likewise.
	* sysdeps/ia64/backtrace.c: Likewise.
	* sysdeps/mips/backtrace.c: Likewise.
	* sysdeps/nios2/backtrace.c: Likewise.
	* sysdeps/riscv/backtrace.c: Likewise.
	* sysdeps/sh/backtrace.c: Likewise.
	* sysdeps/tile/backtrace.c: Likewise.
2018-03-21 17:25:30 +00:00
Joseph Myers
d0c5d731af Remove powerpc, sparc fdim inlines (bug 22987).
The powerpc and sparc bits/mathinline.h include inlines of fdim and
fdimf.  These are not restricted to -fno-math-errno, but do not set
errno, and wrongly use ordered <= comparisons instead of the required
islessequal comparisons (this latter issue is latent on powerpc
because GCC wrongly uses unordered comparison instructions for
operations that should use ordered comparison instructions).

Since we wish to avoid such header inlines anyway, leaving it to the
compiler to inline such standard functions under appropriate
conditions, this patch fixes those issues by removing the inlines in
question (and thus removing the sparc bits/mathinline.h header which
had no other inlines left in it).  I've filed
<https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85003> for adding
correct fdim inlines to GCC, since the function is simple enough that
a correct inline is a perfectly reasonable architecture-independent
optimization with -fno-math-errno and in the absence of implicit
excess precision.

Tested with build-many-glibcs.py for all its powerpc and sparc
configurations.

	[BZ #22987]
	* sysdeps/powerpc/bits/mathinline.h (fdim): Remove inline
	function.
	(fdimf): Likewise.
	* sysdeps/sparc/fpu/bits/mathinline.h: Remove file.
2018-03-20 18:35:50 +00:00
Samuel Thibault
ceb54b9b4f Fix errno values
* manual/errno.texi (EOWNERDEAD, ENOTRECOVERABLE): Remove errno
	values from Linux-specific section now that it is in the GNU section.
	* sysdeps/gnu/errlist.c: Regenerate.
2018-03-20 03:10:57 +01:00
Samuel Thibault
79962d89a9 hurd: Code style fixes
No code change.
2018-03-20 03:00:39 +01:00
Joseph Myers
8d3f9e85cf Add narrowing subtract functions.
This patch adds the narrowing subtract functions from TS 18661-1 to
glibc's libm: fsub, fsubl, dsubl, f32subf64, f32subf32x, f32xsubf64
for all configurations; f32subf64x, f32subf128, f64subf64x,
f64subf128, f32xsubf64x, f32xsubf128, f64xsubf128 for configurations
with _Float64x and _Float128; __nldbl_dsubl for ldbl-opt.

The changes are essentially the same as for the narrowing add
functions, so the description of those generally applies to this patch
as well.

Tested for x86_64, x86, mips64 (all three ABIs, both hard and soft
float) and powerpc, and with build-many-glibcs.py.

	* math/Makefile (libm-narrow-fns): Add sub.
	(libm-test-funcs-narrow): Likewise.
	* math/Versions (GLIBC_2.28): Add narrowing subtract functions.
	* math/bits/mathcalls-narrow.h (sub): Use __MATHCALL_NARROW.
	* math/gen-auto-libm-tests.c (test_functions): Add sub.
	* math/math-narrow.h (CHECK_NARROW_SUB): New macro.
	(NARROW_SUB_ROUND_TO_ODD): Likewise.
	(NARROW_SUB_TRIVIAL): Likewise.
	* sysdeps/ieee754/float128/float128_private.h (__fsubl): New
	macro.
	(__dsubl): Likewise.
	* sysdeps/ieee754/ldbl-opt/Makefile (libnldbl-calls): Add fsub and
	dsub.
	(CFLAGS-nldbl-dsub.c): New variable.
	(CFLAGS-nldbl-fsub.c): Likewise.
	* sysdeps/ieee754/ldbl-opt/Versions (GLIBC_2.28): Add
	__nldbl_dsubl.
	* sysdeps/ieee754/ldbl-opt/nldbl-compat.h (__nldbl_dsubl): New
	prototype.
	* manual/arith.texi (Misc FP Arithmetic): Document fsub, fsubl,
	dsubl, fMsubfN, fMsubfNx, fMxsubfN and fMxsubfNx.
	* math/auto-libm-test-in: Add tests of sub.
	* math/auto-libm-test-out-narrow-sub: New generated file.
	* math/libm-test-narrow-sub.inc: New file.
	* sysdeps/i386/fpu/s_f32xsubf64.c: Likewise.
	* sysdeps/ieee754/dbl-64/s_f32xsubf64.c: Likewise.
	* sysdeps/ieee754/dbl-64/s_fsub.c: Likewise.
	* sysdeps/ieee754/float128/s_f32subf128.c: Likewise.
	* sysdeps/ieee754/float128/s_f64subf128.c: Likewise.
	* sysdeps/ieee754/float128/s_f64xsubf128.c: Likewise.
	* sysdeps/ieee754/ldbl-128/s_dsubl.c: Likewise.
	* sysdeps/ieee754/ldbl-128/s_f64xsubf128.c: Likewise.
	* sysdeps/ieee754/ldbl-128/s_fsubl.c: Likewise.
	* sysdeps/ieee754/ldbl-128ibm/s_dsubl.c: Likewise.
	* sysdeps/ieee754/ldbl-128ibm/s_fsubl.c: Likewise.
	* sysdeps/ieee754/ldbl-96/s_dsubl.c: Likewise.
	* sysdeps/ieee754/ldbl-96/s_fsubl.c: Likewise.
	* sysdeps/ieee754/ldbl-opt/nldbl-dsub.c: Likewise.
	* sysdeps/ieee754/ldbl-opt/nldbl-fsub.c: Likewise.
	* sysdeps/ieee754/soft-fp/s_dsubl.c: Likewise.
	* sysdeps/ieee754/soft-fp/s_fsub.c: Likewise.
	* sysdeps/ieee754/soft-fp/s_fsubl.c: Likewise.
	* sysdeps/powerpc/fpu/libm-test-ulps: Update.
	* sysdeps/mach/hurd/i386/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/aarch64/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/alpha/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/arm/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/hppa/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/i386/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/ia64/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/microblaze/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/mips/mips32/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/mips/mips64/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/nios2/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc64/libm-le.abilist: Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc64/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/riscv/rv64/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/tilegx32/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/tile/tilegx64/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/x86_64/64/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist: Likewise.
2018-03-20 00:34:52 +00:00
Samuel Thibault
e54554ca62 hurd: fix build
* sysdeps/mach/hurd/i386/init-first.c: Compare d->phdr with 0 instead of
NULL.
2018-03-18 20:49:26 +01:00
Richard Braun
72e7ffc37f Hurd: fix port leak in TLS
* sysdeps/mach/hurd/i386/tls.h (_hurd_tls_init): Use a temporary
	thread reference.
2018-03-18 20:43:59 +01:00
Samuel Thibault
20bc801b3d hurd: Add mlockall support
* sysdeps/mach/hurd/mlockall.c: New file.
	* sysdeps/mach/hurd/munlockall.c: New file.
2018-03-18 20:38:48 +01:00
Samuel Thibault
aa2189295e hurd: Fix boot with statically-linked exec server
* sysdeps/mach/hurd/i386/init-first.c (init): Also find ELF headers by
	oneself when the pointer given in D is nul (as set by ext2fs).
2018-03-18 20:38:26 +01:00
Agustina Arzille
fb4cc8a0c2 hurd: Reimplement libc locks using mach's gsync
* hurd/Makefile (routines): Add hurdlock.
	* hurd/Versions (GLIBC_PRIVATE): Added new entry to export the above
	interface.
	(HURD_CTHREADS_0.3): Remove __libc_getspecific.
	* hurd/hurdpid.c: Include <lowlevellock.h>
	(_S_msg_proc_newids): Use lll_wait to synchronize.
	* hurd/hurdsig.c: (reauth_proc): Use __mutex_lock and __mutex_unlock.
	* hurd/setauth.c: Include <hurdlock.h>, use integer for synchronization.
	* mach/Makefile (lock-headers): Remove machine-lock.h.
	* mach/lock-intern.h: Include <lowlevellock.h> instead of
	<machine-lock.h>.
	(__spin_lock_t): New type.
	(__SPIN_LOCK_INITIALIZER): New macro.
	(__spin_lock, __spin_unlock, __spin_try_lock, __spin_lock_locked,
	__mutex_init, __mutex_lock_solid, __mutex_unlock_solid, __mutex_lock,
	__mutex_unlock, __mutex_trylock): Use lll to implement locks.
	* mach/mutex-init.c: Include <lowlevellock.h> instead of <cthreads.h>.
	(__mutex_init): Initialize with lll.
	* manual/errno.texi (EOWNERDEAD, ENOTRECOVERABLE): New errno values.
	* sysdeps/mach/Makefile: Add libmachuser as dependencies for libs
	needing lll.
	* sysdeps/mach/hurd/bits/errno.h: Regenerate.
	* sysdeps/mach/hurd/cthreads.c (__libc_getspecific): Remove function.
	* sysdeps/mach/hurd/bits/libc-lock.h: Remove file.
	* sysdeps/mach/hurd/setpgid.c: Include <lowlevellock.h>.
	(__setpgid): Use lll for synchronization.
	* sysdeps/mach/hurd/setsid.c: Likewise with __setsid.
	* sysdeps/mach/bits/libc-lock.h: Include <tls.h> and <lowlevellock.h>
	instead of <cthreads.h>.
	(_IO_lock_inexpensive): New macro
	(__libc_lock_recursive_t, __rtld_lock_recursive_t): New structures.
	(__libc_lock_self0): New declaration.
	(__libc_lock_owner_self): New macro.
	(__libc_key_t): Remove type.
	(_LIBC_LOCK_INITIALIZER): New macro.
	(__libc_lock_define_initialized, __libc_lock_init, __libc_lock_fini,
	__libc_lock_fini_recursive, __rtld_lock_fini_recursive,
	__libc_lock_lock, __libc_lock_trylock, __libc_lock_unlock,
	__libc_lock_define_initialized_recursive,
	__rtld_lock_define_initialized_recursive,
	__libc_lock_init_recursive, __libc_lock_trylock_recursive,
	__libc_lock_lock_recursive, __libc_lock_unlock_recursive,
	__rtld_lock_initialize, __rtld_lock_trylock_recursive,
	__rtld_lock_lock_recursive, __rtld_lock_unlock_recursive
	__libc_once_define, __libc_mutex_unlock): Reimplement with lll.
	(__libc_lock_define_recursive, __rtld_lock_define_recursive,
	_LIBC_LOCK_RECURSIVE_INITIALIZER, _RTLD_LOCK_RECURSIVE_INITIALIZER):
	New macros.
	Include <libc-lockP.h> to reimplement libc_key* with pthread_key*.
	* hurd/hurdlock.c: New file.
	* hurd/hurdlock.h: New file.
	* mach/lowlevellock.h: New file
2018-03-18 18:23:45 +01:00
Agustina Arzille
542c20a171 hurd: Rewrite __libc_cleanup_*
This makes it notably safe against 'return' and such, and used for
__libc_cleanup_push/pop.

	* sysdeps/mach/libc-lock.h (__libc_cleanup_frame): Define structure.
	(__libc_cleanup_fct): Define function.
	(__libc_cleanup_region_start, __libc_cleanup_region_end,
	__libc_cleanup_end): Rewrite implementation using
	__attribute__ ((__cleanup__)).
	(__libc_cleanup_push, __libc_cleanup_pop): New macros.
2018-03-18 17:27:00 +01:00
Samuel Thibault
9a37922ee0 hurd: Add missing include
* sysdeps/mach/hurd/cthreads.c: Include <cthreads.h>.
2018-03-18 16:38:26 +01:00
Samuel Thibault
dd28d4ba97 x86_64: Fix build with RTLD_PRIVATE_ERRNO defined to 1
* sysdeps/unix/sysv/linux/x86_64/sysdep.h: Always include
	<dl-sysdep.h>.  Test for value of RTLD_PRIVATE_ERRNO instead of
	testing whether it is defined.
2018-03-18 02:11:56 +01:00
Samuel Thibault
6dbe9dcae5 hurd: Fix coding style 2018-03-18 00:06:19 +01:00
Samuel Thibault
c2fb08c78a hurd: Fix link cthread/pthread symbol exposition.
* hurd/Versions (HURD_CTHREADS_0.3): Rename weak refs cthread_fork,
	cthread_detach, pthread_getattr_np, pthread_attr_getstack,
	cthread_keycreate, cthread_getspecific, cthread_setspecific to
	__cthread_fork, __cthread_detach, __pthread_getattr_np,
	__pthread_attr_getstack, __cthread_keycreate, __cthread_getspecific,
	__cthread_setspecific.
	* hurd/hurdsig.c (_hurdsig_init): Use __cthread_fork,
	__cthread_detach, __pthread_getattr_np, __pthread_attr_getstack,
	__cthread_t instead of cthread_fork, cthread_detach,
	pthread_getattr_np, pthread_attr_getstack.
	* sysdeps/mach/hurd/cthreads.c (cthread_keycreate): Rename to
	__cthread_keycreate.
	(cthread_getspecific): Rename to __cthread_getspecific.
	(cthread_setspecific): Rename to __cthread_setspecific.
	(__libc_getspecific): Use __cthread_getspecific instead of
	cthread_getspecific.
	* sysdeps/mach/hurd/libc-lock.h (__libc_key_create): Use
	__cthread_keycreate instead of cthread_keycreate.
	(__libc_setspecific): Use __cthread_setspecific instead of
	cthread_setspecific.
	* sysdeps/mach/libc-lock.h (__libc_key_create, __libc_setspecific):
	Likewise.
2018-03-17 23:53:39 +01:00
Samuel Thibault
dc33bef307 hurd: Replace threadvars with TLS
This gets rid of a lot of kludge and gets closer to other ports.

	* hurd/Makefile (headers): Remove threadvar.h.
	(inline-headers): Remove threadvar.h.
	* hurd/Versions (GLIBC_2.0: Remove __hurd_sigthread_stack_base,
	__hurd_sigthread_stack_end, __hurd_sigthread_variables,
	__hurd_threadvar_max, __hurd_errno_location.
	(HURD_CTHREADS_0.3): Add pthread_getattr_np, pthread_attr_getstack.
	* hurd/hurd/signal.h: Do not include <hurd/threadvar.h>.
	(_hurd_self_sigstate): Use THREAD_SELF to get _hurd_sigstate.
	(_HURD_SIGNAL_H_EXTERN_INLINE): Use THREAD_SELF to get _hurd_sigstate,
	unless TLS is not initialized yet, in which case we do not need a
	critical section yet anyway.
	* hurd/hurd/threadvar.h: Include <tls.h>, do not include
	<machine-sp.h>.
	(__hurd_sigthread_variables, __hurd_threadvar_max): Remove variables
	declarations.
	(__hurd_threadvar_index): Remove enum.
	(_HURD_THREADVAR_H_EXTERN_INLINE): Remove macro.
	(__hurd_threadvar_location_from_sp,__hurd_threadvar_location): Remove
	inlines.
	(__hurd_reply_port0): New variable declaration.
	(__hurd_local_reply_port): New macro.
	* hurd/hurdsig.c (__hurd_sigthread_variables): Remove variable.
	(interrupted_reply_port_location): Add thread_t parameter.  Use it
	with THREAD_TCB to access thread-local variables.
	(_hurdsig_abort_rpcs): Pass ss->thread to
	interrupted_reply_port_location.
	(_hurd_internal_post_signal): Likewise.
	(_hurdsig_init): Use presence of cthread_fork instead of
	__hurd_threadvar_stack_mask to start signal thread by hand.
	Remove signal thread threadvar initialization.
	* hurd/hurdstartup.c: Do not include <hurd/threadvar.h>
	* hurd/sigunwind.c: Include <hurd/threadvar.h>
	(_hurdsig_longjmp_from_handler): Use __hurd_local_reply_port instead
	of threadvar.
	* sysdeps/mach/hurd/Versions (libc.GLIBC_PRIVATE): Add
	__libc_lock_self0.
	(ld.GLIBC_2.0): Remove __hurd_sigthread_stack_base,
	__hurd_sigthread_stack_end, __hurd_sigthread_variables.
	(ld.GLIBC_PRIVATE): Add __libc_lock_self0.
	* sysdeps/mach/hurd/cthreads.c: Add __libc_lock_self0.
	* sysdeps/mach/hurd/dl-sysdep.c (errno, __hurd_sigthread_stack_base,
	__hurd_sigthread_stack_end, __hurd_sigthread_variables, threadvars,
	__hurd_threadvar_stack_offset, __hurd_threadvar_stack_mask): Do not
	define variables.
	* sysdeps/mach/hurd/errno-loc.c: Do not include <errno.h> and
	<hurd/threadvar.h>.
	[IS_IN(rtld)] (rtld_errno): New variable.
	[IS_IN(rtld)] (__errno_location): New weak function.
	[!IS_IN(rtld)]: Include "../../../csu/errno-loc.c".
	* sysdeps/mach/hurd/errno.c: Remove file.
	* sysdeps/mach/hurd/fork.c: Include <hurd/threadvar.h>
	(__fork): Remove THREADVAR_SPACE macro and its use.
	* sysdeps/mach/hurd/i386/init-first.c (__hurd_threadvar_max): Remove
	variable.
	(init): Do not initialize threadvar.
	* sysdeps/mach/hurd/i386/libc.abilist (__hurd_threadvar_max): Remove
	symbol.
	* sysdeps/mach/hurd/i386/sigreturn.c (__sigreturn): Use
	__hurd_local_reply_port instead of threadvar.
	* sysdeps/mach/hurd/i386/tls.h (tcbhead_t): Add reply_port and
	_hurd_sigstate fields.
	(HURD_DESC_TLS, __LIBC_NO_TLS, THREAD_TCB): New macro.
	* sysdeps/mach/hurd/i386/trampoline.c: Remove outdated comment.
	* sysdeps/mach/hurd/libc-lock.h: Do not include <hurd/threadvar.h>.
	(__libc_lock_owner_self): Use &__libc_lock_self0 and THREAD_SELF
	instead of threadvar.
	* sysdeps/mach/hurd/libc-tsd.h: Remove file.
	* sysdeps/mach/hurd/mig-reply.c (GETPORT, reply_port): Remove macros.
	(use_threadvar, global_reply_port): Remove variables.
	(__hurd_reply_port0): New variable.
	(__mig_get_reply_port): Use __hurd_local_reply_port and
	__hurd_reply_port0 instead of threadvar.
	(__mig_dealloc_reply_port): Likewise.
	(__mig_init): Do not initialize threadvar.
	* sysdeps/mach/hurd/profil.c: Fix comment.
2018-03-17 23:29:57 +01:00
Samuel Thibault
f8baf2a224 hurd: add TLS support
* sysdeps/generic/thread_state.h (MACHINE_NEW_THREAD_STATE_FLAVOR):
	Define macro.
	* sysdeps/mach/thread_state.h (MACHINE_THREAD_STATE_FIX_NEW): New macro.
	* sysdeps/mach/i386/thread_state.h
	(MACHINE_NEW_THREAD_STATE_FLAVOR): New macro, defined to
	i386_THREAD_STATE.
	(MACHINE_THREAD_STATE_FLAVOR): Define to i386_REGS_SEGS_STATE instead of
	i386_THREAD_STATE.
	(MACHINE_THREAD_STATE_FIX_NEW): New macro, reads segments.

	* sysdeps/mach/hurd/i386/trampoline.c (_hurd_setup_sighandler): Use
	i386_REGS_SEGS_STATE instead of i386_THREAD_STATE.

	* sysdeps/mach/hurd/i386/tls.h (TCB_ALIGNMENT, HURD_SEL_LDT): New
	macros.
	(_hurd_tls_fork): Add original thread parameter, Duplicate existing LDT
	descriptor instead of creating a new one.
	(_hurd_tls_new): New function, creates a new descriptor and updates tcb.

	* mach/setup-thread.c: Include <ldsodefs.h>.
	(__mach_setup_thread): Call _dl_allocate_tls, pass
	MACHINE_NEW_THREAD_STATE_FLAVOR to __thread_set_state instead of
	MACHINE_THREAD_STATE_FLAVOR, before getting
	MACHINE_THREAD_STATE_FLAVOR, calling _hurd_tls_new, and setting
	MACHINE_THREAD_STATE_FLAVOR with the result.
	* hurd/hurdfault.c (_hurdsig_fault_init): Call
	MACHINE_THREAD_STATE_FIX_NEW.
	* sysdeps/mach/hurd/fork.c (__fork): Call _hurd_tls_fork for sigthread
	too.  Add original thread parameter.
2018-03-17 03:17:36 +01:00
Joseph Myers
5d75b75fb7 Remove sysdeps/x86/fpu/bits/mathinline.h __finite inline.
Continuing the removals of inline functions from the x86
bits/mathinline.h, this patch removes an inline of __finite (which was
not actually architecture-specific at all beyond its
endianness-dependence).

This inline is not normally used with GCC 4.4 or later, because
isfinite now uses __builtin_isfinite except for -fsignaling-nans.
Allowing __builtin_isfinite etc. to work properly even for
-fsignaling-nans, by implementing versions of those built-in functions
that use integer arithmetic in GCC, is
<https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66462> (a patch was
committed but had to be reverted because it caused problems, and that
patch didn't address all formats for all architectures, only some, so
by itself would not have been sufficient to allow glibc to use
__builtin_isfinite unconditionally for new-enough GCC).

Tested for x86_64 and x86.

	* sysdeps/x86/fpu/bits/mathinline.h [__USE_MISC] (__finite):
	Remove inline function.
2018-03-16 18:36:53 +00:00
Joseph Myers
34ba96b89c Update i386 libm-test-ulps.
I found the i386 libm-test-ulps files needed updating (probably the
sqrt changes perturbed exactly when excess precision was used by the
compiler).

	* sysdeps/i386/fpu/libm-test-ulps: Update.
	* sysdeps/i386/i686/fpu/multiarch/libm-test-ulps: Likewise.
2018-03-16 17:43:38 +00:00
Wilco Dijkstra
22679b2c33 Revert m68k __ieee754_sqrt change
Revert m68k __ieee754_sqrt change as it causes a build failure in one
m68k configuration.  m68k-linux-gnu now passes again.

	* sysdeps/m68k/m680x0/fpu/mathimpl.h (__ieee754_sqrt): Revert previous
	commit.
2018-03-16 14:25:41 +00:00
Wilco Dijkstra
700593fdd7 Remove all target specific __ieee754_sqrt(f/l) inlines
Remove the now unused target specific__ieee754_sqrt(f/l) inlines.
Also remove inlines of sqrt which are for really old GCC versions.
Removing these is desirable, under the general principle of leaving
such inlining to the compiler rather than trying to do it in installed
headers, especially when only very old compilers are affected.

Note that removing inlines for __ieee754_sqrt disables inlining in the
sqrt wrapper functions.  Given the sqrt function will typically only be
called for negative arguments, it doesn't matter whether the inlining
happens or not.

	* sysdeps/aarch64/fpu/math_private.h (__ieee754_sqrt): Remove.
	(__ieee754_sqrtf): Remove.
	* sysdeps/alpha/fpu/math_private.h (__ieee754_sqrt): Remove.
	(__ieee754_sqrtf): Remove.
	* sysdeps/generic/math-type-macros.h (M_SQRT): Use sqrt.
	* sysdeps/m68k/m680x0/fpu/mathimpl.h (__ieee754_sqrt): Remove.
	* sysdeps/powerpc/fpu/math_private.h (__ieee754_sqrt): Remove.
	(__ieee754_sqrtf): Remove.
	* sysdeps/s390/fpu/bits/mathinline.h: Remove file.
	* sysdeps/sparc/fpu/bits/mathinline.h (sqrt) Remove.
	(sqrtf): Remove.
	(sqrtl): Remove.
	(__ieee754_sqrt): Remove.
	(__ieee754_sqrtf): Remove.
	(__ieee754_sqrtl): Remove.
	* sysdeps/m68k/m680x0/fpu/mathimpl.h (__ieee754_sqrt): Remove.
	* sysdeps/x86/fpu/math_private.h (__ieee754_sqrt): Remove.
	* sysdeps/x86_64/fpu/math_private.h (__ieee754_sqrt): Remove.
	(__ieee754_sqrtf): Remove.
	(__ieee754_sqrtl): Remove.
2018-03-15 19:21:36 +00:00
Wilco Dijkstra
f67a8147b0 Rename all __ieee754_sqrt(f/l) calls to sqrt(f/l)
Use sqrt(f/l) to enable inlining by GCC - if inlining doesn't happen,
the asm redirect ensures we will still call __ieee754_sqrt(f/l).

	* sysdeps/ieee754/dbl-64/e_acosh.c (__ieee754_acosh): Use sqrt.
	* sysdeps/ieee754/dbl-64/e_gamma_r.c (gamma_positive): Likewise.
	* sysdeps/ieee754/dbl-64/e_hypot.c (__ieee754_hypot): Likewise.
	* sysdeps/ieee754/dbl-64/e_j0.c (__ieee754_j0): Likewise.
	* sysdeps/ieee754/dbl-64/e_j1.c (__ieee754_j1): Likewise.
	* sysdeps/ieee754/dbl-64/e_jn.c (__ieee754_jn): Likewise.
	* sysdeps/ieee754/dbl-64/s_asinh.c (__asinh): Likewise.
	* sysdeps/ieee754/dbl-64/wordsize-64/e_acosh.c (__ieee754_acosh): Likewise.
	* sysdeps/ieee754/flt-32/e_acosf.c (__ieee754_acosf): Likewise.
	* sysdeps/ieee754/flt-32/e_acoshf.c (__ieee754_acoshf): Likewise.
	* sysdeps/ieee754/flt-32/e_asinf.c (__ieee754_asinf): Likewise.
	* sysdeps/ieee754/flt-32/e_gammaf_r.c (gammaf_positive): Likewise.
	* sysdeps/ieee754/flt-32/e_hypotf.c (__ieee754_hypotf): Likewise.
	* sysdeps/ieee754/flt-32/e_j0f.c (__ieee754_j0f): Likewise.
	* sysdeps/ieee754/flt-32/e_j1f.c (__ieee754_j1f): Likewise.
	* sysdeps/ieee754/flt-32/e_powf.c (__ieee754_powf): Likewise.
	* sysdeps/ieee754/flt-32/s_asinhf.c (__asinhf): Likewise.
	* sysdeps/ieee754/ldbl-128/e_acoshl.c (__ieee754_acoshl): Use sqrtl.
	* sysdeps/ieee754/ldbl-128/e_acosl.c (__ieee754_acosl): Likewise.
	* sysdeps/ieee754/ldbl-128/e_asinl.c (__ieee754_asinl): Likewise.
	* sysdeps/ieee754/ldbl-128/e_gammal_r.c (gammal_positive): Likewise.
	* sysdeps/ieee754/ldbl-128/e_hypotl.c (__ieee754_hypotl): Likewise.
	* sysdeps/ieee754/ldbl-128/e_j0l.c (__ieee754_j0l): Likewise.
	* sysdeps/ieee754/ldbl-128/e_j1l.c (__ieee754_j1l): Likewise.
	* sysdeps/ieee754/ldbl-128/e_jnl.c (__ieee754_jnl): Likewise.
	* sysdeps/ieee754/ldbl-128/e_powl.c (__ieee754_powl): Likewise.
	* sysdeps/ieee754/ldbl-128/s_asinhl.c (__ieee754_asinhl): Likewise.
	* sysdeps/ieee754/ldbl-128ibm/e_acoshl.c (__ieee754_acoshl): Likewise.
	* sysdeps/ieee754/ldbl-128ibm/e_acosl.c (__ieee754_acosl): Likewise.
	* sysdeps/ieee754/ldbl-128ibm/e_asinl.c (__ieee754_asinl): Likewise.
	* sysdeps/ieee754/ldbl-128ibm/e_gammal_r.c (gammal_positive): Likewise.
	* sysdeps/ieee754/ldbl-128ibm/e_hypotl.c (__ieee754_hypotl): Likewise.
	* sysdeps/ieee754/ldbl-128ibm/e_j0l.c (__ieee754_j0l): Likewise.
	* sysdeps/ieee754/ldbl-128ibm/e_j1l.c (__ieee754_j1l): Likewise
	* sysdeps/ieee754/ldbl-128ibm/e_jnl.c (__ieee754_jnl): Likewise.
	* sysdeps/ieee754/ldbl-128ibm/e_powl.c (__ieee754_powl): Likewise.
	* sysdeps/ieee754/ldbl-128ibm/s_asinhl.c (__ieee754_asinhl): Likewise.
	* sysdeps/ieee754/ldbl-96/e_acoshl.c (__ieee754_acoshl): Use sqrtl.
	* sysdeps/ieee754/ldbl-96/e_asinl.c (__ieee754_asinl): Likewise.
	* sysdeps/ieee754/ldbl-96/e_gammal_r.c (gammal_positive): Likewise.
	* sysdeps/ieee754/ldbl-96/e_hypotl.c (__ieee754_hypotl): Likewise.
	* sysdeps/ieee754/ldbl-96/e_j0l.c (__ieee754_j0l): Likewise.
	* sysdeps/ieee754/ldbl-96/e_j1l.c (__ieee754_j1l): Likewise.
	* sysdeps/ieee754/ldbl-96/e_jnl.c (__ieee754_jnl): Likewise.
	* sysdeps/ieee754/ldbl-96/s_asinhl.c (__ieee754_asinhl): Likewise.
	* sysdeps/m68k/m680x0/fpu/e_pow.c (__ieee754_pow): Likewise.
	* sysdeps/powerpc/fpu/e_hypot.c (__ieee754_hypot): Likewise.
	* sysdeps/powerpc/fpu/e_hypotf.c (__ieee754_hypotf): Likewise.
2018-03-15 19:21:36 +00:00
Wilco Dijkstra
1294b1892e Add support for sqrt asm redirects
This patch series cleans up the many uses of  __ieee754_sqrt(f/l) in GLIBC.
The goal is to enable GCC to do the inlining, and if this fails call the
__ieee754_sqrt function.  This is done by internally declaring sqrt with asm
redirects.  The compat symbols and sqrt wrappers need to disable the redirect.
The redirect is also disabled if there are already redirects defined when
using -ffinite-math-only.

All math functions (but not math tests, non-library code and libnldbl) are
built with -fno-math-errno which means GCC will typically inline sqrt as a
single instruction.  This means targets are no longer forced to add a special
inline for sqrt.

	* include/math.h (sqrt): Declare with asm redirect.
	(sqrtf): Likewise.
	(sqrtl): Likewise.
	(sqrtf128): Likewise.
	* Makeconfig: Add -fno-math-errno for libc/libm, but build testsuite,
	nonlib and libnldbl with -fmath-errno.
	* math/w_sqrt_compat.c: Define NO_MATH_REDIRECT.
	* math/w_sqrt_template.c: Likewise.
	* math/w_sqrtf_compat.c: Likewise.
	* math/w_sqrtl_compat.c: Likewise.
	* sysdeps/i386/fpu/w_sqrt.c: Likewise.
	* sysdeps/i386/fpu/w_sqrt_compat.c: Likewise.
	* sysdeps/generic/math-type-macros-float128.h: Remove math.h and
	complex.h.
2018-03-15 19:21:35 +00:00
Joseph Myers
c429a8d8d6 Remove more old-compilers parts of sysdeps/x86/fpu/bits/mathinline.h.
This patch removes further parts of sysdeps/x86/fpu/bits/mathinline.h
that are only of value for optimization with older compiler versions,
in accordance with general principles of preferring the let the
compiler deal with such inlining through built-in functions.

In general, GCC supports inlining all these functions as of version
4.3 or earlier.  However, some inlines in GCC may have had excessively
restrictive conditions in past GCC versions (e.g. requiring
-ffast-math when the inline is valid under broader conditions).  (In
particular, GCC had, before GCC 7, unnecessarily restrictive
conditions on when it could apply floor and ceil inlines corresponding
to the ones removed here.  The same was true for rint, but
bits/mathinline.h *also* was excessively restrictive there.)

The removed sincos inlines are for __sincos etc. functions (not a
public interface and not currently used in this header either; not in
a part of the header ever used for building glibc itself).  Likewise,
the atan2 inlines included one for __atan2l, also not a public
interface and not used for building glibc itself (calls inside glibc
generally use __ieee754_atan2l, for which there is a separate
__LIBC_INTERNAL_MATH_INLINES case in this header).

Tested for x86_64 and x86.

	* sysdeps/x86/fpu/bits/mathinline.h [__FAST_MATH__]
	(__sincos_code): Remove define and undefine.
	[__FAST_MATH__] (__sincos): Remove inline function.
	[__FAST_MATH__] (__sincosf): Remove inline function.
	[__FAST_MATH__] (__sincosl): Remove inline function.
	(__atan2l): Remove inline functions.
	[!__GNUC_PREREQ (3, 4)] (__atan2_code): Remove macro.
	[!__GNUC_PREREQ (3, 4) && __FAST_MATH__] (atan2): Remove inline
	function.
	(floor): Remove inline function.
	(ceil): Likewise.
	[__FAST_MATH__] (__ldexp_code): Remove macro.
	[__FAST_MATH__] (ldexp): Remove inline function.
	[__FAST_MATH__ && __USE_ISOC99] (ldexpf): Likewise.
	[__FAST_MATH__ && __USE_ISOC99] (ldexpl): Likewise.
	[__FAST_MATH__ && __USE_ISOC99] (rint): Likewise.
	[__USE_ISOC99] (__lrint_code): Remove macro.
	[__USE_ISOC99] (__llrint_code): Likewise.
	[__USE_ISOC99] (lrintf): Remove inline function.
	[__USE_ISOC99] (lrint): Likewise.
	[__USE_ISOC99] (lrintl): Likewise.
	[__USE_ISOC99] (llrint): Likewise.
	[__USE_ISOC99] (llrintf): Likewise.
	[__USE_ISOC99] (llrintl): Likewise.
2018-03-15 18:26:35 +00:00
Siddhesh Poyarekar
b47c3e7637 aarch64/strncmp: Use lsr instead of mov+lsr
A lsr can do what the mov and lsr did.
2018-03-15 08:06:21 +05:30
Joseph Myers
f9555d7312 Remove old-GCC parts of x86 bits/mathinline.h.
In accordance with the general principle of preferring to let the
compiler optimize function calls based on their standard semantics
rather than putting inline definitions of such functions in installed
headers, this patch removes various such inline definitions in the x86
bits/mathinline.h that were already disabled for GCC 3.5 or later and
so were only used with very old compilers (for which good optimization
is particularly unimportant); along with those inlines, a definition
of __M_SQRT2, which was only used in such inline functions, is also
removed.  This is similar to an early step in removing the string.h
inlines; I intend to follow up with further removals of
bits/mathinline.h inline definitions in appropriate logical groups
(with GCC bugs filed in cases where GCC doesn't already support
corresponding optimizations).

Tested for x86_64 and x86.

	* sysdeps/x86/fpu/bits/mathinline.h [!__GNUC_PREREQ (3, 4)]
	(lrintf): Remove definitions used only with old GCC.
	[!__GNUC_PREREQ (3, 4)] (lrint): Likewise.
	[!__GNUC_PREREQ (3, 4)] (llrintf): Likewise.
	[!__GNUC_PREREQ (3, 4)] (llrint): Likewise.
	[!__GNUC_PREREQ (3, 4)] (fmaxf): Likewise.
	[!__GNUC_PREREQ (3, 4)] (fmax): Likewise.
	[!__GNUC_PREREQ (3, 4)] (fminf): Likewise.
	[!__GNUC_PREREQ (3, 4)] (fmin): Likewise.
	[!__GNUC_PREREQ (3, 4)] (rint): Likewise.
	[!__GNUC_PREREQ (3, 4)] (rintf): Likewise.
	[!__GNUC_PREREQ (3, 4)] (nearbyint): Likewise.
	[!__GNUC_PREREQ (3, 4)] (nearbyintf): Likewise.
	[!__GNUC_PREREQ (3, 4)] (ceil): Likewise.
	[!__GNUC_PREREQ (3, 4)] (ceilf): Likewise.
	[!__GNUC_PREREQ (3, 4)] (floor): Likewise.
	[!__GNUC_PREREQ (3, 4)] (floorf): Likewise.
	[__FAST_MATH__ && !__GNUC_PREREQ (3, 5)] (tan): Likewise.
	[__FAST_MATH__ && !__GNUC_PREREQ (3, 5)] (fmod): Likewise.
	[__FAST_MATH__ && !__GNUC_PREREQ (3, 4)] (sin): Likewise.
	[__FAST_MATH__ && !__GNUC_PREREQ (3, 4)] (cos): Likewise.
	[__FAST_MATH__ && !__GNUC_PREREQ (3, 5)] (log10): Likewise.
	[__FAST_MATH__ && !__GNUC_PREREQ (3, 5)] (asin): Likewise.
	[__FAST_MATH__ && !__GNUC_PREREQ (3, 5)] (acos): Likewise.
	[__FAST_MATH__ && !__GNUC_PREREQ (3, 4)] (atan): Likewise.
	[__FAST_MATH__ && !__GNUC_PREREQ (3, 5)] (log1p): Likewise.
	[__FAST_MATH__ && !__GNUC_PREREQ (3, 5)] (logb): Likewise.
	[__FAST_MATH__ && !__GNUC_PREREQ (3, 5)] (log2): Likewise.
	[__FAST_MATH__ && !__GNUC_PREREQ (3, 5)] (drem): Likewise.
	[__FAST_MATH__] (__M_SQRT2): Remove macro.
2018-03-14 18:26:03 +00:00
Siddhesh Poyarekar
d46f84de74 aarch64/strncmp: Unbreak builds with old binutils
Binutils 2.26.* and older do not support moves with shifted registers,
so use a separate shift instruction instead.
2018-03-14 18:51:05 +05:30
Siddhesh Poyarekar
7108f1f944 aarch64: Improve strncmp for mutually misaligned inputs
The mutually misaligned inputs on aarch64 are compared with a simple
byte copy, which is not very efficient.  Enhance the comparison
similar to strcmp by loading a double-word at a time.  The peak
performance improvement (i.e. 4k maxlen comparisons) due to this on
the strncmp microbenchmark is as follows:

falkor: 3.5x (up to 72% time reduction)
cortex-a73: 3.5x (up to 71% time reduction)
cortex-a53: 3.5x (up to 71% time reduction)

All mutually misaligned inputs from 16 bytes maxlen onwards show
upwards of 15% improvement and there is no measurable effect on the
performance of aligned/mutually aligned inputs.

	* sysdeps/aarch64/strncmp.S (count): New macro.
	(strncmp): Store misaligned length in SRC1 in COUNT.
	(mutual_align): Adjust.
	(misaligned8): Load dword at a time when it is safe.
2018-03-13 23:57:04 +05:30
David Michael
da6d4404ec Lookup the startup server through /servers/startup
* sysdeps/mach/hurd/reboot.c: Include <hurd/paths.h>
(reboot): Lookup _SERVERS_STARTUP instead of calling proc_getmsgport to get a
port to the startup server.
2018-03-12 00:24:31 +01:00
Zack Weinberg
d3da750d01 nldbl-compat.c: Include math.h before nldbl-compat.h.
Jeff Law noticed that native PowerPC builds were broken by my having
made math_ldbl_opt.h not include math.h.  nldbl-compat.c formerly got
math.h via libioP.h and math_ldbl_opt.h, *without* __NO_LONG_DOUBLE_MATH;
after my change it got it via nldbl-compat.h *with* __NO_LONG_DOUBLE_MATH,
but __NO_LONG_DOUBLE_MATH mode is forbidden on hosts that define
__HAVE_DISTINCT_FLOAT128, so the build breaks.  This is the quick fix.

	* sysdeps/ieee754/ldbl-opt/nldbl-compat.c: Include math.h
	before nldbl-compat.h.
2018-03-11 14:20:13 -04:00
Samuel Thibault
a5df0318ef hurd: add gscope support
* elf/dl-support.c [!THREAD_GSCOPE_IN_TCB] (_dl_thread_gscope_count):
Define variable.
* sysdeps/generic/ldsodefs.h [!THREAD_GSCOPE_IN_TCB] (struct
rtld_global): Add _dl_thread_gscope_count member.
* sysdeps/mach/hurd/tls.h: Include <atomic.h>.
[!defined __ASSEMBLER__] (THREAD_GSCOPE_GLOBAL, THREAD_GSCOPE_SET_FLAG,
THREAD_GSCOPE_RESET_FLAG, THREAD_GSCOPE_WAIT): Define macros.
* sysdeps/generic/tls.h: Document THREAD_GSCOPE_IN_TCB.
* sysdeps/aarch64/nptl/tls.h: Define THREAD_GSCOPE_IN_TCB to 1.
* sysdeps/alpha/nptl/tls.h: Define THREAD_GSCOPE_IN_TCB to 1.
* sysdeps/arm/nptl/tls.h: Define THREAD_GSCOPE_IN_TCB to 1.
* sysdeps/hppa/nptl/tls.h: Define THREAD_GSCOPE_IN_TCB to 1.
* sysdeps/i386/nptl/tls.h: Define THREAD_GSCOPE_IN_TCB to 1.
* sysdeps/ia64/nptl/tls.h: Define THREAD_GSCOPE_IN_TCB to 1.
* sysdeps/m68k/nptl/tls.h: Define THREAD_GSCOPE_IN_TCB to 1.
* sysdeps/microblaze/nptl/tls.h: Define THREAD_GSCOPE_IN_TCB to 1.
* sysdeps/mips/nptl/tls.h: Define THREAD_GSCOPE_IN_TCB to 1.
* sysdeps/nios2/nptl/tls.h: Define THREAD_GSCOPE_IN_TCB to 1.
* sysdeps/powerpc/nptl/tls.h: Define THREAD_GSCOPE_IN_TCB to 1.
* sysdeps/riscv/nptl/tls.h: Define THREAD_GSCOPE_IN_TCB to 1.
* sysdeps/s390/nptl/tls.h: Define THREAD_GSCOPE_IN_TCB to 1.
* sysdeps/sh/nptl/tls.h: Define THREAD_GSCOPE_IN_TCB to 1.
* sysdeps/sparc/nptl/tls.h: Define THREAD_GSCOPE_IN_TCB to 1.
* sysdeps/tile/nptl/tls.h: Define THREAD_GSCOPE_IN_TCB to 1.
* sysdeps/x86_64/nptl/tls.h: Define THREAD_GSCOPE_IN_TCB to 1.
2018-03-11 13:06:33 +01:00
Zack Weinberg
0d13dfa17b Don't include math.h/math_private.h in math_ldbl_opt.h.
The sysdeps/ieee754/ldbl-opt version of math_ldbl_opt.h includes
math.h and math_private.h, despite not having any need for those
headers itself; the sysdeps/generic version doesn't.  About 20 files
are relying on math_ldbl_opt.h to include math.h and/or math_private.h
for them, even though none of them necessarily used on a platform that
needs ldbl-opt support.

	* sysdeps/ieee754/ldbl-opt/math_ldbl_opt.h: Don't include
	math.h or math_private.h.

	* sysdeps/alpha/fpu/s_isnan.c
	* sysdeps/ieee754/ldbl-128ibm/s_ceill.c
	* sysdeps/ieee754/ldbl-128ibm/s_floorl.c
	* sysdeps/ieee754/ldbl-128ibm/s_llrintl.c
	* sysdeps/ieee754/ldbl-128ibm/s_llroundl.c
	* sysdeps/ieee754/ldbl-128ibm/s_lrintl.c
	* sysdeps/ieee754/ldbl-128ibm/s_lroundl.c
	* sysdeps/ieee754/ldbl-128ibm/s_rintl.c
	* sysdeps/ieee754/ldbl-128ibm/s_roundl.c
	* sysdeps/ieee754/ldbl-128ibm/s_truncl.c
	* sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypot.c
	* sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypotf.c:
	* sysdeps/powerpc/powerpc64/fpu/multiarch/e_expf.c
	* sysdeps/powerpc/powerpc64/fpu/multiarch/e_hypot.c
	* sysdeps/powerpc/powerpc64/fpu/multiarch/e_hypotf.c:
	Include math_private.h.

	* sysdeps/ieee754/ldbl-64-128/s_finitel.c
	* sysdeps/ieee754/ldbl-64-128/s_fpclassifyl.c
	* sysdeps/ieee754/ldbl-64-128/s_isinfl.c
	* sysdeps/ieee754/ldbl-64-128/s_isnanl.c
	* sysdeps/ieee754/ldbl-64-128/s_signbitl.c
	* sysdeps/powerpc/power7/fpu/s_logb.c:
	Include math.h and math_private.h.
2018-03-10 15:18:08 -05:00
Zack Weinberg
054b72cc97 alpha/clone.S: Invoke .set noat/.set at around explicit uses of $at
On Alpha, the register $at is, by default, reserved for use by the
assembler, in the expansion of pseudo-instructions.  It's also used
by the special calling convention for _mcount.  We get warnings from
Alpha clone.S because the code to call _mcount isn't properly marked
up to tell the assembler not to use $at itself.

	* sysdeps/unix/sysv/linux/alpha/clone.s (__clone): Wrap manual
	uses of $at in .set noat / .set at.
2018-03-10 15:17:18 -05:00
H.J. Lu
6253bacdc0 Remove hidden __libc_longjmp
Since __libc_longjmp is a private interface for cancellation implementation
in libpthread, there is no need to provide hidden __libc_longjmp in libc.

Tested with build-many-glibcs.py.

	* include/setjmp.h (__libc_longjmp): Remove libc_hidden_proto.
	* setjmp/longjmp.c (__libc_longjmp): Remove libc_hidden_def.
	* sysdeps/s390/longjmp.c (__libc_longjmp): Likewise.
	* sysdeps/unix/sysv/linux/sparc/sparc64/longjmp.S (__libc_longjmp):
	Likewise.
2018-03-10 09:27:20 -08:00
Aurelien Jarno
9aa5c222b9 sparc32: Add nop before __startcontext to stop unwinding [BZ #22919]
On sparc32 tst-makecontext fails, as backtrace called within a context
created by makecontext to yield infinite backtrace.

Fix that the same way than nios2 by adding a nop just before
__startcontext. This is needed as otherwise FDE lookup just repeatedly
finds __setcontext's FDE in an infinite loop, due to the convention of
using 'address - 1' for FDE lookup.

Changelog:
	[BZ #22919]
	* sysdeps/unix/sysv/linux/sparc/sparc32/setcontext.S (__startcontext):
	Add nop before __startcontext, add explaining comments.
2018-03-09 00:14:27 +01:00
Adhemerval Zanella
e921c89e01 powerpc: Fix TLE build for SPE (BZ #22926)
Some SPE opcodes clashes with some recent PowerISA opcodes and
until recently gas did not complain about it.  However binutils
recently changed it and now VLE configured gas does not support to
assembler some instruction that might class with VLE (HTM for
instance).  It also does not help that glibc build hardware lock
elision support as default (regardless of assembler support).

Although runtime will not actually enables TLE on SPE hardware
(since kernel will not advertise it), I see little advantage on
adding HTM support on SPE built glibc.  SPE uses an incompatible
ABI which does not allow share the same build with default
powerpc and HTM code slows down SPE without any benefict.

This patch fixes it by only building HTM when SPE configuration
is not used.

Checked with a powerpc-linux-gnuspe build. I also did some sniff
tests on a e500 hardware without any issue.

	[BZ #22926]
	* sysdeps/powerpc/powerpc32/sysdep.h (ABORT_TRANSACTION_IMPL): Define
	empty for __SPE__.
	* sysdeps/powerpc/sysdep.h (ABORT_TRANSACTION): Likewise.
	* sysdeps/unix/sysv/linux/powerpc/elision-lock.c (__lll_lock_elision):
	Do not build hardware transactional code for __SPE__.
	* sysdeps/unix/sysv/linux/powerpc/elision-trylock.c
	(__lll_trylock_elision): Likewise.
	* sysdeps/unix/sysv/linux/powerpc/elision-unlock.c
	(__lll_unlock_elision): Likewise.
2018-03-07 17:39:44 -03:00
Adhemerval Zanella
3dc214977b Refactor Linux ARCH_FORK implementation
This patch refactors the ARCH_FORK macro and the required architecture
specific header to simplify the required architecture definitions
to provide the fork syscall semantic and proper document current
Linux clone ABI variant.

Instead of require the reimplementation of arch-fork.h header, this
patch changes the ARCH_FORK to an inline function with clone ABI
defined by kernel-features.h define.  The generic kernel ABI meant
for newer ports is used as default and redefine if the architecture
requires.

Checked on x86_64-linux-gnu and i686-linux-gnu.  Also with a build
for all the afected ABIs.

	* sysdeps/nptl/fork.c (ARCH_FORK): Replace by auch_fork.
	* sysdeps/unix/sysv/linux/alpha/arch-fork.h: Remove file.
	* sysdeps/unix/sysv/linux/riscv/arch-fork.h: Likewise.
	* sysdeps/unix/sysv/linux/aarch64/arch-fork.h: Likewise.
	* sysdeps/unix/sysv/linux/arm/arch-fork.h: Likewise.
	* sysdeps/unix/sysv/linux/hppa/arch-fork.h: Likewise.
	* sysdeps/unix/sysv/linux/i386/arch-fork.h: Likewise.
	* sysdeps/unix/sysv/linux/ia64/arch-fork.h: Likewise.
	* sysdeps/unix/sysv/linux/m68k/arch-fork.h: Likewise.
	* sysdeps/unix/sysv/linux/microblaze/arch-fork.h: Likewise.
	* sysdeps/unix/sysv/linux/mips/arch-fork.h: Likewise.
	* sysdeps/unix/sysv/linux/nios2/arch-fork.h: Likewise.
	* sysdeps/unix/sysv/linux/powerpc/arch-fork.h: Likewise.
	* sysdeps/unix/sysv/linux/s390/arch-fork.h: Likewise.
	* sysdeps/unix/sysv/linux/sh/arch-fork.h: Likewise.
	* sysdeps/unix/sysv/linux/sparc/arch-fork.h: Likewise.
	* sysdeps/unix/sysv/linux/tile/arch-fork.h: Likewise.
	* sysdeps/unix/sysv/linux/x86_64/arch-fork.h: Likewise.
	* sysdeps/unix/sysv/linux/arch-fork.h (arch_fork): New function.
	* sysdeps/unix/sysv/linux/aarch64/kernel-features.h: New file.
	* sysdeps/unix/sysv/linux/riscv/kernel-features.h: Likewise.
	* sysdeps/unix/sysv/linux/arm/kernel-features.h
	(__ASSUME_CLONE_BACKWARDS): Define.
	* sysdeps/unix/sysv/linux/createthread.c (ARCH_CLONE): Define to
	__clone2 if __NR_clone2 is defined.
	* sysdeps/unix/sysv/linux/hppa/kernel-features.h
	(__ASSUME_CLONE_BACKWARDS): Likewise.
	* sysdeps/unix/sysv/linux/i386/kernel-features.h
	(__ASSUME_CLONE_BACKWARDS): Likewise.
	* sysdeps/unix/sysv/linux/ia64/kernel-features.h
	(__ASSUME_CLONE2): Likewise.
	* sysdeps/unix/sysv/linux/microblaze/kernel-features.h
	(__ASSUME_CLONE_BACKWARDS3): Likewise.
	* sysdeps/unix/sysv/linux/kernel-features.h: Document possible clone
	variants and the define architecture can use.
	(__ASSUME_CLONE_DEFAULT): Define as default.
	* sysdeps/unix/sysv/linux/mips/kernel-features.h
	(__ASSUME_CLONE_BACKWARDS): Likewise.
	* sysdeps/unix/sysv/linux/powerpc/kernel-features.h
	(__ASSUME_CLONE_BACKWARDS): Likewise.
	* sysdeps/unix/sysv/linux/s390/kernel-features.h
	(__ASSUME_CLONE_BACKWARDS2): Likewise.
2018-03-07 17:39:40 -03:00