Commit Graph

9884 Commits

Author SHA1 Message Date
Joseph Myers
46f74e1dee Fix tgamma missing underflows (bug 18951).
Similar to various other bugs in this area, tgamma functions can fail
to raise the underflow exception when the result is tiny and inexact
but one or more low bits of the intermediate result that is scaled
down are zero.  This patch forces the exception in a similar way to
previous fixes.

Tested for x86_64, x86, mips64 and powerpc.

	[BZ #18951]
	* sysdeps/ieee754/dbl-64/e_gamma_r.c (__ieee754_gamma_r): Force
	underflow exception for small results.
	* sysdeps/ieee754/flt-32/e_gammaf_r.c (__ieee754_gammaf_r):
	Likewise.
	* sysdeps/ieee754/ldbl-128/e_gammal_r.c (__ieee754_gammal_r):
	Likewise.
	* sysdeps/ieee754/ldbl-128ibm/e_gammal_r.c (__ieee754_gammal_r):
	Likewise.
	* sysdeps/ieee754/ldbl-96/e_gammal_r.c (__ieee754_gammal_r):
	Likewise.
	* math/auto-libm-test-in: Add more tests of tgamma.
	* math/auto-libm-test-out: Regenerated.
2015-09-17 15:51:54 +00:00
Andreas Schwab
e67dc1b57f Restore sparc64 implementation of semctl
The sparc64 variant of the ipc syscall does not dereference the pointer
argument for the SEMCTL operation.
2015-09-17 16:19:08 +02:00
Joseph Myers
da2f4f2dd5 Make scalbn set errno (bug 6803).
As noted in bug 6803, scalbn fails to set errno on overflow and
underflow.  This patch fixes this by making scalbn an alias of ldexp,
which has exactly the same semantics (for floating-point types with
radix 2) and already has wrappers that deal with setting errno,
instead of an alias of the internal __scalbn (which ldexp calls).

Notes:

* Where compat symbols were defined for scalbn functions, I didn't
  change what they point to (to keep the patch minimal), so such
  compat symbols continue to go directly to the non-errno-setting
  functions.

* Mike, I didn't do anything with the IA64 versions of these
  functions, where I think both the ldexp and scalbn functions already
  deal with setting errno.  As a cleanup (not needed to fix this bug)
  however you might want to make those functions into aliases for
  IA64; there is no need for them to be separate function
  implementations at all.

* This concludes the fix for bug 6803 since the scalb and scalbln
  cases of that bug were fixed some time ago.

Tested for x86_64, x86, mips64 and powerpc.

	[BZ #6803]
	* math/s_ldexp.c (scalbn): Define as weak alias of __ldexp.
	[NO_LONG_DOUBLE] (scalbnl): Define as weak alias of __ldexp.
	* math/s_ldexpf.c (scalbnf): Define as weak alias of __ldexpf.
	* math/s_ldexpl.c (scalbnl): Define as weak alias of __ldexpl.
	* sysdeps/i386/fpu/s_scalbn.S (scalbn): Remove alias.
	* sysdeps/i386/fpu/s_scalbnf.S (scalbnf): Likewise.
	* sysdeps/i386/fpu/s_scalbnl.S (scalbnl): Likewise.
	* sysdeps/ieee754/dbl-64/s_scalbn.c (scalbn): Likewise.
	[NO_LONG_DOUBLE] (scalbnl): Likewise.
	* sysdeps/ieee754/dbl-64/wordsize-64/s_scalbn.c (scalbn):
	Likewise.
	[NO_LONG_DOUBLE] (scalbnl): Likewise.
	* sysdeps/ieee754/flt-32/s_scalbnf.c (scalbnf): Likewise.
	* sysdeps/ieee754/ldbl-128/s_scalbnl.c (scalbnl): Likewise.
	* sysdeps/ieee754/ldbl-128ibm/s_scalbnl.c (scalbnl): Remove
	long_double_symbol calls.
	* sysdeps/ieee754/ldbl-64-128/s_scalbnl.c (scalbnl): Likewise.
	* sysdeps/ieee754/ldbl-opt/s_ldexpl.c (__ldexpl_2): Define as
	strong alias of __ldexpl.
	(scalbnl): Define using long_double_symbol.
	* sysdeps/m68k/m680x0/fpu/s_scalbn.c (__CONCATX(scalbn,suffix)):
	Remove alias.
	* sysdeps/sparc/sparc64/soft-fp/s_scalbnl.c (scalbnl): Likewise.
	* sysdeps/x86_64/fpu/s_scalbnl.S (scalbnl): Likewise.
	* math/libm-test.inc (scalbn_test_data): Add errno expectations.
	(scalbln_test_data): Add more errno expectations.
2015-09-16 21:11:00 +00:00
Justus Winter
bb95a72318 Cache the host port like we cache the task port
This way we do not
need to call the kernel just to get the port.  Furthermore, we no
longer increase the reference count on every invocation of
`mach_host_self'.

* mach/mach/mach_traps.h (__mach_host_self, mach_host_self):
Protect declarations against the macro expansion.
* mach/mach_init.c (__mach_host_self_): New variable.
(mach_init): Initialize `__mach_host_self_'.
* mach/mach_init.h (__mach_host_self_): New declaration.
(__mach_host_self, mach_host_self): New macros.
* sysdeps/mach/hurd/dl-sysdep.c (_dl_sysdep_start_cleanup):
Release reference.
2015-09-16 19:41:36 +02:00
Joseph Myers
8124ac3e73 Clean up ldbl-128 / ldbl-128ibm expm1l dead code (bug 16415).
The ldbl-128 and ldbl-128ibm expm1l implementations have code to
handle +Inf and finite arguments above an overflow threshold.  Since
they now use __expl for large positive arguments to fix other
problems, this code is unreachable; this patch removes it.

Tested for mips64 and powerpc.

	[BZ #16415]
	* sysdeps/ieee754/ldbl-128/s_expm1l.c (maxlog): Remove variable.
	(__expm1l): Remove code to handle positive infinity and overflow.
	* sysdeps/ieee754/ldbl-128ibm/s_expm1l.c (maxlog): Remove
	variable.
	(__expm1l): Remove code to handle positive infinity and overflow.
2015-09-16 16:42:46 +00:00
Andreas Schwab
1f60740e5f Remove extra va_start/va_end calls (bug 17244) 2015-09-16 14:51:28 +02:00
Joseph Myers
dfa0f62011 Fix ldbl-128ibm nearbyintl use of signaling comparisons on NaNs (bug 18857).
The ldbl-128ibm implementation of nearbyintl wrongly uses signaling
comparisons such as "if (fabs (u.d[0].d) < TWO52)" on arguments that
might be NaNs, when "invalid" exceptions should not be raised.  (For
hard float, this issue may be hidden by
<https://gcc.gnu.org/bugzilla/show_bug.cgi?id=58684>, powerpc GCC
wrongly only using unordered comparison instructions.)  This patch
fixes this by just returning the argument if it is not finite (because
of the arbitrary value of the low part of a NaN in IBM long double,
there are quite a lot of comparisons that could end up involving a NaN
when the argument to nearbyintl is a NaN, so excluding NaN arguments
at the start is the simplest and safest fix).

Tested for powerpc-nofpu, where it removes failures for spurious
"invalid" exceptions from nearbyintl.

	[BZ #18857]
	* sysdeps/ieee754/ldbl-128ibm/s_nearbyintl.c (__nearbyintl): Just
	return non-finite argument without doing ordered comparisons on
	it.
2015-09-15 20:48:05 +00:00
Joseph Myers
694aabefd2 Simplify hypotf infinity handling (bug 15918).
Bug 15918 points out that the handling of infinities in hypotf can be
simplified: it's enough to return the absolute value of the infinite
argument without first comparing it to the other argument and possibly
returning that other argument's absolute value.  This patch makes that
cleanup (which should not change how hypotf behaves on any input).

Tested for x86_64.

	[BZ #15918]
	* sysdeps/ieee754/flt-32/e_hypotf.c (__ieee754_hypotf): Simplify
	handling of cases where one argument is an infinity.
2015-09-15 17:24:23 +00:00
Joseph Myers
828bf6828b Fix i386 exp10 missing underflows (bug 18966).
On i386, the double version of exp10 can miss underflow exceptions if
the result is in the subnormal range for double but the last 11 bits
of the 64-bit extended-precision mantissa happen to be zero.  This
patch forces the exception in a similar way to previous fixes.

As with the exp2 and exp fixes, the exp10f changes may in fact not be
needed to ensure underflow exceptions, but are included for
consistency and to fix the exp10 part of bug 18875 by ensuring that
excess range and precision is removed from underflowing return values.

Tested for x86_64 and x86.

	[BZ #18875]
	[BZ #18966]
	* sysdeps/i386/fpu/e_exp10.S (dbl_min): New object.
	(MO): New macro.
	(__ieee754_exp10): For small results, force underflow exception
	and remove excess range and precision from return value.
	* sysdeps/i386/fpu/e_exp10f.S (flt_min): New object.
	(MO): New macro.
	(__ieee754_exp10f): For small results, force underflow exception
	and remove excess range and precision from return value.
	* math/auto-libm-test-in: Add more tests of exp10.
	* math/auto-libm-test-out: Regenerated.
2015-09-15 16:50:02 +00:00
Samuel Thibault
333ceaa54b Fix typo
* sysdeps/mach/hurd/Makefile ($(patsubst %,$(hurd-objpfx)hurd/%.%,auth io fs
process)): Fix bogus %.% pattern into %.h.
2015-09-15 10:19:31 +02:00
Joseph Myers
de5e81691c Fix i386 exp missing underflows (bug 18961).
On i386, the double version of exp can miss underflow exceptions if
the result is in the subnormal range for double but the last 11 bits
of the 64-bit extended-precision mantissa happen to be zero.  This
patch forces the exception in a similar way to previous fixes.

As with the exp2 fixes, the expf changes may in fact not be needed to
ensure underflow exceptions, but are included for consistency and to
fix the exp part of bug 18875 by ensuring that excess range and
precision is removed from underflowing return values.

Tested for x86_64 and x86.

	[BZ #18875]
	[BZ #18961]
	* sysdeps/i386/fpu/e_exp.S (dbl_min): New object.
	(MO): New macro.
	(__ieee754_exp): For small results, force underflow exception and
	remove excess range and precision from return value.
	(__exp_finite): Likewise.
	* sysdeps/i386/fpu/e_expf.S (flt_min): New object.
	(MO): New macro.
	(__ieee754_expf): For small results, force underflow exception and
	remove excess range and precision from return value.
	(__expf_finite): Likewise.
	* math/auto-libm-test-in: Add more tests of exp.
	* math/auto-libm-test-out: Regenerated.
2015-09-14 22:40:05 +00:00
Joseph Myers
903af5af9a Fix exp2 missing underflows (bug 16521).
Various exp2 implementations in glibc can miss underflow exceptions
when the scaling down part of the calculation is exact (or, in the x86
case, when the conversion from extended precision to the target
precision is exact).  This patch forces the exception in a similar way
to previous fixes.

The x86 exp2f changes may in fact not be needed for this purpose -
it's likely to be the case that no argument of type float has an exp2
result so close to an exact subnormal float value that it equals that
value when rounded to 64 bits (even taking account of variation
between different x86 implementations).  However, they are included
for consistency with the changes to exp2 and so as to fix the exp2f
part of bug 18875 by ensuring that excess range and precision is
removed from underflowing return values.

Tested for x86_64, x86 and mips64.

	[BZ #16521]
	[BZ #18875]
	* math/e_exp2l.c (__ieee754_exp2l): Force underflow exception for
	small results.
	* sysdeps/i386/fpu/e_exp2.S (dbl_min): New object.
	(MO): New macro.
	(__ieee754_exp2): For small results, force underflow exception and
	remove excess range and precision from return value.
	* sysdeps/i386/fpu/e_exp2f.S (flt_min): New object.
	(MO): New macro.
	(__ieee754_exp2f): For small results, force underflow exception
	and remove excess range and precision from return value.
	* sysdeps/i386/fpu/e_exp2l.S (ldbl_min): New object.
	(MO): New macro.
	(__ieee754_exp2l): Force underflow exception for small results.
	* sysdeps/ieee754/dbl-64/e_exp2.c (__ieee754_exp2): Likewise.
	* sysdeps/ieee754/flt-32/e_exp2f.c (__ieee754_exp2f): Likewise.
	* sysdeps/x86_64/fpu/e_exp2l.S (ldbl_min): New object.
	(MO): New macro.
	(__ieee754_exp2l): Force underflow exception for small results.
	* math/auto-libm-test-in: Add more tests or exp2.
	* math/auto-libm-test-out: Regenerated.
2015-09-14 22:00:12 +00:00
Samuel Thibault
7650f7be3a Fix typo
* sysdeps/mach/hurd/Makefile ($(patsubst %,$(hurd-objpfx)hurd/%.%,auth
	io fs process)): Drop spurious backslash.
2015-09-13 19:50:22 +02:00
Rasmus Villemoes
0ce657c576 linux/getsysstats.c: use sysinfo() instead of parsing /proc/meminfo
Profiling git's test suite, Linus noted [1] that a disproportionately
large amount of time was spent reading /proc/meminfo. This is done by
the glibc functions get_phys_pages and get_avphys_pages, but they only
need the MemTotal and MemFree fields, respectively. That same
information can be obtained with a single syscall, sysinfo, instead of
six: open, fstat, mmap, read, close, munmap. While sysinfo also
provides more than necessary, it does a lot less work than what the
kernel needs to do to provide the entire /proc/meminfo. Both strace -T
and in-app microbenchmarks shows that the sysinfo() approach is
roughly an order of magnitude faster.

sysinfo() is much older than what glibc currently requires, so I don't
think there's any reason to keep the old parsing code. Moreover, this
makes get_[av]phys_pages work even in the absence of /proc.

Linus noted that something as simple as 'bash -c "echo"' would trigger
the reading of /proc/meminfo, but gdb says that many more applications
than just bash are affected:

Starting program: /bin/bash "-c" "echo"

Breakpoint 1, __get_phys_pages () at ../sysdeps/unix/sysv/linux/getsysstats.c:283
283     ../sysdeps/unix/sysv/linux/getsysstats.c: No such file or directory.
(gdb) bt

So it seems that any application that uses qsort on a moderately sized
array will incur this cost (once), which is obviously proportionately
more expensive for lots of short-lived processes (such as the git test
suite).

[1] http://thread.gmane.org/gmane.linux.kernel/2019285

Signed-off-by: Rasmus Villemoes <rv@rasmusvillemoes.dk>

	* sysdeps/unix/sysv/linux/getsysstats.c (__get_phys_pages):
	Use sysinfo system call instead of parsing /proc/meminfo.
	* sysdeps/unix/sysv/linux/getsysstats.c (__get_avphys_pages):
	Likewise.
2015-09-12 21:09:59 -04:00
Joseph Myers
a1f99ba28b Add more random libm test inputs (mainly for ldbl-128).
This patch adds more libm test inputs found through random test
generation to increase previously known ulps.  This particular test
generation was run for mips64, so most of the increased ulps are for
ldbl-128 (float and double having been fairly well covered by such
testing for x86_64), but there's the odd ulps increase for other
formats.

Tested for x86_64, x86 and mips64.

	* math/auto-libm-test-in: Add more tests of acos, acosh, asin,
	asinh, atan, atan2, atanh, cabs, carg, cos, csqrt, erfc, exp,
	exp10, exp2, log, log1p, log2, pow, sin, sincos, sinh, tan and
	tanh.
	* math/auto-libm-test-out: Regenerated.
	* sysdeps/i386/fpu/libm-test-ulps: Update.
	* sysdeps/mips/mips32/libm-test-ulps: Likewise.
	* sysdeps/mips/mips64/libm-test-ulps: Likewise.
	* sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
2015-09-12 00:01:38 +00:00
Roland McGrath
d57248f035 NaCl: Do not install <sys/mtio.h>. 2015-09-11 14:16:18 -07:00
Joseph Myers
de071d199a Move bits/atomic.h to atomic-machine.h (bug 14912).
It was noted in
<https://sourceware.org/ml/libc-alpha/2012-09/msg00305.html> that the
bits/*.h naming scheme should only be used for installed headers.
This patch renames bits/atomic.h to atomic-machine.h to follow that
convention.

This is the only change in this series that needs to change the
filename rather than simply removing a directory level (because both
atomic.h and bits/atomic.h exist at present).

Tested for x86_64 (testsuite, and that installed stripped shared
libraries are unchanged by the patch).

	[BZ #14912]
	* sysdeps/aarch64/bits/atomic.h: Move to ...
	* sysdeps/aarch64/atomic-machine.h: ...here.
	(_AARCH64_BITS_ATOMIC_H): Rename macro to
	_AARCH64_ATOMIC_MACHINE_H.
	* sysdeps/alpha/bits/atomic.h: Move to ...
	* sysdeps/alpha/atomic-machine.h: ...here.
	* sysdeps/arm/bits/atomic.h: Move to ...
	* sysdeps/arm/atomic-machine.h: ...here.  Update comments.
	* bits/atomic.h: Move to ...
	* sysdeps/generic/atomic-machine.h: ...here.
	(_BITS_ATOMIC_H): Rename macro to _ATOMIC_MACHINE_H.
	* sysdeps/i386/bits/atomic.h: Move to ...
	* sysdeps/i386/atomic-machine.h: ...here.
	* sysdeps/ia64/bits/atomic.h: Move to ...
	* sysdeps/ia64/atomic-machine.h: ...here.
	* sysdeps/m68k/coldfire/bits/atomic.h: Move to ...
	* sysdeps/m68k/coldfire/atomic-machine.h: ...here.
	(_BITS_ATOMIC_H): Rename macro to _ATOMIC_MACHINE_H.
	* sysdeps/m68k/m680x0/m68020/bits/atomic.h: Move to ...
	* sysdeps/m68k/m680x0/m68020/atomic-machine.h: ...here.
	* sysdeps/microblaze/bits/atomic.h: Move to ...
	* sysdeps/microblaze/atomic-machine.h: ...here.
	* sysdeps/mips/bits/atomic.h: Move to ...
	* sysdeps/mips/atomic-machine.h: ...here.
	(_MIPS_BITS_ATOMIC_H): Rename macro to _MIPS_ATOMIC_MACHINE_H.
	* sysdeps/powerpc/bits/atomic.h: Move to ...
	* sysdeps/powerpc/atomic-machine.h: ...here.  Update comments.
	* sysdeps/powerpc/powerpc32/bits/atomic.h: Move to ...
	* sysdeps/powerpc/powerpc32/atomic-machine.h: ...here.  Update
	comments.  Include <atomic-machine.h> instead of <bits/atomic.h>.
	* sysdeps/powerpc/powerpc64/bits/atomic.h: Move to ...
	* sysdeps/powerpc/powerpc64/atomic-machine.h: ...here.  Include
	<atomic-machine.h> instead of <bits/atomic.h>.
	* sysdeps/s390/bits/atomic.h: Move to ...
	* sysdeps/s390/atomic-machine.h: ...here.
	* sysdeps/sparc/sparc32/bits/atomic.h: Move to ...
	* sysdeps/sparc/sparc32/atomic-machine.h: ...here.
	(_BITS_ATOMIC_H): Rename macro to _ATOMIC_MACHINE_H.
	* sysdeps/sparc/sparc32/sparcv9/bits/atomic.h: Move to ...
	* sysdeps/sparc/sparc32/sparcv9/atomic-machine.h: ...here.
	* sysdeps/sparc/sparc64/bits/atomic.h: Move to ...
	* sysdeps/sparc/sparc64/atomic-machine.h: ...here.
	* sysdeps/tile/bits/atomic.h: Move to ...
	* sysdeps/tile/atomic-machine.h: ...here.
	* sysdeps/tile/tilegx/bits/atomic.h: Move to ...
	* sysdeps/tile/tilegx/atomic-machine.h: ...here.  Include
	<sysdeps/tile/atomic-machine.h> instead of
	<sysdeps/tile/bits/atomic.h>.
	(_BITS_ATOMIC_H): Rename macro to _ATOMIC_MACHINE_H.
	* sysdeps/tile/tilepro/bits/atomic.h: Move to ...
	* sysdeps/tile/tilepro/atomic-machine.h: ...here.  Include
	<sysdeps/tile/atomic-machine.h> instead of
	<sysdeps/tile/bits/atomic.h>.
	(_BITS_ATOMIC_H): Rename macro to _ATOMIC_MACHINE_H.
	* sysdeps/unix/sysv/linux/arm/bits/atomic.h: Move to ...
	* sysdeps/unix/sysv/linux/arm/atomic-machine.h: ...here.  Include
	<sysdeps/arm/atomic-machine.h> instead of
	<sysdeps/arm/bits/atomic.h>.
	* sysdeps/unix/sysv/linux/hppa/bits/atomic.h: Move to ...
	* sysdeps/unix/sysv/linux/hppa/atomic-machine.h: ...here.
	(_BITS_ATOMIC_H): Rename macro to _ATOMIC_MACHINE_H.
	* sysdeps/unix/sysv/linux/m68k/coldfire/bits/atomic.h: Move to ...
	* sysdeps/unix/sysv/linux/m68k/coldfire/atomic-machine.h: ...here.
	(_BITS_ATOMIC_H): Rename macro to _ATOMIC_MACHINE_H.
	* sysdeps/unix/sysv/linux/nios2/bits/atomic.h: Move to ...
	* sysdeps/unix/sysv/linux/nios2/atomic-machine.h: ...here.
	(_NIOS2_BITS_ATOMIC_H): Rename macro to _NIOS2_ATOMIC_MACHINE_H.
	* sysdeps/unix/sysv/linux/sh/bits/atomic.h: Move to ...
	* sysdeps/unix/sysv/linux/sh/atomic-machine.h: ...here.
	* sysdeps/x86_64/bits/atomic.h: Move to ...
	* sysdeps/x86_64/atomic-machine.h: ...here.
	* include/atomic.h: Include <atomic-machine.h> instead of
	<bits/atomic.h>.
2015-09-11 20:00:19 +00:00
Joseph Myers
20f366af16 Update libm-test-ulps for MIPS.
* sysdeps/mips/mips32/libm-test-ulps: Update.
	* sysdeps/mips/mips64/libm-test-ulps: Likewise.
2015-09-11 15:40:01 +00:00
Joseph Myers
9bb69b60fa Fix ldbl-128/ldbl-128ibm lgamma spurious "invalid", incorrect signgam (bug 18952).
The ldbl-128 / ldbl-128ibm implementation of lgammal converts (the
floor of minus) non-integer negative arguments to int to determine the
value of signgam.  When those values are outside the range of int,
this produces spurious "invalid" exceptions and incorrect values of
signgam.  This patch fixes this by instead determining signgam through
comparing half the integer in question to floor of half the integer.

Tested for mips64, x86_64 and x86.

	[BZ #18952]
	* sysdeps/ieee754/ldbl-128/e_lgammal_r.c (__ieee754_lgammal_r): Do
	not convert non-integer negative arguments to int to determine the
	value of signgam.
	* math/auto-libm-test-in: Add more tests of lgamma.
	* math/auto-libm-test-out: Regenerated.
2015-09-11 15:34:25 +00:00
Joseph Myers
00a7073c38 Add more randomly-generated libm tests.
This patch adds more libm test inputs found through random test
generation to increase observed ulps on x86_64.

Tested for x86_64 and x86.

	* math/auto-libm-test-in: Add more tests of acosh, atanh, cbrt,
	cosh, csqrt, erfc, expm1 and lgamma.
	* math/auto-libm-test-out: Regenerated.
	* sysdeps/i386/fpu/libm-test-ulps: Update.
	* sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
2015-09-11 15:03:10 +00:00
Joseph Myers
050f29c188 Fix lgamma (negative) inaccuracy (bug 2542, bug 2543, bug 2558).
The existing implementations of lgamma functions (except for the ia64
versions) use the reflection formula for negative arguments.  This
suffers large inaccuracy from cancellation near zeros of lgamma (near
where the gamma function is +/- 1).

This patch fixes this inaccuracy.  For arguments above -2, there are
no zeros and no large cancellation, while for sufficiently large
negative arguments the zeros are so close to integers that even for
integers +/- 1ulp the log(gamma(1-x)) term dominates and cancellation
is not significant.  Thus, it is only necessary to take special care
about cancellation for arguments around a limited number of zeros.

Accordingly, this patch uses precomputed tables of relevant zeros,
expressed as the sum of two floating-point values.  The log of the
ratio of two sines can be computed accurately using log1p in cases
where log would lose accuracy.  The log of the ratio of two gamma(1-x)
values can be computed using Stirling's approximation (the difference
between two values of that approximation to lgamma being computable
without computing the two values and then subtracting), with
appropriate adjustments (which don't reduce accuracy too much) in
cases where 1-x is too small to use Stirling's approximation directly.

In the interval from -3 to -2, using the ratios of sines and of
gamma(1-x) can still produce too much cancellation between those two
parts of the computation (and that interval is also the worst interval
for computing the ratio between gamma(1-x) values, which computation
becomes more accurate, while being less critical for the final result,
for larger 1-x).  Because this can result in errors slightly above
those accepted in glibc, this interval is instead dealt with by
polynomial approximations.  Separate polynomial approximations to
(|gamma(x)|-1)(x-n)/(x-x0) are used for each interval of length 1/8
from -3 to -2, where n (-3 or -2) is the nearest integer to the
1/8-interval and x0 is the zero of lgamma in the relevant half-integer
interval (-3 to -2.5 or -2.5 to -2).

Together, the two approaches are intended to give sufficient accuracy
for all negative arguments in the problem range.  Outside that range,
the previous implementation continues to be used.

Tested for x86_64, x86, mips64 and powerpc.  The mips64 and powerpc
testing shows up pre-existing problems for ldbl-128 and ldbl-128ibm
with large negative arguments giving spurious "invalid" exceptions
(exposed by newly added tests for cases this patch doesn't affect the
logic for); I'll address those problems separately.

	[BZ #2542]
	[BZ #2543]
	[BZ #2558]
	* sysdeps/ieee754/dbl-64/e_lgamma_r.c (__ieee754_lgamma_r): Call
	__lgamma_neg for arguments from -28.0 to -2.0.
	* sysdeps/ieee754/flt-32/e_lgammaf_r.c (__ieee754_lgammaf_r): Call
	__lgamma_negf for arguments from -15.0 to -2.0.
	* sysdeps/ieee754/ldbl-128/e_lgammal_r.c (__ieee754_lgammal_r):
	Call __lgamma_negl for arguments from -48.0 or -50.0 to -2.0.
	* sysdeps/ieee754/ldbl-96/e_lgammal_r.c (__ieee754_lgammal_r):
	Call __lgamma_negl for arguments from -33.0 to -2.0.
	* sysdeps/ieee754/dbl-64/lgamma_neg.c: New file.
	* sysdeps/ieee754/dbl-64/lgamma_product.c: Likewise.
	* sysdeps/ieee754/flt-32/lgamma_negf.c: Likewise.
	* sysdeps/ieee754/flt-32/lgamma_productf.c: Likewise.
	* sysdeps/ieee754/ldbl-128/lgamma_negl.c: Likewise.
	* sysdeps/ieee754/ldbl-128/lgamma_productl.c: Likewise.
	* sysdeps/ieee754/ldbl-128ibm/lgamma_negl.c: Likewise.
	* sysdeps/ieee754/ldbl-128ibm/lgamma_productl.c: Likewise.
	* sysdeps/ieee754/ldbl-96/lgamma_negl.c: Likewise.
	* sysdeps/ieee754/ldbl-96/lgamma_product.c: Likewise.
	* sysdeps/ieee754/ldbl-96/lgamma_productl.c: Likewise.
	* sysdeps/generic/math_private.h (__lgamma_negf): New prototype.
	(__lgamma_neg): Likewise.
	(__lgamma_negl): Likewise.
	(__lgamma_product): Likewise.
	(__lgamma_productl): Likewise.
	* math/Makefile (libm-calls): Add lgamma_neg and lgamma_product.
	* math/auto-libm-test-in: Add more tests of lgamma.
	* math/auto-libm-test-out: Regenerated.
	* sysdeps/i386/fpu/libm-test-ulps: Update.
	* sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
2015-09-10 22:27:58 +00:00
Paul Pluzhnikov
d18c36e600 To fix BZ #18675, use __fstatvfs64 in __fpathconf. 2015-09-09 18:41:25 -07:00
Joseph Myers
ec999b8e5e Move bits/libc-lock.h and bits/libc-lockP.h out of bits/ (bug 14912).
It was noted in
<https://sourceware.org/ml/libc-alpha/2012-09/msg00305.html> that the
bits/*.h naming scheme should only be used for installed headers.
This patch renames bits/libc-lock.h to plain libc-lock.h and
bits/libc-lockP.h to plain libc-lockP.h to follow that convention.

Note that I don't know where libc-lockP.h comes from for Hurd (the
Hurd libc-lock.h includes libc-lockP.h, but the only libc-lockP.h in
the glibc source tree is for NPTL) - some unmerged patch? - but I
updated the #include in the Hurd libc-lock.h anyway.

Tested for x86_64 (testsuite, and that installed stripped shared
libraries are unchanged by the patch).

	[BZ #14912]
	* bits/libc-lock.h: Move to ...
	* sysdeps/generic/libc-lock.h: ...here.
	(_BITS_LIBC_LOCK_H): Rename macro to _LIBC_LOCK_H.
	* sysdeps/mach/hurd/bits/libc-lock.h: Move to ...
	* sysdeps/mach/hurd/libc-lock.h: ...here.
	(_BITS_LIBC_LOCK_H): Rename macro to _LIBC_LOCK_H.
	[_LIBC]: Include <libc-lockP.h> instead of <bits/libc-lockP.h>.
	* sysdeps/mach/bits/libc-lock.h: Move to ...
	* sysdeps/mach/libc-lock.h: ...here.
	(_BITS_LIBC_LOCK_H): Rename macro to _LIBC_LOCK_H.
	* sysdeps/nptl/bits/libc-lock.h: Move to ...
	* sysdeps/nptl/libc-lock.h: ...here.
	(_BITS_LIBC_LOCK_H): Rename macro to _LIBC_LOCK_H.
	* sysdeps/nptl/bits/libc-lockP.h: Move to ...
	* sysdeps/nptl/libc-lockP.h: ...here.
	(_BITS_LIBC_LOCKP_H): Rename macro to _LIBC_LOCKP_H.
	* crypt/crypt_util.c: Include <libc-lock.h> instead of
	<bits/libc-lock.h>.
	* dirent/scandir-tail.c: Likewise.
	* dlfcn/dlerror.c: Likewise.
	* elf/dl-close.c: Likewise.
	* elf/dl-iteratephdr.c: Likewise.
	* elf/dl-lookup.c: Likewise.
	* elf/dl-open.c: Likewise.
	* elf/dl-support.c: Likewise.
	* elf/dl-writev.h: Likewise.
	* elf/rtld.c: Likewise.
	* grp/fgetgrent.c: Likewise.
	* gshadow/fgetsgent.c: Likewise.
	* gshadow/sgetsgent.c: Likewise.
	* iconv/gconv_conf.c: Likewise.
	* iconv/gconv_db.c: Likewise.
	* iconv/gconv_dl.c: Likewise.
	* iconv/gconv_int.h: Likewise.
	* iconv/gconv_trans.c: Likewise.
	* include/link.h: Likewise.
	* inet/getnameinfo.c: Likewise.
	* inet/getnetgrent.c: Likewise.
	* inet/getnetgrent_r.c: Likewise.
	* intl/bindtextdom.c: Likewise.
	* intl/dcigettext.c: Likewise.
	* intl/finddomain.c: Likewise.
	* intl/gettextP.h: Likewise.
	* intl/loadmsgcat.c: Likewise.
	* intl/localealias.c: Likewise.
	* intl/textdomain.c: Likewise.
	* libidn/idn-stub.c: Likewise.
	* libio/libioP.h: Likewise.
	* locale/duplocale.c: Likewise.
	* locale/freelocale.c: Likewise.
	* locale/newlocale.c: Likewise.
	* locale/setlocale.c: Likewise.
	* login/getutent_r.c: Likewise.
	* login/getutid_r.c: Likewise.
	* login/getutline_r.c: Likewise.
	* login/utmp-private.h: Likewise.
	* login/utmpname.c: Likewise.
	* malloc/mtrace.c: Likewise.
	* misc/efgcvt.c: Likewise.
	* misc/error.c: Likewise.
	* misc/fstab.c: Likewise.
	* misc/getpass.c: Likewise.
	* misc/mntent.c: Likewise.
	* misc/syslog.c: Likewise.
	* nis/nis_call.c: Likewise.
	* nis/nis_callback.c: Likewise.
	* nis/nss-default.c: Likewise.
	* nis/nss_compat/compat-grp.c: Likewise.
	* nis/nss_compat/compat-initgroups.c: Likewise.
	* nis/nss_compat/compat-pwd.c: Likewise.
	* nis/nss_compat/compat-spwd.c: Likewise.
	* nis/nss_nis/nis-alias.c: Likewise.
	* nis/nss_nis/nis-ethers.c: Likewise.
	* nis/nss_nis/nis-grp.c: Likewise.
	* nis/nss_nis/nis-hosts.c: Likewise.
	* nis/nss_nis/nis-network.c: Likewise.
	* nis/nss_nis/nis-proto.c: Likewise.
	* nis/nss_nis/nis-pwd.c: Likewise.
	* nis/nss_nis/nis-rpc.c: Likewise.
	* nis/nss_nis/nis-service.c: Likewise.
	* nis/nss_nis/nis-spwd.c: Likewise.
	* nis/nss_nisplus/nisplus-alias.c: Likewise.
	* nis/nss_nisplus/nisplus-ethers.c: Likewise.
	* nis/nss_nisplus/nisplus-grp.c: Likewise.
	* nis/nss_nisplus/nisplus-hosts.c: Likewise.
	* nis/nss_nisplus/nisplus-initgroups.c: Likewise.
	* nis/nss_nisplus/nisplus-network.c: Likewise.
	* nis/nss_nisplus/nisplus-proto.c: Likewise.
	* nis/nss_nisplus/nisplus-pwd.c: Likewise.
	* nis/nss_nisplus/nisplus-rpc.c: Likewise.
	* nis/nss_nisplus/nisplus-service.c: Likewise.
	* nis/nss_nisplus/nisplus-spwd.c: Likewise.
	* nis/ypclnt.c: Likewise.
	* nptl/libc_pthread_init.c: Likewise.
	* nss/getXXbyYY.c: Likewise.
	* nss/getXXent.c: Likewise.
	* nss/getXXent_r.c: Likewise.
	* nss/nss_db/db-XXX.c: Likewise.
	* nss/nss_db/db-netgrp.c: Likewise.
	* nss/nss_db/nss_db.h: Likewise.
	* nss/nss_files/files-XXX.c: Likewise.
	* nss/nss_files/files-alias.c: Likewise.
	* nss/nsswitch.c: Likewise.
	* posix/regex_internal.h: Likewise.
	* posix/wordexp.c: Likewise.
	* pwd/fgetpwent.c: Likewise.
	* resolv/res_hconf.c: Likewise.
	* resolv/res_libc.c: Likewise.
	* shadow/fgetspent.c: Likewise.
	* shadow/lckpwdf.c: Likewise.
	* shadow/sgetspent.c: Likewise.
	* socket/opensock.c: Likewise.
	* stdio-common/reg-modifier.c: Likewise.
	* stdio-common/reg-printf.c: Likewise.
	* stdio-common/reg-type.c: Likewise.
	* stdio-common/vfprintf.c: Likewise.
	* stdio-common/vfscanf.c: Likewise.
	* stdlib/abort.c: Likewise.
	* stdlib/cxa_atexit.c: Likewise.
	* stdlib/fmtmsg.c: Likewise.
	* stdlib/random.c: Likewise.
	* stdlib/setenv.c: Likewise.
	* string/strsignal.c: Likewise.
	* sunrpc/auth_none.c: Likewise.
	* sunrpc/bindrsvprt.c: Likewise.
	* sunrpc/create_xid.c: Likewise.
	* sunrpc/key_call.c: Likewise.
	* sunrpc/rpc_thread.c: Likewise.
	* sysdeps/arm/backtrace.c: Likewise.
	* sysdeps/generic/ldsodefs.h: Likewise.
	* sysdeps/generic/stdio-lock.h: Likewise.
	* sysdeps/generic/unwind-dw2-fde.c: Likewise.
	* sysdeps/i386/backtrace.c: Likewise.
	* sysdeps/ieee754/ldbl-opt/nldbl-compat.c: Likewise.
	* sysdeps/m68k/backtrace.c: Likewise.
	* sysdeps/mach/hurd/cthreads.c: Likewise.
	* sysdeps/mach/hurd/dirstream.h: Likewise.
	* sysdeps/mach/hurd/malloc-machine.h: Likewise.
	* sysdeps/nptl/malloc-machine.h: Likewise.
	* sysdeps/nptl/stdio-lock.h: Likewise.
	* sysdeps/posix/dirstream.h: Likewise.
	* sysdeps/posix/getaddrinfo.c: Likewise.
	* sysdeps/posix/system.c: Likewise.
	* sysdeps/pthread/aio_suspend.c: Likewise.
	* sysdeps/s390/s390-32/backtrace.c: Likewise.
	* sysdeps/s390/s390-64/backtrace.c: Likewise.
	* sysdeps/unix/sysv/linux/check_pf.c: Likewise.
	* sysdeps/unix/sysv/linux/if_index.c: Likewise.
	* sysdeps/unix/sysv/linux/s390/s390-32/getutent_r.c: Likewise.
	* sysdeps/unix/sysv/linux/s390/s390-32/getutid_r.c: Likewise.
	* sysdeps/unix/sysv/linux/s390/s390-32/getutline_r.c: Likewise.
	* sysdeps/unix/sysv/linux/shm-directory.c: Likewise.
	* sysdeps/unix/sysv/linux/system.c: Likewise.
	* sysdeps/x86_64/backtrace.c: Likewise.
	* time/alt_digit.c: Likewise.
	* time/era.c: Likewise.
	* time/tzset.c: Likewise.
	* wcsmbs/wcsmbsload.c: Likewise.
	* nptl/tst-initializers1.c (do_test): Refer to <libc-lock.h>
	instead of <bits/libc-lock.h> in comment.
2015-09-08 21:11:03 +00:00
Andrew Bennett
7498d7676d MIPS: Only use .set mips* assembler directives when necessary
There are a few .set mips* assembler directives used in the MIPS specific
sysdep code that force an instruction to be assembled for a specific ISA.
The reason for these is to allow an instruction to be encoded when it might
not be supported in the current ISA (when the code is run the Linux kernel
will trap and emulate any unsupported instructions).  Unfortunately forcing
a specific ISA means that when assembling for a newer ISA, where the
instruction has a different encoding, the wrong encoding will be used.

        * sysdeps/mips/bits/atomic.h [_MIPS_SIM == _ABIO32] (MIPS_PUSH_MIPS2):
        Only use .set mips2 if the current ISA is below mips2.
        * sysdeps/mips/sys/tas.h [_MIPS_SIM == _ABIO32] (_test_and_set):
        Likewise.
        * sysdeps/mips/nptl/tls.h (READ_THREAD_POINTER): Only use .set
        mips32r2 if the current ISA is below mips32r2.
        * sysdeps/mips/tls-macros.h (TLS_RDHWR): New define.
        (TLS_IE): Updated to use the TLD_RDHWR macro.
        (TLS_LE): Likewise.
        * sysdeps/unix/mips/sysdep.h (__mips_isa_rev): Moved out of #ifdef
        __ASSEMBLER__ condition.
2015-09-08 16:52:43 +01:00
Samuel Thibault
697ed91ca9 Fix parallel build of before-compile targets.
* sysdeps/mach/Makefile ($(patsubst
mach%,m\%h%,$(mach-before-compile))): Move rule to dedicated
mach-before-compile target.
* sysdeps/mach/hurd/Makefile ($(patsubst %,$(hurd-objpfx)hurd/%.%,auth
io fs process)): Move rule to dedicated hurd-before-compile target.
2015-09-08 01:26:01 +02:00
Samuel Thibault
7f9346e11e Fix rules generating headers in hurd/ and mach/
when initial make call has subdir= explicitly set.

* sysdeps/mach/Makefile ($(patsubst
mach%,m\%h%,$(mach-before-compile))): Force subdir to mach when
calling $(MAKE).
* sysdeps/mach/hurd/Makefile ($(patsubst %,$(hurd-objpfx)hurd/%.%,auth
io fs process)): Force subdir to hurd when calling $(MAKE).
($(common-objpfx)hurd/../mach/RPC_task_get_sampled_pcs.c): Force
subdir to mach when calling $(MAKE).
2015-09-06 21:07:00 +02:00
Manolis Ragkousis
ccdc039c9d Check sysheaders when looking for Mach and Hurd headers
* sysdeps/mach/configure.ac: Add sysheaders check.
* sysdeps/mach/configure: Regenerate.
* sysdeps/mach/hurd/configure.ac: Add sysheaders check.
* sysdeps/mach/hurd/configure: Regenerate.
2015-09-06 20:56:18 +02:00
Roland McGrath
bd9e69abb8 BZ#18921: Fix opendir inverted o_directory_works test. 2015-09-04 14:37:56 -07:00
Joseph Myers
522e02ab8a Rename bits/linkmap.h to linkmap.h (bug 14912).
It was noted in
<https://sourceware.org/ml/libc-alpha/2012-09/msg00305.html> that the
bits/*.h naming scheme should only be used for installed headers.
This patch renames bits/linkmap.h to plain linkmap.h to follow that
convention.

Tested for x86_64 (testsuite, and that installed stripped shared
libraries are unchanged by the patch).

	[BZ #14912]
	* bits/linkmap.h: Move to ...
	* sysdeps/generic/linkmap.h: ...here.
	* sysdeps/aarch64/bits/linkmap.h: Move to ...
	* sysdeps/aarch64/linkmap.h: ...here.
	* sysdeps/arm/bits/linkmap.h: Move to ...
	* sysdeps/arm/linkmap.h: ...here.
	* sysdeps/hppa/bits/linkmap.h: Move to ...
	* sysdeps/hppa/linkmap.h: ...here.
	* sysdeps/ia64/bits/linkmap.h: Move to ...
	* sysdeps/ia64/linkmap.h: ...here.
	* sysdeps/mips/bits/linkmap.h: Move to ...
	* sysdeps/mips/linkmap.h: ...here.
	* sysdeps/s390/bits/linkmap.h: Move to ...
	* sysdeps/s390/linkmap.h: ...here.
	* sysdeps/sh/bits/linkmap.h: Move to ...
	* sysdeps/sh/linkmap.h: ...here.
	* sysdeps/x86/bits/linkmap.h: Move to ...
	* sysdeps/x86/linkmap.h: ...here.
	* include/link.h: Include <linkmap.h> instead of <bits/linkmap.h>.
2015-09-04 19:44:27 +00:00
Andreas Schwab
b4b522f610 Terminate FDE before return trampoline in makecontext for powerpc (bug 18635)
This fixes tst-makecontext for PowerPC.

	[BZ #18635]
	* sysdeps/unix/sysv/linux/powerpc/powerpc32/makecontext.S
	(__makecontext): Terminate FDE before return label.
	(__novec_makecontext): Likewise.
2015-09-04 16:03:00 -03:00
Carlos Eduardo Seo
41a4f0d493 powerpc: Fix compiler warning in some syscalls.
Commit f4491417cc introduced some warnings
when building GLIBC with GCC 5.x. similar to those fixed by commit
dd6e8af6ba.  This patch fixes those warnings.

	* sysdeps/unix/sysv/linux/socketpair.c: Use the address of the
	first member of struct sv in syscall macro.
2015-09-04 15:19:30 -03:00
Joseph Myers
81503d1e44 Rename bits/stdio-lock.h to stdio-lock.h (bug 14912).
It was noted in
<https://sourceware.org/ml/libc-alpha/2012-09/msg00305.html> that the
bits/*.h naming scheme should only be used for installed headers.
This patch renames bits/stdio-lock.h to plain stdio-lock.h to follow
that convention.

Tested for x86_64 (testsuite, and that installed stripped shared
libraries are unchanged by the patch).

	[BZ #14912]
	* bits/stdio-lock.h: Move to ...
	* sysdeps/generic/stdio-lock.h: ...here.
	(_BITS_STDIO_LOCK_H): Rename macro to _STDIO_LOCK_H.
	* sysdeps/nptl/bits/stdio-lock.h: Move to ...
	* sysdeps/nptl/stdio-lock.h: ...here.
	(_BITS_STDIO_LOCK_H): Rename macro to _STDIO_LOCK_H.
	* include/libio.h: Include <stdio-lock.h> instead of
	<bits/stdio-lock.h>.
	* sysdeps/nptl/fork.c: Likewise.
	* sysdeps/pthread/flockfile.c: Likewise.
	* sysdeps/pthread/ftrylockfile.c: Likewise.
	* sysdeps/pthread/funlockfile.c: Likewise.
2015-09-04 16:21:14 +00:00
Joseph Myers
0f4341fbec Rename bits/m68k-vdso.h to m68k-vdso.h (bug 14912).
It was noted in
<https://sourceware.org/ml/libc-alpha/2012-09/msg00305.html> that the
bits/*.h naming scheme should only be used for installed headers.
This patch renames bits/m68k-vdso.h to plain m68k-vdso.h to follow
that convention.

	[BZ #14912]
	* sysdeps/unix/sysv/linux/m68k/bits/m68k-vdso.h: Move to ...
	* sysdeps/unix/sysv/linux/m68k/m68k-vdso.h: ...here.
	* sysdeps/unix/sysv/linux/m68k/coldfire/bits/atomic.h: Include
	<m68k-vdso.h> instead of <bits/m68k-vdso.h>.
	* sysdeps/unix/sysv/linux/m68k/init-first.c: Likewise.
	* sysdeps/unix/sysv/linux/m68k/m68k-helpers.S: Likewise.
	* sysdeps/unix/sysv/linux/m68k/m68k-vdso.c: Likewise.
2015-09-04 14:46:21 +00:00
Joseph Myers
02d55fe04e Rename bits/libc-tsd.h to libc-tsd.h (bug 14912).
It was noted in
<https://sourceware.org/ml/libc-alpha/2012-09/msg00305.html> that the
bits/*.h naming scheme should only be used for installed headers.
This patch renames bits/libc-tsd.h to plain libc-tsd.h to follow that
convention.

Tested for x86_64 (testing, and that installed stripped shared
libraries are unchanged by the patch).

	[BZ #14912]
	* bits/libc-tsd.h: Move to ...
	* sysdeps/generic/libc-tsd.h: ...here.
	(_GENERIC_BITS_LIBC_TSD_H): Rename macro to _GENERIC_LIBC_TSD_H.
	* sysdeps/mach/hurd/bits/libc-tsd.h: Move to ...
	* sysdeps/mach/hurd/libc-tsd.h: ...here.
	(_BITS_LIBC_TSD_H): Rename macro to _LIBC_TSD_H.
	* include/ctype.h: Include <libc-tsd.h> instead of
	<bits/libc-tsd.h>.
	* include/rpc/rpc.h: Likewise.
	* locale/localeinfo.h: Likewise.
	* sunrpc/rpc_thread.c: Likewise.
	* sysdeps/mach/hurd/malloc-machine.h: Likewise.
	* sysdeps/nptl/malloc-machine.h: Likewise.
2015-09-03 20:33:46 +00:00
Joseph Myers
04d9a38baf Add netinet/in.h values from Linux 4.2.
This patch adds new constants from Linux 4.2 to netinet/in.h:
IPPROTO_MPLS and IP_BIND_ADDRESS_NO_PORT (both in
include/uapi/linux/in.h in Linux; one directly in netinet/in.h, one in
bits/in.h in glibc).

Tested for x86_64 (testsuite, and that installed stripped shared
libraries are unchanged by the patch).

	* inet/netinet/in.h (IPPROTO_MPLS): New enum value and macro.
	* sysdeps/unix/sysv/linux/bits/in.h (IP_BIND_ADDRESS_NO_PORT): New
	macro.
2015-09-01 13:47:25 +00:00
Joseph Myers
5be255c28b Add more TCP_* values to netinet/tcp.h.
This patch adds move TCP_* values to sysdeps/gnu/netinet/tcp.h to
bring it up to date with Linux 4.2.  TCP_SAVE_SYN and TCP_SAVED_SYN
are new in 4.2, TCP_NOTSENT_LOWAT and TCP_CC_INFO are older (Szabolcs
previously noted in
<https://sourceware.org/ml/libc-alpha/2015-06/msg00938.html> that this
header was out of date in glibc).

Tested for x86_64 (testsuite, and that installed stripped shared
libraries are unchanged by the patch).

	* sysdeps/gnu/netinet/tcp.h (TCP_NOTSENT_LOWAT): New macro.
	(TCP_CC_INFO): Likewise.
	(TCP_SAVE_SYN): Likewise.
	(TCP_SAVED_SYN): Likewise.
2015-09-01 13:45:49 +00:00
Brett Neumeier
3f512ca79f Fix non-v9 32-bit sparc build.
[BZ #18870]
	* sysdeps/sparc/sparc32/sem_open.c: Add missing #include
2015-08-31 15:27:47 -07:00
Paul Eggert
543ef578c3 Fix broken overflow check in posix_fallocate [BZ 18873]
* sysdeps/posix/posix_fallocate.c (posix_fallocate):
* sysdeps/posix/posix_fallocate64.c (__posix_fallocate64_l64):
Fix parenthesization typo.
2015-08-31 17:47:42 +02:00
Adhemerval Zanella
d3573f61ac Fix wordsize-32 mmap offset for negative value (BZ#18877)
This patch fixes the default wordsize-32 mmap implementation offset
calculation for negative values.  Current code uses signed shift
operation to calculate the multiple size to use with syscall and
it is implementation defined.  Change it to use a division base
on mmap page size (default being as before, 4096).

Tested on armv7hf.

	[BZ #18877]
	* posix/Makefile (tests): Add tst-mmap-offset.
	* posix/tst-mmap.c: New file.
	* sysdeps/unix/sysv/linux/generic/wordsize-32/mmap.c (__mmap): Fix
	offset calculation for negative values.
2015-08-28 10:42:07 -03:00
H.J. Lu
75dd0a8f3d Detect and select i586/i686 implementation at run-time
We detect i586 and i686 features at run-time by checking CX8 and CMOV
CPUID features bits.  We can use these information to select the best
implementation in ix86 multiarch.  HAS_I586/HAS_I686 is true if i586/i686
instructions are available on the processor.

Due to the reordering and the other nifty extensions in i686, it is not
really good to use heavily i586 optimized code on an i686.  It's better
to use i486 code if it isn't an i586.  USE_I586/USE_I686 is true if
i586/i686 implementation should be used for the processor.  USE_I586
is true only if i686 instructions aren't available.  If i686 instructions
are available, we always choose i686 or i486 implementation, in that order,
and we never choose i586 implementation for i686-class processors.

	* sysdeps/i386/init-arch.h: New file.
	* sysdeps/i386/i586/init-arch.h: Likewise.
	* sysdeps/i386/i686/init-arch.h: Likewise.
	* sysdeps/x86/cpu-features.c (init_cpu_features): Set bit_I586
	bit if CX8 is available.  Set bit_I686 bit if CMOV is available.
	* sysdeps/x86/cpu-features.h (bit_I586): New.
	(bit_I686): Likewise.
	(bit_CX8): Likewise.
	(bit_CMOV): Likewise.
	(index_CX8): Likewise.
	(index_CMOV): Likewise.
	(index_I586): Likewise.
	(index_I686): Likewise.
	(reg_CX8): Likewise.
	(reg_CMOV): Likewise.
	(HAS_I586): Defined as HAS_ARCH_FEATURE (I586) if i586 isn't
	available at compile-time.
	(HAS_I686): Defined as HAS_ARCH_FEATURE (I686) if i686 isn't
	available at compile-time.
	* sysdeps/x86/init-arch.h (USE_I586): New macro.
	(USE_I686): Likewise.
2015-08-27 09:06:44 -07:00
H.J. Lu
d226114b9b Add i386 memset and memcpy assembly functions
Add i386 memset and memcpy assembly functions with REP MOVSB/STOSB
instructions.

	* sysdeps/i386/bcopy.S: New file.
	* sysdeps/i386/bzero.S: Likewise.
	* sysdeps/i386/memcpy.S: Likewise.
	* sysdeps/i386/memmove.S: Likewise.
	* sysdeps/i386/mempcpy.S: Likewise.
	* sysdeps/i386/memset.S: Likewise.
	* sysdeps/i386/bzero.c: Removed.
	* sysdeps/i386/memset.c: Likewise.
	* sysdeps/i386/i586/memcpy_chk.S: Likewise.
	* sysdeps/i386/i586/mempcpy_chk.S: Likewise.
	* sysdeps/i386/i586/memset_chk.S: Likewise.
	* sysdeps/i386/i686/memcpy_chk.S: Moved to ...
	* sysdeps/i386/memcpy_chk.S: Here.
	* sysdeps/i386/i686/memmove_chk.S: Moved to ...
	* sysdeps/i386/memmove_chk.S: Here.
	* sysdeps/i386/i686/mempcpy_chk.S: Moved to ...
	* sysdeps/i386/mempcpy_chk.S: Likewise.
	* sysdeps/i386/i686/memset_chk.S: Moved to ...
	* sysdeps/i386/memset_chk.S: Likewise.
2015-08-27 09:04:54 -07:00
H.J. Lu
ae857215dd Remove i486 subdirectory
Since glibc doesn't support i386 any more, we can remove i486 subdirectory.

	* sysdeps/i386/i586/Implies: Removed.
	* sysdeps/i386/i686/Implies: Likewise.
2015-08-27 07:59:29 -07:00
H.J. Lu
892bb11e4e Move i486/strlen.S to strlen.S
Since glibc doesn't support i386 any more, we can move i486/strlen.S
to strlen.S.

	* sysdeps/i386/i486/strlen.S: Moved to ...
	* sysdeps/i386/strlen.S: Here.
2015-08-27 07:57:55 -07:00
H.J. Lu
8964482ab8 Move i486/strcat.S to strcat.S
Since glibc doesn't support i386 any more, we can move i486/strcat.S
to strcat.S.

	* sysdeps/i386/i486/strcat.S: Moved to ...
	* sysdeps/i386/strcat.S: Here.
	* sysdeps/i386/i686/multiarch/strcat.S: Updated.
2015-08-27 07:56:41 -07:00
H.J. Lu
413db45d1b Move i486/pthread_spin_trylock.S to pthread_spin_trylock.S
Since glibc doesn't support i386 any more, we can move
i486/pthread_spin_trylock.S to pthread_spin_trylock.S

	* sysdeps/i386/i486/pthread_spin_trylock.S: Moved to ...
	* sysdeps/i386/pthread_spin_trylock.S: Here.
	* sysdeps/i386/i586/pthread_spin_trylock.S: Removed.
	* sysdeps/i386/i686/pthread_spin_trylock.S: Updated.
2015-08-27 07:55:29 -07:00
H.J. Lu
1894b3ea3c Move i486/string-inlines.c to string-inlines.c
Since glibc doesn't support i386 any more, we can move
i486/string-inlines.c to string-inlines.c.

	* sysdeps/i386/i486/string-inlines.c: Moved to ...
	* sysdeps/i386/string-inlines.c: Here.
2015-08-27 07:51:55 -07:00
H.J. Lu
267dfab1bd Move i486/htonl.S to htonl.S
Since glibc doesn't support i386 any more, we can move i486/htonl.S to
htonl.S.

	* sysdeps/i386/i486/htonl.S: Moved ...
	* sysdeps/i386/htonl.S: here.
2015-08-27 07:50:34 -07:00
H.J. Lu
e30680c07a Move i486/bits/atomic.h to bits/atomic.h
Since glibc doesn't support i386 any more, we can move i486/bits/atomic.h
to bits/atomic.h.

	* sysdeps/i386/i486/bits/atomic.h: Moved to ...
	* sysdeps/i386/bits/atomic.h: Here.
2015-08-27 07:49:22 -07:00
H.J. Lu
4d374e4d38 Remove sysdeps/i386/i486/Versions
sysdeps/i386/i486/Versions isn't needed since it duplicates contents
in sysdeps/i386/Versions.

	* sysdeps/i386/i486/Versions: Removed.
2015-08-27 07:45:14 -07:00
Stan Shebs
fff289f358 Disable uninitialized warning with GCC 4.8
As with other spots in the code, GCC 4.8 unnecessarily complains about
an uninitialized variable in tanl calcs, so this patch disables.  With
it, the library and sees the usual set of test passes.

	* sysdeps/ieee754/ldbl-96/k_tanl.c: Include <libc-internal.h>.
	(__kernel_tanl): Ignore uninitialized warnings around use of SIGN.
2015-08-26 16:10:43 -07:00
Carlos Eduardo Seo
3c13f28c8e powerpc: Sync hwcap.h with kernel
Linux commit b4b56f9ecab40f3b4ef53e130c9f6663be491894 introduced
a new HWCAP2 bit to indicate that the kernel now aborts a memory
transaction when a syscall is made.  This patch adds that bit to
sysdeps/powerpc/bits/hwcap.h.

2015-08-26  Carlos Eduardo Seo  <cseo@linux.vnet.ibm.com>

	* sysdeps/powerpc/bits/hwcap.h: Add PPC_FEATURE2_HTM_NOSC.
	* sysdeps/powerpc/dl-procinfo.c:
	(_dl_powerpc_cap_flags): Added descriptor for this hwcap
	feature so it shows when LD_SHOW_AUXV=1.
2015-08-26 14:55:40 -03:00
Paul E. Murphy
6eb901de9b powerpc: Revert to default atomic ops in elision code
Power ISA 2.07B section B.5.5 relaxed the barrier requirement around a
TLE enabled lock.  It is now identical to a traditional lock.

2015-08-26  Paul E. Murphy  <murphyp@linux.vnet.ibm.com>

	* sysdeps/unix/sysv/linux/powerpc/elision-lock.c
	(__arch_compare_and_exchange_val_32_acq): Remove and use common
	definition.  ISA 2.07B no longer requires full sync.
2015-08-26 14:55:33 -03:00
Mike Frysinger
a2ab38c9b8 mips: siginfo.h: add SIGSYS details [BZ #18863]
Linux 3.13 added SIGSYS details to siginfo_t; update glibc's copy to
keep in sync with it.
2015-08-26 13:33:54 -04:00
H.J. Lu
f6b71eada3 Replace BZERO_P/PIC with USE_AS_BZERO/SHARED
Replace BZERO_P with USE_AS_BZERO in i586/i686 memset.S to support i386
multi-arch memset.  Also we should check SHARED not PIC for libc.so
since libc.a may be compiled with PIC.

	* sysdeps/i386/i586/bzero.S (USE_AS_BZERO): New.
	* sysdeps/i386/i686/bzero.S (USE_AS_BZERO): Likewise.
	* sysdeps/i386/i586/memset.S (BZERO_P): Removed.
	Check USE_AS_BZERO/SHARED instead of BZERO_P/PIC.
	(__memset_zero_constant_len_parameter): New.
	* sysdeps/i386/i686/memset.S (BZERO_P): Removed.
	Check USE_AS_BZERO/SHARED instead of BZERO_P/PIC.
	(__memset_zero_constant_len_parameter): Don't define if
	__memset_chk or USE_AS_BZERO are defined.
2015-08-26 08:01:03 -07:00
H.J. Lu
b6e19c4bdc Replace MEMPCPY_P/PIC with USE_AS_MEMPCPY/SHARED
Replace MEMPCPY_P with USE_AS_MEMPCPY in i586 memcpy.S to support i386
multi-arch memcpy.  Also we should check SHARED not PIC for libc.so
since libc.a may be compiled with PIC.

	* sysdeps/i386/i586/memcpy.S (MEMPCPY_P): Removed.
	Check USE_AS_MEMPCPY/SHARED instead of MEMPCPY_P/PIC.
	* sysdeps/i386/i586/mempcpy.S (USE_AS_MEMPCPY): New.
2015-08-26 07:59:32 -07:00
H.J. Lu
38d22f9f48 Don't disable SSE in x86-64 ld.so
Since x86-64 ld.so preserves vector registers now, we can use SSE in
x86-64 ld.so.  We should run tst-ld-sse-use.sh only on i386.

	* sysdeps/x86/Makefile [$(subdir) == elf] (CFLAGS-.os,
	tests-special, $(objpfx)tst-ld-sse-use.out): Moved to ...
	* sysdeps/i386/Makefile [$(subdir) == elf] (CFLAGS-.os,
	tests-special, $(objpfx)tst-ld-sse-use.out): Here.  Update
	comments.
	* sysdeps/x86_64/Makefile [$(subdir) == elf] (CFLAGS-.os): Add
	-mno-mmx for $(all-rtld-routines).
	* sysdeps/x86/tst-ld-sse-use.sh: Moved to ...
	* sysdeps/i386/tst-ld-sse-use.sh: Here.  Replace x86-64 with
	i386.
2015-08-26 07:55:42 -07:00
Stefan Liebler
b022830beb Adjust _Unwind_Word in unwind.h to version in libgcc.
Building glibc on s390-32 with gcc option -mzarch produces the error due to
sysdeps/s390/jmpbuf-unwind.h:37:10: (void *) (_Unwind_GetCFA  (_context):
cast to pointer from integer of different size [-Werror=int-to-pointer-cast]

Building on s390-32 in esa-mode or s390-64 is fine.

_Unwind_GetCFA returns an _Unwind_Word which is an unsigned
with a size of 4 bytes on s390-32 (esa-mode) and 8 bytes on s390-64.
On s390-32 (zarch-mode), _Unwind_Word has a size of 8 bytes, too.

_Unwind_Word is defined in sysdeps/generic/unwind.h as
typedef unsigned _Unwind_Word __attribute__((__mode__(__word__)));

In libgcc unwind header (<gcc-src>/libgcc/unwind-generic.h) this typedef has
changed to "typedef unsigned _Unwind_Word __attribute__((__mode__(__unwind_word__)));"
in June 2008.

With this mode, _Unwind_Word has a size of 4 bytes on s390-32 (zarch-mode).
The same change applies to _Unwind_Sword.
Thus this patch updates the unwind header according to these changes.

Afterwards, the int-to-pointer-cast-warning is gone away on s390-32 (zarch-mode)
and the testsuite runs with the same test-failures as s390-32 (esa-mode)
plus FAIL: c++-types-check. Here register_t is expected to has a size of 4 bytes,
but it has a size of 8 bytes due to:
posix/sys/types.h:205:typedef int register_t __attribute__ ((__mode__ (__word__)));

The libgcc-patch for gcc 4.4 can be found here:
"[PATCH, spu, unwind] Remove attribute ((mode (word))) from unwind.h"
https://gcc.gnu.org/ml/gcc-patches/2008-06/msg00969.html

ChangeLog:

	* sysdeps/generic/unwind.h
	(_Unwind_Word): Use __mode__(__unwind_word__)
	instead of __mode__(__word__).
	(_Unwind_Sword): Likewise.
2015-08-26 10:26:26 +02:00
Stefan Liebler
808d702288 S390: Fix build error with gcc6 in utf8_utf16-z9.c.
This patch fixes the build error with gcc6:
array subscript is above array bounds [-Werror=array-bounds]

While including loop.c to construct the SINGLE(LOOPFCT) method
for converting from UTF-16 to UTF-8, the bytebuf array with length
MAX_NEEDED_INPUT is used as inptr. MAX_NEEDED_INPUT defaults to
MIN_NEEDED_INPUT if not defined before including loop.c.
Thus bytebuf has a length of 2.
This patch defines MAX_NEEDED_INPUT to MAX_NEEDED_TO, which is 4.

ChangeLog:

	* sysdeps/s390/s390-64/utf8-utf16-z9.c
	(MAX_NEEDED_INPUT): New define.
	(MAX_NEEDED_OUTPUT): New define.
2015-08-26 10:26:26 +02:00
Stefan Liebler
798f5b4b5d S390: Optimize memrchr.
This patch provides optimized version of memrchr with the z13 vector
instructions.

ChangeLog:

	* sysdeps/s390/multiarch/memrchr-c.c: New File.
	* sysdeps/s390/multiarch/memrchr-vx.S: Likewise.
	* sysdeps/s390/multiarch/memrchr.c: Likewise.
	* sysdeps/s390/multiarch/Makefile
	(sysdep_routines): Add memrchr functions.
	* sysdeps/s390/multiarch/ifunc-impl-list-common.c
	(__libc_ifunc_impl_list_common): Add ifunc test for memrchr.
2015-08-26 10:26:26 +02:00
Stefan Liebler
f21216015b S390: Optimize wmemcmp.
This patch provides optimized version of wmemcmp with the z13 vector
instructions.

ChangeLog:

	* sysdeps/s390/multiarch/wmemcmp-c.c: New File.
	* sysdeps/s390/multiarch/wmemcmp-vx.S: Likewise.
	* sysdeps/s390/multiarch/wmemcmp.c: Likewise.
	* sysdeps/s390/multiarch/Makefile
	(sysdep_routines): Add wmemcmp functions.
	* sysdeps/s390/multiarch/ifunc-impl-list-common.c
	(__libc_ifunc_impl_list_common): Add ifunc test for wmemcmp.
	* benchtests/bench-wmemcmp.c: New File.
	* benchtests/Makefile (wcsmbs-bench): Add wmemcmp.
2015-08-26 10:26:25 +02:00
Stefan Liebler
2e9e166761 S390: Optimize wmemset.
This patch provides optimized version of wmemset with the z13 vector
instructions.

ChangeLog:

	* sysdeps/s390/multiarch/wmemset-c.c: New File.
	* sysdeps/s390/multiarch/wmemset-vx.S: Likewise.
	* sysdeps/s390/multiarch/wmemset.c: Likewise.
	* sysdeps/s390/multiarch/Makefile
	(sysdep_routines): Add wmemset functions.
	* sysdeps/s390/multiarch/ifunc-impl-list-common.c
	(__libc_ifunc_impl_list_common): Add ifunc test for wmemset.
	* wcsmbs/wmemset.c: Use WMEMSET if defined.
	* string/test-memset.c: Add wmemset support.
	* wcsmbs/test-wmemset.c: New File.
	* wcsmbs/Makefile (strop-tests): Add wmemset.
	* benchtests/bench-memset.c: Add wmemset support.
	* benchtests/bench-wmemset.c: New File.
	* benchtests/Makefile (wcsmbs-bench): Add wmemset.
2015-08-26 10:26:25 +02:00
Stefan Liebler
9b593dc305 S390: Optimize memccpy.
This patch provides optimized versions of memccpy with the z13 vector
instructions.

ChangeLog:

	* sysdeps/s390/multiarch/memccpy-c.c: New File.
	* sysdeps/s390/multiarch/memccpy-vx.S: Likewise.
	* sysdeps/s390/multiarch/memccpy.c: Likewise.
	* sysdeps/s390/multiarch/Makefile
	(sysdep_routines): Add memccpy functions.
	* sysdeps/s390/multiarch/ifunc-impl-list-common.c
	(__libc_ifunc_impl_list_common): Add ifunc test for memccpy.
	* string/memccpy.c: Use MEMCCPY if defined.
2015-08-26 10:26:25 +02:00
Stefan Liebler
88eefd344b S390: Optimize memchr, rawmemchr and wmemchr.
This patch provides optimized versions of memchr, rawmemchr and wmemchr with the
z13 vector instructions.

ChangeLog:

	* sysdeps/s390/multiarch/memchr-vx.S: New File.
	* sysdeps/s390/multiarch/memchr.c: Likewise.
	* sysdeps/s390/multiarch/rawmemchr-c.c: Likewise.
	* sysdeps/s390/multiarch/rawmemchr-vx.S: Likewise.
	* sysdeps/s390/multiarch/rawmemchr.c: Likewise.
	* sysdeps/s390/multiarch/wmemchr-c.c: Likewise.
	* sysdeps/s390/multiarch/wmemchr-vx.S: Likewise.
	* sysdeps/s390/multiarch/wmemchr.c: Likewise.
	* sysdeps/s390/s390-32/multiarch/memchr.c: Likewise.
	* sysdeps/s390/s390-64/multiarch/memchr.c: Likewise.
	* sysdeps/s390/multiarch/Makefile (sysdep_routines): Add memchr, wmemchr
	and rawmemchr functions.
	* sysdeps/s390/multiarch/ifunc-impl-list-common.c
	(__libc_ifunc_impl_list_common): Add ifunc test for memchr, rawmemchr
	and wmemchr.
	* wcsmbs/wmemchr.c: Use WMEMCHR if defined.
	* string/test-memchr.c: Add wmemchr support.
	* wcsmbs/test-wmemchr.c: New File.
	* wcsmbs/Makefile (strop-tests): Add wmemchr.
	* benchtests/bench-memchr.c: Add wmemchr support.
	* benchtests/bench-wmemchr.c: New File.
	* benchtests/Makefile (wcsmbs-bench): wmemchr.
2015-08-26 10:26:24 +02:00
Stefan Liebler
b4c21601b1 S390: Optimize strcspn and wcscspn.
This patch provides optimized versions of strcspn and wcscspn with the z13
vector instructions.

ChangeLog:

	* sysdeps/s390/multiarch/strcspn-c.c: New File.
	* sysdeps/s390/multiarch/strcspn-vx.S: Likewise.
	* sysdeps/s390/multiarch/strcspn.c: Likewise.
	* sysdeps/s390/multiarch/wcscspn-c.c: Likewise.
	* sysdeps/s390/multiarch/wcscspn-vx.S: Likewise.
	* sysdeps/s390/multiarch/wcscspn.c: Likewise.
	* sysdeps/s390/multiarch/Makefile (sysdep_routines): Add strcspn and
	wcscspn functions.
	* sysdeps/s390/multiarch/ifunc-impl-list.c
	(__libc_ifunc_impl_list): Add ifunc test for strcspn, wcscspn.
	* wcsmbs/wcscspn.c: Use WCSCSPN if defined.
	* string/test-strcspn.c: Add wcscspn support.
	* wcsmbs/test-wcscspn.c: New File.
	* wcsmbs/Makefile (strop-tests): Add wcscspn.
	* benchtests/bench-strcspn.c: Add wcscspn support.
	* benchtests/bench-wcscspn.c: New File.
	* benchtests/Makefile (wcsmbs-bench): Add wcscspn.
2015-08-26 10:26:24 +02:00
Stefan Liebler
f0ba659847 S390: Optimize strpbrk and wcspbrk.
This patch provides optimized versions of strpbrk and wcspbrk with the z13
vector instructions.

ChangeLog:

	* sysdeps/s390/multiarch/strpbrk-c.c: New File.
	* sysdeps/s390/multiarch/strpbrk-vx.S: Likewise.
	* sysdeps/s390/multiarch/strpbrk.c: Likewise.
	* sysdeps/s390/multiarch/wcspbrk-c.c: Likewise.
	* sysdeps/s390/multiarch/wcspbrk-vx.S: Likewise.
	* sysdeps/s390/multiarch/wcspbrk.c: Likewise.
	* sysdeps/s390/multiarch/Makefile (sysdep_routines): Add strpbrk and
	wcspbrk functions.
	* sysdeps/s390/multiarch/ifunc-impl-list.c
	(__libc_ifunc_impl_list): Add ifunc test for strpbrk, wcspbrk.
	* wcsmbs/wcspbrk.c: Use WCSPBRK if defined.
	* string/test-strpbrk.c: Add wcspbrk support.
	* wcsmbs/test-wcspbrk.c: New File.
	* wcsmbs/Makefile (strop-tests): Add wcspbrk.
	* benchtests/bench-strpbrk.c: Add wcspbrk support.
	* benchtests/bench-wcspbrk.c: New File.
	* benchtests/Makefile (wcsmbs-bench): Add wcspbrk.
2015-08-26 10:26:24 +02:00
Stefan Liebler
f1ffad98be S390: Optimize strspn and wcsspn.
This patch provides optimized versions of strspn and wcsspn with the z13
vector instructions.

ChangeLog:

	* sysdeps/s390/multiarch/strspn-c.c: New File.
	* sysdeps/s390/multiarch/strspn-vx.S: Likewise.
	* sysdeps/s390/multiarch/strspn.c: Likewise.
	* sysdeps/s390/multiarch/wcsspn-c.c: Likewise.
	* sysdeps/s390/multiarch/wcsspn-vx.S: Likewise.
	* sysdeps/s390/multiarch/wcsspn.c: Likewise.
	* wcsmbs/wcsspn.c: Use WCSSPN if defined.
	* sysdeps/s390/multiarch/Makefile (sysdep_routines): Add strspn and
	wcsspn functions.
	* sysdeps/s390/multiarch/ifunc-impl-list.c
	(__libc_ifunc_impl_list): Add ifunc test for strspn, wcsspn.
	* string/test-strspn.c: Add wcsspn support.
	* wcsmbs/test-wcsspn.c: New File.
	* wcsmbs/Makefile (strop-tests): Add wcsspn.
	* benchtests/bench-strspn.c: Add wcsspn support.
	* benchtests/bench-wcsspn.c: New File.
	* benchtests/Makefile (wcsmbs-bench): Add wcsspn.
2015-08-26 10:26:24 +02:00
Stefan Liebler
f40132d4bd S390: Optimize strrchr and wcsrchr.
This patch provides optimized versions of strrchr and wcsrchr with the z13
vector instructions.

ChangeLog:

	* sysdeps/s390/multiarch/strrchr-c.c: New File.
	* sysdeps/s390/multiarch/strrchr-vx.S: Likewise.
	* sysdeps/s390/multiarch/strrchr.c: Likewise.
	* sysdeps/s390/multiarch/wcsrchr-c.c: Likewise.
	* sysdeps/s390/multiarch/wcsrchr-vx.S: Likewise.
	* sysdeps/s390/multiarch/wcsrchr.c: Likewise.
	* sysdeps/s390/multiarch/Makefile (sysdep_routines): Add strrchr and
	wcsrchr functions.
	* sysdeps/s390/multiarch/ifunc-impl-list.c
	(__libc_ifunc_impl_list): Add ifunc test for strrchr, wcsrchr.
	* benchtests/bench-wcsrchr.c: New File.
	* benchtests/Makefile (wcsmbs-bench): Add wcsrchr.
2015-08-26 10:26:23 +02:00
Stefan Liebler
d23d4ef19f S390: Optimize strchrnul and wcschrnul.
This patch provides optimized versions of strchrnul and wcschrnul with the z13
vector instructions.

ChangeLog:

	* sysdeps/s390/multiarch/strchrnul-c.c: New File.
	* sysdeps/s390/multiarch/strchrnul-vx.S: Likewise.
	* sysdeps/s390/multiarch/strchrnul.c: Likewise.
	* sysdeps/s390/multiarch/wcschrnul-c.c: Likewise.
	* sysdeps/s390/multiarch/wcschrnul-vx.S: Likewise.
	* sysdeps/s390/multiarch/wcschrnul.c: Likewise.
	* sysdeps/s390/multiarch/Makefile (sysdep_routines): Add strchrnul and
	wcschrnul functions.
	* sysdeps/s390/multiarch/ifunc-impl-list.c
	(__libc_ifunc_impl_list): Add ifunc test for strchrnul, wcschrnul.
	* wcsmbs/wcschrnul.c: Use WCSCHRNUL if defined.
	* string/test-strchr.c: Add wcschrnul support.
	* wcsmbs/test-wcschrnul.c: New File.
	* wcsmbs/Makefile (strop-tests): Add wcschrnul.
	* benchtests/bench-strchr.c: Add wcschrnul support.
	* benchtests/bench-wcschrnul.c: New File.
	* benchtests/Makefile (wcsmbs-bench): Add wcschrnul.
2015-08-26 10:26:23 +02:00
Stefan Liebler
cf150d45a9 S390: Optimize strchr and wcschr.
This patch provides optimized versions of strchr and wcschr with the z13
vector instructions.

ChangeLog:

	* sysdeps/s390/multiarch/strchr-c.c: New File.
	* sysdeps/s390/multiarch/strchr-vx.S: Likewise.
	* sysdeps/s390/multiarch/strchr.c: Likewise.
	* sysdeps/s390/multiarch/wcschr-c.c: Likewise.
	* sysdeps/s390/multiarch/wcschr-vx.S: Likewise.
	* sysdeps/s390/multiarch/wcschr.c: Likewise.
	* sysdeps/s390/multiarch/Makefile (sysdep_routines): Add strchr and
	wcschr functions.
	* sysdeps/s390/multiarch/ifunc-impl-list.c
	(__libc_ifunc_impl_list): Add ifunc test for strchr, wcschr.
	* string/strchr.c (STRCHR): Define and use macro.
	* benchtests/bench-wcschr.c: New File.
	* benchtests/Makefile (wcsmbs-bench): Add wcschr.
2015-08-26 10:26:23 +02:00
Stefan Liebler
cee82e70cc S390: Optimize strncmp and wcsncmp.
This patch provides optimized versions of strncmp and wcsncmp with the z13
vector instructions.

ChangeLog:

	* sysdeps/s390/multiarch/strncmp-c.c: New File.
	* sysdeps/s390/multiarch/strncmp-vx.S: Likewise.
	* sysdeps/s390/multiarch/strncmp.c: Likewise.
	* sysdeps/s390/multiarch/wcsncmp-c.c: Likewise.
	* sysdeps/s390/multiarch/wcsncmp-vx.S: Likewise.
	* sysdeps/s390/multiarch/wcsncmp.c: Likewise.
	* sysdeps/s390/multiarch/Makefile (sysdep_routines): Add strncmp and
	wcsncmp functions.
	* sysdeps/s390/multiarch/ifunc-impl-list.c
	(__libc_ifunc_impl_list): Add ifunc test for strncmp, wcsncmp.
	* wcsmbs/wcsncmp.c (WCSNCMP): Define and use macro.
	* benchtests/bench-strncmp.c: Add wcsncmp support.
	* benchtests/bench-wcsncmp.c: New File.
	* benchtests/Makefile (wcsmbs-bench): Add wcsncmp.
2015-08-26 10:26:22 +02:00
Stefan Liebler
63724a6db6 S390: Optimize strcmp and wcscmp.
This patch provides optimized versions of strcmp and wcscmp with the z13
vector instructions.

The architecture specific string.h had a typo, which leads to ommiting the
inline version in this file if __USE_STRING_INLINES is defined.
Tested this inline version by tweaking test-strcmp.c.

ChangeLog:

	* sysdeps/s390/multiarch/strcmp-vx.S: New File.
	* sysdeps/s390/multiarch/strcmp.c: Likewise.
	* sysdeps/s390/multiarch/wcscmp-c.c: Likewise.
	* sysdeps/s390/multiarch/wcscmp-vx.S: Likewise.
	* sysdeps/s390/multiarch/wcscmp.c: Likewise.
	* sysdeps/s390/s390-32/multiarch/strcmp.c: Likewise.
	* sysdeps/s390/s390-64/multiarch/strcmp.c: Likewise.
	* sysdeps/s390/multiarch/Makefile (sysdep_routines): Add strcmp and
	wcscmp functions.
	* sysdeps/s390/multiarch/ifunc-impl-list.c
	(__libc_ifunc_impl_list): Add ifunc test for strcmp, wcscmp.
	* string/strcmp.c (STRCMP): Define and use macro.
	* benchtests/bench-wcscmp.c: New File.
	* benchtests/Makefile (wcsmbs-bench): Add wcscmp.
	* sysdeps/s390/bits/string.h: Fix typo: _HAVE_STRING_ARCH_strcmp
	instead of _HAVE_STRING_ARCH_memchr.
2015-08-26 10:26:22 +02:00
Stefan Liebler
e1fe91180e S390: Optimize strncat wcsncat.
This patch provides optimized versions of strncat and wcsncat with the z13
vector instructions.

ChangeLog:

	* sysdeps/s390/multiarch/strncat-c.c: New File.
	* sysdeps/s390/multiarch/strncat-vx.S: Likewise.
	* sysdeps/s390/multiarch/strncat.c: Likewise.
	* sysdeps/s390/multiarch/wcsncat-c.c: Likewise.
	* sysdeps/s390/multiarch/wcsncat-vx.S: Likewise.
	* sysdeps/s390/multiarch/wcsncat.c: Likewise.
	* sysdeps/s390/multiarch/Makefile (sysdep_routines): Add strncat and
	wcsncat functions.
	* sysdeps/s390/multiarch/ifunc-impl-list.c
	(__libc_ifunc_impl_list): Add ifunc test for strncat, wcsncat.
	* wcsmbs/wcsncat.c (WCSNCAT): Define and use macro.
	* string/test-strncat.c: Add wcsncat support.
	* wcsmbs/test-wcsncat.c: New File.
	* wcsmbs/Makefile (strop-tests): Add wcsncat.
	* benchtests/bench-strncat.c: Add wcsncat support.
	* benchtests/bench-wcsncat.c: New File.
	* benchtests/Makefile (wcsmbs-bench): Add wcsncat.
2015-08-26 10:26:22 +02:00
Stefan Liebler
d626a24f23 S390: Optimize strcat and wcscat.
This patch provides optimized versions of strcat and wcscat with the z13
vector instructions.

ChangeLog:

	* sysdeps/s390/multiarch/strcat-c.c: New File.
	* sysdeps/s390/multiarch/strcat-vx.S: Likewise.
	* sysdeps/s390/multiarch/strcat.c: Likewise.
	* sysdeps/s390/multiarch/wcscat-c.c: Likewise.
	* sysdeps/s390/multiarch/wcscat-vx.S: Likewise.
	* sysdeps/s390/multiarch/wcscat.c: Likewise.
	* sysdeps/s390/multiarch/Makefile (sysdep_routines): Add strcat and
	wcscat functions.
	* sysdeps/s390/multiarch/ifunc-impl-list.c
	(__libc_ifunc_impl_list): Add ifunc test for strcat, wcscat.
	* string/strcat.c (STRCAT): Define and use macro.
	* wcsmbs/wcscat.c: Use WCSCAT if defined.
	* string/test-strcat.c: Add wcscat support.
	* wcsmbs/test-wcscat.c: New File.
	* wcsmbs/Makefile (strop-tests): Add wcscat.
	* benchtests/bench-strcat.c: Add wcscat support.
	* benchtests/bench-wcscat.c: New File.
	* benchtests/Makefile (wcsmbs-bench): Add wcscat.
2015-08-26 10:26:21 +02:00
Stefan Liebler
b3a0c176d1 S390: Optimize stpncpy and wcpncpy.
This patch provides optimized versions of stpncpy and wcpncpy with the z13
vector instructions.

ChangeLog:

	* sysdeps/s390/multiarch/stpncpy-c.c: New File.
	* sysdeps/s390/multiarch/stpncpy-vx.S: Likewise.
	* sysdeps/s390/multiarch/stpncpy.c: Likewise.
	* sysdeps/s390/multiarch/wcpncpy-c.c: Likewise.
	* sysdeps/s390/multiarch/wcpncpy-vx.S: Likewise.
	* sysdeps/s390/multiarch/wcpncpy.c: Likewise.
	* sysdeps/s390/multiarch/Makefile (sysdep_routines): Add stpncpy and
	wcpncpy functions.
	* sysdeps/s390/multiarch/ifunc-impl-list.c
	(__libc_ifunc_impl_list): Add ifunc test for stpncpy, wcpncpy.
	* wcsmbs/wcpncpy.c: Use WCPNCPY if defined.
	* string/test-stpncpy.c: Add wcpncpy support.
	* wcsmbs/test-wcpncpy.c: New File.
	* wcsmbs/Makefile (strop-tests): Add wcpncpy.
	* benchtests/bench-stpncpy.c: Add wcpncpy support.
	* benchtests/bench-wcpncpy.c: New File.
	* benchtests/Makefile (wcsmbs-bench): Add wcpncpy.
2015-08-26 10:26:21 +02:00
Stefan Liebler
d183b96ee6 S390: Optimize strncpy and wcsncpy.
This patch provides optimized versions of strncpy and wcsncpy with the z13
vector instructions.

ChangeLog:

	* sysdeps/s390/multiarch/strncpy-vx.S: New File.
	* sysdeps/s390/multiarch/strncpy.c: Likewise.
	* sysdeps/s390/multiarch/wcsncpy-c.c: Likewise.
	* sysdeps/s390/multiarch/wcsncpy-vx.S: Likewise.
	* sysdeps/s390/multiarch/wcsncpy.c: Likewise.
	* sysdeps/s390/s390-32/multiarch/strncpy.c: Likewise.
	* sysdeps/s390/s390-64/multiarch/strncpy.c: Likewise.
	* sysdeps/s390/multiarch/Makefile (sysdep_routines): Add strncpy and
	wcsncpy functions.
	* wcsmbs/wcsncpy.c: Use WCSNCPY if defined.
	* sysdeps/s390/multiarch/ifunc-impl-list.c
	(__libc_ifunc_impl_list): Add ifunc test for strncpy, wcsncpy.
	* string/test-strncpy.c: Add wcsncpy support.
	* wcsmbs/test-wcsncpy.c: New File.
	* wcsmbs/Makefile (strop-tests): Add wcsncpy.
	* benchtests/bench-strncpy.c: Add wcsncpy support.
	* benchtests/bench-wcsncpy.c: New File.
	* benchtests/Makefile (wcsmbs-bench): Add wcsncpy
2015-08-26 10:26:21 +02:00
Stefan Liebler
8ade3db78d S390: Optimize stpcpy and wcpcpy.
This patch provides optimized versions of stpcpy and wcpcpy with the z13
vector instructions.

ChangeLog:

	* sysdeps/s390/multiarch/stpcpy-c.c: New File.
	* sysdeps/s390/multiarch/stpcpy-vx.S: Likewise.
	* sysdeps/s390/multiarch/stpcpy.c: Likewise.
	* sysdeps/s390/multiarch/wcpcpy-c.c: Likewise.
	* sysdeps/s390/multiarch/wcpcpy-vx.S: Likewise.
	* sysdeps/s390/multiarch/wcpcpy.c: Likewise.
	* sysdeps/s390/multiarch/Makefile (sysdep_routines): Add stpcpy and
	wcpcpy functions.
	* string/stpcpy.c: Use STPCPY if defined.
	* wcsmbs/wcpcpy.c: Use WCPCPY if defined.
	* sysdeps/s390/multiarch/ifunc-impl-list.c
	(__libc_ifunc_impl_list): Add ifunc test for stpcpy, wcpcpy.
	* string/test-stpcpy.c: Add wcpcpy support.
	* wcsmbs/test-wcpcpy.c: New File.
	* wcsmbs/Makefile (strop-tests): Add wcpcpy.
	* benchtests/bench-stpcpy.c: Add wcpcpy support.
	* benchtests/bench-wcpcpy.c: New File.
	* benchtests/Makefile (wcsmbs-bench): Add wcpcpy.
2015-08-26 10:26:21 +02:00
Stefan Liebler
680df122ab S390: Optimize strcpy and wcscpy.
This patch provides optimized versions of strcpy and wcscpy with the z13
vector instructions.

ChangeLog:

	* sysdeps/s390/multiarch/strcpy-vx.S: New File.
	* sysdeps/s390/multiarch/strcpy.c: Likewise.
	* sysdeps/s390/multiarch/wcscpy-c.c: Likewise.
	* sysdeps/s390/multiarch/wcscpy-vx.S: Likewise.
	* sysdeps/s390/multiarch/wcscpy.c: Likewise.
	* sysdeps/s390/s390-32/multiarch/strcpy.c: Likewise.
	* sysdeps/s390/s390-64/multiarch/strcpy.c: Likewise.
	* sysdeps/s390/multiarch/Makefile (sysdep_routines): Add strcpy and
	wcscpy functions.
	* sysdeps/s390/multiarch/ifunc-impl-list.c
	(__libc_ifunc_impl_list): Add ifunc test for strcpy, wcscpy.
	* benchtests/bench-wcscpy.c: New File.
	* benchtests/Makefile (wcsmbs-bench): Add wcscpy.
2015-08-26 10:26:20 +02:00
Stefan Liebler
fcf40ebe26 S390: Optimize strnlen and wcsnlen.
This patch provides optimized versions of strnlen and wcsnlen with the z13
vector instructions.

ChangeLog:

	* sysdeps/s390/multiarch/strnlen-c.c: New File.
	* sysdeps/s390/multiarch/strnlen-vx.S: Likewise.
	* sysdeps/s390/multiarch/strnlen.c: Likewise.
	* sysdeps/s390/multiarch/wcsnlen-c.c: Likewise.
	* sysdeps/s390/multiarch/wcsnlen-vx.S: Likewise.
	* sysdeps/s390/multiarch/wcsnlen.c: Likewise.
	* sysdeps/s390/multiarch/Makefile (sysdep_routines): Add strnlen and
	wcsnlen functions.
	* sysdeps/s390/multiarch/ifunc-impl-list.c
	(__libc_ifunc_impl_list): Add ifunc test for strnlen, wcsnlen.
	* wcsmbs/wcsnlen.c: Use WCSNLEN if defined.
	* string/test-strnlen.c: Add wcsnlen support.
	* wcsmbs/test-wcsnlen.c: New File.
	* wcsmbs/Makefile (strop-tests): Add wcsnlen.
	* benchtests/bench-strnlen.c: Add wcsnlen support.
	* benchtests/bench-wcsnlen.c: New File.
	* benchtests/Makefile (wcsmbs-bench): Add wcsnlen.
2015-08-26 10:26:20 +02:00
Stefan Liebler
9472f35a0a S390: Optimize strlen and wcslen.
This patch provides optimized versions of strlen and wcslen with the z13 vector
instructions.
The helper macro IFUNC_VX_IMPL is introduced and is used to register all
__<func>_c() and __<func>_vx() functions within __libc_ifunc_impl_list()
to the ifunc test framework.

ChangeLog:

	* sysdeps/s390/multiarch/Makefile: New File.
	* sysdeps/s390/multiarch/strlen-c.c: Likewise.
	* sysdeps/s390/multiarch/strlen-vx.S: Likewise.
	* sysdeps/s390/multiarch/strlen.c: Likewise.
	* sysdeps/s390/multiarch/wcslen-c.c: Likewise.
	* sysdeps/s390/multiarch/wcslen-vx.S: Likewise.
	* sysdeps/s390/multiarch/wcslen.c: Likewise.
	* string/strlen.c (STRLEN): Define and use macro.
	* sysdeps/s390/multiarch/ifunc-impl-list.c
	(IFUNC_VX_IMPL): New macro function.
	(__libc_ifunc_impl_list): Add ifunc test for strlen, wcslen.
	* benchtests/Makefile (wcsmbs-bench): New variable.
	(string-bench-all): Added wcsmbs-bench.
	* benchtests/bench-wcslen.c: New File.
2015-08-26 10:26:20 +02:00
Stefan Liebler
fd484e057d S390: Ifunc resolver macro for vector instructions.
This patch introduces a s390 specific ifunc resolver macro for 32/64bit,
which chooses <func>_vx with vector instructions if HWCAP_S390_VX flag
in hwcaps is set or <func>_c if not.

ChangeLog:

	* sysdeps/s390/multiarch/ifunc-resolve.h (s390_vx_libc_ifunc,
	s390_vx_libc_ifunc2): New macro function.
2015-08-26 10:26:19 +02:00
Stefan Liebler
4f0a1cea34 S390: configure check for vector instruction support in assembler.
The S390 specific test checks if the assembler has support for the new z13
vector instructions by compiling a vector instruction. The .machine and
.machinemode directives are needed to compile the vector instruction without
-march=z13 option on 31/64 bit.
On success the macro HAVE_S390_VX_ASM_SUPPORT is defined. This macro is used
to determine if the optimized functions can be build without compile errors.
If the used assembler lacks vector support, then a warning is dumped while
configuring and only the common code functions are build.

The z13 instruction support was introduced in
"[Committed] S/390: Add support for IBM z13."
(https://sourceware.org/ml/binutils/2015-01/msg00197.html)

ChangeLog:

	* config.h.in (HAVE_S390_VX_ASM_SUPPORT): New macro undefine.
	* sysdeps/s390/configure.ac: Add test for S390 vector instruction
	assembler support.
	* sysdeps/s390/configure: Regenerated.
2015-08-26 10:26:19 +02:00
Stefan Liebler
a1b0488fc9 S390: Add new s390 platform.
The new IBM z13 is added to platform string array.
The macro _DL_PLATFORMS_COUNT is incremented to 8,
because it was not incremented by commit
"S/390: Sync AUXV capabilities and archs with kernel".

ChangeLog:

	* sysdeps/s390/dl-procinfo.c (_dl_s390_cap_flags): Add z13.
	* sysdeps/s390/dl-procinfo.h (_DL_PLATFORMS_COUNT): Increased.
2015-08-26 10:26:19 +02:00
Stefan Liebler
4e28fa8088 S390: Add hwcaps value for vector facility.
The HWCAP_S390_VX flag in hwcap field of auxiliary vector indicates
if the vector facility is available and the kernel is aware of it.
This can be tested with LD_SHOW_AUXV=1 <prog>.
Currently it does not show te, because it was not incremented
by commit "S/390: Add hwcap value for transactional execution.".
Thus _DL_HWCAP_COUNT is incremented by two.

ChangeLog:

	* sysdeps/s390/dl-procinfo.c (_dl_s390_platforms): Add vector flag.
	* sysdeps/s390/dl-procinfo.h: Add vector capability.
	* sysdeps/unix/sysv/linux/s390/bits/hwcap.h (HWCAP_S390_VX): Define.
2015-08-26 10:26:19 +02:00
Stefan Liebler
31556246c3 S390: Refactor ifunc implementations and enable ifunc-test-framework.
On s390 all ifunc resolvers were implemented in multiarch/ifunc-resolve.c.
The resulting single object files has undefined references to all ifunc-functions.
This patch introduces one multiarch/<func>.c file for each of memcpy, memcmp
and memset with the function specific ifunc resolver. The different function
implementations are now implemented in multiarch/<func>-s390x.S
(moved from multiarch/<func>.S).

The new multiarch/ifunc-resolve.h file contains the ifunc-resolver macro
and other helper-macros. They are merged and are now used in common for
32/64bit. Therefore the __<func>_g5/__<func>_z900 functions were renamed to
__<func>_default.

This patch also enables testing the ifunc implementations by implementing
the function __libc_ifunc_impl_list. It uses the helper-macros of ifunc-resolve.h.

ChangeLog:

	* sysdeps/s390/s390-32/multiarch/Makefile (sysdep_routines):
	Remove ifunc-resolve, add memset-s390, memcpy-s390, memcmp-s390.
	* sysdeps/s390/s390-32/multiarch/ifunc-resolve.c: Delete File.
	* sysdeps/s390/s390-32/multiarch/memcmp.S: Move to ...
	* sysdeps/s390/s390-32/multiarch/memcmp-s390.S: ... here.
	(memcmp, bcmp): Use __memcmp_default as alias source.
	* sysdeps/s390/s390-32/multiarch/memcmp.c: New File.
	* sysdeps/s390/s390-32/memcmp.S (__memcmp_g5):
	Rename to __memcmp_default.
	* sysdeps/s390/s390-32/multiarch/memcpy.S: Move to ...
	* sysdeps/s390/s390-32/multiarch/memcpy-s390.S: ... here.
	(memcpy): Use __memcpy_default as alias source.
	* sysdeps/s390/s390-32/multiarch/memcpy.c: New File.
	* sysdeps/s390/s390-32/memcpy.S (__memcpy_g5):
	Rename to __memcpy_default.
	* sysdeps/s390/s390-32/multiarch/memset.S: Move to ...
	* sysdeps/s390/s390-32/multiarch/memset-s390.S: ... here.
	(memset): Use __memset_default as alias source.
	* sysdeps/s390/s390-32/multiarch/memset.c: New File.
	* sysdeps/s390/s390-32/memset.S (__memset_g5):
	Rename to __memset_default.
	* sysdeps/s390/s390-64/multiarch/Makefile (sysdep_routines):
	Remove ifunc-resolve, add memset-s390x, memcpy-s390x, memcmp-s390x.
	* sysdeps/s390/s390-64/multiarch/ifunc-resolve.c: Delete File.
	* sysdeps/s390/s390-64/multiarch/memcmp.S: Move to ...
	* sysdeps/s390/s390-64/multiarch/memcmp-s390x.S: ... here.
	(memcmp, bcmp): Use __memcmp_default as alias source.
	* sysdeps/s390/s390-64/multiarch/memcmp.c: New File.
	* sysdeps/s390/s390-64/memcmp.S (__memcmp_z900):
	Rename to __memcmp_default.
	* sysdeps/s390/s390-64/multiarch/memcpy.S: Move to ...
	* sysdeps/s390/s390-64/multiarch/memcpy-s390x.S: ... here.
	(memcpy): Use __memcpy_default as alias source.
	* sysdeps/s390/s390-64/multiarch/memcpy.c: New File.
	* sysdeps/s390/s390-64/memcpy.S (__memcpy_z900):
	Rename to __memcpy_default.
	* sysdeps/s390/s390-64/multiarch/memset.S: Move to ...
	* sysdeps/s390/s390-64/multiarch/memset-s390x.S: ... here.
	(memset): Use __memset_default as alias source.
	* sysdeps/s390/s390-64/multiarch/memset.c: New File.
	* sysdeps/s390/s390-64/memset.S (__memset_z900):
	Rename to __memset_default.
	* sysdeps/s390/multiarch/ifunc-resolve.h: New File.
	* sysdeps/s390/multiarch/ifunc-impl-list.c: New File.
2015-08-26 10:26:18 +02:00
Stefan Liebler
5d96fe8c0d S390: Fix handling of DXC-byte in FPC-register.
On s390, the DXC(data-exception-code)-byte in FPC(floating-point-control)-
register contains a code of the last occured exception.
If bits 6 and 7 of DXC-byte are zero, the bits 0-5 correspond to the
ieee-exception flag bits.
The current implementation always uses these bits as ieee-exception flag bits.
fetestexcept() reports any exception after the first usage of a
vector-instruction in a process, because it raises an "vector instruction
exception" with DXC-code 0xFE.
This patch fixes the handling of the DXC-byte. The DXC-Byte is only handled
if bits 6 and 7 are zero.

The #define _FPU_RESERVED is extended by the DXC-Byte.
Otherwise the tests math/test-fpucw-static and math/test-fpucw-ieee-static
fails, because DXC-Byte contains the vector instruction exception when reaching
main(). This exception was triggered by strrchr() call in __init_misc().
__init_misc() is called after __setfpucw () in __libc_init_first().

The field __ieee_instruction_pointer in struct fenv_t is renamed to __unused
because it is a relict from commit "Remove PTRACE_PEEKUSER"
(87b9b50f0d) and isn´t used anymore.

ChangeLog:

	[BZ #18610]
	* sysdeps/s390/fpu/bits/fenv.h (fenv_t): Rename
	__ieee_instruction_pointer to __unused.
	* sysdeps/s390/fpu/fesetenv.c (__fesetenv): Remove usage of
	__ieee_instruction_pointer.
	* sysdeps/s390/fpu/fclrexcpt.c (feclearexcept): Fix dxc-field handling.
	* sysdeps/s390/fpu/fgetexcptflg.c (fegetexceptflag): Likewise.
	* sysdeps/s390/fpu/fsetexcptflg.c (fesetexceptflag): Likewise.
	* sysdeps/s390/fpu/ftestexcept.c (fetestexcept): Likewise.
	* sysdeps/s390/fpu/fpu_control.h (_FPU_RESERVED):
	Mark dxc-field as reserved.
2015-08-26 10:26:18 +02:00
Roland McGrath
f971949308 NaCl: Call __nacl_main in preference to main. 2015-08-25 13:37:07 -07:00
H.J. Lu
d8725b1fba Use SSE2 optimized strcmp in x86-64 ld.so
Since ld.so preserves vector registers now, we can use the same SSE2
optimized strcmp in x86-64 libc and ld.so.

	* sysdeps/x86_64/strcmp.S: Remove "#if !IS_IN (libc)".
2015-08-25 12:38:11 -07:00
H.J. Lu
ffee504f79 Don't run tst-getpid2 with LD_BIND_NOW=1
Since _dl_x86_64_save_sse and _dl_x86_64_restore_sse are removed now,
we don't need to run tst-getpid2 with LD_BIND_NOW=1.

	[BZ #11214]
	* sysdeps/unix/sysv/linux/Makefile (tst-getpid2-ENV): Removed.
2015-08-25 11:37:44 -07:00
Rajalakshmi Srinivasaraghavan
f4491417cc Call direct system calls for socket operations
Explicit system calls for the socket operations were added in Linux kernel
in commit 86250b9d12ca for powerpc. This patch make use of those instead of
calling socketcall to save number of cycles on networking syscalls.

2015-08-25  Rajalakshmi Srinivasaraghavan  <raji@linux.vnet.ibm.com>

	* sysdeps/unix/sysv/linux/powerpc/kernel-features.h: Define new macros.
	* sysdeps/unix/sysv/linux/accept.c: Call direct system call.
	* sysdeps/unix/sysv/linux/bind.c: Call direct system call.
	* sysdeps/unix/sysv/linux/connect.c: Call direct system call.
	* sysdeps/unix/sysv/linux/getpeername.c: Call direct system call.
	* sysdeps/unix/sysv/linux/getsockname.c: Call direct system call.
	* sysdeps/unix/sysv/linux/getsockopt.c: Call direct system call.
	* sysdeps/unix/sysv/linux/listen.c: Call direct system call.
	* sysdeps/unix/sysv/linux/recv.c: Call direct system call.
	* sysdeps/unix/sysv/linux/recvfrom.c: Call direct system call.
	* sysdeps/unix/sysv/linux/recvmsg.c: Call direct system call.
	* sysdeps/unix/sysv/linux/send.c: Call direct system call.
	* sysdeps/unix/sysv/linux/sendmsg.c: Call direct system call.
	* sysdeps/unix/sysv/linux/sendto.c: Call direct system call.
	* sysdeps/unix/sysv/linux/setsockopt.c: Call direct system call.
	* sysdeps/unix/sysv/linux/shutdown.c: Call direct system call.
	* sysdeps/unix/sysv/linux/socket.c: Call direct system call.
	* sysdeps/unix/sysv/linux/socketpair.c: Call direct system call.
2015-08-25 13:45:56 -03:00
Paul E. Murphy
18173559a2 powerpc: Fix tabort usage in syscalls
Fix usage of tabort in generated syscalls.  r0 has special meaning
when used with this instruction, thus it will not generate
persistent errors, nor return an error code.  This mitigates poor
CPU usage when performing elided critical sections.

Additionally, transactions should be aborted when entering a user
invoked syscall.  Otherwise the results of the transaction may be
undefined.

2015-08-25  Paul E. Murphy  <murphyp@linux.vnet.ibm.com>

	* sysdeps/powerpc/powerpc32/sysdep.h (ABORT_TRANSACTION): Use
	register other than r0 for tabort, it has special meaning.
	* sysdeps/powerpc/powerpc64/sysdep.h (ABORT_TRANSACTION): Likewise
	* sysdeps/unix.sysv/linux/powerpc/syscall.S (syscall): Abort
	transaction before starting syscall.
2015-08-25 13:45:56 -03:00
Rajalakshmi Srinivasaraghavan
fe7faec3e5 powerpc: Handle worstcase behavior in strstr() for POWER7
Instead of checking needle length, constant 'n' number of comparisons
is checked to fall back to default implementation.  This patch is tested
on powerpc64 and powerpc64le.

2015-08-25  Rajalakshmi Srinivasaraghavan  <raji@linux.vnet.ibm.com>

	* sysdeps/powerpc/powerpc64/power7/strstr.S: Handle worst case.
2015-08-25 13:45:56 -03:00
H.J. Lu
2194737e77 Replace %xmm[8-12] with %xmm[0-4]
Since ld.so preserves vector registers now, we can use %xmm[0-4] to
avoid the REX prefix.

	* sysdeps/x86_64/strlen.S: Replace %xmm[8-12] with %xmm[0-4].
2015-08-25 08:51:23 -07:00
H.J. Lu
2339c6f4bd Remove x86-64 rtld-xxx.c and rtld-xxx.S
Since ld.so preserves vector registers now, we can use the regular,
non-ifunc string and memory functions in ld.so.

	* sysdeps/x86_64/rtld-memcmp.c: Removed.
	* sysdeps/x86_64/rtld-memset.S: Likewise.
	* sysdeps/x86_64/rtld-strchr.S: Likewise.
	* sysdeps/x86_64/rtld-strlen.S: Likewise.
	* sysdeps/x86_64/multiarch/rtld-memcmp.c: Likewise.
	* sysdeps/x86_64/multiarch/rtld-memset.S: Likewise.
2015-08-25 08:50:06 -07:00
H.J. Lu
5f92ec52e7 Replace %xmm8 with %xmm0
Since ld.so preserves vector registers now, we can use %xmm0 to avoid
the REX prefix.

	* sysdeps/x86_64/memset.S: Replace %xmm8 with %xmm0.
2015-08-25 08:48:34 -07:00
Ondřej Bílka
0d0325ed4b Fix strcpy_chk and stpcpy_chk performance.
Hi, as I wrote in previous patches a performance of checked strcpy and
stpcpy is terrible as these don't use sse2 and are around four times
slower that strcpy and stpcpy now.

As this bug shows that these functions are not performance sensitive I
decided just to improve generic implementation instead for easier
maintainance.

        * debug/strcpy_chk.c: Improve performance.
        * debug/stpcpy_chk.c: Likewise.
        * sysdeps/x86_64/strcpy_chk.S: Remove.
        * sysdeps/x86_64/stpcpy_chk.S: Remove.
2015-08-25 15:06:33 +02:00
H.J. Lu
f3dcae82d5 Save and restore vector registers in x86-64 ld.so
This patch adds SSE, AVX and AVX512 versions of _dl_runtime_resolve
and _dl_runtime_profile, which save and restore the first 8 vector
registers used for parameter passing.  elf_machine_runtime_setup
selects the proper _dl_runtime_resolve or _dl_runtime_profile based
on _dl_x86_cpu_features.  It avoids race condition caused by
FOREIGN_CALL macros, which are only used for x86-64.

Performance impact of saving and restoring 8 vector registers are
negligible on Nehalem, Sandy Bridge, Ivy Bridge and Haswell when
ld.so is optimized with SSE2.

	[BZ #15128]
	* sysdeps/x86_64/Makefile [$(subdir) == elf] (tests): Add
	ifuncmain8.
	(modules-names): Add ifuncmod8.
	($(objpfx)ifuncmain8): New rule.
	* sysdeps/x86_64/dl-machine.h: Include <dl-procinfo.h> and
	<cpuid.h>.
	(elf_machine_runtime_setup): Use _dl_runtime_resolve_sse,
	_dl_runtime_resolve_avx, or _dl_runtime_resolve_avx512,
	_dl_runtime_profile_sse, _dl_runtime_profile_avx, or
	_dl_runtime_profile_avx512, based on HAS_ARCH_FEATURE.
	* sysdeps/x86_64/dl-trampoline.S: Rewrite.
	* sysdeps/x86_64/dl-trampoline.h: Likewise.
	* sysdeps/x86_64/ifuncmain8.c: New file.
	* sysdeps/x86_64/ifuncmod8.c: Likewise.
	* sysdeps/x86_64/nptl/tcb-offsets.sym (RTLD_SAVESPACE_SSE):
	Removed.
	* sysdeps/x86_64/nptl/tls.h (__128bits): Removed.
	(tcbhead_t): Change rtld_must_xmm_save to __glibc_unused1.
	Change rtld_savespace_sse to __glibc_unused2.
	(RTLD_CHECK_FOREIGN_CALL): Removed.
	(RTLD_ENABLE_FOREIGN_CALL): Likewise.
	(RTLD_PREPARE_FOREIGN_CALL): Likewise.
	(RTLD_FINALIZE_FOREIGN_CALL): Likewise.
2015-08-25 04:34:13 -07:00
Wilco Dijkstra
edbbc86c3a 2015-08-24 Wilco Dijkstra <wdijkstr@arm.com>
* sysdeps/aarch64/bzero.S (__bzero): Remove.
2015-08-24 14:49:46 +01:00
Wilco Dijkstra
f008c71455 2015-08-24 Wilco Dijkstra <wdijkstr@arm.com>
* sysdeps/aarch64/fpu/math_private.h (libc_feholdsetround_aarch64_ctx):
	Unconditionally set __fpcr to avoid uninialized warning.
	(libc_feholdsetround_noex_aarch64_ctx): Likewise.
2015-08-24 14:42:28 +01:00
Andreas Schwab
be481652f2 Remove __ASSUME_IPC64
PowerPC has always used __IPC_64 like most other architectures, which
means that __ASSUME_IPC64 can be always true.  Also, all other
architecture implementations that use the ipc syscall are effectively
identical to the generic version and can be removed.
2015-08-24 10:53:49 +02:00
Carlos Eduardo Seo
854e0055b3 powerpc: Fix memchr for powerpc32.
Fix a wrong #undef in memchr.c.

	* sysdeps/powerpc/powerpc32/power4/multiarch/memchr.c: Replace
	'#undef memcpy' by '#undef memchr'.
2015-08-21 17:06:06 -03:00
Carlos Eduardo Seo
502b91de14 powerpc: make memchr use memchr-power7.
In powerpc64, memchr was always pointing to the internal __GI_memchr
implementation.  This patch fixes that and makes it use the
optimized POWER7 version when adequate.

	* sysdeps/powerpc/powerpc64/multiarch/memchr-ppc64.c: Make
	memchr not point to the internal __GI_memchr implementation.
2015-08-21 17:05:40 -03:00
H.J. Lu
e5dee2c896 Revert "Add INLINE_SYSCALL_RETURN/INLINE_SYSCALL_ERROR_RETURN"
This reverts commit 0c5b8b5941.
2015-08-21 09:57:15 -07:00
H.J. Lu
8c7c251746 Revert "Fix a typo in linux lxstat.c"
This reverts commit e4ad5e722c.
2015-08-21 09:57:02 -07:00
H.J. Lu
e4ad5e722c Fix a typo in linux lxstat.c
* sysdeps/unix/sysv/linux/lxstat.c (__lxstat): Fix a typo.
2015-08-21 08:32:36 -07:00
H.J. Lu
0c5b8b5941 Add INLINE_SYSCALL_RETURN/INLINE_SYSCALL_ERROR_RETURN
For ia32 PIC, the first thing of many syscalls does is to call
__x86.get_pc_thunk.reg to load PC into reg in case there is an error,
which is required for setting errno.  In most cases, there are no
errors.  But we still call __x86.get_pc_thunk.reg.  This patch adds
INLINE_SYSCALL_RETURN and INLINE_SYSCALL_ERROR_RETURN so that i386
can optimize setting errno by branching to the internal __syscall_error
without PLT.

INLINE_SYSCALL_ERROR_RETURN is designed to take the negative error
number returned from the majority of Linux kernels for which negating
is a no-op with INTERNAL_SYSCALL_ERRNO.

With i386 INLINE_SYSCALL_RETURN, INLINE_SYSCALL_ERROR_RETURN and
i386 syscall inlining optimization for GCC 5, for
sysdeps/unix/sysv/linux/fchmodat.c with -O2 -march=i686
-mtune=generic, GCC 5.2 now generates:

<fchmodat>:
   0:	push   %ebx
   1:	mov    0x14(%esp),%eax
   5:	mov    0x8(%esp),%ebx
   9:	mov    0xc(%esp),%ecx
   d:	mov    0x10(%esp),%edx
  11:	test   $0xfffffeff,%eax
  16:	jne    38 <fchmodat+0x38>
  18:	test   $0x1,%ah
  1b:	jne    48 <fchmodat+0x48>
  1d:	mov    $0x132,%eax
  22:	call   *%gs:0x10
  29:	cmp    $0xfffff000,%eax
  2e:	ja     58 <fchmodat+0x58>
  30:	pop    %ebx
  31:	ret
  32:	lea    0x0(%esi),%esi
  38:	pop    %ebx
  39:	mov    $0xffffffea,%eax
  3e:	jmp    3f <fchmodat+0x3f>	3f: R_386_PC32	__syscall_error
  43:	nop
  44:	lea    0x0(%esi,%eiz,1),%esi
  48:	pop    %ebx
  49:	mov    $0xffffffa1,%eax
  4e:	jmp    4f <fchmodat+0x4f>	4f: R_386_PC32	__syscall_error
  53:	nop
  54:	lea    0x0(%esi,%eiz,1),%esi
  58:	pop    %ebx
  59:	jmp    5a <fchmodat+0x5a>	5a: R_386_PC32	__syscall_error

instead of

<fchmodat>:
   0:	sub    $0x8,%esp
   3:	mov    0x18(%esp),%eax
   7:	mov    %ebx,(%esp)
   a:	call   b <fchmodat+0xb>	b: R_386_PC32	__x86.get_pc_thunk.bx
   f:	add    $0x2,%ebx	11: R_386_GOTPC	_GLOBAL_OFFSET_TABLE_
  15:	mov    %edi,0x4(%esp)
  19:	test   $0xfffffeff,%eax
  1e:	jne    70 <fchmodat+0x70>
  20:	test   $0x1,%ah
  23:	jne    88 <fchmodat+0x88>
  25:	mov    0x14(%esp),%edx
  29:	mov    0x10(%esp),%ecx
  2d:	mov    0xc(%esp),%edi
  31:	xchg   %ebx,%edi
  33:	mov    $0x132,%eax
  38:	call   *%gs:0x10
  3f:	xchg   %edi,%ebx
  41:	cmp    $0xfffff000,%eax
  46:	ja     58 <fchmodat+0x58>
  48:	mov    (%esp),%ebx
  4b:	mov    0x4(%esp),%edi
  4f:	add    $0x8,%esp
  52:	ret
  53:	nop
  54:	lea    0x0(%esi,%eiz,1),%esi
  58:	mov    0x0(%ebx),%edx	5a: R_386_TLS_GOTIE	__libc_errno
  5e:	neg    %eax
  60:	mov    %eax,%gs:(%edx)
  63:	mov    $0xffffffff,%eax
  68:	jmp    48 <fchmodat+0x48>
  6a:	lea    0x0(%esi),%esi
  70:	mov    0x0(%ebx),%eax	72: R_386_TLS_GOTIE	__libc_errno
  76:	movl   $0x16,%gs:(%eax)
  7d:	mov    $0xffffffff,%eax
  82:	jmp    48 <fchmodat+0x48>
  84:	lea    0x0(%esi,%eiz,1),%esi
  88:	mov    0x0(%ebx),%eax	8a: R_386_TLS_GOTIE	__libc_errno
  8e:	movl   $0x5f,%gs:(%eax)
  95:	mov    $0xffffffff,%eax
  9a:	jmp    48 <fchmodat+0x48>

	* sysdeps/unix/sysdep.h (INLINE_SYSCALL_RETURN): New.
	(INLINE_SYSCALL_ERROR_RETURN): Likewise.
	* sysdeps/unix/sysv/linux/adjtime.c (ADJTIME): Use
	INLINE_SYSCALL_RETURN and INLINE_SYSCALL_ERROR_RETURN.
	* sysdeps/unix/sysv/linux/aio_sigqueue.c (__aio_sigqueue):
	Likewise.
	* sysdeps/unix/sysv/linux/dl-openat64.c (openat64): Likewise.
	* sysdeps/unix/sysv/linux/eventfd.c (eventfd): Likewise.
	* sysdeps/unix/sysv/linux/faccessat.c (faccessat): Likewise.
	* sysdeps/unix/sysv/linux/fchmodat.c (fchmodat): Likewise.
	* sysdeps/unix/sysv/linux/fcntl.c (do_fcntl): Likewise.
	* sysdeps/unix/sysv/linux/fstatfs64.c (__fstatfs64): Likewise.
	* sysdeps/unix/sysv/linux/ftruncate64.c (__ftruncate64): Likewise.
	* sysdeps/unix/sysv/linux/futimens.c (futimens): Likewise.
	* sysdeps/unix/sysv/linux/futimes.c (__futimes): Likewise.
	* sysdeps/unix/sysv/linux/futimesat.c (futimesat): Likewise.
	* sysdeps/unix/sysv/linux/fxstat.c (__fxstat): Likewise.
	* sysdeps/unix/sysv/linux/fxstat64.c (___fxstat64): Likewise.
	* sysdeps/unix/sysv/linux/fxstatat.c (__fxstatat): Likewise.
	* sysdeps/unix/sysv/linux/fxstatat64.c (__fxstatat64): Likewise.
	* sysdeps/unix/sysv/linux/gai_sigqueue.c (__gai_sigqueue):
	Likewise.
	* sysdeps/unix/sysv/linux/getpriority.c (__getpriority): Likewise.
	* sysdeps/unix/sysv/linux/getrlimit64.c (__getrlimit64): Likewise.
	* sysdeps/unix/sysv/linux/llseek.c (__llseek): Likewise.
	* sysdeps/unix/sysv/linux/lutimes.c (lutimes): Likewise.
	* sysdeps/unix/sysv/linux/lxstat.c (__lxstat): Likewise.
	* sysdeps/unix/sysv/linux/lxstat64.c (___lxstat64): Likewise.
	* sysdeps/unix/sysv/linux/mmap64.c (__mmap64): Likewise.
	* sysdeps/unix/sysv/linux/mq_close.c (mq_close): Likewise.
	* sysdeps/unix/sysv/linux/mq_open.c (__mq_open): Likewise.
	* sysdeps/unix/sysv/linux/mq_unlink.c (mq_unlink): Likewise.
	* sysdeps/unix/sysv/linux/msgget.c (msgget): Likewise.
	* sysdeps/unix/sysv/linux/prlimit.c (prlimit): Likewise.
	* sysdeps/unix/sysv/linux/pt-raise.c (raise): Likewise.
	* sysdeps/unix/sysv/linux/raise.c (raise): Likewise.
	* sysdeps/unix/sysv/linux/readahead.c (__readahead): Likewise.
	* sysdeps/unix/sysv/linux/reboot.c (reboot): Likewise.
	* sysdeps/unix/sysv/linux/semget.c (semget): Likewise.
	* sysdeps/unix/sysv/linux/semop.c (semop): Likewise.
	* sysdeps/unix/sysv/linux/semtimedop.c (semtimedop): Likewise.
	* sysdeps/unix/sysv/linux/setrlimit64.c (setrlimit64): Likewise.
	* sysdeps/unix/sysv/linux/shmat.c (shmat): Likewise.
	* sysdeps/unix/sysv/linux/shmdt.c (shmdt): Likewise.
	* sysdeps/unix/sysv/linux/shmget.c (shmget): Likewise.
	* sysdeps/unix/sysv/linux/signalfd.c (signalfd): Likewise.
	* sysdeps/unix/sysv/linux/sigpending.c (sigpending): Likewise.
	* sysdeps/unix/sysv/linux/sigprocmask.c ( __sigprocmask): Likewise.
	* sysdeps/unix/sysv/linux/sigqueue.c (__sigqueue): Likewise.
	* sysdeps/unix/sysv/linux/speed.c (cfsetospeed): Likewise.
	* sysdeps/unix/sysv/linux/statfs64.c (__statfs64): Likewise.
	* sysdeps/unix/sysv/linux/sysctl.c (__sysctl): Likewise.
	* sysdeps/unix/sysv/linux/tcsendbrk.c (tcsendbreak): Likewise.
	* sysdeps/unix/sysv/linux/tcsetattr.c (tcsetattr): Likewise.
	* sysdeps/unix/sysv/linux/timer_getoverr.c (timer_getoverrun):
	Likewise.
	* sysdeps/unix/sysv/linux/timer_gettime.c (timer_gettime):
	Likewise.
	* sysdeps/unix/sysv/linux/timer_settime.c (timer_settime):
	Likewise.
	* sysdeps/unix/sysv/linux/truncate64.c (truncate64): Likewise.
	* sysdeps/unix/sysv/linux/ustat.c (ustat): Likewise.
	* sysdeps/unix/sysv/linux/utimensat.c (utimensat): Likewise.
	* sysdeps/unix/sysv/linux/utimes.c (__utimes): Likewise.
	* sysdeps/unix/sysv/linux/xmknod.c (__xmknod): Likewise.
	* sysdeps/unix/sysv/linux/xmknodat.c (__xmknodat): Likewise.
	* sysdeps/unix/sysv/linux/xstat.c (__xstat): Likewise.
	* sysdeps/unix/sysv/linux/xstat64.c (___xstat64): Likewise.
	* sysdeps/unix/sysv/linux/xstatconv.c (__xstat_conv): Likewise.
	(__xstat64_conv): Likewise.
	(__xstat32_conv): Likewise.
	* sysdeps/unix/sysv/linux/sched_getaffinity.c
	(__sched_getaffinity_new): Add libc_hidden_proto and
	libc_hidden_def.  Use INLINE_SYSCALL_ERROR_RETURN.
2015-08-21 04:46:53 -07:00
H.J. Lu
daa4db69fc Remove the unused IFUNC files
sysdeps/i386/i686/multiarch/strcasestr-c.c became unused after

commit 1818483b15
Author: Andreas Schwab <schwab@suse.de>
Date:   Wed Dec 18 11:53:27 2013 +1000

    Remove use of SSE4.2 functions for strstr on i686

which contains

-sysdep_routines += strcspn-c strpbrk-c strspn-c strstr-c strcasestr-c
+sysdep_routines += strcspn-c strpbrk-c strspn-c

sysdeps/x86_64/multiarch/strcasestr.c became useless after

t 584b18eb4d
Author: Ondřej Bílka <neleai@seznam.cz>
Date:   Sat Dec 14 19:33:56 2013 +0100

    Add strstr with unaligned loads. Fixes bug 12100.

which changes sysdeps/x86_64/multiarch/strcasestr.c to

libc_ifunc (__strcasestr, __strcasestr_sse2);

This patch removes these file.

	* i386/i686/multiarch/strcasestr-c.c: Removed.
	* x86_64/multiarch/strcasestr.c: Likewise.
	* x86_64/multiarch/ifunc-impl-list.c (__libc_ifunc_impl_list):
	Remove strcasestr.
2015-08-20 12:47:20 -07:00
Joseph Myers
9173e3c0b4 Fix uninitialized variable use in ldbl-128ibm nearbyintl.
Removing the use of -Wno-uninitialized for math/ shows errors for
ldbl-128ibm:

../sysdeps/ieee754/ldbl-128ibm/s_nearbyintl.c: In function '__nearbyintl':
../sysdeps/ieee754/ldbl-128ibm/s_nearbyintl.c:119:34: error: 'low' may be used uninitialized in this function [-Werror=maybe-uninitialized]
       u.d[1].d = high - u.d[0].d + low;
                                  ^
../sysdeps/ieee754/ldbl-128ibm/s_nearbyintl.c:119:23: error: 'high' may be used uninitialized in this function [-Werror=maybe-uninitialized]
       u.d[1].d = high - u.d[0].d + low;
                       ^

These errors are correct: if the high part of the argument is a NaN,
and the low part is nonzero but has absolute value less than 2^52,
those variables can be used uninitialized.  This patch rearranges the
code so that the variables are always initialized with the natural
values, and then possibly modified later, to avoid this uninitialized
use.  (Note that there are still other issues with this code and NaNs
that are not fixed by this patch.)  No bug filed in Bugzilla or
testcase added for the uninitialized use since it wasn't user-visible
with the compiler I tried (that is, I still got a NaN result).

Tested for powerpc.

	* sysdeps/ieee754/ldbl-128ibm/s_nearbyintl.c: Always initialize
	variables for high and low parts before possibly modifying them.
2015-08-20 17:28:09 +00:00
H.J. Lu
1ae6c72dc1 Move x86_64 init-arch.h to sysdeps/x86/init-arch.h
Move sysdeps/x86_64/multiarch/init-arch.h to sysdeps/x86/init-arch.h
which can be used for both i386 and x86_64.

	* sysdeps/i386/i686/multiarch/init-arch.h: Removed.
	* sysdeps/unix/sysv/linux/x86/init-arch.h: Likewise.
	* sysdeps/x86_64/cacheinfo.c: Include <init-arch.h> instead
	of "multiarch/init-arch.h".
	* sysdeps/x86_64/multiarch/init-arch.h: Renamed to ...
	* sysdeps/x86/init-arch.h: This.
2015-08-20 04:29:23 -07:00
H.J. Lu
a452ef24d5 Remove x86 init-arch.c
Both files include sysdeps/x86_64/multiarch/init-arch.c which has been
removed.

	* sysdeps/i386/i686/multiarch/init-arch.c: Removed.
	* sysdeps/unix/sysv/linux/x86/init-arch.c: Likewise.
2015-08-20 04:19:59 -07:00
Florian Weimer
cd4e69ed3e nptl: Document crash due to incorrect use of locks 2015-08-20 08:44:37 +02:00
Joseph Myers
948e12a238 Fix csqrt missing underflows (bug 18370).
The csqrt implementations in glibc can miss underflow exceptions when
the real or imaginary part of the result becomes tiny in the course of
scaling down (in particular, multiplication by 0.5) and that scaling
is exact although the relevant part of the mathematical result isn't.
This patch forces the exception in a similar way to previous fixes.

Tested for x86_64 and x86.

	[BZ #18370]
	* math/s_csqrt.c (__csqrt): Force underflow exception for results
	whose real or imaginary part has small absolute value.
	* math/s_csqrtf.c (__csqrtf): Likewise.
	* math/s_csqrtl.c (__csqrtl): Likewise.
	* math/auto-libm-test-in: Add more tests of csqrt.
	* math/auto-libm-test-out: Regenerated.
	* sysdeps/i386/fpu/libm-test-ulps: Update.
2015-08-19 22:42:01 +00:00
Gabriel F. T. Gomes
1747fcda49 PowerPC: Extend Program Priority Register support
This patch adds extra inline functions to change the Program Priority
Register from ISA 2.07.

2015-08-19  Gabriel F. T. Gomes  <gftg@linux.vnet.ibm.com>

	* sysdeps/powerpc/sys/platform/ppc.h (__ppc_set_ppr_med_high,
	__ppc_set_ppr_very_low): New functions.
	* manual/platform.texi: Add documentation about
	__ppc_set_ppr_med_high and __ppc_set_ppr_very_low.
2015-08-19 17:43:26 -03:00
Petar Jovanovic
fa19d5c48a Fix dynamic linker issue with bind-now
Fix the bind-now case when DT_REL and DT_JMPREL sections are separate
and there is a gap between them.

	[BZ #14341]
	* elf/dynamic-link.h (elf_machine_lazy_rel): Properly handle the
	case when there is a gap between DT_REL and DT_JMPREL sections.
	* sysdeps/x86_64/Makefile (tests): Add tst-split-dynreloc.
	(LDFLAGS-tst-split-dynreloc): New.
	(tst-split-dynreloc-ENV): Likewise.
	* sysdeps/x86_64/tst-split-dynreloc.c: New file.
	* sysdeps/x86_64/tst-split-dynreloc.lds: Likewise.
2015-08-19 05:37:01 -07:00
H.J. Lu
33c898d160 Mark __xstatXX_conv as hidden
__xstat_conv, __xstat64_conv and __xstat32_conv are internal to glibc.
They should be marked as hidden so that they can't be called without
PLT.

	[BZ #18822]
	* sysdeps/unix/sysv/linux/xstatconv.h (__xstat_conv): Add
	attribute_hidden.
	(__xstat64_conv): Likewise.
	(__xstat32_conv): Likewise.
2015-08-19 04:41:06 -07:00
H.J. Lu
7e58ab243d Call __setcontext with HIDDEN_JUMPTARGET
i386 __makecontext should call __setcontext with HIDDEN_JUMPTARGET.

	[BZ #18822]
	* sysdeps/unix/sysv/linux/i386/makecontext.S (__makecontext):
	Don't load %ebx when calling __setcontext.  Call __setcontext
	with HIDDEN_JUMPTARGET.
	* sysdeps/unix/sysv/linux/i386/setcontext.S (__setcontext): Add
	libc_hidden_def.
2015-08-19 04:41:01 -07:00
H.J. Lu
3552daa7ac Use x86-64 cacheinfo.c and sysconf.c for x86
Since _dl_x86_cpu_features is always available, we can use x86-64
cacheinfo.c and sysconf.c for both i386 and x86-64.

	* sysdeps/i386/i686/Makefile
	[$(subdir) == string] (sysdep_routines): Moved to ...
	* sysdeps/i386/Makefile: Here.
	* sysdeps/i386/i686/cacheinfo.c: Moved to ...
	* sysdeps/i386/cacheinfo.c: Here.
	* sysdeps/unix/sysv/linux/i386/sysconf.c: Removed.
	* sysdeps/unix/sysv/linux/i386/i686/sysconf.c: Likewise.
	* sysdeps/unix/sysv/linux/x86_64/sysconf.c: Moved to ...
	* sysdeps/unix/sysv/linux/x86/sysconf.c: Here.
2015-08-19 04:27:04 -07:00
H.J. Lu
477fa2c843 Also check __i586__/__i686__ for HAS_I586/HAS_I686
* sysdeps/x86/cpu-features.h (HAS_I586): Defined to 1 if
	__i586__ is defined.
	(HAS_I686): Defined to 1 if __i686__ is defined.
2015-08-19 04:19:58 -07:00
Joseph Myers
87336caeb5 Fix MIPS -Wundef warnings for __mips_isa_rev.
This patch fixes -Wundef warnings relating to __mips_isa_rev being
undefined.

Tested for mips64 (all three ABIs) that there is a clean build and
testsuite run with -Wno-error=undef removed (and my other -Wundef
patches applied).

	* sysdeps/mips/dl-machine.h [__mips_isa_rev < 6]: Change
	conditionals to [!defined __mips_isa_rev || __mips_isa_rev < 6].
	* sysdeps/mips/machine-gmon.h [__mips_isa_rev < 6]: Likewise.
2015-08-18 21:52:22 +00:00
Carlos Eduardo Seo
94ec7e007f powerpc: Add missing hwcap strings.
Some features in hwcap.h do not have matching string descriptors
to be displayed when LD_SHOW_AUXV=1.  This patch fixes the problem.

2015-08-13  Carlos Eduardo Seo  <cseo@linux.vnet.ibm.com>

	* sysdeps/powerpc/dl-procinfo.c:
	(_dl_powerpc_cap_flags): Added missing strings for some
	hwcap features.
	* sysdeps/powerpc/dl-procinfo.h: Updated hwcap bit count.
2015-08-18 15:48:43 -03:00
H.J. Lu
1814df5b02 Define HAS_CPUID/HAS_I586/HAS_I686 from -march=
cpuid, i586 and i686 instructions are available if the processor
specified by -march= supports them.  We can use this information
to determine whether those instructions can be used safely.

	* sysdeps/x86/cpu-features.c (init_cpu_features): Check
	whether cpuid is available only if HAS_CPUID is 0.
	* sysdeps/x86/cpu-features.h (HAS_CPUID): New.
	(HAS_I586): Likewise.
	(HAS_I686): Likewise.
2015-08-18 08:00:00 -07:00
Alan Modra
cf42537774 hppa: start.S: rework references to fix PIE TEXTRELs [BZ #18421]
The startup code was not using PIC friendly references leading to TEXTRELs
in every PIE ELF.
2015-08-18 02:37:17 -04:00
Mike Frysinger
352d0eafb6 hppa: timerfd.h: move to common sys/timerfd.h
Use the common sys/timerfd.h to avoid duplication and move the
arch-specific settings into bits/timerfd.h.
2015-08-18 02:37:16 -04:00
Mike Frysinger
55b14dda43 hppa: signalfd.h: move to common sys/signalfd.h
Use the common sys/signalfd.h to avoid duplication and move the
arch-specific settings into bits/signalfd.h.
2015-08-18 02:37:15 -04:00
Mike Frysinger
605021b6b9 hppa: inotify.h: move to common sys/inotify.h
Use the common sys/inotify.h to avoid duplication and move the
arch-specific settings into bits/inotify.h.
2015-08-18 02:37:15 -04:00
Mike Frysinger
4454e161cb hppa: eventfd.h: move to common sys/eventfd.h
Use the common sys/eventfd.h to avoid duplication and move the
arch-specific settings into bits/eventfd.h.
2015-08-18 02:37:14 -04:00
Mike Frysinger
44e01f06a0 hppa: epoll.h: move to common sys/epoll.h
Use the common sys/epoll.h to avoid duplication and move the arch-specific
settings into bits/epoll.h.
2015-08-18 02:37:13 -04:00
Mike Frysinger
d5a77fcafd hppa: sigaction.h: update define export based on __USE_XOPEN2K8
This brings hppa in line with other ports by exporting a few more defines
based on the __USE_XOPEN2K8 define and not just __USE_MISC.
2015-08-18 02:37:04 -04:00
Mike Frysinger
c5bf7f84bf hppa: shm.h: add SHM_EXEC
This brings hppa in line with all the other arches.
2015-08-18 02:36:55 -04:00
Mike Frysinger
8584204806 hppa: drop __ASSUME_LWS_CAS define
We require recent enough kernels for this now, and we've been hardcoding
it to 1, so drop it entirely now.
2015-08-18 02:36:43 -04:00
Mike Frysinger
43329fe139 hppa: assume TLS everywhere
This brings hppa inline with all the other arches and main code where we
require TLS support everywhere.  That means dropping the defines USE_TLS
and USE___THREAD, and dropping the binutils check (since we already have
a version requirement that is new enough).
2015-08-18 02:36:31 -04:00
Andreas Schwab
1e15a853ed Add version set GLIBC_2.19 for linux/powerpc 2015-08-17 16:21:51 +02:00
Paul Pluzhnikov
d5dff793af Fix BZ #18084 -- backtrace (..., 0) dumps core on x86.
Other architectures also had bugs, or did unnecessary work.
2015-08-15 11:42:43 -07:00
Joseph Myers
739babd775 Fix fma spurious underflows (bug 18824).
Various fma implementations have logic that, when computing fma (x, y,
z) where z is large (so care needs taking to avoid internal overflow)
but x * y is small, scale x * y up instead of down to avoid internal
underflows resulting from scaling down.  (In these cases, x * y is
small enough that only its sign actually matters rather than the exact
value.)

The threshold for scaling up instead of down was correct for "if the
unscaled values were multiplied, the low part of the multiplication
could underflow", and the scaling was sufficient to ensure that the
low part of the multiplication did not underflow (given that cases of
very small x * y - less than half the least subnormal - were
previously dealt with).  However, the choice in the functions wasn't
between scaling up or no scaling, but between scaling up and scaling
down (scaling down actually being needed when x * y isn't so small
compared to z and so the exact value does matter).  Thus a larger
threshold is needed to ensure that scaling down doesn't produce values
the multiplication of whose low parts underflows.  This patch
increases the thresholds accordingly.

Tested for x86_64, x86 and mips64 (with the MIPS version of s_fmal.c
removed so that the ldbl-128 version gets tested instead of the
soft-fp one).

	[BZ #18824]
	* sysdeps/ieee754/dbl-64/s_fma.c (__fma): Increase threshold for
	scaling x * y up instead of down.
	* sysdeps/ieee754/ldbl-128/s_fmal.c (__fmal): Likewise.
	* sysdeps/ieee754/ldbl-96/s_fmal.c (__fmal): Likewise.
	* math/auto-libm-test-in: Add more tests of fma.
	* math/auto-libm-test-out: Regenerated.
2015-08-14 17:15:06 +00:00
Paul Pluzhnikov
db7f8c8fe0 Regenerated sysdeps/x86_64/fpu/libm-test-ulps with AVX2. 2015-08-14 09:59:04 -07:00
Siddhesh Poyarekar
37dd6a19ca Remove incorrect register mov in floorf/nearbyint on x86_64
The change in 0b5395f052 replaced calls
to __get_cpu_features@plt followed by a mov from rax to rdx, with a
single macro LOAD_RTLD_GLOBAL_RO_RDX.  It is pretty clear that there
was a typo in s_floorf and __nearbyint due to which the (now incorrect)
mov was not removed.  This patch removes that mov.

	* sysdeps/x86_64/fpu/multiarch/s_floorf.S (__floorf): Remove
	unnecessary movq.
	* sysdeps/x86_64/fpu/multiarch/s_nearbyint.S (__nearbyint):
	Likewise.
2015-08-14 05:30:17 -07:00
Joseph Myers
3ba0ac10fa Add more random libm-test inputs.
This patch adds more test inputs to various libm functions found
through random generation to have larger ulps errors than previously
listed in libm-test-ulp, on at least one of x86_64 and x86.

Tested for x86_64 and x86.

	* math/auto-libm-test-in: Add more tests of acos, acosh, asin,
	asinh, atan, atan2, atanh, cabs, cbrt, cosh, csqrt, erf, erfc,
	exp, exp2, lgamma, log, log1p, log2, pow, sin, sincos, tan, tanh
	and tgamma.
	* math/auto-libm-test-out: Regenerated.
	* sysdeps/i386/fpu/libm-test-ulps: Update.
	* sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
2015-08-13 23:23:23 +00:00
Joseph Myers
37d83a089d Fix tanh missing underflows (bug 16520).
Similar to various other bugs in this area, some tanh implementations
do not raise the underflow exception for subnormal arguments, when the
result is tiny and inexact.  This patch forces the exception in a
similar way to previous fixes.

Tested for x86_64, x86, mips64 and powerpc.

	[BZ #16520]
	* sysdeps/ieee754/dbl-64/s_tanh.c: Include <float.h>.
	(__tanh): Force underflow exception for arguments with small
	absolute value.
	* sysdeps/ieee754/flt-32/s_tanhf.c: Include <float.h>.
	(__tanhf): Force underflow exception for arguments with small
	absolute value.
	* sysdeps/ieee754/ldbl-128/s_tanhl.c: Include <float.h>.
	(__tanhl): Force underflow exception for arguments with small
	absolute value.
	* sysdeps/ieee754/ldbl-128ibm/s_tanhl.c: Include <float.h>.
	(__tanhl): Force underflow exception for arguments with small
	absolute value.
	* sysdeps/ieee754/ldbl-96/s_tanhl.c: Include <float.h>.
	(__tanhl): Force underflow exception for arguments with small
	absolute value.
	* math/auto-libm-test-in: Add more tests of tanh.
	* math/auto-libm-test-out: Regenerated.
	* sysdeps/i386/fpu/libm-test-ulps: Update.
2015-08-13 16:40:39 +00:00
H.J. Lu
a5cf909b8f Check if cpuid is available in init_cpu_features
Since not all i486 processors support cpuid, we call __get_cpuid_max to
check if cpuid is available before using it if not compiling for i586,
i686 nor x86-64.

	* sysdeps/x86/cpu-features.c (init_cpu_features): Call
	__get_cpuid_max if not compiling for i586, i686 nor x86-64.
2015-08-13 04:53:03 -07:00
H.J. Lu
e54388bd8b Don't include <cpuid.h> in elision-conf.h
Don't include the unused <cpuid.h> in Linux/x86 elision-conf.h.

	* sysdeps/unix/sysv/linux/x86/elision-conf.h: Don't include
	<cpuid.h>.
2015-08-13 03:46:26 -07:00
H.J. Lu
b376899d27 Update x86 elision-conf.c for <cpu-features.h>
This patch updates x86 elision-conf.c to use the newly defined
HAS_CPU_FEATURE from <cpu-features.h>.

	* sysdeps/unix/sysv/linux/x86/elision-conf.c (elision_init):
	Replace HAS_RTM with HAS_CPU_FEATURE (RTM).
2015-08-13 03:41:59 -07:00
H.J. Lu
1dfa4a94ae Update libmvec multiarch functions for <cpu-features.h>
This patch updates libmvec multiarch functions to use the newly defined
HAS_CPU_FEATURE, HAS_ARCH_FEATURE and LOAD_RTLD_GLOBAL_RO_RDX from
<cpu-features.h>.

	* math/Makefile ($(addprefix $(objpfx), $(libm-vec-tests))):
	Remove $(objpfx)init-arch.o.
	* sysdeps/x86_64/fpu/Makefile (libmvec-support): Remove
	init-arch.
	* sysdeps/x86_64/fpu/math-tests-arch.h (avx_usable): Removed.
	(INIT_ARCH_EXT): Defined as empty.
	(CHECK_ARCH_EXT): Replace HAS_XXX with HAS_ARCH_FEATURE (XXX).
	* sysdeps/x86_64/fpu/multiarch/svml_d_cos2_core.S: Remove
	__init_cpu_features call.  Replace HAS_XXX with
	HAS_CPU_FEATURE/HAS_ARCH_FEATURE (XXX).
	* sysdeps/x86_64/fpu/multiarch/svml_d_cos4_core.S: Likewise.
	* sysdeps/x86_64/fpu/multiarch/svml_d_cos8_core.S: Likewise.
	* sysdeps/x86_64/fpu/multiarch/svml_d_exp2_core.S: Likewise.
	* sysdeps/x86_64/fpu/multiarch/svml_d_exp4_core.S: Likewise.
	* sysdeps/x86_64/fpu/multiarch/svml_d_exp8_core.S: Likewise.
	* sysdeps/x86_64/fpu/multiarch/svml_d_log2_core.S: Likewise.
	* sysdeps/x86_64/fpu/multiarch/svml_d_log4_core.S: Likewise.
	* sysdeps/x86_64/fpu/multiarch/svml_d_log8_core.S: Likewise.
	* sysdeps/x86_64/fpu/multiarch/svml_d_pow2_core.S: Likewise.
	* sysdeps/x86_64/fpu/multiarch/svml_d_pow4_core.S: Likewise.
	* sysdeps/x86_64/fpu/multiarch/svml_d_pow8_core.S: Likewise.
	* sysdeps/x86_64/fpu/multiarch/svml_d_sin2_core.S: Likewise.
	* sysdeps/x86_64/fpu/multiarch/svml_d_sin4_core.S: Likewise.
	* sysdeps/x86_64/fpu/multiarch/svml_d_sin8_core.S: Likewise.
	* sysdeps/x86_64/fpu/multiarch/svml_d_sincos2_core.S: Likewise.
	* sysdeps/x86_64/fpu/multiarch/svml_d_sincos4_core.S: Likewise.
	* sysdeps/x86_64/fpu/multiarch/svml_d_sincos8_core.S: Likewise.
	* sysdeps/x86_64/fpu/multiarch/svml_s_cosf16_core.S: Likewise.
	* sysdeps/x86_64/fpu/multiarch/svml_s_cosf4_core.S: Likewise.
	* sysdeps/x86_64/fpu/multiarch/svml_s_cosf8_core.S: Likewise.
	* sysdeps/x86_64/fpu/multiarch/svml_s_expf16_core.S: Likewise.
	* sysdeps/x86_64/fpu/multiarch/svml_s_expf4_core.S: Likewise.
	* sysdeps/x86_64/fpu/multiarch/svml_s_expf8_core.S: Likewise.
	* sysdeps/x86_64/fpu/multiarch/svml_s_logf16_core.S: Likewise.
	* sysdeps/x86_64/fpu/multiarch/svml_s_logf4_core.S: Likewise.
	* sysdeps/x86_64/fpu/multiarch/svml_s_logf8_core.S: Likewise.
	* sysdeps/x86_64/fpu/multiarch/svml_s_powf16_core.S: Likewise.
	* sysdeps/x86_64/fpu/multiarch/svml_s_powf4_core.S: Likewise.
	* sysdeps/x86_64/fpu/multiarch/svml_s_powf8_core.S: Likewise.
	* sysdeps/x86_64/fpu/multiarch/svml_s_sincosf16_core.S: Likewise.
	* sysdeps/x86_64/fpu/multiarch/svml_s_sincosf4_core.S: Likewise.
	* sysdeps/x86_64/fpu/multiarch/svml_s_sincosf8_core.S: Likewise.
	* sysdeps/x86_64/fpu/multiarch/svml_s_sinf16_core.S: Likewise.
	* sysdeps/x86_64/fpu/multiarch/svml_s_sinf4_core.S: Likewise.
	* sysdeps/x86_64/fpu/multiarch/svml_s_sinf8_core.S: Likewise.
2015-08-13 03:41:47 -07:00
H.J. Lu
1aee37a22e Update i686 multiarch functions for <cpu-features.h>
This patch updates i686 multiarch functions to use the newly defined
HAS_CPU_FEATURE, HAS_ARCH_FEATURE, LOAD_GOT_AND_RTLD_GLOBAL_RO and
LOAD_FUNC_GOT_EAX from <cpu-features.h>.

	* sysdeps/i386/i686/fpu/multiarch/e_expf.c: Replace HAS_XXX
	with HAS_CPU_FEATURE/HAS_ARCH_FEATURE (XXX).
	* sysdeps/i386/i686/fpu/multiarch/s_cosf.c: Likewise.
	* sysdeps/i386/i686/fpu/multiarch/s_cosf.c: Likewise.
	* sysdeps/i386/i686/fpu/multiarch/s_sincosf.c: Likewise.
	* sysdeps/i386/i686/fpu/multiarch/s_sinf.c: Likewise.
	* sysdeps/i386/i686/multiarch/ifunc-impl-list.c: Likewise.
	* sysdeps/i386/i686/multiarch/s_fma.c: Likewise.
	* sysdeps/i386/i686/multiarch/s_fmaf.c: Likewise.
	* sysdeps/i386/i686/multiarch/bcopy.S: Remove __init_cpu_features
	call.  Merge SHARED and !SHARED.  Add LOAD_GOT_AND_RTLD_GLOBAL_RO.
	Use LOAD_FUNC_GOT_EAX to load function address.  Replace HAS_XXX
	with HAS_CPU_FEATURE/HAS_ARCH_FEATURE (XXX).
	* sysdeps/i386/i686/multiarch/bzero.S: Likewise.
	* sysdeps/i386/i686/multiarch/memchr.S: Likewise.
	* sysdeps/i386/i686/multiarch/memcmp.S: Likewise.
	* sysdeps/i386/i686/multiarch/memcpy.S: Likewise.
	* sysdeps/i386/i686/multiarch/memcpy_chk.S: Likewise.
	* sysdeps/i386/i686/multiarch/memmove.S: Likewise.
	* sysdeps/i386/i686/multiarch/memmove_chk.S: Likewise.
	* sysdeps/i386/i686/multiarch/mempcpy.S: Likewise.
	* sysdeps/i386/i686/multiarch/mempcpy_chk.S: Likewise.
	* sysdeps/i386/i686/multiarch/memrchr.S: Likewise.
	* sysdeps/i386/i686/multiarch/memset.S: Likewise.
	* sysdeps/i386/i686/multiarch/memset_chk.S: Likewise.
	* sysdeps/i386/i686/multiarch/rawmemchr.S: Likewise.
	* sysdeps/i386/i686/multiarch/strcasecmp.S: Likewise.
	* sysdeps/i386/i686/multiarch/strcat.S: Likewise.
	* sysdeps/i386/i686/multiarch/strchr.S: Likewise.
	* sysdeps/i386/i686/multiarch/strcmp.S: Likewise.
	* sysdeps/i386/i686/multiarch/strcpy.S: Likewise.
	* sysdeps/i386/i686/multiarch/strcspn.S: Likewise.
	* sysdeps/i386/i686/multiarch/strlen.S: Likewise.
	* sysdeps/i386/i686/multiarch/strncase.S: Likewise.
	* sysdeps/i386/i686/multiarch/strnlen.S: Likewise.
	* sysdeps/i386/i686/multiarch/strrchr.S: Likewise.
	* sysdeps/i386/i686/multiarch/strspn.S: Likewise.
	* sysdeps/i386/i686/multiarch/wcschr.S: Likewise.
	* sysdeps/i386/i686/multiarch/wcscmp.S: Likewise.
	* sysdeps/i386/i686/multiarch/wcscpy.S: Likewise.
	* sysdeps/i386/i686/multiarch/wcslen.S: Likewise.
	* sysdeps/i386/i686/multiarch/wcsrchr.S: Likewise.
	* sysdeps/i386/i686/multiarch/wmemcmp.S: Likewise.
2015-08-13 03:41:37 -07:00
H.J. Lu
0b5395f052 Update x86_64 multiarch functions for <cpu-features.h>
This patch updates x86_64 multiarch functions to use the newly defined
HAS_CPU_FEATURE, HAS_ARCH_FEATURE and LOAD_RTLD_GLOBAL_RO_RDX from
<cpu-features.h>.

	* sysdeps/x86_64/fpu/multiarch/e_asin.c: Replace HAS_XXX with
	HAS_CPU_FEATURE/HAS_ARCH_FEATURE (XXX).
	* sysdeps/x86_64/fpu/multiarch/e_atan2.c: Likewise.
	* sysdeps/x86_64/fpu/multiarch/e_exp.c: Likewise.
	* sysdeps/x86_64/fpu/multiarch/e_log.c: Likewise.
	* sysdeps/x86_64/fpu/multiarch/e_pow.c: Likewise.
	* sysdeps/x86_64/fpu/multiarch/s_atan.c: Likewise.
	* sysdeps/x86_64/fpu/multiarch/s_fma.c: Likewise.
	* sysdeps/x86_64/fpu/multiarch/s_fmaf.c: Likewise.
	* sysdeps/x86_64/fpu/multiarch/s_sin.c: Likewise.
	* sysdeps/x86_64/fpu/multiarch/s_tan.c: Likewise.
	* sysdeps/x86_64/fpu/multiarch/s_ceil.S: Use
	LOAD_RTLD_GLOBAL_RO_RDX and HAS_CPU_FEATURE (SSE4_1).
	* sysdeps/x86_64/fpu/multiarch/s_ceilf.S: Likewise.
	* sysdeps/x86_64/fpu/multiarch/s_floor.S: Likewise.
	* sysdeps/x86_64/fpu/multiarch/s_floorf.S: Likewise.
	* sysdeps/x86_64/fpu/multiarch/s_nearbyint.S : Likewise.
	* sysdeps/x86_64/fpu/multiarch/s_nearbyintf.S: Likewise.
	* sysdeps/x86_64/fpu/multiarch/s_rintf.S: Likewise.
	* sysdeps/x86_64/fpu/multiarch/s_rintf.S : Likewise.
	* sysdeps/x86_64/multiarch/ifunc-impl-list.c: Likewise.
	* sysdeps/x86_64/multiarch/sched_cpucount.c: Likewise.
	* sysdeps/x86_64/multiarch/strstr.c: Likewise.
	* sysdeps/x86_64/multiarch/memmove.c: Likewise.
	* sysdeps/x86_64/multiarch/memmove_chk.c: Likewise.
	* sysdeps/x86_64/multiarch/test-multiarch.c: Likewise.
	* sysdeps/x86_64/multiarch/memcmp.S: Remove __init_cpu_features
	call.  Add LOAD_RTLD_GLOBAL_RO_RDX.  Replace HAS_XXX with
	HAS_CPU_FEATURE/HAS_ARCH_FEATURE (XXX).
	* sysdeps/x86_64/multiarch/memcpy.S: Likewise.
	* sysdeps/x86_64/multiarch/memcpy_chk.S: Likewise.
	* sysdeps/x86_64/multiarch/mempcpy.S: Likewise.
	* sysdeps/x86_64/multiarch/mempcpy_chk.S: Likewise.
	* sysdeps/x86_64/multiarch/memset.S: Likewise.
	* sysdeps/x86_64/multiarch/memset_chk.S: Likewise.
	* sysdeps/x86_64/multiarch/strcat.S: Likewise.
	* sysdeps/x86_64/multiarch/strchr.S: Likewise.
	* sysdeps/x86_64/multiarch/strcmp.S: Likewise.
	* sysdeps/x86_64/multiarch/strcpy.S: Likewise.
	* sysdeps/x86_64/multiarch/strcspn.S: Likewise.
	* sysdeps/x86_64/multiarch/strspn.S: Likewise.
	* sysdeps/x86_64/multiarch/wcscpy.S: Likewise.
	* sysdeps/x86_64/multiarch/wmemcmp.S: Likewise.
2015-08-13 03:41:30 -07:00
H.J. Lu
e2e4f56056 Add _dl_x86_cpu_features to rtld_global
This patch adds _dl_x86_cpu_features to rtld_global in x86 ld.so
and initializes it early before __libc_start_main is called so that
cpu_features is always available when it is used and we can avoid
calling __init_cpu_features in IFUNC selectors.

	* sysdeps/i386/dl-machine.h: Include <cpu-features.c>.
	(dl_platform_init): Call init_cpu_features.
	* sysdeps/i386/dl-procinfo.c (_dl_x86_cpu_features): New.
	* sysdeps/i386/i686/cacheinfo.c
	(DISABLE_PREFERRED_MEMORY_INSTRUCTION): Removed.
	* sysdeps/i386/i686/multiarch/Makefile (aux): Remove init-arch.
	* sysdeps/i386/i686/multiarch/Versions: Removed.
	* sysdeps/i386/i686/multiarch/ifunc-defines.sym (KIND_OFFSET):
	Removed.
	* sysdeps/i386/ldsodefs.h: Include <cpu-features.h>.
	* sysdeps/unix/sysv/linux/x86/Makefile
	(libpthread-sysdep_routines): Remove init-arch.
	* sysdeps/unix/sysv/linux/x86_64/dl-procinfo.c: Include
	<sysdeps/x86_64/dl-procinfo.c> instead of
	sysdeps/generic/dl-procinfo.c>.
	* sysdeps/x86/Makefile [$(subdir) == csu] (gen-as-const-headers):
	Add cpu-features-offsets.sym and rtld-global-offsets.sym.
	[$(subdir) == elf] (sysdep-dl-routines): Add dl-get-cpu-features.
	[$(subdir) == elf] (tests): Add tst-get-cpu-features.
	[$(subdir) == elf] (tests-static): Add
	tst-get-cpu-features-static.
	* sysdeps/x86/Versions: New file.
	* sysdeps/x86/cpu-features-offsets.sym: Likewise.
	* sysdeps/x86/cpu-features.c: Likewise.
	* sysdeps/x86/cpu-features.h: Likewise.
	* sysdeps/x86/dl-get-cpu-features.c: Likewise.
	* sysdeps/x86/libc-start.c: Likewise.
	* sysdeps/x86/rtld-global-offsets.sym: Likewise.
	* sysdeps/x86/tst-get-cpu-features-static.c: Likewise.
	* sysdeps/x86/tst-get-cpu-features.c: Likewise.
	* sysdeps/x86_64/dl-procinfo.c: Likewise.
	* sysdeps/x86_64/cacheinfo.c (__cpuid_count): Removed.
	Assume USE_MULTIARCH is defined and don't check it.
	(is_intel): Replace __cpu_features with GLRO(dl_x86_cpu_features).
	(is_amd): Likewise.
	(max_cpuid): Likewise.
	(intel_check_word): Likewise.
	(__cache_sysconf): Don't call __init_cpu_features.
	(__x86_preferred_memory_instruction): Removed.
	(init_cacheinfo): Don't call __init_cpu_features. Replace
	__cpu_features with GLRO(dl_x86_cpu_features).
	* sysdeps/x86_64/dl-machine.h: <cpu-features.c>.
	(dl_platform_init): Call init_cpu_features.
	* sysdeps/x86_64/ldsodefs.h: Include <cpu-features.h>.
	* sysdeps/x86_64/multiarch/Makefile (aux): Remove init-arch.
	* sysdeps/x86_64/multiarch/Versions: Removed.
	* sysdeps/x86_64/multiarch/cacheinfo.c: Likewise.
	* sysdeps/x86_64/multiarch/init-arch.c: Likewise.
	* sysdeps/x86_64/multiarch/ifunc-defines.sym (KIND_OFFSET):
	Removed.
	* sysdeps/x86_64/multiarch/init-arch.h: Rewrite.
2015-08-13 03:41:22 -07:00
Paul Pluzhnikov
84895dca70 Fix BZ #18086 -- nice resets errno to 0. 2015-08-11 23:40:00 -07:00
Ondrej Bilka
5011051da3 powerpc: Fix stpcpy performance for power8
This patch fixes the missing enablement for stpcpy on POWER8.

	* sysdeps/powerpc/powerpc64/multiarch/stpcpy.c: Fix ifunc.
2015-08-11 10:03:10 -03:00
Adhemerval Zanella
6f714aa4ad powerpc: Fix PPC64/POWER7 conform tests
When building with --disable-multi-arch the memmove and strstr POWER7
optimization create and uses symbols that conflict with expect conform
tests.

	* sysdeps/powerpc/powerpc64/power7/memmove.S (bcopy): Changing to
	__bcopy and add a weak_alias to bcopy.
	* sysdeps/powerpc/powerpc64/power7/strstr.S (strstr): Use __strnlen
	for static build.
2015-08-11 10:03:10 -03:00
Adhemerval Zanella
142e0a9953 powerpc: Use default strcpy optimization for POWER7
This patches uses the default strcpy/stpcpy implementation for
POWER7/PPC64.  This is faster in mostly inputs for benchtests
and for multiarch the implementation uses the POWER7 strlen and
memcpy.

	* string/stpcpy.c (__stpcpy): Use STPCPY to redefine symbol name and
	cleanup macro usage.
	* string/strcpy.c (strcpt): Use STRCPY to redefine symbol name.
	* sysdeps/powerpc/powerpc64/multiarch/stpcpy-power7.S: Remove file.
	* sysdeps/powerpc/powerpc64/multiarch/stpcpy-ppc64.S: Likewise.
	* sysdeps/powerpc/powerpc64/multiarch/strcpy-power7.S: Likewise.
	* sysdeps/powerpc/powerpc64/multiarch/strcpy-ppc64.S: Likewise.
	* sysdeps/powerpc/powerpc64/power7/stpcpy.S: Likewise.
	* sysdeps/powerpc/powerpc64/power7/strcpy.S: Likewise.
	* sysdeps/powerpc/powerpc64/power7/strcpy.c: Likewise.
	* sysdeps/powerpc/powerpc64/stpcpy.S: Likewise.
	* sysdeps/powerpc/powerpc64/strcpy.S: Likewise.
	* sysdeps/powerpc/powerpc64/multiarch/stpcpy.c
	[SHARED && IS_IN (libc)]: Include <string/strcpy.c>.
	* sysdeps/powerpc/powerpc64/multiarch/stpcpy.c
	[SHARED && IS_IN (libc)]: Include <string/stpcpy.c>.
	* sysdeps/powerpc/powerpc64/multiarch/stpcpy-power7.c: New file.
	* sysdeps/powerpc/powerpc64/multiarch/stpcpy-ppc64.c: Likewise.
	* sysdeps/powerpc/powerpc64/multiarch/strcpy-power7.c: Likewise.
	* sysdeps/powerpc/powerpc64/multiarch/strcpy-ppc64.c: Likewise.
	* sysdeps/powerpc/powerpc64/power7/strcpy.c: Likewise.
2015-08-11 10:03:10 -03:00
Adhemerval Zanella
14362ef154 powerpc: Fix strnlen/power7 build
This patch fixes the strnlen.S build with --disable-multi-arch option.
2015-08-11 10:03:09 -03:00
Adhemerval Zanella
357bb400f1 powerpc: Fix strstr/power7 build
This patch fixes the strstr build with --disable-multi-arch option.
The optimization calls the __strstr_ppc symbol, which always build
for multiarch config but not if it is disable.  This patch fixes it
by adding the default C implementation object with the expected
symbol name.

	* sysdeps/powerpc/powerpc64/power7/Makefile [$(subdir) = string]
	(sysdep_routines): Add strstr-ppc64.
	* sysdeps/powerpc/powerpc64/power7/strstr-ppc64.c: New file.
2015-08-11 10:03:09 -03:00