Commit Graph

20684 Commits

Author SHA1 Message Date
Paul E. Murphy
f819dbea0a powerpc64le: Enable float128
This patch adds ULPs for the float128 type, updates the abilist for libc
and libm, and adds the files bits/floatn.h and float128-abi.h, in order to
enable the new type for powerpc64le.

This patch also adds the implementation of sqrtf128 for powerpc64le, since
it is not implemented in libgcc.  The sfp-machine.h header is taken from
libgcc.

Tested for powerpc64le (GCC 6.2 and GCC 7.1), powerpc64 and s390x.

	* manual/math.texi (Mathematics): Mention the enabling of float128
	for powerpc64le.
	* sysdeps/powerpc/bits/floatn.h: New file.
	* sysdeps/powerpc/fpu/libm-test-ulps: Regenerated.
	* sysdeps/powerpc/fpu/math_private.h:
	(__ieee754_sqrtf128): New inline override.
	* sysdeps/powerpc/powerpc64le/Implies-before: New file.
	* sysdeps/powerpc/powerpc64le/Makefile: New file.
	* sysdeps/powerpc/powerpc64le/fpu/e_sqrtf128.c: New file.
	* sysdeps/powerpc/powerpc64le/fpu/sfp-machine.h: New file.
	* sysdeps/powerpc/powerpc64le/power9/fpu/e_sqrtf128.c: New file.
	* sysdeps/unix/sysv/linux/powerpc/powerpc64/libc-le.abilist:
	Updated.
	* sysdeps/unix/sysv/linux/powerpc/powerpc64/libm-le.abilist:
	Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc64le/float128-abi.h:
	New file.
2017-06-26 15:04:47 -03:00
Gabriel F. T. Gomes
a27d2c1935 powerpc64le: Require at least POWER8 for powerpc64le
Support for powerpc64le requires POWER8 or newer processors.  Builds for
older processors are not tested.  Require at least POWER8 to avoid
unintentional builds.

	* sysdeps/powerpc/powerpc64le/configure.ac: Check for POWER8.
	* sysdeps/powerpc/powerpc64le/configure: Update.
2017-06-26 15:00:34 -03:00
Gabriel F. T. Gomes
4efe3ce400 powerpc64le: Check for compiler features for float128
On powerpc64le, support for float128 will be enabled, which requires some
compiler features to be present.  This patch adds a configure test to check
for such features, which are provided for powerpc64le since GCC 6.2.

Tested for powerpc64 and powerpc64le.

	* INSTALL: Regenerate.
	* manual/install.texi (Recommended Tools for Compilation): Mention
	the powerpc64le-specific requirement in the manual.
	* sysdeps/powerpc/powerpc64le/configure.ac: New file with checks
	for the compiler features required for building float128.
	* sysdeps/powerpc/powerpc64le/configure: New, auto-generated file.
2017-06-26 14:58:47 -03:00
Tulio Magno Quites Machado Filho
d54bb9b1d3 Prevent an implicit int promotion in malloc/tst-alloc_buffer.c
According to ISO C11, section 6.5.3.3 "Unary arithmetic operators", the
result of the ~ operator is the bitwise complement of its (promoted)
operand.
This can lead to a comparison of a char with another integer type.

Tested on powerpc, powerpc64 and powerpc64le.

	* malloc/tst-alloc_buffer.c (test_misaligned): Cast to char
	before comparing with another char.
2017-06-26 09:56:26 -03:00
Rical Jasan
d9660db223 manual: Fix a minor grammatical error.
* manual/math.texi: Fix a grammatical error.
2017-06-25 21:31:16 -07:00
Florian Weimer
513a71a420 resolv/tst-resolv-basic: Add test cases for bug 21295 2017-06-24 16:51:31 +02:00
Dmitry Bilunov
5cf88a83f2 getaddrinfo: Merge IPv6 addresses and IPv4 addresses [BZ #21295] 2017-06-24 16:50:42 +02:00
H.J. Lu
388b4f1a02 Avoid .symver on common symbols [BZ #21666]
The .symver directive on common symbol just creates a new common symbol,
not an alias and the newer assembler with the bug fix for

https://sourceware.org/bugzilla/show_bug.cgi?id=21661

will issue an error.  Before the fix, we got

$ readelf -sW libc.so | grep "loc[12s]"
  5109: 00000000003a0608     8 OBJECT  LOCAL  DEFAULT   36 loc1
  5188: 00000000003a0610     8 OBJECT  LOCAL  DEFAULT   36 loc2
  5455: 00000000003a0618     8 OBJECT  LOCAL  DEFAULT   36 locs
  6575: 00000000003a05f0     8 OBJECT  GLOBAL DEFAULT   36 locs@GLIBC_2.2.5
  7156: 00000000003a05f8     8 OBJECT  GLOBAL DEFAULT   36 loc1@GLIBC_2.2.5
  7312: 00000000003a0600     8 OBJECT  GLOBAL DEFAULT   36 loc2@GLIBC_2.2.5

in libc.so.  The versioned loc1, loc2 and locs have the wrong addresses.
After the fix, we got

$ readelf -sW libc.so | grep "loc[12s]"
  6570: 000000000039e3b8     8 OBJECT  GLOBAL DEFAULT   34 locs@GLIBC_2.2.5
  7151: 000000000039e3c8     8 OBJECT  GLOBAL DEFAULT   34 loc1@GLIBC_2.2.5
  7307: 000000000039e3c0     8 OBJECT  GLOBAL DEFAULT   34 loc2@GLIBC_2.2.5

	[BZ #21666]
	* misc/regexp.c (loc1): Add __attribute__ ((nocommon));
	(loc2): Likewise.
	(locs): Likewise.
2017-06-23 14:39:07 -07:00
Florian Weimer
9a0cc8c1bd inet_pton: Reject IPv6 addresses with many leading zeros [BZ #16637]
2001:db8:00001::f is not a valid IPv6 address according to RFC 2373.
2017-06-23 22:51:06 +02:00
Adhemerval Zanella
fa872e1b62 Clean pthread functions namespaces for C11 threads
This patch adds internal definition (through {libc_}hidden_{proto,def}) and
also change some strong to weak alias for symbols that might be used by C11
threads implementations.

The patchset should not change libc/libpthread functional, although object
changes are expected (since now internal symbols are used instead) and final
exported symbols through GLIBC_PRIVATE is also expanded (to cover libpthread
usage of __mmap{64}, __munmap, __mprotect).

Checked with a build for all major ABI (aarch64-linux-gnu, alpha-linux-gnu,
arm-linux-gnueabi, i386-linux-gnu, ia64-linux-gnu, m68k-linux-gnu,
microblaze-linux-gnu [1], mips{64}-linux-gnu, nios2-linux-gnu,
powerpc{64le}-linux-gnu, s390{x}-linux-gnu, sparc{64}-linux-gnu,
tile{pro,gx}-linux-gnu, and x86_64-linux-gnu).

	* include/sched.h (__sched_get_priority_max): Add libc hidden proto.
	(__sched_get_prioriry_min): Likewise.
	* include/sys/mman.h (__mmap): Likewise.
	(__mmap64): Likewise.
	(__munmap): Likewise.
	(__mprotect): Likewise.
	* include/termios.h (__tcsetattr): Likewise.
	* include/time.h (__nanosleep): Use hidden_proto instead of
	libc_hidden_proto.
	* posix/nanosleep.c (__nanosleep): Likewise.
	* misc/Versions (libc): Export __mmap, __munmap, __mprotect,
	__sched_get_priority_min, and __sched_get_priority_max under
	GLIBC_PRIVATE.
	* nptl/allocatestack.c (__free_stacks): Use internal definition for
	libc symbols.
	(change_stack_perm): Likewise.
	(allocate_stack): Likewise.
	* sysdeps/posix/gethostname.c: Likewise.
	* nptl/tpp.c (__init_sched_fifo_prio): Likewise.
	* sysdeps/unix/sysv/linux/i386/smp.h (is_smp_system): Likewise.
	* sysdeps/unix/sysv/linux/powerpc/ioctl.c (__ioctl): Likewise.
	* nptl/pthreadP.h (__pthread_mutex_timedlock): Add definition.
	(__pthread_key_delete): Likewise.
	(__pthread_detach): Likewise.
	(__pthread_cancel): Likewise.
	(__pthread_mutex_trylock): Likewise.
	(__pthread_mutexattr_init): Likewise.
	(__pthread_mutexattr_settype): Likewise.
	* nptl/pthread_cancel.c (pthread_cancel): Change to internal name and
	create alias for exported one.
	* nptl/pthread_join.c (pthread_join): Likewise.
	* nptl/pthread_detach.c (pthread_detach): Likewise.
	* nptl/pthread_key_delete.c (pthread_key_delete): Likewise.
	* nptl/pthread_mutex_timedlock.c (pthread_mutex_timedlock): Likewise.
	* nptl/pthread_create.c: Change static requirements for pthread
	symbols.
	* nptl/pthread_equal.c (__pthread_equal): Change strong alias to weak
	for internal definition.
	* nptl/pthread_exit.c (__pthread_exit): Likewise.
	* nptl/pthread_getspecific.c (__pthread_getspecific): Likewise.
	* nptl/pthread_key_create.c (__pthread_key_create): Likewise.
	* nptl/pthread_mutex_destroy.c (__pthread_mutex_destroy): Likewise.
	* nptl/pthread_mutex_init.c (__pthread_mutex_init): Likewise.
	* nptl/pthread_mutex_lock.c (__pthread_mutex_lock): Likewise.
	* nptl/pthread_mutex_trylock.c (__pthread_mutex_trylock): Likewise.
	* nptl/pthread_mutex_unlock.c (__pthread_mutex_unlock): Likewise.
	* nptl/pthread_mutexattr_init.c (__pthread_mutexattr_init): Likwise.
	* nptl/pthread_mutexattr_settype.c (__pthread_mutexattr_settype):
	Likewise.
	* nptl/pthread_self.c (__pthread_self): Likewise.
	* nptl/pthread_setspecific.c (__pthread_setspecific): Likewise.
	* sysdeps/unix/sysv/linux/tcsetattr.c (tcsetattr): Likewise.
	* misc/mmap.c (__mmap): Add internal symbol definition.
	* misc/mmap.c (__mmap64): Likewise.
	* sysdeps/unix/sysv/linux/mmap.c (__mmap): Likewise.
	* sysdeps/unix/sysv/linux/mmap64.c (__mmap): Likewise.
	(__mmap64): Likewise.
	* sysdeps/unix/sysv/linux/i386/Versions (libc) [GLIBC_PRIVATE):
	Add __uname.
2017-06-23 17:38:17 -03:00
Joseph Myers
06a5b8f799 Update x86 ulps for GCC 7.
Testing with GCC 7 for 32-bit x86 showed some ulps differences,
presumably from variation in when values with excess precision get
spilled to the stack and so lose that precision.  This patch updates
the libm-test-ulps files accordingly.

	* sysdeps/i386/fpu/libm-test-ulps: Update.
	* sysdeps/i386/i686/fpu/multiarch/libm-test-ulps: Likewise.
2017-06-23 20:23:26 +00:00
Joseph Myers
48273d42bc Make libm-test-support code clear exceptions after each test.
The libm-test-support code clears exceptions at the end of
test_exceptions.  However, it's possible that exceptions get raised as
part of the subsequent checks on the results of the function being
tested, and such exceptions then carry through to the next test run
and can cause that to fail spuriously.  In particular, it's possible
for the ulps calculation to raise exceptions in some cases.  This
patch puts exception clearing at the end of each of the check_*
functions, alongside errno clearing, to avoid one test affecting the
next in that way.

Tested for x86_64 (in conjunction with float128 patches).

	* libm-test-support.c (check_float_internal): Clear exceptions at
	end of function.
	(check_int): Likewise.
	(check_long): Likewise.
	(check_bool): Likewise.
	(check_longlong): Likewise.
	(check_intmax_t): Likewise.
	(check_uintmax_t): Likewise.
2017-06-23 20:10:45 +00:00
Joseph Myers
16000c8d04 Avoid localplt issues from x86 fereaiseexcept inline.
Building for x86_64 with float128 support, I get a localplt test
failure from lrintf128 calling feraiseexcept.

The problem is that an inline optimized version of feraiseexcept calls
__feraiseexcept_renamed in cases where it doesn't completely expand
inline, and that in turn is redirected to feraiseexcept for a library
call, so meaning the redirection of feraiseexcept to
__GI_feraiseexcept inside libm is lost for that call.

This patch fixes the problem by moving the redirect to an internal
header in the _LIBC case, with the internal header using
__GI_feraiseexcept where appropriate.

Tested for x86_64 (in conjunction with float128 patches).

	* sysdeps/x86/fpu/bits/fenv.h [_LIBC] (__feraiseexcept_renamed):
	Do not declare.
	* sysdeps/x86/fpu/include/bits/fenv.h [_LIBC &&
	__USE_EXTERN_INLINES] (__feraiseexcept_renamed): Declare here,
	redirected to __GI_feraiseexcept if [SHARED && IS_IN (libm)].
2017-06-23 20:04:23 +00:00
H.J. Lu
049816c3be x86-64: Optimize L(between_2_3) in memcmp-avx2-movbe.S
Turn

	movzbl	-1(%rdi, %rdx), %edi
	movzbl	-1(%rsi, %rdx), %esi
	orl	%edi, %eax
	orl	%esi, %ecx

into

	movb	-1(%rdi, %rdx), %al
	movb	-1(%rsi, %rdx), %cl

	* sysdeps/x86_64/multiarch/memcmp-avx2-movbe.S (between_2_3):
	Replace movzbl and orl with movb.
2017-06-23 12:46:12 -07:00
Gabriel F. T. Gomes
52a8e5cb43 Document _FloatN and _FloatNx versions of math functions
The functions defined in ISO/IEC TS 18661-3 take floating-point arguments
and return floating-point numbers of _FloatN and _FloatNx types.  Apart
from the type, these functions behave the same as their float, double, and
long double counterparts.  This patch adds the newer functions to the
manual.

	* manual/arith.texi (Infinity and NaN): Document SNANFN and SNANFNx.
	(Error Reporting by Mathematical Functions): Document HUGE_VAL_FN
	and HUGE_VAL_FNx.
	(Absolute Value): Document fabsfN, fabsfNx, cabsfN, cabsfNx.
	Rephrase the paragraph that mentions that fabs, fabsf, and fabsl
	are in math.h, to avoid having to list the _FloatN and _FloatNx
	variants as well.  Likewise for the cabs functions.
	(Normalization Functions): Document frexpfN, frexpfNx, ldexpfN,
	ldexpfNx, scalbnfN, scalbnfNx, scalblnfN, scalblnfNx.
	Mention that _FloatN and _FloatNx variants of scalbn and scalbln
	come from TS 18661-3, since this section explicitly states that
	these functions come from BSD.
	(Rounding Functions): Document ceilfN, ceilfNx, floorfN, floorfNx,
	truncfN, truncfNx, rintfN, rintfNx, nearbyintfN, nearbyintfNx,
	roundfN, roundfNx, roundevenfN, roundevenfNx, lrintfN, lrintfNx,
	llrintfN, llrintfNx, lroundfN, lroundfNx, llroundfN, llroundfNx,
	fromfpfN, fromfpfNx, ufromfpfN, ufromfpfNx, fromfpxfN, fromfpxfNx,
	ufromfpxfN, ufromfpxfNx, modffN, modffNx.
	(Remainder Functions): Document fmodfN, fmodfNx, remainderfN,
	remainderfNx.
	(Setting and modifying single bits of FP values): Document
	copysignfN, copysignfNx, nextafterfN, nextafterfNx, nextupfN,
	nextupfNx, nextdownfN, nextdownfNx, nanfN, nanfNx, canonicalizefN,
	canonicalizefNx, getpayloadfN, getpayloadfNx, setpayloadfN,
	setpayloadfNx, setpayloadsigfN, setpayloadsigfNx.
	(Floating-Point Comparison Functions): Document totalorderfN,
	totalorderfNx, totalordermagfN, totalordermagfNx.
	(Miscellaneous FP arithmetic functions): Document fminfN, fminfNx,
	fmaxfN, fmaxfNx, fminmagfN, fminmagfNx, fmaxmagfN, fmaxmagfNx,
	fdimfN, fdimfNx, fmafN, fmafNx.
	(Complex Numbers): Document the complex types: _FloatN complex and
	_FloatNx complex.
	(rojections, Conjugates, and Decomposing of Complex Numbers):
	Document crealfN, crealfNx, cimagfN, cimagfNx, conjfN, conjfNx,
	cargfN, cargfNx, cprojfN, cprojfNx.
	* manual/math.texi (Mathematics): Mention that the _FloatN and
	_FloatNx variants of the math functions come from TS 18661-3,
	unless otherwise stated.
	(Predefined Mathematical Constants): Document the _FloatN and
	_FloatNx variants of the macros prefixed with M_.
	(Trigonometric Functions): Document sinfN, sinfNx, cosfN, cosfNx,
	tanfN, tanfNx, sincosfN, sincosfNx, csinfN, csinfNx, ccosfN,
	ccosfNx, ctanfN, ctanfNx.
	(Inverse Trigonometric Functions): Document asinfN, asinfNx,
	acosfN, acosfNx, atanfN, atanfNx, atan2fN, atan2fNx.
	(Exponentiation and Logarithms): Document expfN, expfNx, exp2fN,
	exp2fNx, exp10fN, exp10fNx, logfN, logfNx, log10fN, log10fNx,
	log2fN, log2fNx, logbfN, logbfNx, ilogbfN, ilogbfNx, llogbfN,
	llogbfNx, powfN, powfNx, sqrtfN, sqrtfNx, cbrtfN, cbrtfNx, hypotfN,
	hypotfNx, expm1fN, expm1fNx, log1pfN, log1pfNx, cexpfN, cexpfNx,
	clogfN, clogfNx, clog10fN, clog10fNx, csqrtfN, csqrtfNx, cpowfN,
	cpowfNx.
	(Hyperbolic Functions): sinhfN, sinhfNx, coshfN, coshfNx, tanhfN,
	tanhfNx, csinhfN, csinhfNx, ccoshfN, ccoshfNx, ctanhfN, ctanhfNx,
	asinhfN, asinhfNx, acoshfN, acoshfNx, atanhfN, atanhfNx, casinhfN,
	casinhfNx, cacoshfN, cacoshfNx, catanhfN, catanhfNx.
	(Special Functions): Document erffN, erffNx, erfcfN, erfcfNx,
	lgammafN, lgammafNx, lgammarfN_r, lgammafNx_r, tgammafN, tgammafNx,
	j0fN, j0fNx, j1fN, j1fNx, jnfN, jnfNx, y0fN, y0fNx, y1fN, y1fNx,
	ynfN, ynfNx.
2017-06-23 16:24:40 -03:00
Florian Weimer
bc0382ae90 x86-64: Fix comment typo in memcmp-avx2-movbe.S 2017-06-23 19:00:58 +02:00
Florian Weimer
b87d47396f resolv/res_libc.c: Reformat to GNU style 2017-06-23 18:10:41 +02:00
Florian Weimer
b1e7c13cc5 resolv: Clean up declarations of the __res_initstamp variable 2017-06-23 17:52:55 +02:00
Florian Weimer
3ec7c02cc3 x86-64: memcmp-avx2-movbe.S needs saturating subtraction [BZ #21662]
This code:

L(between_2_3):
	/* Load as big endian with overlapping loads and bswap to avoid
	   branches.  */
	movzwl	-2(%rdi, %rdx), %eax
	movzwl	-2(%rsi, %rdx), %ecx
	shll	$16, %eax
	shll	$16, %ecx
	movzwl	(%rdi), %edi
	movzwl	(%rsi), %esi
	orl	%edi, %eax
	orl	%esi, %ecx
	bswap	%eax
	bswap	%ecx
	subl	%ecx, %eax
	ret

needs a saturating subtract because the full register is used.
With this commit, only the lower 24 bits of the register are used,
so a regular subtraction suffices.

The test case change adds coverage for these kinds of bugs.
2017-06-23 17:24:40 +02:00
Gabriel F. T. Gomes
7fa1d9462b Add libio-mtsafe flags to the build of strfromf128
Similar to the other functions in the strfrom class, strfromf128 calls
__printf_fp in order to convert the floating-point value to characters.
This requires the value of IO_MTSAFE_IO.

Tested for powerpc64le and s390x.

	* sysdeps/ieee754/float128/Makefile (CFLAGS-strfromf128.c): Add
	$(libio-mtsafe) to get the value of IO_MTSAFE_IO.
2017-06-23 10:31:49 -03:00
Gabriel F. T. Gomes
18a336772d Prepare the manual to display math errors for float128 functions
When float128 support gets enabled for powerpc64le, the ULP errors for
float128 functions need to be presented in the manual.  This patch adds
support for displaying them.

Tested for powerpc64le and s390x.

	* manual/libm-err-tab.pl (@all_floats, %suffices, parse_ulps):
	Enable generation of float128 entries on the error table.
2017-06-23 10:31:09 -03:00
Gabriel F. T. Gomes
9f0170af26 Include libc-header-start.h in include/float.h
The file include/float.h uses the macro __GLIBC_USE to test for TS 18661-3
support.  Such macro is provided by bits/libc-header-start.h, so include it
to get the definition.

Tested for powerpc64le and s390x.

	* include/float.h: Include libc-header-start.h to get the
	definition of __GLIBC_USE.
2017-06-23 10:30:04 -03:00
Paul Clarke
c340290de8 Optimized version of powf()
Most significant changes are code simplification and use of doubles for
intermediate values.  Also, some rearrangement to move early
non-dependent code later, out of the faster paths.

	* sysdeps/ieee754/flt-32/e_powf.c: Optimized implementation utilizing
	rearranged code and doubles float types.
2017-06-23 09:19:17 -03:00
Rogerio A. Cardoso
76c4c838e7 powerpc: Fix sinf() IFUNC fallback.
sysdeps/powerpc/powerpc64/fpu/multiarch/s_sinf-ppc64.c should fall back to
sysdeps/powerpc/fpu/s_sinf.c not to sysdeps/ieee754/flt-32/s_sinf.c.

	* sysdeps/powerpc/powerpc64/fpu/multiarch/s_sinf-ppc64.c: Change
	s_sinf.c from sysdeps/ieee754/flt-32/ to sysdeps/powerpc/fpu/.
2017-06-23 09:19:00 -03:00
Paul Clarke
1301c20f6c powerpc: fix sysconf support for cache geometries
Commit cdfbe5037f added sysconf support
for cache geometries on powerpc, but mishandled errno.  For valid input
parameters, sysconf() should not set errno.

	* sysdeps/unix/sysv/linux/powerpc/sysconf.c: Remove references
	to errno, and simplify remaining related code.
2017-06-23 09:10:32 -03:00
Tulio Magno Quites Machado Filho
7dcdfbcf67 powerpc: Update AT_HWCAP[2] bits
Linux commit ID a4700a26107241cc7b9ac8528b2c6714ff99983d reserved 2 more
bits for the instructions darn (Deliver a Random Number) and scv (System
Call Vectored).

Linux commit ID 6997e57d693b07289694239e52a10d2f02c3a46f reserved
another bit for internal usage.

	* sysdeps/powerpc/bits/hwcap.h: Add PPC_FEATURE2_DARN and
	PPC_FEATURE2_SCV.
	* sysdeps/powerpc/dl-procinfo.c (_dl_powerpc_cap_flags): Add scv
	and darn.
2017-06-23 09:10:32 -03:00
Rajalakshmi Srinivasaraghavan
12f50337ae powerpc: refactor strrchr IFUNC
As done in commit 6d15a5c2e9
clean up IFUNC implementation for power8 in order to remove
unneeded macro definitions.
2017-06-23 11:24:30 +05:30
Rajalakshmi Srinivasaraghavan
001b09a6a2 powerpc: Add optimized version of [l]lroundf
This patch makes use of optimized double version of llround for single
precision as both the versions return [long] long type.
2017-06-23 10:43:31 +05:30
Joseph Myers
c271ff9469 Support _Float128 in ldbl-96 bits/iscanonical.h.
This patch adds _Float128 support to the ldbl-96 bits/iscanonical.h,
as needed for x86_64 / x86 / ia64 support of _Float128.

Tested for x86_64 (in conjunction with float128 patches).

	* sysdeps/ieee754/ldbl-96/bits/iscanonical.h
	[__HAVE_DISTINCT_FLOAT128] (__iscanonicalf128): New macro.
2017-06-22 23:06:41 +00:00
Joseph Myers
8d375dafe2 Support _Float128 in math-tests.h.
This patch makes math-tests.h, as used to describe support of given
floating-point types for sNaNs, rounding modes and exceptions, handle
distinguishing _Float128 from long double.  This is needed for x86_64,
where if building with GCC 6 or earlier there is no __builtin_nansq,
so no way to get a signaling NaN of _Float128 type, so associated
tests cannot be run (although glibc itself works fine, as there is
never any need to create such an sNaN with a built-in function inside
glibc).

Tested for x86_64 (in conjunction with float128 patches).

	* sysdeps/generic/math-tests.h: Include <bits/floatn.h>.
	(MATH_TESTS_TG): New macro.
	(SNAN_TESTS_float128): Likewise.
	(ROUNDING_TESTS_float128): Likewise.
	(EXCEPTION_TESTS_float128): Likewise.
	(SNAN_TESTS): Define using MATH_TESTS_TG.
	(ROUNDING_TESTS): Likewise.
	(EXCEPTION_TESTS): Likewise.
2017-06-22 23:03:38 +00:00
Joseph Myers
f20079d219 Fix float128_private.h redefinition of SET_RESTORE_ROUNDL.
As with other long double identifiers, float128_private.h has a
redefinition of SET_RESTORE_ROUNDL.  However, that redefinition is
broken, since this is a macro with one argument being defined to take
no arguments.  This patch fixes the redefinition.  (x86_64 needs the
redefinition because SET_RESTORE_ROUNDL only changes the x87 rounding
mode, whereas _Float128 arithmetic uses the SSE rounding mode instead
on x86_64.)

Tested for x86_64 (in conjunction with float128 patches).

	* sysdeps/ieee754/float128/float128_private.h
	[SET_RESTORE_ROUNDF128] (SET_RESTORE_ROUNDL): Take an argument and
	pass it to SET_RESTORE_ROUNDF128.
2017-06-22 22:57:28 +00:00
Joseph Myers
db7a548d02 Make float128_private.h work with generic ieee754.h.
float128_private.h redefines ieee754.h identifiers ieee854_long_double
and IEEE854_LONG_DOUBLE_BIAS to map them to identifiers from
ieee754_float128.h.

This causes problems when ieee754.h is included after
float128_private.h and it's a version of ieee754.h that also defines
those identifiers; specifically, sysdeps/ieee754/ieee754.h, which
defines those identifiers for the x86 extended format.  This patch
fixes this by ensuring an include of ieee754.h from float128_private.h
before the redefinitions.

Tested for x86_64 (in conjunction with float128 patches).

	* sysdeps/ieee754/float128/float128_private.h: Include
	<ieee754.h>.
2017-06-22 22:53:01 +00:00
Joseph Myers
d08cdabdd0 Correct min_of_type handling of _Float128.
The math_private.h macro min_of_type has broken _Float128 handling:
instead of passing its type argument to the key __EXPR_FLT128 macro,
it passes x, which is not a macro argument but whatever variable
called x happens to be visible in the calling function.  If that
variable has the wrong type, the wrong one of long double and
_Float128 can get chosen.  In particular, this applies to some
_Complex long double functions (where x happens to have type _Complex
long double, resulting in min_of_type returning a _Float128 value when
it should return a long double value).  For some reason, this only
caused test failures for me on x86_64 with GCC 6 but not GCC 7 (I
suspect it triggers known bugs in conversions from x86 long double to
_Float128 that are present in GCC 6's soft-fp).

Tested for x86_64 (in conjunction with float128 patches).

	* sysdeps/generic/math_private.h (__EXPR_FLT128): Do not apply
	typeof to argument passed to __builtin_types_compatible_p.
	(min_of_type): Pass type argument, not x, to __EXPR_FLT128.
2017-06-22 22:46:27 +00:00
Joseph Myers
46d2e49c49 Make errno-setting libm templates include errno.h.
Various type-generic libm wrapper templates, as used for float128, set
errno but do not include errno.h.  I presume they must get an implicit
include from some internal header on powerpc64le; they don't get such
an implicit include on x86_64.  This patch adds the missing includes
of errno.h to each such wrapper.

Tested for x86_64 (in conjunction with float128 patches).

	* math/w_acos_template.c [__USE_WRAPPER_TEMPLATE]: Include
	<errno.h>.
	* math/w_acosh_template.c [__USE_WRAPPER_TEMPLATE]: Likewise.
	* math/w_asin_template.c [__USE_WRAPPER_TEMPLATE]: Likewise.
	* math/w_atanh_template.c [__USE_WRAPPER_TEMPLATE]: Likewise.
	* math/w_cosh_template.c [__USE_WRAPPER_TEMPLATE]: Likewise.
	* math/w_exp10_template.c [__USE_WRAPPER_TEMPLATE]: Likewise.
	* math/w_exp2_template.c [__USE_WRAPPER_TEMPLATE]: Likewise.
	* math/w_exp_template.c [__USE_WRAPPER_TEMPLATE]: Likewise.
	* math/w_fmod_template.c [__USE_WRAPPER_TEMPLATE]: Likewise.
	* math/w_hypot_template.c [__USE_WRAPPER_TEMPLATE]: Likewise.
	* math/w_j0_template.c [__USE_WRAPPER_TEMPLATE]: Likewise.
	* math/w_j1_template.c [__USE_WRAPPER_TEMPLATE]: Likewise.
	* math/w_jn_template.c [__USE_WRAPPER_TEMPLATE]: Likewise.
	* math/w_lgamma_r_template.c [__USE_WRAPPER_TEMPLATE]: Likewise.
	* math/w_lgamma_template.c [__USE_WRAPPER_TEMPLATE]: Likewise.
	* math/w_log10_template.c [__USE_WRAPPER_TEMPLATE]: Likewise.
	* math/w_log2_template.c [__USE_WRAPPER_TEMPLATE]: Likewise.
	* math/w_log_template.c [__USE_WRAPPER_TEMPLATE]: Likewise.
	* math/w_pow_template.c [__USE_WRAPPER_TEMPLATE]: Likewise.
	* math/w_remainder_template.c [__USE_WRAPPER_TEMPLATE]: Likewise.
	* math/w_sinh_template.c [__USE_WRAPPER_TEMPLATE]: Likewise.
	* math/w_sqrt_template.c [__USE_WRAPPER_TEMPLATE]: Likewise.
	* math/w_tgamma_template.c [__USE_WRAPPER_TEMPLATE]: Likewise.
2017-06-22 22:39:48 +00:00
Joseph Myers
33711da4e9 Fix float128 uses of xlocale.h.
Three float128 files still include xlocale.h after it was removed.  I
don't know why this didn't cause problems for powerpc64le float128
testing; it did cause problems for my x86_64 float128 testing.  This
patch changes the includes to use bits/types/locale_t.h.

Tested for x86_64 (in conjunction with float128 patches).

	* sysdeps/ieee754/float128/strtof128_l.c: Include
	<bits/types/locale_t.h> instead of <xlocale.h>.
	* sysdeps/ieee754/float128/wcstof128.c: Likewise.
	* sysdeps/ieee754/float128/wcstof128_l.c: Likewise.
2017-06-22 22:34:49 +00:00
Siddhesh Poyarekar
5dee08fda6 Add ChangeLog entries for the last 3 commits
I forgot to add ChangeLog entries for my last three commits.
2017-06-22 23:49:15 +05:30
Gabriel F. T. Gomes
5070551cbf Describe remainder as primary and drem as alternative in the manual
In preparation for the documentation of _FloatN and _FloatNx variants of
the remainder function, this patch changes the descriptions of remainder
and drem, so that remainder is described as primary and drem as an
alternative name for the same functionality.

	* manual/arith.texi (Remainder Functions): Describe remainder as
	primary and drem as an alternative name.  Change the comment on
	remainder to ISO, since it is defined in ISO C99.
2017-06-22 13:08:17 -03:00
Gabriel F. T. Gomes
5ae2266943 Provide an additional macro expansion for F128 in stdlib/tst-strtod.h
The macro F128 in stdlib/tst-strtod.h is defined to provide the literal
suffix for _Float128 constants.  It uses the macro __f128 (), which is
defined in bits/floatn.h to provide the correct literal suffix depending on
what is provided by the compiler.

However, F128 was not being expanded and only worked correctly, when
compiling with GCC 7 (or greater), since F128 is the literal suffix itself.
This patch adds an additional macro expansion so that the macro F128
expands to the correct literal suffix on older compilers.

	* stdlib/tst-strtod.h (MMFUNC): New macro to provide an addition
	macro expansion.
	(GEN_TEST_STRTOD_FOREACH): Use MMFUNC for _Float128.
2017-06-22 13:04:56 -03:00
Mike FABIAN
925fac7793 Bug 21533: Update to Unicode 10.0.0
* Unicode 10.0.0 Support: Character encoding, character type info, and
  transliteration tables are all updated to Unicode 10.0.0, using
  generator scripts contributed by Mike FABIAN (Red Hat).
2017-06-22 17:02:55 +02:00
Benjamin Cama
f768b45020 inet: __inet6_scopeid_pton should accept node-local addresses [BZ #21657] 2017-06-22 15:49:28 +02:00
Florian Weimer
0a47d031e4 _nl_load_domain: Use calloc instead of alloca 2017-06-21 22:59:19 +02:00
Florian Weimer
4dd8e7c0ce Implement allocation buffers for internal use
This commit adds fixed-size allocation buffers.  The primary use
case is in NSS modules, where dynamically sized data is stored
in a fixed-size buffer provided by the caller.

Other uses include a replacement of mempcpy cascades (which is
safer due to the size checking inherent to allocation buffers).
2017-06-21 22:43:57 +02:00
H.J. Lu
11ffcacb64 x86-64: Implement strcmp family IFUNC selectors in C
Implement strcmp family IFUNC selectors in C.

All internal calls within libc.so can use IFUNC on x86-64 since unlike
x86, x86-64 supports PC-relative addressing to access the GOT entry so
that it can call via PLT without using an extra register.  For libc.a,
we can't use IFUNC for functions which are called before IFUNC has been
initialized.  Use IFUNC internally reduces the icache footprint since
libc.so and other codes in the process use the same implementations.
This patch uses IFUNC for strcmp family functions within libc.

	* sysdeps/x86_64/multiarch/Makefile (sysdep_routines): Add
	strcmp-sse2, strcmp-sse4_2, strncmp-sse2, strncmp-sse4_2,
	strcasecmp_l-sse2, strcasecmp_l-sse4_2, strcasecmp_l-avx,
	strncase_l-sse2, strncase_l-sse4_2 and strncase_l-avx.
	* sysdeps/x86_64/multiarch/ifunc-strcasecmp.h: New file.
	* sysdeps/x86_64/multiarch/strcasecmp.c: Likewise.
	* sysdeps/x86_64/multiarch/strcasecmp_l-avx.S: Likewise.
	* sysdeps/x86_64/multiarch/strcasecmp_l-sse2.S: Likewise.
	* sysdeps/x86_64/multiarch/strcasecmp_l-sse4_2.S: Likewise.
	* sysdeps/x86_64/multiarch/strcasecmp_l.c: Likewise.
	* sysdeps/x86_64/multiarch/strcmp-sse2.S: Likewise.
	* sysdeps/x86_64/multiarch/strcmp-sse4_2.S: Likewise.
	* sysdeps/x86_64/multiarch/strcmp.c: Likewise.
	* sysdeps/x86_64/multiarch/strncase.c: Likewise.
	* sysdeps/x86_64/multiarch/strncase_l-avx.S : Likewise.
	* sysdeps/x86_64/multiarch/strncase_l-sse2.S: Likewise.
	* sysdeps/x86_64/multiarch/strncase_l-sse4_2.S: Likewise.
	* sysdeps/x86_64/multiarch/strncase_l.c: Likewise.
	* sysdeps/x86_64/multiarch/strncmp-sse2.S: Likewise.
	* sysdeps/x86_64/multiarch/strncmp-sse4_2.S: Likewise.
	* sysdeps/x86_64/multiarch/strncmp.c: Likewise.
	* sysdeps/x86_64/multiarch/strcasecmp_l.S: Removed.
	* sysdeps/x86_64/multiarch/strcmp.S: Likewise.
	* sysdeps/x86_64/multiarch/strncase_l.S: Likewise.
	* sysdeps/x86_64/multiarch/strncmp.S: Likewise.
	* sysdeps/x86_64/multiarch/strcmp-sse42.S: Include <sysdep.h>.
	(STRCMP_SSE42): New.  Defined to __strcmp_sse42 if not defined.
	[USE_AS_STRCASECMP_L || USE_AS_STRNCASECMP_L]: Include
	"locale-defines.h".
	(UPDATE_STRNCMP_COUNTER): New.
	(SECTION): Likewise.
	(GLABEL): Likewise.
	(LABEL): Likewise.
	* sysdeps/x86_64/multiarch/strncmp-ssse3.S: Rewrite and enable
	for libc.a.
2017-06-21 12:11:06 -07:00
Joseph Myers
9649350d2e Fix tile SA_* conditions for POSIX.1:2008 (bug 21622).
As shown by conform/ tests once the remaining namespace issues are
fixed, the tile bits/sigaction.h fails to declare SA_RESETHAND,
SA_RESTART and SA_NODEFER for non-XSI POSIX.1:2008 as other versions
do.  Those constants were moved from XSI to Base in the 2008 edition
of POSIX.  This patch fixes the conditions to match other versions of
this header.

Tested (compilation only) for tilegx-linux-gnu with
build-many-glibcs.py.

	[BZ #21622]
	* sysdeps/unix/sysv/linux/tile/bits/sigaction.h (SA_RESTART):
	Define for [__USE_UNIX98 || __USE_XOPEN2K8], not [__USE_UNIX98 ||
	__USE_MISC].
	(SA_NODEFER): Likewise.
	(SA_RESETHAND): Likewise.
2017-06-21 17:35:24 +00:00
H.J. Lu
03feacb562 x86: Rename glibc.tune.ifunc to glibc.tune.hwcaps
Rename glibc.tune.ifunc to glibc.tune.hwcaps and move it to
sysdeps/x86/dl-tunables.list since it is x86 specicifc.  Also
change type of data_cache_size, data_cache_size and
non_temporal_threshold to unsigned long int to match size_t.
Remove usage DEFAULT_STRLEN from cpu-tunables.c.

	* elf/dl-tunables.list (glibc.tune.ifunc): Removed.
	* sysdeps/x86/dl-tunables.list (glibc.tune.hwcaps): New.
	Remove security_level on all fields.
	* manual/tunables.texi: Replace ifunc with hwcaps.
	* sysdeps/x86/cpu-features.c (TUNABLE_CALLBACK (set_ifunc)):
	Renamed to ..
	(TUNABLE_CALLBACK (set_hwcaps)): This.
	(init_cpu_features): Updated.
	* sysdeps/x86/cpu-features.h (cpu_features): Change type of
	data_cache_size, data_cache_size and non_temporal_threshold to
	unsigned long int.
	* sysdeps/x86/cpu-tunables.c (DEFAULT_STRLEN): Removed.
	(TUNABLE_CALLBACK (set_ifunc)): Renamed to ...
	(TUNABLE_CALLBACK (set_hwcaps)): This.  Update comments.  Don't
	use DEFAULT_STRLEN.
2017-06-21 10:21:37 -07:00
Florian Weimer
9695dd0c93 DCIGETTEXT: Use getcwd, asprintf to construct absolute pathname 2017-06-21 16:31:31 +02:00
Szabolcs Nagy
e535139e82 [AArch64] Add more cfi annotations to tlsdesc entry points
Backtrace through _dl_tlsdesc_resolve_rela was broken because the offset
of x30 from cfa was not in the debug info.

Add enough annotation so backtracing from the dynamic linker through
tlsdesc entry points works and the debugger shows registers correctly.
2017-06-21 15:04:37 +01:00
Adhemerval Zanella
daa9bdb607 posix: Add invalid flags test for p{write,read}v2
This patch add an extra test for passing invalid flags and check its
expected failure.  It shows an invalid LO_HI_LONG macro definition for
x86_64 with leads to passing invalid flags on some configurations.

The new tests fails on i686-linux-gnu and potentially on other 32 bits
architecture that uses the compat syscall definition due a kernel bug.
It is intended to be fixed upstream.

Checked on x86_64-linux-gnu

	* misc/tst-preadvwritev2-common.c: New file.
	* misc/tst-preadvwritev2.c (do_test): Add test for invalid flag.
	* misc/tst-preadvwritev64v2.c (do_test): Likewise.
2017-06-21 10:58:32 -03:00
Szabolcs Nagy
e9177fba13 [AArch64] Use hidden __GI__dl_argv in rtld startup code
We rely on the symbol being locally defined so using extern symbol
is not correct and the linker may complain about the relocations.
2017-06-21 14:54:11 +01:00
Florian Weimer
76b8266f99 getaddrinfo: Avoid stack copy of IPv6 address 2017-06-21 13:35:37 +02:00