Commit Graph

19914 Commits

Author SHA1 Message Date
Mike Frysinger
48b17f0589 ChangeLog: fix date 2016-11-15 14:30:03 -05:00
Denis Kaganovich
c7409aded4 configure: accept __stack_chk_fail_local for ssp support too [BZ #20662]
When glibc is compiled with gcc 6.2 that has been configured with
--enable-default-pie and --enable-default-ssp, the configure script
fails to detect that the compiler has ssp turned on by default when
being built for i686-linux-gnu.

This is because gcc is emitting __stack_chk_fail_local but the
script is only looking for __stack_chk_fail.  Support both.

Example output:
checking whether x86_64-pc-linux-gnu-gcc -m32 -Wl,-O1 -Wl,--as-needed
implicitly enables -fstack-protector... no
2016-11-15 14:15:19 -05:00
Florian Weimer
001f81ad1e s390x: Add hidden definition for __sigsetjmp 2016-11-15 15:51:01 +01:00
Joseph Myers
0c95f51d84 Fix build-many-glibcs.py style issues.
* scripts/build-many-glibcs.py (os.path): Do not import.
	(Context): Inherit explicitly from object.  Remove blank line
	between class and docstring.
	(Config): Likewise.
	(Glibc): Likewise.
	(Command): Likewise.
	(CommandList): Likewise.
	(Context.write_files): Store chmod mode in a variable.
2016-11-14 23:48:50 +00:00
Joseph Myers
ba1cafea16 Make tilegx32 install libraries in lib32 directories.
This patch makes tilegx32 install libraries in lib32 directories,
matching what GCC expects and avoiding conflict with 64-bit libraries
installed in lib directories.

Tested (compilation only) for tilegx (32-bit and 64-bit, BE and LE,
GCC 5).

	* sysdeps/unix/sysv/linux/tile/tilegx/configure.ac: Use
	LIBC_SLIBDIR_RTLDDIR for tilegx32.
	* sysdeps/unix/sysv/linux/tile/tilegx/configure: Regenerated.
2016-11-14 23:34:54 +00:00
Zack Weinberg
e6502dfb88 Forgot to add the ChangeLog to the previous commit, doh. 2016-11-14 14:29:22 -05:00
Zack Weinberg
9601d3ad78 Fix typo in string/bits/string2.h.
The comment above the bzero() macro in this file appears to have been
copied verbatim from the comment above the memset() prototype in
string.h proper.  bzero() has no 'c' argument and can only set memory
contents to 0.  (The comment above the prototype of bzero() in
string.h proper does not make the same mistake.)

	* string/bits/string2.h: Fix typo in comment.
2016-11-14 12:35:10 -05:00
Zack Weinberg
809b72df6c [BZ #19239] Issue deprecation warnings on macro expansion.
By using __glibc_macro_warning instead of __attribute_deprecated__,
we get the deprecation warnings whenever the macros are expanded,
not just when they compile to a function call.  This is important
for unintentional uses like the test case in #19239 (C++ var(value)
initialization syntax, with a variable named "major").  It's also
simpler, because __REDIRECT is no longer required.

	* misc/sys/sysmacros.h (__SYSMACROS_DM, __SYSMACROS_DM1): New macros.
	(__SYSMACROS_DEPRECATION_MSG, __SYSMACROS_FST_DECL_TEMPL)
	(__SYSMACROS_FST_IMPL_TEMPL): Delete.
	(major, minor, makedev): Use __SYSMACROS_DM in definition, instead
	of redirected function names.

	* misc/sys/cdefs.h (__glibc_macro_warning): Activate for clang >= 3.5
	as well.  Document that MESSAGE must be a single string literal.
2016-11-14 08:34:59 -05:00
Joseph Myers
14f95a4203 Add script to build many glibc configurations.
This patch adds a Python (3.5 or later) script to build many different
configurations of glibc, including building the required cross
compilers first.  It's not intended to change any patch testing
requirements, although some people may wish to use it for high-risk
patches such as adding warning options (and it can also be used to
test building, including compiling tests, for an individual
configuration, if e.g. you wish to do such a compilation test of a
patch for an architecture it touches).

The configurations include all the GNU/Linux ABI variants in
<https://sourceware.org/glibc/wiki/ABIList> (although some do not yet
build cleanly) and it would be desirable to cover enough other
variants e.g. for CPUs using different sysdeps directories to test
building each piece of code in glibc at least once.  It would also be
desirable to extend it to cover Hurd and NaCl, which might best be
done by people familiar with those configurations.

You call the script as

build-many-glibcs.py /some/where thing-to-do <other-arguments>

where /some/where is a working directory for the script.  It will
create and use subdirectories build, install, logs therein.  You can
use it with thing-to-do being "checkout" to create a subdirectory src
therein, with subdirectories binutils, gcc, glibc, gmp, linux, mpc,
mpfr with the sources of those components, or create those directories
manually (all except glibc can be symlinks to sources elsewhere).  In
the checkout case, by default it checks out GCC 6 branch, binutils
2.27 branch, glibc mainline and releases of other components.  You can
specify <component>-<version> to choose a version to check out, where
<version> is "vcs-mainline" or "vcs-<branch>" to check out from
version control (only supported for gcc, binutils, glibc) and
otherwise a release version number to download and use a tarball;
components not specified on the command line have default versions
checked out.  If you rerun "checkout" (with the same version
specifications) it will update checkouts from version control, but
will not detect cases where the location something is expected to be
checked out from has changed.

Other than "checkout", thing-to-do is one of host-libraries,
compilers, glibcs.  So you run, in that order:

build-many-glibcs.py /some/where host-libraries
build-many-glibcs.py /some/where compilers
build-many-glibcs.py /some/where glibcs

host-libraries is run once and then those libraries are used for all
the compilers.  compilers can be run once and then used many times for
testing different glibc versions (so a bot only needs to update glibc
and rerun the glibcs task, if using stable GCC / binutils; if testing
the latest versions of the whole toolchain together including mainline
GCC, it would probably want to update everything and rerun both
compilers and glibcs).  You can also name particular variants after
"compilers" or "glibcs" to build just those variants (the possible
variants are hardcoded in the script).

I may add support for allowing the set of configurations to depend on
the GCC version (to get cleaner default results), and optionally
looping over architecture-independent glibc variants of CFLAGS and
configure options as well, for every glibc configuration listed
(e.g. -Os).

GCC versions before 4.9 are not expected to work (the code uses
--with-glibc-version to get the bootstrap GCC appropriately
configured).  There are various problems for particular configurations
as well.

Command-line options to the script: -jN to run N jobs in parallel
(default the number of CPU cores reported by the system); --keep=all
or --keep=failed to control keeping around build directories (default
--keep=none).

	* scripts/build-many-glibcs.py: New file.
2016-11-11 21:07:08 +00:00
Joseph Myers
84c426b85d Ignore -Wmaybe-uninitialized in stdlib/bug-getcontext.c.
Doing all-ABIs compile testing produces a compiler warning in
stdlib/bug-getcontext.c on nios2 and tilepro (with GCC 5 branch):

bug-getcontext.c: In function 'do_test':
bug-getcontext.c:53:6: error: 'except_mask' may be used uninitialized in this function [-Werror=maybe-uninitialized]
   if (mask != except_mask)
      ^

This warning appears nonsensical; except_mask is initialized where
it's declared.  I think what must be happening here is that the
compiler is confused by the returns-twice nature of getcontext: if
there were a call to setcontext, local variables could indeed have
lost their values on the second return from getcontext.  This patch
duly uses the DIAG_* macros to disable the warning here.

Tested for nios2 and tilepro (compilation only; after this patch all
the tests compile, though there are other failures) and x86_64 (full
testsuite run).

	* stdlib/bug-getcontext.c: Include <libc-internal.h>.
	(do_test): Disable -Wmaybe-uninitialized around uses of
	except_mask.
2016-11-11 21:05:51 +00:00
Joseph Myers
8129bf7732 Make SH <sys/user.h> self-contained.
The check-installed-headers tests show up that the SH <sys/user.h> is
not self-contained, using size_t without including any header that
defines it.  This patch fixes it by including <stddef.h>, as done for
other architectures' versions of this header.

Tested for SH3 and SH4 (compilation only).

	* sysdeps/unix/sysv/linux/sh/sys/user.h: Include <stddef.h>.
2016-11-11 21:04:28 +00:00
Chris Metcalf
a329844ff8 Make sure tilepro uses kernel atomics fo atomic_store
It's not legal for raw stores to be mixed with atomic operations
on tilepro, since the atomics are managed by kernel fast syscalls.
It's possible for a hardware store and a kernel fast atomic to race
with each other in such a way that the hardware store is lost.

Suppose you have an initial zero value, and you race with a store
of 2 and a kernel cmpxchg from 0 to 1.  The legal output is only 2:
either the store hit first and the cmpxchg failed, or the cmpxchg
hit first and succeeded, then was overwritten by the 2.  But if
the kernel cmpxchg starts first and loads the zero, then the store
hits and sets the value to 2, the cmpxchg will still decide it was
successful and write the 1, leaving the value illegally set to 1.

Using atomic_exchange variants to implement atomic_store fixes this
problem for tilepro.
2016-11-10 20:08:24 -05:00
Joseph Myers
b4e75104b4 Refactor some libm type-generic macros.
This patch refactors some type-generic libm macros, in both math.h and
math_private.h, to be based on a common __MATH_TG macro rather than
all replicating similar logic to choose a function to call based on
the type of the argument.

This should serve to illustrate what I think float128 support for such
macros should look like: common macros such as __MATH_TG may need
different definitions depending on whether float128 is supported in
glibc, so that the individual macros themselves do not need
conditionals on float128 support.

Tested for x86_64, x86, mips64 and powerpc.

	* math/math.h (__MATH_TG): New macro.
	[__USE_ISOC99] (fpclassify): Define using __MATH_TG.
	[__USE_ISOC99] (signbit): Likewise.
	[__USE_ISOC99] (isfinite): Likewise.
	[__USE_ISOC99] (isnan): Likewise.
	[__USE_ISOC99] (isinf): Likewise.
	[__GLIBC_USE (IEC_60559_BFP_EXT)] (issignaling): Likewise.
	[__GLIBC_USE (IEC_60559_BFP_EXT)] (__MATH_EVAL_FMT2): New macro.
	[__GLIBC_USE (IEC_60559_BFP_EXT)] (iseqsig): Define using
	__MATH_TG and __MATH_EVAL_FMT2.
	* sysdeps/generic/math_private.h (fabs_tg): Define using
	__MATH_TG.
	* sysdeps/ieee754/ldbl-128ibm/bits/iscanonical.h
	[!__NO_LONG_DOUBLE_MATH] (__iscanonicalf): New macro.
	[!__NO_LONG_DOUBLE_MATH] (__iscanonical): Likewise.
	[!__NO_LONG_DOUBLE_MATH] (iscanonical): Define using __MATH_TG.
	* sysdeps/ieee754/ldbl-96/bits/iscanonical.h (__iscanonicalf): New
	macro.
	(__iscanonical): Likewise.
	(iscanonical): Define using __MATH_TG.
2016-11-10 21:41:56 +00:00
Adhemerval Zanella
0a557c105c Fix sh4 build with __ASSUME_ST_INO_64_BIT redefinition
Since 327792c sh4 builds fails with:

../sysdeps/unix/sysv/linux/kernel-features.h:49:0: error: "__ASSUME_ST_INO_64_BIT" redefined [-Werror]
 #define __ASSUME_ST_INO_64_BIT  1
 ^
In file included from ../sysdeps/unix/sysv/linux/sysdep.h:19:0,
                 from ../sysdeps/unix/sysv/linux/sh/sysdep.h:24,
                 from ../sysdeps/unix/sysv/linux/sh/sh4/sysdep.h:4,
                 from <stdin>:1:
../sysdeps/unix/sysv/linux/sh/kernel-features.h:47:0: note: this is the location of the previous definition
 #define __ASSUME_ST_INO_64_BIT 0

It is because sh4 kernel-features.sh is included multiple times
without guards and this patch fixes by adding them.

Tested on a sh4-linux-gnu build.

	* sysdeps/unix/sysv/linux/sh/kernel-features.h: Add include
	guards.
2016-11-10 18:03:37 -02:00
Adhemerval Zanella
3e06601fed Consolidate Linux access implementation
This patch consolidates the Linux access implementation on
sysdeps/unix/sysv/linux/access.c.  Similar to auto-generation through
syscalls.list, __NR_access is check and __NR_faccessat is used only
for newer architectures (where __NR_access is not defined).

Checked on x86_64.

	* sysdeps/unix/sysv/linux/access.c: New file.
	* sysdeps/unix/sysv/linux/generic/access.c: Remove file.
2016-11-10 16:38:07 -02:00
Steve Ellcey
4589d0715c Add definitions to sysdeps/tile/tilepro/bits/wordsize.h.
* sysdeps/tile/tilepro/bits/wordsize.h: Define __WORDSIZE32_SIZE_ULONG
	and __WORDSIZE32_PTRDIFF_LONG.
2016-11-10 07:46:18 -08:00
Siddhesh Poyarekar
8f3a4687ad Regenerate ULPs for aarch64
* sysdeps/aarch64/libm-test-ulps: Regenerated.
2016-11-10 16:52:35 +05:30
Adhemerval Zanella
d4d8a12960 Consolidate Linux truncate implementations
This patch consolidates all Linux truncate implementation on
sysdeps/unix/sysv/linux/truncate{64}.c.  It is based on
{INTERNAL,INLINE}_SYSCALL patch [1] to simplify the syscall
construction.

General idea is to build ftruncate iff __OFF_T_MATCHES_OFF64_T is not
defined, otherwise ftruncate64 will be build and ftruncate will be an
alias.  The fallocate will use old compat syscall and pass 32-bit off_t
argument, while fallocate64 will handle the correct off64_t passing using
__ALIGNMENT_ARG and SYSCALL_LL64 macros.

Tested on x86_64, i386, aarch64, and armhf.

	* sysdeps/unix/sysv/linux/arm/truncate64.c: Remove file.
	* sysdeps/unix/sysv/linux/generic/wordsize-32/truncate.c: Likewise.
	* sysdeps/sysv/linux/generic/wordsize-32/truncate64.c: Likewise.
	* sysdeps/unix/sysv/linux/mips/mips32/truncate64.c: Likewise.
	* sysdeps/unix/sysv/linux/mips/mips64/truncate64.c: Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc32/truncate64.c: Likewise.
	* sysdeps/unix/sysv/linux/wordsize-64/truncate64.c: Likewise.
	* sysdeps/unix/sysv/linux/truncate.c: New file.
	* sysdeps/unix/sysv/linux/truncate64.c (truncate64): Use
	INLINE_SYSCALL_CALL, __ALIGNMENT_ARG and SYSCALL_LL64 macros.
	* sysdeps/unix/sysv/linux/mips/mips64/syscalls.list (truncate):
	Remove.
	* sysdeps/unix/sysv/linux/wordsize-64/syscalls.list (truncate):
	Likewise.

[1] https://sourceware.org/ml/libc-alpha/2016-08/msg00646.html
2016-11-09 17:46:17 -02:00
Adhemerval Zanella
87686aeefd Consolidate Linux ftruncate implementations
THis patch consolidates all Linux ftruncate implementation on
sysdeps/unix/sysv/linux/ftruncate{64}.c.  It is based on
{INTERNAL,INLINE}_SYSCALL patch [1] to simplify the syscall construction.

General idea is to build ftruncate iff __OFF_T_MATCHES_OFF64_T is not
defined, otherwise ftruncate64 will be build and ftruncate will be an
alias.  The fallocate will use old compat syscall and pass 32-bit off_t
argument, while fallocate64 will handle the correct off64_t passing using
__ALIGNMENT_ARG and SYSCALL_LL64 macros.

Tested on x86_64, i386, aarch64, and armhf.

	* posix/tst-truncate-common.c: New file.
	* posix/tst-truncate.c: Use tst-truncate-common.c.
	* posix/tst-truncate64.c: Likewise and add LFS tests.
	* sysdeps/unix/sysv/linux/arm/ftruncate64.c: Remove file.
	* sysdeps/unix/sysv/linux/generic/wordsize-32/ftruncate.c: Likewise.
	* sysdeps/unix/sysv/linux/generic/wordsize-32/ftruncate64.c: Likewise.
	* sysdeps/unix/sysv/linux/mips/mips32/ftruncate64.c: Likewise.
	* sysdeps/unix/sysv/linux/mips/mips64/ftruncate64.c: Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc32/ftruncate64.c: Likewise.
	* sysdeps/unix/sysv/linux/wordsize-64/ftruncate64.c: Likewise.
	* sysdeps/unix/sysv/linux/ftruncate.c: New file.
	* sysdeps/unix/sysv/linux/ftruncate64.c (__ftruncate64): Use
	INLINE_SYSCALL_CALL, __ALIGNMENT_ARG and SYSCALL_LL64 macros.
	[__OFF_T_MATCHES_OFF64_T] (ftruncate): Add alias.
	* sysdeps/unix/sysv/linux/mips/mips64/syscalls.list (ftruncate):
	Remove.
	* sysdeps/unix/sysv/linux/wordsize-64/syscalls.list (ftruncate):
	Likewise.

[1] https://sourceware.org/ml/libc-alpha/2016-08/msg00646.html
2016-11-09 17:46:11 -02:00
Joseph Myers
5874510faa Fix rpcgen buffer overrun (bug 20790).
Building with GCC 7 produces an error building rpcgen:

rpc_parse.c: In function 'get_prog_declaration':
rpc_parse.c:543:25: error: may write a terminating nul past the end of the destination [-Werror=format-length=]
     sprintf (name, "%s%d", ARGNAME, num); /* default name of argument */
                     ~~~~^
rpc_parse.c:543:5: note: format output between 5 and 14 bytes into a destination of size 10
     sprintf (name, "%s%d", ARGNAME, num); /* default name of argument */
     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

That buffer overrun is for the case where the .x file declares a
program with a million arguments.  The strcpy two lines above can
generate a buffer overrun much more simply for a long argument name.

The limit on length of line read by rpcgen (MAXLINESIZE == 1024)
provides a bound on the buffer size needed, so this patch just changes
the buffer size to MAXLINESIZE to avoid both possible buffer
overruns.  A testcase is added that rpcgen does not crash with a
500-character argument name, where it previously crashed.

It would not at all surprise me if there are many other ways of
crashing rpcgen with either valid or invalid input; fuzz testing would
likely find various such bugs, though I don't think they are that
important to fix (rpcgen is not that likely to be used with untrusted
.x files as input).  (As well as fuzz-findable bugs there are probably
also issues when various int variables get overflowed on very large
input.)  The test infrastructure for rpcgen-not-crashing tests would
need extending if tests are to be added for cases where rpcgen should
produce an error, as opposed to cases where it should succeed.

Tested for x86_64 and x86.

	[BZ #20790]
	* sunrpc/rpc_parse.c (get_prog_declaration): Increase buffer size
	to MAXLINESIZE.
	* sunrpc/bug20790.x: New file.
	* sunrpc/Makefile [$(run-built-tests) = yes] (rpcgen-tests): New
	variable.
	[$(run-built-tests) = yes] (tests-special): Add $(rpcgen-tests).
	[$(run-built-tests) = yes] ($(rpcgen-tests)): New rule.
2016-11-08 23:44:51 +00:00
Joseph Myers
116ae4fe5a Add localplt.data for sh.
This patch adds a localplt.data file for sh so that test passes.  The
architecture-specific entries are for _Unwind_Find_FDE, _exit and
__errno_location.

Tested for sh3 and sh4.

	* sysdeps/unix/sysv/linux/sh/localplt.data: New file.
2016-11-08 23:43:17 +00:00
Joseph Myers
2d5a67dc89 Add localplt.data for hppa.
This patch adds a localplt.data file for hppa so that test passes.
Architecture maintainers should feel free to clean up the sysdeps code
so that some or all of the system-specific entries

libc.so: _exit
libc.so: __sigsetjmp
libc.so: _IO_funlockfile
libc.so: sigprocmask
libc.so: __errno_location
libpthread.so: __errno_location

are no longer needed.

Tested for hppa.  Note: check-execstack and check-textrel still fail;
you may wish to look at those to get to a clean baseline there (they
are less obvious for people not familiar with the architecture).

	* sysdeps/unix/sysv/linux/hppa/localplt.data: New file.
2016-11-08 23:42:36 +00:00
Joseph Myers
58d6b0d865 Update alpha localplt.data.
This patch updates alpha localplt.data so the localplt test passes in
my compile-only all-ABIs glibc testing.  The failures I see without
this patch are:

Missing required PLT reference: ld.so: __tls_get_addr
Missing required PLT reference: ld.so: free

Now, __tls_get_addr can be made optional.  For free, rather than
making it optional as in libc.so it seems better to mark all the
malloc-related symbols in both libc.so and ld.so as allowing an
R_ALPHA_GLOB_DAT relocation as an alternative to using a PLT entry, so
this patch does so.

Tested for alpha.

	* sysdeps/unix/sysv/linux/alpha/localplt.data: Make __tls_get_addr
	optional in ld.so.  Allow R_ALPHA_GLOB_DAT relocation for malloc,
	calloc, realloc, free, memalign and __libc_memalign rather than
	making them optional.
2016-11-08 23:41:51 +00:00
Joseph Myers
38d84a0f37 Update nios2 localplt.data.
This patch updates nios2 localplt.data so the localplt test passes in
my compile-only all-ABIs glibc testing.  A new PLT entry for
__extendsfdf2 is added.

Tested for nios2.

	* sysdeps/unix/sysv/linux/nios2/localplt.data: Add __extendsfdf2
	for libc.so.
2016-11-08 23:41:05 +00:00
Adhemerval Zanella
3c7f1f59cd Consolidate lseek/lseek64/llseek implementations
This patch consolidates all Linux lseek/lseek64/llseek implementation
in on on sysdeps/unix/sysv/linux/lseek{64}.c.  It also removes the llseek
file and instead consolidate the LFS lseek implementation on lseek64.c
as for other LFS symbols implementations.

The general idea is:

  - lseek: ABIs that not define __OFF_T_MATCHES_OFF64_T will preferable
  use __NR__llseek if kernel supports it, otherwise they will use __NR_lseek.
  ABIs that defines __OFF_T_MATCHES_OFF64_T won't produce any symbol.

  - lseek64: ABIs with __OFF_T_MATCHES_OFF64_T will preferable use __NR_lseek
  (since it will use 64-bit arguments without low/high splitting) and
  __NR__llseek if __NR_lseek is not defined (for some ILP32 ports).

  - llseek: files will be removed and symbols will be aliased ot lseek64.

ABI without __OFF_T_MATCHES_OFF64_T and without __NR_llseek (basically MIPS64n32
so far) are covered by building lseek with off_t as expected and lseek64
using __NR_lseek (as expected for off64_t being passed using 64-bit registers).

For this consolidation I mantained the x32 assembly specific implementation
because to correctly fix this it would required both the x32 fix for
{INLINE,INTERNAL}_SYSCALL [1] and a wrapper to correctly subscribe it to
return 64 bits instead of default 32 bits (as for times).  It could a future
cleanup.

It is based on my previous {INTERNAL,INLINE}_SYSCALL_CALL macro [2],
although it is mainly for simplification.

Tested on x86_64, i686, aarch64, armhf, and powerpc64le.

	* nptl/Makefile (libpthread-routines): Remove ptw-llseek and add
	ptw-lseek64.
	* sysdeps/unix/sysv/linux/Makefile (sysdeps_routines): Remove llseek.
	* sysdeps/unix/sysv/linux/alpha/Makefile  (sysdeps_routines):
	Likewise.
	* sysdeps/unix/sysv/linux/generic/wordsize-32/llseek.c: Remove file.
	* sysdeps/unix/sysv/linux/generic/wordsize-32/lseek.c: Remove file.
	* sysdeps/unix/sysv/linux/mips/mips64/llseek.c: Likewise.
	* sysdeps/unix/sysv/linux/llseek.c: Remove file.
	* sysdeps/unix/sysv/linux/lseek.c: New file.
	* sysdeps/unix/sysv/linux/lseek64.c: Add default Linux implementation.
	* sysdeps/unix/sysv/linux/mips/mips64/syscalls.list: Remove lseek and
	__libc_lseek64 from auto-generation.
	* sysdeps/unix/sysv/linux/wordsize-64/syscalls.list: Likewise.
	* sysdeps/unix/sysv/linux/x86_64/x32/lseek64.S: New file.

[1] https://sourceware.org/ml/libc-alpha/2016-08/msg00443.html
[2] https://sourceware.org/ml/libc-alpha/2016-08/msg00646.html
2016-11-08 16:04:33 -02:00
Gabriel F. T. Gomes
e0c6851980 Write messages to stdout and use write_message instead of write
Replaces calls to write on file descriptor 2 with calls to write_message,
which writes to STDOUT_FILENO (1) and properly deals with the return of
write.
2016-11-07 22:09:42 -02:00
Gabriel F. T. Gomes
d5b3879095 Use write_message instead of write
In the test cases, there are writes to stdout which do not check the result
value.  This patch replaces such occurrences with calls to write_message,
which properly deals with the unused result.

Tested for powerpc64le.
2016-11-07 22:09:42 -02:00
Joseph Myers
06b9e94f79 Make check-installed-headers.sh ignore sys/sysctl.h for x32.
check-installed-headers tests were failing for x32 because of the x86
bits/sysctl.h containing a #error for x32.  This patch makes the tests
ignore sys/sysctl.h for x32, similar to the other special-casing of
particular headers.

Tested for x86_64 (full testing for -m64, compile-only for x32).

	* scripts/check-installed-headers.sh: Ignore sys/sysctl.h for x32.
2016-11-07 23:32:17 +00:00
Steve Ellcey
327792ce57 Define __ASSUME_ST_INO_64_BIT on all platforms.
* sysdeps/unix/sysv/linux/alpha/kernel-features.h: #define
	  __ASSUME_ST_INO_64_BIT as 0
	* sysdeps/unix/sysv/linux/sh/kernel-features.h: Likewise.
	* sysdeps/unix/sysv/linux/fxstat64.c: Replace #ifdef with #if
	  over the code where __ASSUME_ST_INO_64_BIT is used.
	* sysdeps/unix/sysv/linux/lxstat64.c: Likewise.
	* sysdeps/unix/sysv/linux/xstat64.c: Likewise.
	* sysdeps/unix/sysv/linux/xstatconv.c: Likewise.
2016-11-07 13:26:27 -08:00
Florian Weimer
c74940f2a7 nptl: Document the reason why __kind in pthread_mutex_t is part of the ABI 2016-11-07 20:24:32 +01:00
Steve Ellcey
5ffc980589 Document do_test in test-skeleton.c
* test-skeleton.c: Document do_test usage.
2016-11-07 08:28:52 -08:00
Aurelien Jarno
0623b9e6a9 gconv.h: fix build with GCC 7
gconv.h is using a flex array to define the __gconv_info member in an
invalid way, causing GCC 7 to issue an error:

| In file included from ../include/gconv.h:1:0,
|                  from ../sysdeps/unix/sysv/linux/_G_config.h:32,
|                  from ../libio/libio.h:31,
|                  from ../include/libio.h:4,
|                  from ../libio/stdio.h:74,
|                  from ../include/stdio.h:5,
|                  from test-math-isinff.cc:22:
| ../iconv/gconv.h:142:50: error: flexible array member '__gconv_info::__data' not at end of 'struct _IO_codecvt'
| In file included from ../include/libio.h:4:0,
|                  from ../libio/stdio.h:74,
|                  from ../include/stdio.h:5,
|                  from test-math-isinff.cc:22:
| ../libio/libio.h:211:14: note: next member '_G_iconv_t _IO_codecvt::__cd_out' declared here
| ../libio/libio.h:187:8: note: in the definition of 'struct _IO_codecvt'
| In file included from ../include/gconv.h:1:0,
|                  from ../sysdeps/unix/sysv/linux/_G_config.h:32,
|                  from ../libio/libio.h:31,
|                  from ../include/libio.h:4,
|                  from ../libio/stdio.h:74,
|                  from ../include/stdio.h:5,
|                  from test-math-isinff.cc:22:
| ../iconv/gconv.h:142:50: error: flexible array member '__gconv_info::__data' not at end of 'struct _IO_wide_data'
| In file included from ../include/libio.h:4:0,
|                  from ../libio/stdio.h:74,
|                  from ../include/stdio.h:5,
|                  from test-math-isinff.cc:22:
| ../libio/libio.h:211:14: note: next member '_G_iconv_t _IO_codecvt::__cd_out' declared here
| ../libio/libio.h:215:8: note: in the definition of 'struct _IO_wide_data'

This is basically a revert to the code from 15 years ago. More details
are available in the GCC bug:
  https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78039

Changelog:
	* iconv/gconv.h (__gconv_info): Define __data element using a
	zero-length array.
2016-11-06 21:33:10 +01:00
Steve Ellcey
31c351e26d Speed up math/test-tgmath2.c
* math/test-tgmath2.c: Split up test function.
2016-11-04 15:59:22 -07:00
Joseph Myers
e64e117177 Do not generate UNRESOLVED results for run-built-tests = no.
Testing with run-built-tests = no generates many UNRESOLVED results in
tests.sum (and so in the output of "make check"), for all the tests
that are only compiled and not run in such a configuration.  This
doesn't seem useful in the "make check" output, and also causes "make
check" to exist with error status even when all tests that can be run
in such a configuration passed.

This patch changes it not to consider those tests when generating
subdir-tests.sum, and so tests.sum, so that you get a smaller number
of tests considered in the final results rather than a huge pile of
UNRESOLVED.

Tested with a cross-compiler to ARM in a run-built-tests = no
configuration.

	* Rules (tests-expected): New variable, depending on
	$(run-built-tests).
	(tests): Pass $(tests-expected) to merge-test-results.sh, not
	$(tests).
2016-11-04 21:29:00 +00:00
Joseph Myers
5e37a69a04 Handle tests-unsupported if run-built-tests = no.
The tests-unsupported variable lists tests that should neither be
compiled nor run, because some support needed to compile them is
missing.

The implementation of this feature involves having a rule to create
.out files for these tests that takes precedence over the default
rule.  This does not work in the run-built-tests = no case (cross
compiling without use of a wrapper to run the tests on a separate
system, in which cases most tests are compiled only) because in that
case the tests target depends on $(tests) to ensure all tests get
compiled.  This patch changes that dependency to filter out
$(tests-unsupported).

Tested with cross-compilation to ARM with GCC 5, where libstdc++ is
missing some C++11 support because of the bug I fixed in
<https://gcc.gnu.org/ml/gcc-patches/2015-10/msg01040.html> and so
tests-unsupported is nonempty and the tests in question fail to
compile.  (When I originally observed the bug, it was with a native
build / test simply using an x86_64 compiler that had been configured
as a cross compiler to isolate it from the system headers / libraries,
so the configuration issue applied to the compiler but run-built-tests
was yes, so I don't observe the issue with tests-unsupported with that
compiler.)

	* Rules [$(run-built-tests) = no] (tests): Do not depend on
	$(tests-unsupported).
2016-11-04 21:28:03 +00:00
Adhemerval Zanella
6d1774146f Fix sparc build due missing __WORDSIZE_TIME64_COMPAT32 definition
This patch adds the missing Linux sparc definitions from d060cd0.
Both value are copied from default sparc value [1] and with this
fix now both sparc 32 and 64 bits builds on Linux.

	* sysdeps/unix/sysv/linux/sparc/bits/wordsize.h
	(__WORDSIZE_TIME64_COMPAT32): Define for both 32 and  64 bits.

[1] sysdeps/sparc/sparc{32,64}/bits/wordsize.h
2016-11-04 18:10:42 -02:00
Joseph Myers
860aacdad2 Fix alpha sqrt fegetenv namespace (bug 20768).
On alpha, sqrt (a C90 function) brings in references to fegetenv
(C99), resulting in linknamespace test failures:

[initial] __sqrt -> [libm.a(w_sqrt.o)] __ieee754_sqrt ->
[libm.a(e_sqrt.o)] __feholdexcept -> [libm.a(feholdexcpt.o)] fegetenv

This patch fixes this by making __feholdexcept call __fegetenv instead
of fegetenv.

Tested for Alpha (compilation only).

	[BZ #20768]
	* sysdeps/alpha/fpu/feholdexcpt.c (__feholdexcept): Call
	__fegetenv instead of fegetenv.
2016-11-04 17:19:13 +00:00
Joseph Myers
799131036e Do not hardcode platform names in manual/libm-err-tab.pl (bug 14139).
manual/libm-err-tab.pl hardcodes a list of names for particular
platforms (mapping from sysdeps directory name to friendly name for
the manual).  This goes against the principle of keeping information
about individual platforms in their corresponding sysdeps directory,
and the list is also very out-of-date regarding supported platforms
and their corresponding sysdeps directories.

This patch fixes this by adding a libm-test-ulps-name file alongside
each libm-test-ulps file.  The script then gets the friendly name from
that file, which is required to exist, so it no longer needs to allow
for the mapping being missing.

Tested for x86_64.

	[BZ #14139]
	* manual/libm-err-tab.pl (%pplatforms): Initialize to empty.
	(find_files): Obtain platform name from libm-test-ulps-name and
	store in %pplatforms.
	(canonicalize_platform): Remove.
	(print_platforms): Use $pplatforms directly.
	(by_platforms): Do not allow for platforms missing from
	%pplatforms.
	* sysdeps/aarch64/libm-test-ulps-name: New file.
	* sysdeps/alpha/fpu/libm-test-ulps-name: Likewise.
	* sysdeps/arm/libm-test-ulps-name: Likewise.
	* sysdeps/generic/libm-test-ulps-name: Likewise.
	* sysdeps/hppa/fpu/libm-test-ulps-name: Likewise.
	* sysdeps/i386/fpu/libm-test-ulps-name: Likewise.
	* sysdeps/i386/i686/fpu/multiarch/libm-test-ulps-name: Likewise.
	* sysdeps/ia64/fpu/libm-test-ulps-name: Likewise.
	* sysdeps/m68k/coldfire/fpu/libm-test-ulps-name: Likewise.
	* sysdeps/m68k/m680x0/fpu/libm-test-ulps-name: Likewise.
	* sysdeps/microblaze/libm-test-ulps-name: Likewise.
	* sysdeps/mips/mips32/libm-test-ulps-name: Likewise.
	* sysdeps/mips/mips64/libm-test-ulps-name: Likewise.
	* sysdeps/nios2/libm-test-ulps-name: Likewise.
	* sysdeps/powerpc/fpu/libm-test-ulps-name: Likewise.
	* sysdeps/powerpc/nofpu/libm-test-ulps-name: Likewise.
	* sysdeps/s390/fpu/libm-test-ulps-name: Likewise.
	* sysdeps/sh/libm-test-ulps-name: Likewise.
	* sysdeps/sparc/fpu/libm-test-ulps-name: Likewise.
	* sysdeps/tile/libm-test-ulps-name: Likewise.
	* sysdeps/x86_64/fpu/libm-test-ulps-name: Likewise.
2016-11-04 16:49:06 +00:00
Joseph Myers
94bf0b4ac9 Make MIPS <sys/user.h> self-contained.
The check-installed-headers tests show up that the MIPS <sys/user.h>
is not self-contained, using size_t without including any header that
defines it.  This patch fixes it by including <stddef.h>, as done for
other architectures' versions of this header.

Tested for MIPS (all 24 ABIs, compilation only).

	* sysdeps/unix/sysv/linux/mips/sys/user.h: Include <stddef.h>.
2016-11-04 16:44:23 +00:00
Joseph Myers
7672e712e1 XFAIL check-execstack for MIPS.
This patch marks the check-execstack test as expected to fail for
MIPS, with a comment referencing previous RFC discussion of the
changes that would be needed to support non-executable stacks on MIPS.

Tested for MIPS (all 24 ABIs).

	* sysdeps/unix/sysv/linux/mips/Makefile [$(subdir) = elf]
	(test-xfail-check-execstack): New variable.
2016-11-04 16:42:37 +00:00
Joseph Myers
a2049e7ab2 Add localplt.data for MIPS.
This patch adds a localplt.data file for MIPS, reflecting the
peculiarities of MIPS ELF that mean this test cannot detect PLT
entries (there aren't any in shared libraries), not GOT entries
(because of the implicit relocation).

Tested for MIPS (all 24 ABIs).

	* sysdeps/mips/localplt.data: New file.
2016-11-04 16:40:54 +00:00
Steve Ellcey
d060cd002d Define wordsize.h macros everywhere
* bits/wordsize.h: Add documentation.
	* sysdeps/aarch64/bits/wordsize.h : New file
	* sysdeps/generic/stdint.h (PTRDIFF_MIN, PTRDIFF_MAX): Update
	definitions.
	(SIZE_MAX): Change ifdef to if in __WORDSIZE32_SIZE_ULONG check.
	* sysdeps/gnu/bits/utmp.h (__WORDSIZE_TIME64_COMPAT32): Check
	with #if instead of #ifdef.
	* sysdeps/gnu/bits/utmpx.h (__WORDSIZE_TIME64_COMPAT32): Ditto.
	* sysdeps/mips/bits/wordsize.h (__WORDSIZE32_SIZE_ULONG,
	__WORDSIZE32_PTRDIFF_LONG, __WORDSIZE_TIME64_COMPAT32):
	Add or change defines.
	* sysdeps/powerpc/powerpc32/bits/wordsize.h: Likewise.
	* sysdeps/powerpc/powerpc64/bits/wordsize.h: Likewise.
	* sysdeps/s390/s390-32/bits/wordsize.h: Likewise.
	* sysdeps/s390/s390-64/bits/wordsize.h: Likewise.
	* sysdeps/sparc/sparc32/bits/wordsize.h: Likewise.
	* sysdeps/sparc/sparc64/bits/wordsize.h: Likewise.
	* sysdeps/tile/tilegx/bits/wordsize.h: Likewise.
	* sysdeps/tile/tilepro/bits/wordsize.h: Likewise.
	* sysdeps/unix/sysv/linux/alpha/bits/wordsize.h: Likewise.
	* sysdeps/unix/sysv/linux/powerpc/bits/wordsize.h: Likewise.
	* sysdeps/unix/sysv/linux/sparc/bits/wordsize.h: Likewise.
	* sysdeps/wordsize-32/bits/wordsize.h: Likewise.
	* sysdeps/wordsize-64/bits/wordsize.h: Likewise.
	* sysdeps/x86/bits/wordsize.h: Likewise.
2016-11-04 09:37:44 -07:00
Wilco Dijkstra
95e431cc73 An optimized memchr was missing for AArch64. This version is similar to
strchr and is significantly faster than the C version.

2016-11-04  Wilco Dijkstra  <wdijkstr@arm.com>
	    Kevin Petit  <kevin.petit@arm.com>

	* sysdeps/aarch64/memchr.S (__memchr): New file.
2016-11-04 14:37:10 +00:00
Joseph Myers
9a2835df5c Handle tilegx* machine names.
This patch makes sysdeps/tile/preconfigure handle tilegx* machine
names instead of just plain tilegx.  That matches GCC, and in
particular allows a big-endian toolchain to use the tilegxbe-linux-gnu
name when configuring both GCC and glibc.

Tested with compilation for tilegxbe-linux-gnu, both 32-bit and 64-bit
(building a subsequent GCC against that glibc still falls over because
of both 32-bit and 64-bit libraries going in the lib directory, as
noted at
<https://sourceware.org/ml/libc-alpha/2016-11/msg00129.html>).

	* sysdeps/tile/preconfigure: Accept tilegx* instead of tilegx.
2016-11-04 13:32:06 +00:00
Joseph Myers
6c50bb532b Fix linknamespace parallel test failures.
Having found that with my script to build many glibc variants I could
reproduce the linknamespace test failures in parallel builds (that
various people had previously reported but I hadn't seen myself), I
investigated those failures further.  This patch adds a missing
dependency to those tests.

Tested for x86_64, including the configuration where I saw those
failures and where I don't see them with this patch.

	* conform/Makefile ($(linknamespace-header-tests)): Also depend on
	$(linknamespace-symlists-tests).
2016-11-03 22:47:02 +00:00
Steve Ellcey
26d7185d6f Fix -Wformat-length warning in time/tst-strptime2.c
* time/tst-strptime2.c: Ignore -Wformat-length warning.
2016-11-02 16:00:39 -07:00
Carlos O'Donell
0cb9dcc8f2 Bug 20729: Fix build failures on ppc64 and other arches.
The changes to fix bug 20729 introduced an error which removed an
ignore diagnostic from -O2 by using the new -Os related macro.
This broke ppc64 builds. This commit fixes the mistake.

Tested on x86, x86_64, ppc64, ppc64le, arm, aarch64, and s390x.
2016-11-02 13:01:36 -04:00
Steve Ellcey
9032070dea Fix warning from latest GCC in tst-printf.c
* stdio-common/tst-printf.c: Ignore -Wformat-length warning.
2016-11-01 16:00:09 -07:00
Joseph Myers
6adaeadf95 Correct clog10 documentation (bug 19673).
Bug 19673 reports that the documentation of clog10 is incorrect, both
failing to include the division by log (10) in the imaginary part and,
in the non-TeX version of the equation only, describing the LHS as log
rather than log10.

This patch fixes both issues.  Note: I think it's appropriate that the
LHS says log10 not clog10, and that the cexp and clog descriptions
referred to in a comment in that bug report similarly say exp and log;
this is a mathematical description not a literal C one.

Tested for x86_64.

	[BZ #19673]
	* manual/math.texi (Exponents and Logarithms): Correct description
	of clog10.
2016-11-01 18:38:52 +00:00
Carlos O'Donell
bb5badf170 Bug 20729: Include libc-internal.h where required.
The original fix for bug 20729 failed to include
libc-internal.h in the files that needed them and
this caused build failures on machines that don't
implicitly include this header. This commit fixes
that by following the consensus rule that a header,
if needed, should always be directly included.
2016-10-31 16:46:57 -04:00
Brent W. Baccala
561ff1ec42 hurd: Fix spurious port deallocation
* sysdeps/mach/hurd/dl-sysdep.c (__mmap): Do not deallocate memobj_wr
when it is MACH_PORT_NULL.
2016-10-31 17:32:25 +01:00
Andreas Schwab
44c637ce80 Properly initialize glob structure with GLOB_BRACE|GLOB_DOOFFS (bug 20707) 2016-10-31 12:36:08 +01:00
Carlos O'Donell
93fe09cb5f Bug 20729: Fix building with -Os.
This commit adds a new DIAG_IGNORE_Os_NEEDS_COMMENT which is only
enabled when compiling with -Os. This allows developers working on
-Os enabled builds to mark false-positive warnings without impacting the
warnings emitted at -O2.

Then using the new DIAG_IGNORE_Os_NEEDS_COMMENT we fix 6 warnings
generated with GCC 5 to get -Os builds working again.
2016-10-29 23:50:56 -04:00
Carlos O'Donell
960294f00a Add include/crypt.h.
To support tests that include crypt.h we add a wrapper.
2016-10-28 22:40:16 -04:00
Gabriel F T Gomes
1b16ff0b1e Fix warning caused by unused-result in bug-atexit3-lib.cc
The test case dlfcn/bug-atexit3-lib.cc calls write and doesn't check the
result.  When building with GCC 6.2, this generates a warning in 'make
check', which is treated as an error.  This patch replaces the call to
write with a call to write_message.

Tested for powerpc64le.
2016-10-28 19:26:14 -02:00
Joseph Myers
f82a4bdb73 Add SNAN, SNANF, SNANL macros.
TS 18661-1 defines SNAN macros for signaling NaN values, suitable for
use in static initializers.  This patch adds them to glibc's <math.h>
(provided you are building with GCC 3.3 or later; no attempt is made
to provide any kind of nonconforming fallback for older compilers
without the __builtin_nans functions).

Tested for x86_64 and x86.

	* math/math.h
	[__GLIBC_USE (IEC_60559_BFP_EXT) && __GNUC_PREREQ (3, 3)] (SNANF):
	New macro.
	[__GLIBC_USE (IEC_60559_BFP_EXT) && __GNUC_PREREQ (3, 3)] (SNAN):
	Likewise.
	[__GLIBC_USE (IEC_60559_BFP_EXT) && __GNUC_PREREQ (3, 3)] (SNANL):
	Likewise.
	* manual/arith.texi (Infinity and NaN): Document SNANF, SNAN and
	SNANL.
	* math/test-double.h (snan_value_MACRO): New macro.
	* math/test-float.h (snan_value_MACRO): Likewise.
	* math/test-ldouble.h (snan_value_MACRO): Likewise.
	* math/libm-test.inc (issignaling_test_data): Add tests of
	snan_value_MACRO.
2016-10-28 21:16:58 +00:00
Tulio Magno Quites Machado Filho
739e14f900 Document a behavior of an elided pthread_rwlock_unlock
Explain that pthread_rwlock_unlock may crash if called on a lock not
held by the current thread.
2016-10-28 19:13:21 -02:00
Tulio Magno Quites Machado Filho
ce193f551e powerpc: Fix TOC stub on powerpc64 clone()
Use a function call to _exit() so that the linker can create a TOC stub
instead of just a branch.

Tested on powerpc64.
2016-10-28 19:13:21 -02:00
Florian Weimer
ae9166f2b8 malloc: Update comments about chunk layout 2016-10-28 22:36:58 +02:00
Florian Weimer
09472915dd crypt: Use internal names for the SHA-2 block functions
These functions are externally visible with a static libcrypt
library.
2016-10-28 21:49:21 +02:00
Carlos O'Donell
b2fea743ab Fix building tst-linkall-static.
The crypt/ directory is not added as part of the sysdep directories.
Add it when building tst-linkall-static to include crypt.h.
2016-10-28 14:27:52 -04:00
Carlos O'Donell
c31746887d Add missing include for stdlib.h.
The test math/test-nan-overflow uses malloc without including
stdlib.h. On -Os builds for i486 the header inclusion order
is altered enough that the test fails to build because of the
warning which is turned into an error.

The obvious fix is to include stdlib.h since malloc is being
used directly.
2016-10-28 12:45:27 -04:00
H.J. Lu
0e6d3adc60 Check IFUNC definition in unrelocated shared library [BZ #20019]
Calling an IFUNC function defined in unrelocated shared library may
lead to segfault.  This patch issues an error message to request
relinking the shared library if it references IFUNC function defined
in the unrelocated shared library.

	[BZ #20019]
	* sysdeps/i386/dl-machine.h (elf_machine_rel): Check IFUNC
	definition in unrelocated shared library.
	* sysdeps/x86_64/dl-machine.h (elf_machine_rela): Likewise.
2016-10-28 09:12:15 -07:00
Florian Weimer
6b1df8b27f i386: Support CFLAGS which imply -fno-omit-frame-pointer [BZ #20729] 2016-10-28 17:09:09 +02:00
Florian Weimer
a0f83f0b4f Add test for linking against most static libraries 2016-10-28 16:54:12 +02:00
Florian Weimer
681421f3ca sysmalloc: Initialize previous size field of mmaped chunks
With different encodings of the header, the previous zero initialization
may be insufficient and produce an invalid encoding.
2016-10-28 16:49:04 +02:00
Florian Weimer
e9c4fe93b3 malloc: Use accessors for chunk metadata access
This change allows us to change the encoding of these struct members
in a centralized fashion.
2016-10-28 16:45:45 +02:00
Joseph Myers
4725d33eed Make strtod raise "inexact" exceptions (bug 19380).
The strtod function should raise the "inexact" exception when its
result is inexact, but fails to do so except in the case of underflow
or overflow.  This patch fixes it to do so for all inexact results.

tst-strtod-round is extended to test for this exception; the generator
is fixed to properly mark inexact results as such in the case where
the inexactness is from the mpfr_subnormalize step.

Tested for x86_64, x86 and powerpc.

	[BZ #19380]
	* stdlib/strtod_l.c (round_and_return): Force "inexact" exception
	for inexact results.
	* stdlib/gen-tst-strtod-round.c (string_to_fp): Return indication
	of inexact result where mpfr_subnormalize is the only inexact
	step.
	* stdlib/tst-strtod-round-data.h: Regenerated.
	* stdlib/tst-strtod-round-skeleton.c [!FE_INEXACT] (FE_INEXACT):
	Define to 0.
	(GEN_ONE_TEST): Test inexact exceptions raised are as expected.
2016-10-28 00:40:23 +00:00
David S. Miller
61668b22f5 Fix a sparc header conformtest failure.
* sysdeps/unix/sysv/linux/sparc/sys/user.h: Include stddef.h
2016-10-27 07:57:49 -07:00
Siddhesh Poyarekar
be7991c070 Static inline functions for mallopt helpers
Make mallopt helper functions for each mallopt parameter so that it
can be called consistently in other areas, like setting tunables.

	* malloc/malloc.c (do_set_mallopt_check): New function.
	(do_set_mmap_threshold): Likewise.
	(do_set_mmaps_max): Likewise.
	(do_set_top_pad): Likewise.
	(do_set_perturb_byte): Likewise.
	(do_set_trim_threshold): Likewise.
	(do_set_arena_max): Likewise.
	(do_set_arena_test): Likewise.
	(__libc_mallopt): Use them.
2016-10-27 08:34:55 +05:30
Joseph Myers
eaf5ad0bc4 Add canonicalize, canonicalizef, canonicalizel.
TS 18661-1 defines canonicalize functions to produce a canonical
version of a floating-point representation.  This patch implements
these functions for glibc.

As with the iscanonical macro, these functions are oriented to the
decimal floating-point case, where some values have both canonical and
noncanonical representations.  However, the functions have a return
value that says whether they succeeded in storing a canonical result;
thus, they can fail for the case of an invalid representation (while
still not making any particular choice from among multiple equally
canonical valid representations of the same value).  Since no
floating-point formats in glibc actually have noncanonical valid
representations, a type-generic implementation of these functions can
be used that expects iscanonical to return 0 only for invalid
representations.  Now that iscanonical is used within libm.so,
libm_hidden_proto / libm_hidden_def are added for __iscanonicall.

The definition of these functions is intended to correspond to a
convertFormat operation to the same floating-point format.  Thus, they
convert signaling NaNs to quiet NaNs, raising the "invalid" exception.
Such a conversion "should" produce "the canonical version of that
signaling NaN made quiet".

libm-test.inc is made to check NaN payloads for the output of these
functions, a new feature (at some point manipulation functions such as
fabs and copysign should have tests added that verify payload
preservation for them).  As however some architectures may not follow
the recommended practice of preserving NaN payloads when converting a
signaling NaN to quiet, a new math-tests.h macro
SNAN_TESTS_PRESERVE_PAYLOAD is added, and defined to 0 for non-NAN2008
MIPS; any other architectures seeing test failures for lack of payload
preservation in this case should also define this macro to 0.  (If any
cases arise where the sign isn't preserved either, those should have a
similar macro added.)

The ldbl-96 and ldbl-128ibm tests of iscanonical are renamed and
adapted to test canonicalizel as well on the same representations.

Tested for x86_64, x86, mips64 and powerpc.

	* math/bits/mathcalls.h [__GLIBC_USE (IEC_60559_BFP_EXT)]
	(canonicalize): New declaration.
	* math/Versions (canonicalize): New libm symbol at version
	GLIBC_2.25.
	(canonicalizef): Likewise.
	(canonicalizel): Likewise.
	* math/Makefile (gen-libm-calls): Add s_canonicalizeF.
	* math/s_canonicalize_template.c: New file.
	* math/libm-test.inc: Update comment on functions tested and
	testing of NaN payloads.
	(TEST_NAN_PAYLOAD): New macro.
	(NO_TEST_INLINE): Update value.
	(XFAIL_TEST): Likewise.
	(ERRNO_UNCHANGED): Likewise.
	(ERRNO_EDOM): Likewise.
	(ERRNO_ERANGE): Likewise.
	(IGNORE_RESULT): Likewise.
	(NON_FINITE): Likewise.
	(TEST_SNAN): Likewise.
	(NO_TEST_MATHVEC): Likewise.
	(TEST_NAN_PAYLOAD_CANONICALIZE): New macro.
	(check_float_internal): Check NaN payloads if TEST_NAN_PAYLOAD.
	(struct test_Ffp_b1_data): New type.
	(RUN_TEST_Ffp_b1): New macro.
	(RUN_TEST_LOOP_Ffp_b1): Likewise.
	(canonicalize_test_data): New array.
	(canonicalize_test): New function.
	(main): Call canonicalize_test.
	* manual/arith.texi (FP Bit Twiddling): Document canonicalize,
	canonicalizef and canonicalizel.
	* manual/libm-err-tab.pl: Update comment on interfaces without
	ulps tabulated.
	* sysdeps/ieee754/ldbl-opt/nldbl-canonicalize.c: New file.
	* sysdeps/ieee754/ldbl-opt/s_canonicalizel.c: Likewise.
	* sysdeps/ieee754/ldbl-opt/Makefile (libnldbl-calls): Add
	canonicalize.
	(CFLAGS-nldbl-canonicalize.c): New variable.
	* sysdeps/ieee754/ldbl-128ibm/test-iscanonical-ldbl-128ibm.c: Move
	to ...
	* sysdeps/ieee754/ldbl-128ibm/test-canonical-ldbl-128ibm.c:
	... here.
	(do_test): Also test canonicalizel.
	* sysdeps/ieee754/ldbl-128ibm/Makefile (tests): Change
	test-iscanonical-ldbl-128ibm to test-canonical-ldbl-128ibm.
	* sysdeps/ieee754/ldbl-128ibm/include/bits/iscanonical.h: New
	file.
	* sysdeps/ieee754/ldbl-128ibm/s_iscanonicall.c (__iscanonicall):
	Use libm_hidden_def.
	* sysdeps/ieee754/ldbl-96/test-iscanonical-ldbl-96.c: Move to ...
	* sysdeps/ieee754/ldbl-96/test-canonical-ldbl-96.c: ... here.
	(do_test): Also test canonicalizel.
	* sysdeps/ieee754/ldbl-96/Makefile (tests): Change
	test-iscanonical-ldbl-96 to test-canonical-ldbl-96.
	* sysdeps/ieee754/ldbl-96/include/bits/iscanonical.h: New file.
	* sysdeps/ieee754/ldbl-96/s_iscanonicall.c (__iscanonicall): Use
	libm_hidden_def.
	* sysdeps/generic/math-tests.h (SNAN_TESTS_PRESERVE_PAYLOAD): New
	macro.
	* sysdeps/mips/math-tests.h [__mips_hard_float && !__mips_nan2008]
	(SNAN_TESTS_PRESERVE_PAYLOAD): Likewise.
	* sysdeps/nacl/libm.abilist: Update.
	* sysdeps/unix/sysv/linux/aarch64/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/alpha/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/arm/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/hppa/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/i386/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/ia64/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/microblaze/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/mips/mips32/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/mips/mips64/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/nios2/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist:
	Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist:
	Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc64/libm-le.abilist:
	Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc64/libm.abilist:
	Likewise.
	* sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/sh/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libm.abilist:
	Likewise.
	* sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libm.abilist:
	Likewise.
	* sysdeps/unix/sysv/linux/tile/tilepro/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/x86_64/64/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist: Likewise.
2016-10-26 23:14:31 +00:00
Joseph Myers
873febb5df Add getpayloadl to libnldbl.
This patch adds getpayloadl to libnldbl, missed in my patch that
originally implemented getpayload functions.

Tested for powerpc.

	* sysdeps/ieee754/ldbl-opt/nldbl-getpayload.c: New file.
	* sysdeps/ieee754/ldbl-opt/Makefile (libnldbl-calls): Add
	getpayload.
	(CFLAGS-nldbl-getpayload.c): New variable.
2016-10-26 17:10:00 +00:00
Gabriel F. T. Gomes
726d48ec96 Use read_int in vfscanf
The function read_int, from printf-parse.h, parses an integer from a string
while avoiding overflows.  It is used by other functions, such as vfprintf,
to avoid undefined behavior.

The function vfscanf (_IO_vfwscanf) parses an integer from the format
string, and can use read_int.
2016-10-26 09:56:24 -02:00
Florian Weimer
e863cce57b malloc: Remove malloc_get_state, malloc_set_state [BZ #19473]
After the removal of __malloc_initialize_hook, newly compiled
Emacs binaries are no longer able to use these interfaces.
malloc_get_state is only used during the Emacs build process,
so we provide a stub implementation only.  Existing Emacs binaries
will not call this stub function, but still reference the symbol.

The rewritten tst-mallocstate test constructs a dumped heap
which should approximates what existing Emacs binaries pass
to glibc malloc.
2016-10-26 13:28:28 +02:00
Florian Weimer
261e6758e7 iconv: Avoid writable data and relocations in ISO646 2016-10-26 13:05:49 +02:00
Florian Weimer
b9deb8ce2a iconv: Avoid writable data and relocations in IBM charsets
The IBM930, IBM933, IBM935 and IBM939 converters defined lookup
tables which were not constant.  They also contained an
unnecessary pointer indirection.
2016-10-26 13:05:48 +02:00
Siddhesh Poyarekar
68fc2ccc1a Remove redundant definitions of M_ARENA_* macros
The M_ARENA_MAX and M_ARENA_TEST macros are defined in malloc.c as
well as malloc.h, and the former is unnecessary.  This patch removes
the duplicate.  Tested on x86_64 to verify that the generated code
remains unchanged barring changed line numbers to __malloc_assert.

	* malloc/malloc.c (M_ARENA_TEST, M_ARENA_MAX): Remove.
2016-10-26 15:07:34 +05:30
Siddhesh Poyarekar
aceb22c1f5 Remove references to sbrk to grow/shrink arenas
The manual incorrectly references sbrk as the method used to grow and
shrink heaps and the fact that M_TRIM_THRESHOLD and M_TOP_PAD control
that behavior.  In reality, a heap may be grown or shrunk through
multiple methods depending on whether it is the main arena (in which
case sbrk is correct) or not (in which case, there are a number of
strategies including allocating an additional heap to grow an arena
and/or 'mprotect' a region to make it available for allocation).

Remove references to sbrk so that it covers the behavior more
accurately.

	* manual/memory.texi (M_TOP_PAD): Remove reference to sbrk.
	(M_TRIM_THRESHOLD): Likewise.
2016-10-26 15:07:07 +05:30
Siddhesh Poyarekar
c1234e60f9 Document the M_ARENA_* mallopt parameters
The M_ARENA_* mallopt parameters are in wide use in production to
control the number of arenas that a long lived process creates and
hence there is no point in stating that this interface is non-public.
Document this interface and remove the obsolete comment.

	* manual/memory.texi (M_ARENA_TEST): Add documentation.
	(M_ARENA_MAX): Likewise.
	* malloc/malloc.c: Remove obsolete comment.
2016-10-26 15:06:21 +05:30
Siddhesh Poyarekar
2bce30357c Add note on MALLOC_MMAP_* environment variables
The mallopt parameters manual does not mention the environment
variables that can be used to set these parameters at program startup.
Mention those environment variables for completeness.

	* manual/memory.texi: Add environment variable alternatives to
	setting mallopt parameters.
2016-10-26 15:05:37 +05:30
Carlos O'Donell
abff18c0c6 Fix atomic_fetch_xor_release.
No code uses atomic_fetch_xor_release except for the upcoming
conditional variable rewrite. Therefore there is no user
visible bug here. The use of atomic_compare_and_exchange_bool_rel
is removed (since it doesn't exist anymore), and is replaced
by atomic_compare_exchange_weak_release.

We use weak_release because it provides better performance in
the loop (the weak semantic) and because the xor is release MO
(the release semantic). We don't reload expected in the loop
because atomic_compare_and_exchange_weak_release does this for
us as part of the CAS failure.

It is otherwise a fairly plain conversion that fixes building
the new condvar for 32-bit x86. Passes all regression tests
for x86.
2016-10-26 00:00:13 -04:00
Rajalakshmi Srinivasaraghavan
cd74aa4d5c Add tests for strfrom functions 2016-10-25 17:11:53 -02:00
Rajalakshmi Srinivasaraghavan
bf5eea32ac Refactor strtod tests
This patch changes strtod* tests to use strfrom* functions.
2016-10-25 17:05:47 -02:00
Gabriel F. T. Gomes
6962682ffe Add strfromd, strfromf, and strfroml functions
ISO/IEC TS 18661-1 adds several functions in the strfrom family to stdlib.
This patch adds strfromd, strfromf, and strfroml.  This is being done in
preparation for the new floating-point type, float128.  The added functions
convert a floating-point value into a string, with configurable format.
2016-10-25 17:03:54 -02:00
Joseph Myers
78b7adbaea Fix cmpli usage in power6 memset.
Building glibc for powerpc64 with recent (2.27.51.20161012) binutils,
with multi-arch enabled, I get the error:

../sysdeps/powerpc/powerpc64/power6/memset.S: Assembler messages:
../sysdeps/powerpc/powerpc64/power6/memset.S:254: Error: operand out of range (5 is not between 0 and 1)
../sysdeps/powerpc/powerpc64/power6/memset.S:254: Error: operand out of range (128 is not between 0 and 31)
../sysdeps/powerpc/powerpc64/power6/memset.S:254: Error: missing operand

Indeed, cmpli is documented as a four-operand instruction, and looking
at nearby code it seems likely cmpldi was intended.  This patch fixes
this powerpc64 code accordingly, and makes a corresponding change to
the powerpc32 code.

Tested for powerpc, powerpc64 and powerpc64le by Tulio Magno Quites
Machado Filho

	* sysdeps/powerpc/powerpc32/power6/memset.S (memset): Use cmplwi
	instead of cmpli.
	* sysdeps/powerpc/powerpc64/power6/memset.S (memset): Use cmpldi
	instead of cmpli.
2016-10-25 15:54:16 +00:00
Yury Norov
20973cf442 * sysdeps/unix/sysv/linux/fxstat.c: Remove useless cast.
* sysdeps/unix/sysv/linux/lxstat.c: Likewise.
	* sysdeps/unix/sysv/linux/xstat.c: Likewise.
	* sysdeps/unix/sysv/linux/i386/fxstat.c: Likewise.
	* sysdeps/unix/sysv/linux/i386/lxstat.c: Likewise.
	* sysdeps/unix/sysv/linux/i386/xstat.c: Likewise.
2016-10-24 14:36:53 -07:00
Adhemerval Zanella
2152cf7eda Fix Linux sh4 pread/pwrite argument passing
Although conceptually correct for p{read,write}{64} offset argument passing,
sh4 implementation does not generate the correct expected code.  The
__ALIGNMENT_ARG redefinition is incorrect for two reasons: 1. the
kernel-features.h header is included multiple times (since it contains no
guards) and 2. the value it redefines is also incorrect (should be '0, '
instead of empty definition).

This patch fixes it by adding another macro, SYSCALL_LL_PRW{64}, meant to be
used to pass the offset argument on p{read,write}64.  It is basically the
already define SYSCALL_LL{64} plus __ALIGNMENT_ARG unless __ASSUME_PRW_DUMMY_ARG
is define.  In this case an empty dummy argument is used regardless how
__ALIGNMENT_ARG is defined (sh4 case).

Checked on x86_64, i686, aarch64, armhf, and powerpc64le (basically a sanity
check).  Also, John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de> and
James Clarke <jrtc27@jrtc27.com> help me check on a debian sh4 bootstrap using
2.24 plus this patch to verify it also corrected fixed the regression issue.

I also verified the generated object for a 2.24 build and master with this
patch for sh4 and both look identical.

	* sysdeps/unix/sysv/linux/pread.c (__libc_pread): Use SYSCALL_LL_PRW.
	* sysdeps/unix/sysv/linux/pwrite.c (__libc_pwrite): Likewise.
	* sysdeps/unix/sysv/linux/pread64.c (__libc_pread64): Use
	SYSCALL_LL64_PRW.
	* sysdeps/unix/sysv/linux/pwrite64.c (__libc_pwrite64): Likewise.
	* sysdeps/unix/sysv/linux/sh/kernel-features.h: Define
	__ASSUME_PRW_DUMMY_ARG.
	* sysdeps/unix/sysv/linux/sh/pread.c: Remove file.
	* sysdeps/unix/sysv/linux/sh/pread64.c: Likewise.
	* sysdeps/unix/sysv/linux/sh/pwrite.c: Likewise.
	* sysdeps/unix/sysv/linux/sh/pwrite64.c: Likewise.
	* sysdeps/unix/sysv/linux/sysdep.h: Define SYSCALL_LL_PRW and
	SYSCALL_LL_PRW64 based on __ASSUME_PRW_DUMMY_ARG.
2016-10-24 15:26:42 -02:00
Steve Ellcey
93f9416301 Fix -Wformat-length warning in tst-setgetname.c
* sysdeps/unix/sysv/linux/tst-setgetname.c: Increase buffer size.
2016-10-24 09:43:54 -07:00
Florian Weimer
e37208ce86 math.h: Wrap C++ bits in extern "C++"
It is still common to include system header files in an extern "C"
block.  This means that exiting <math.h>'s own extern "C" block
is not sufficient to get back to C++ mode.  Use an extern "C++"
wrapper instead.
2016-10-22 17:33:26 +02:00
Joseph Myers
7a8330c01b Use -fno-builtin for sqrt benchmark.
This patch makes the sqrt benchmark use -fno-builtin, as already done
for benchmarks of ffs and ffsll, so that it actually benchmarks the
glibc function as (presumably) intended even in the presence of the
compiler inlining sqrt.

Tested for x86_64 and also used for benchmarking my ARM sqrt patch.

	* benchtests/Makefile (CFLAGS-bench-sqrt.c): New variable.
2016-10-21 21:18:03 +00:00
Paul Murphy
84d74e427a powerpc: Cleanup fenv_private.h
Some of the masks are wrong, and the naming is confusing.

There are two basic cases we really care about:

1. Stacking a new rounding mode when running certain
   sections of code, and pausing exception handling.

2. Likewise, but discarding any exceptions which occur
   while running under the new rounding mode.

libc_feholdexcept_setround_ppc_ctx has been removed as it basically
does the same thing as libc_feholdsetround_ppc_ctx but also clearing
any sticky bits.  The restore behavior is what differentiates these
two cases as the SET_RESTORE_ROUND{,_NOEX} macros will either merge
or discard all exceptions occurring during scope of their usage.

Likewise, there are a number of routines to swap, replace,
or merge FP environments.  This change reduces much of
the common and sometimes wrong code.

Tested on ppc64le, with results before and after.
2016-10-21 16:40:03 -02:00
Florian Weimer
b3918c44db math: Define iszero as a function template for C++ [BZ #20715]
This increases compatibility with C++ code which is forced to
compile with _GNU_SOURCE.
2016-10-21 18:26:53 +02:00
Joseph Myers
0f04fc07f6 Use VSQRT instruction for ARM sqrt (bug 20660).
This patch makes ARM sqrt and sqrtf use the VSQRT VFP square root
instruction when available, instead of much larger generic code for
computing square roots.

Now, GCC will normally inline sqrt calls except for negative arguments
where errno needs to be set, and because the benchtests fail to use
-fno-builtin that means no significant difference in benchmark results
for sqrt (note, however, there are lots of __ieee754_sqrt calls
internally in libm, which are *not* inlined - although some
architectures define __ieee754_sqrt in their math_private.h for that
purpose, ARM doesn't - so improving out-of-line sqrt performance is
still relevant to those other functions, if not for most ordinary
direct users of sqrt).  With the benchtests changed to use
-fno-builtin for sqrt tests, typical performance results before the
change are ("max" is wildly varying in any case):

    "duration": 9.88358e+09,
    "iterations": 4.8783e+07,
    "max": 457.764,
    "min": 183.105,
    "mean": 202.603

and after it are:

    "duration": 9.45663e+09,
    "iterations": 2.24385e+08,
    "max": 274.659,
    "min": 30.517,
    "mean": 42.1447

Tested for ARM (hard-float and soft-float).

	[BZ #20660]
	* sysdeps/arm/e_sqrt.c: New file.
	* sysdeps/arm/e_sqrtf.c: Likewise.
2016-10-20 23:24:44 +00:00
Joseph Myers
05f3ed0a79 Stop powerpc copysignl raising "invalid" for sNaN argument (bug 20718).
The powerpc (hard-float) implementations of copysignl, both 32-bit and
64-bit, raise spurious "invalid" exceptions when the first argument is
a signaling NaN.  copysign functions should never raise exceptions
even for signaling NaNs.

The problem is the use of an fcmpu instruction to test the sign of the
high part of the long double argument.  This patch fixes the functions
to use fsel instead (as used for fabsl following my fixes for a
similar bug there), or to examine the integer representation for older
32-bit processors without fsel.

Tested for powerpc64 and powerpc32 (configurations with and without
fsel used).

	[BZ #20718]
	* sysdeps/powerpc/powerpc32/fpu/s_copysignl.S (__copysignl): Do
	not use floating-point comparisons to test sign.
	* sysdeps/powerpc/powerpc64/fpu/s_copysignl.S (__copysignl):
	Likewise.
2016-10-19 22:58:34 +00:00
Joseph Myers
f8e8b8ed9f Add getpayload, getpayloadf, getpayloadl.
TS 18661-1 defines functions for manipulating the payloads of NaNs.
This patch implements the getpayload functions for glibc; these
extract the NaN payload (from an argument passed as a pointer, for
which corresponding libm-test support is added) and return it in the
same floating-point type.  The return value of these functions is
unspecified for non-NaN arguments; the patch does the simplest thing
to implement, which is that the functions do not check whether the
argument is a NaN and just treat the relevant bits of the
representation as a payload regardless.  A conversion from integer to
floating-point is used to produce the required return value, except in
the ldbl-128 case; as 128-bit integers are not supported for all
configurations using ldbl-128, the code constructs the required
floating-point representation of the return value directly instead.

Tested for x86_64, x86, mips64 and powerpc.

	* math/bits/mathcalls.h [__GLIBC_USE (IEC_60559_BFP_EXT)]
	(getpayload): New declaration.
	* math/Versions (getpayload): New libm symbol at version
	GLIBC_2.25.
	(getpayloadf): Likewise.
	(getpayloadl): Likewise.
	* math/Makefile (libm-calls): Add s_getpayloadF.
	* math/libm-test.inc: Include <nan-high-order-bit.h>.
	(struct test_f_f_data): Add comment.
	(RUN_TEST_fp_f): New macro.
	(RUN_TEST_LOOP_fp_f): Likewise.
	(getpayload_test_data): New array.
	(getpayload_test): New function.
	(main): Call getpayload_test.
	* math/gen-libm-test.pl (parse_args): Handle 'p' in argument
	descriptor.
	* manual/arith.texi (FP Bit Twiddling): Document getpayload,
	getpayloadf and getpayloadl.
	* manual/libm-err-tab.pl: Update comment on interfaces without
	ulps tabulated.
	* sysdeps/ieee754/dbl-64/s_getpayload.c: New file.
	* sysdeps/ieee754/dbl-64/wordsize-64/s_getpayload.c: Likewise.
	* sysdeps/ieee754/flt-32/s_getpayloadf.c: Likewise.
	* sysdeps/ieee754/ldbl-128/s_getpayloadl.c: Likewise.
	* sysdeps/ieee754/ldbl-128ibm/s_getpayloadl.c: Likewise.
	* sysdeps/ieee754/ldbl-96/s_getpayloadl.c: Likewise.
	* sysdeps/nacl/libm.abilist: Update.
	* sysdeps/unix/sysv/linux/aarch64/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/alpha/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/arm/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/hppa/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/i386/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/ia64/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/microblaze/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/mips/mips32/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/mips/mips64/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/nios2/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist:
	Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist:
	Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc64/libm-le.abilist:
	Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc64/libm.abilist:
	Likewise.
	* sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/sh/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libm.abilist:
	Likewise.
	* sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libm.abilist:
	Likewise.
	* sysdeps/unix/sysv/linux/tile/tilepro/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/x86_64/64/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist: Likewise.
2016-10-19 01:49:09 +00:00
Adhemerval Zanella
a9bfffe593 Fix Linux fallocate tests for EOPNOTSUPP
The fallocate syscall might fail on Linux due missing support from
underlying filesystem (for instance some NFS versions).  This patch
adds this check for fallocate tests.  It also moves tst-fallocate{64}
to 'io' folder (since it is on fallocate{64} is built).

Checked on x86_64.

	* sysdeps/unix/sysv/linux/Makefile [$(subdir) = math] (tests): Move
	tst-fallocate{64}.
	* sysdeps/unix/sysv/linux/tst-fallocate-common.c: Check for EOPNOTSUPP
	on syscall return.
2016-10-18 08:56:22 -02:00
Carlos O'Donell
b3d17c1cf2 Bug 20689: Fix FMA and AVX2 detection on Intel
In the Intel Architecture Instruction Set Extensions Programming
reference the recommended way to test for FMA in section
'2.2.1 Detection of FMA' is:

"Application Software must identify that hardware supports AVX as
explained in ... after that it must also detect support for FMA..."

We don't do that in glibc. We use osxsave to detect the use of xgetbv,
and after that we check for AVX and FMA orthogonally. It is conceivable
that you could have the AVX bit clear and the FMA bit in an undefined
state.

This commit fixes FMA and AVX2 detection to depend on usable AVX
as required by the recommended Intel sequences.

v1: https://www.sourceware.org/ml/libc-alpha/2016-10/msg00241.html
v2: https://www.sourceware.org/ml/libc-alpha/2016-10/msg00265.html
2016-10-17 19:39:54 -04:00
Joseph Myers
6f322a8947 Define HIGH_ORDER_BIT_IS_SET_FOR_SNAN to 0 or 1.
This patch moves the HIGH_ORDER_BIT_IS_SET_FOR_SNAN macro from being
defined or undefined to the preferred convention of always being
defined, to either 0 or 1, so allowing typo-proof tests with #if.

The macro is moved from math_private.h to a new header
nan-high-order-bit.h to make it easy for all architectures to define,
either through the sysdeps/generic version of the header or through
providing their own version of the header, without needing #ifndef in
the generic math_private.h to give a default definition.  The move
also allows the macro to be used without needing math_private.h to be
included; the immediate motivation of this patch is to allow tests to
access this information (to know what kinds of NaNs 0 is a valid
payload for) without needing to include math_private.h.  Existing
C level rather than preprocessor conditionals at all, but this patch
does not make such a change).

Tested for x86_64 and x86 (testsuite); also verified for x86_64, x86,
mips64 and powerpc that installed stripped shared libraries are
unchanged by the patch.

	* sysdeps/generic/nan-high-order-bit.h: New file.
	* sysdeps/hppa/nan-high-order-bit.h: Likewise.
	* sysdeps/mips/nan-high-order-bit.h: Likewise.
	* sysdeps/hppa/math_private.h: Remove file.
	* sysdeps/mips/math_private.h (HIGH_ORDER_BIT_IS_SET_FOR_SNAN): Do
	not define here.
	* sysdeps/ieee754/dbl-64/s_issignaling.c: Include
	<nan-high-order-bit.h>.
	[HIGH_ORDER_BIT_IS_SET_FOR_SNAN]: Test with #if not #ifdef.
	* sysdeps/ieee754/dbl-64/s_totalorder.c: Include
	<nan-high-order-bit.h>.
	[HIGH_ORDER_BIT_IS_SET_FOR_SNAN]: Test with #if not #ifdef.
	* sysdeps/ieee754/dbl-64/s_totalordermag.c: Include
	<nan-high-order-bit.h>.
	[HIGH_ORDER_BIT_IS_SET_FOR_SNAN]: Test with #if not #ifdef.
	* sysdeps/ieee754/dbl-64/wordsize-64/s_issignaling.c: Include
	<nan-high-order-bit.h>.
	[HIGH_ORDER_BIT_IS_SET_FOR_SNAN]: Test with #if not #ifdef.
	* sysdeps/ieee754/dbl-64/wordsize-64/s_totalorder.c: Include
	<nan-high-order-bit.h>.
	[HIGH_ORDER_BIT_IS_SET_FOR_SNAN]: Test with #if not #ifdef.
	* sysdeps/ieee754/dbl-64/wordsize-64/s_totalordermag.c: Include
	<nan-high-order-bit.h>.
	[HIGH_ORDER_BIT_IS_SET_FOR_SNAN]: Test with #if not #ifdef.
	* sysdeps/ieee754/flt-32/s_issignalingf.c: Include
	<nan-high-order-bit.h>.
	[HIGH_ORDER_BIT_IS_SET_FOR_SNAN]: Test with #if not #ifdef.
	* sysdeps/ieee754/flt-32/s_totalorderf.c: Include
	<nan-high-order-bit.h>.
	[HIGH_ORDER_BIT_IS_SET_FOR_SNAN]: Test with #if not #ifdef.
	* sysdeps/ieee754/flt-32/s_totalordermagf.c: Include
	<nan-high-order-bit.h>.
	[HIGH_ORDER_BIT_IS_SET_FOR_SNAN]: Test with #if not #ifdef.
	* sysdeps/ieee754/ldbl-128/s_issignalingl.c: Include
	<nan-high-order-bit.h>.
	[HIGH_ORDER_BIT_IS_SET_FOR_SNAN]: Test with #if not #ifdef.
	* sysdeps/ieee754/ldbl-128/s_totalorderl.c: Include
	<nan-high-order-bit.h>.
	[HIGH_ORDER_BIT_IS_SET_FOR_SNAN]: Test with #if not #ifdef.
	* sysdeps/ieee754/ldbl-128/s_totalordermagl.c: Include
	<nan-high-order-bit.h>.
	[HIGH_ORDER_BIT_IS_SET_FOR_SNAN]: Test with #if not #ifdef.
	* sysdeps/ieee754/ldbl-128ibm/s_issignalingl.c: Include
	<nan-high-order-bit.h>.
	[HIGH_ORDER_BIT_IS_SET_FOR_SNAN]: Test with #if not #ifdef.
	* sysdeps/ieee754/ldbl-128ibm/s_totalorderl.c: Include
	<nan-high-order-bit.h>.
	[HIGH_ORDER_BIT_IS_SET_FOR_SNAN]: Test with #if not #ifdef.
	* sysdeps/ieee754/ldbl-128ibm/s_totalordermagl.c: Include
	<nan-high-order-bit.h>.
	[HIGH_ORDER_BIT_IS_SET_FOR_SNAN]: Test with #if not #ifdef.
	* sysdeps/ieee754/ldbl-96/s_issignalingl.c: Include
	<nan-high-order-bit.h>.
	[HIGH_ORDER_BIT_IS_SET_FOR_SNAN]: Test with #if not #ifdef.
	* sysdeps/ieee754/ldbl-96/s_totalorderl.c: Include
	<nan-high-order-bit.h>.
	[HIGH_ORDER_BIT_IS_SET_FOR_SNAN]: Test with #if not #ifdef.
	* sysdeps/ieee754/ldbl-96/s_totalordermagl.c: Include
	<nan-high-order-bit.h>.
	[HIGH_ORDER_BIT_IS_SET_FOR_SNAN]: Test with #if not #ifdef.
2016-10-17 22:48:51 +00:00
Stefan Liebler
8e36adc08e S390: Fix fp comparison not raising FE_INVALID.
As gcc is using unordered comparison instructions which do not
raise invalid exception if any operand is quiet NAN,
FIX_COMPARE_INVALID is defined to 1.
Thus iseqsig is calling feraiseexcept as workaround.
2016-10-17 10:37:11 +02:00
John David Anglin
7cfde84069 hppa: Optimize atomic_compare_and_exchange_val_acq
Changelog:
	* sysdeps/unix/sysv/linux/hppa/atomic-machine.h: Don't include
	abort-instr.h.
	(EFAULT): Remove conditional define.
	(ENOSYS): Likewise.
	(atomic_compare_and_exchange_val_acq): Use instruction nullification
	instead of conditional branch instructions.
2016-10-15 19:22:43 +02:00
Joseph Myers
cc6a8d7457 Add totalordermag, totalordermagf, totalordermagl.
In addition to the totalorder functions, TS 18661-1 defines
totalordermag functions, which do the same comparison but on the
absolute values of the arguments.  This patch implements these
functions for glibc, including the type-generic macro in <tgmath.h>.
In general the implementations are similar to but simpler than those
for the totalorder functions.

Tested for x86_64, x86, mips64 and powerpc.

	* math/bits/mathcalls.h [__GLIBC_USE (IEC_60559_BFP_EXT)]
	(totalordermag): New declaration.
	* math/tgmath.h [__GLIBC_USE (IEC_60559_BFP_EXT)] (totalordermag):
	New macro.
	* math/Versions (totalordermag): New libm symbol at version
	GLIBC_2.25.
	(totalordermagf): Likewise.
	(totalordermagl): Likewise.
	* math/Makefile (libm-calls): Add s_totalordermagF.
	* math/libm-test.inc (totalordermag_test_data): New array.
	(totalordermag_test): New function.
	(main): Call totalordermag_test.
	* math/test-tgmath.c (NCALLS): Increase to 125.
	(F(compile_test)): Call totalordermag.
	(F(totalordermag)): New function.
	* manual/arith.texi (FP Comparison Functions): Document
	totalordermag, totalordermagf and totalordermagl.
	* manual/libm-err-tab.pl: Update comment on interfaces without
	ulps tabulated.
	* sysdeps/ieee754/dbl-64/s_totalordermag.c: New file.
	* sysdeps/ieee754/dbl-64/wordsize-64/s_totalordermag.c: Likewise.
	* sysdeps/ieee754/flt-32/s_totalordermagf.c: Likewise.
	* sysdeps/ieee754/ldbl-128/s_totalordermagl.c: Likewise.
	* sysdeps/ieee754/ldbl-128ibm/s_totalordermagl.c: Likewise.
	* sysdeps/ieee754/ldbl-96/s_totalordermagl.c: Likewise.
	* sysdeps/ieee754/ldbl-opt/nldbl-totalordermag.c: Likewise.
	* sysdeps/ieee754/ldbl-opt/Makefile (libnldbl-calls): Add
	totalordermag.
	(CFLAGS-nldbl-totalordermag.c): New variable.
	* sysdeps/ieee754/ldbl-128ibm/test-totalorderl-ldbl-128ibm.c
	(do_test): Also test totalordermagl.
	* sysdeps/ieee754/ldbl-96/test-totalorderl-ldbl-96.c (do_test):
	Likewise.
	* sysdeps/nacl/libm.abilist: Update.
	* sysdeps/unix/sysv/linux/aarch64/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/alpha/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/arm/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/hppa/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/i386/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/ia64/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/microblaze/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/mips/mips32/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/mips/mips64/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/nios2/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist:
	Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist:
	Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc64/libm-le.abilist:
	Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc64/libm.abilist:
	Likewise.
	* sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/sh/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libm.abilist:
	Likewise.
	* sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libm.abilist:
	Likewise.
	* sysdeps/unix/sysv/linux/tile/tilepro/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/x86_64/64/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist: Likewise.
2016-10-15 00:36:48 +00:00
steve ellcey-CA Eng-Software
e223d1fe72 Fix warnings from latest GCC.
* sysdeps/ieee754/dbl-64/e_pow.c (checkint) Make conditions explicitly
	boolean.
2016-10-14 12:53:27 -07:00
Joseph Myers
e886c36771 Clean up some complex functions raising FE_INVALID.
Some of the complex arithmetic functions have the following pattern:
in some piece of code, one part of the input (real or imaginary,
depending on the function) is either infinite or NaN.  Part of the
result is to be set to NaN in either case, and FE_INVALID raised only
if the relevant part of the input was infinite.

In such a case, there is no actual need for the conditional on the
type of the input, since subtracting the relevant part of the input
from itself will produce a NaN, with FE_INVALID only if the relevant
part of the input was infinite.  This simplifies the code, and as a
quality-of-implementation matter also improves things by propagating
NaN payloads.  (Right now these functions always raise FE_INVALID for
signaling NaN arguments because of the call to fpclassify - at least
unless glibc is built with -Os - but if fpclassify moves to using
integer arithmetic in future, doing arithmetic on the NaN argument
also ensures an exception for sNaNs.)

Tested for x86_64 and x86.

	* math/s_ccosh_template.c (M_DECL_FUNC (__ccosh)): Instead of
	raising FE_INVALID with feraisexcept in case where part of
	argument is infinite, subtract that part of argument from itself.
	* math/s_cexp_template.c (M_DECL_FUNC (__cexp)): Likewise.
	* math/s_csin_template.c (M_DECL_FUNC (__csin)): Likewise.
	* math/s_csinh_template.c (M_DECL_FUNC (__csinh)): Likewise.
2016-10-14 00:12:56 +00:00
Joseph Myers
07c18a008c Add more totalorder tests.
This patch adds more tests of totalorder for finite inputs.

Tested for x86_64, x86, mips64 and powerpc.

	* math/libm-test.inc (totalorder_test_data): Add more tests.
2016-10-12 21:33:49 +00:00
Adhemerval Zanella
7164580495 Fix posix_fadvise64 build on mips64n64
Recent binutils versions (at least 2.27) complains about libc.so
when linking sotruss-lib.so with:

  libc.so:(*IND*+0x0): multiple definition of `posix_fadvise64@GLIBC_2.2'
  libc.so::(.text+0xcf940): first defined here
  libc.so:(*IND*+0x0): multiple definition of `posix_fadvise64'
  collect2: error: ld returned 1 exit status

Dynamic symbols for libc.so shows (readelf --dyn-syms):

   262: 000000000010b950    28 FUNC    GLOBAL DEFAULT   12 posix_fadvise64@GLIBC_2.2
   417: 000000000010b950    28 FUNC    WEAK   DEFAULT   12 posix_fadvise64@@GLIBC_2.2
  1505: 000000000010b950    28 FUNC    GLOBAL DEFAULT   12 posix_fadvise64@@GLIBC_2.3.3

That is, two separate definitions at version GLIBC_2.2. The issue is
sysdeps/unix/sysv/linux/posix_fadvise64.c creates posix_fadvise64 weak_alias,
while sysdeps/unix/sysv/linux/mips/mips64/n64/posix_fadvise64.c then adds
compat_symbol / versioned_symbol calls.

The patch remove the weak_alias definition on mips64 specific version so
direct weak_alias is disabled.

Checked on mips64n64 build with binutils 2.27.51.20161012.

	* sysdeps/unix/sysv/linux/mips/mips64/n64/posix_fadvise64.c:
	Undefine weak_alias.
2016-10-12 13:21:08 -03:00
H.J. Lu
6a824767d8 X86: Don't assert on older Intel CPUs [BZ #20647]
Since the maximum CPUID level of older Intel CPUs is 1, change
handle_intel to return -1, instead of assert, when the maximum
CPUID level is less than 2.

	[BZ #20647]
	* sysdeps/x86/cacheinfo.c (handle_intel): Return -1 if the
	maximum CPUID level is less than 2.
2016-10-12 08:22:52 -07:00
Joseph Myers
5e9d98a3d9 Add totalorder, totalorderf, totalorderl.
TS 18661-1 defines totalorder functions implementing the totalOrder
comparison operation from IEEE 754-2008.  This patch implements these
functions for glibc, including the type-generic macro in <tgmath.h>.
(The totalordermag functions will be added in a separate patch.)

The description of the totalOrder operation is complicated.  However,
for IEEE interchange binary formats and the preferred quiet NaN
convention, what that complicated description means is that you
interpret the representation as a sign-magnitude integer (with -0
coming before +0) and do a <= comparison on that interpretation.  For
finite values and infinities the ordering of the sign-magnitude
integers is just the same as the ordering of floating-point values, so
this extends that to all representations.  (Different representations
of the same floating-point value - which includes same quantum in the
decimal case - must still be considered equal by this operation, but
that issue doesn't arise for IEEE interchange binary formats.)  So the
complications are:

* When MIPS quiet NaN conventions are in use, the representation of
  NaNs needs adjusting before making such an integer comparison.  This
  patch does this adjustment only when both arguments are NaNs, as
  there's no need for it if only one is a NaN, and as long as both are
  NaNs you can just flip the relevant bits without any problems from
  this turning a NaN into an infinity.

* For the m68k version of ldbl-96, where the high mantissa bit is
  "don't care" for infinities and NaNs, representations where it
  differs must compare the same.  Note: although the testcase for this
  compiles, I have not actually tested on m68k.

* For ldbl-128ibm, the low part must be ignored when the high part is
  NaN, and low parts of +0 and -0 must be considered the same whatever
  the high part.

The new tests in libm-test.inc are the first tests there specifying
particular payloads for input NaNs.  Separate tests are also added for
the ldbl-96 and ldbl-128ibm special cases where there are different
representations of the same value that must compare equal (which can't
be covered in libm-test.inc as that only specifies values, not
representations).

Tested for x86_64, x86, mips64 and powerpc.

	* math/bits/mathcalls.h [__GLIBC_USE (IEC_60559_BFP_EXT)]
	(totalorder): New declaration.
	* math/tgmath.h [__GLIBC_USE (IEC_60559_BFP_EXT)] (totalorder):
	New macro.
	* math/Versions (totalorder): New libm symbol at version
	GLIBC_2.25.
	(totalorderf): Likewise.
	(totalorderl): Likewise.
	* math/Makefile (libm-calls): Add s_totalorderF.
	* math/gen-libm-test.pl (parse_args): Escape quotes in test name
	string.
	* math/libm-test.inc (PAYLOAD_DIG): New macro.
	(qnan_value_pl): Likewise.
	(snan_value_pl): Likewise.
	(qnan_value): Define using qnan_value_pl.
	(snan_value): Define using snan_value_pl.
	(struct test_ff_i_data): Add comment about which tests use this
	structure.
	(RUN_TEST_ff_b): New macro.
	(RUN_TEST_LOOP_ff_b): Likewise.
	(totalorder_test_data): New array.
	(totalorder_test): New function.
	(main): Call totalorder_test.
	* math/test-tgmath.c (NCALLS): Increase to 122.
	(F(compile_test)): Call totalorder.
	(F(totalorder)): New function.
	* manual/arith.texi (FP Comparison Functions): Document
	totalorder, totalorderf and totalorderl.
	* manual/libm-err-tab.pl: Update comment on interfaces without
	ulps tabulated.
	* sysdeps/ieee754/dbl-64/s_totalorder.c: New file.
	* sysdeps/ieee754/dbl-64/wordsize-64/s_totalorder.c: Likewise.
	* sysdeps/ieee754/flt-32/s_totalorderf.c: Likewise.
	* sysdeps/ieee754/ldbl-128/s_totalorderl.c: Likewise.
	* sysdeps/ieee754/ldbl-128ibm/s_totalorderl.c: Likewise.
	* sysdeps/ieee754/ldbl-96/s_totalorderl.c: Likewise.
	* sysdeps/ieee754/ldbl-opt/nldbl-totalorder.c: Likewise.
	* sysdeps/ieee754/ldbl-opt/Makefile (libnldbl-calls): Add
	totalorder.
	(CFLAGS-nldbl-totalorder.c): New variable.
	* sysdeps/ieee754/ldbl-128ibm/test-totalorderl-ldbl-128ibm.c: New
	file.
	* sysdeps/ieee754/ldbl-128ibm/Makefile [$(subdir) = math] (tests):
	Add test-totalorderl-ldbl-128ibm.
	* sysdeps/ieee754/ldbl-96/test-totalorderl-ldbl-96.c: New file.
	* sysdeps/ieee754/ldbl-96/Makefile [$(subdir) = math] (tests): Add
	test-totalorderl-ldbl-96.
	* sysdeps/nacl/libm.abilist: Update.
	* sysdeps/unix/sysv/linux/aarch64/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/alpha/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/arm/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/hppa/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/i386/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/ia64/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/microblaze/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/mips/mips32/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/mips/mips64/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/nios2/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist:
	Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist:
	Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc64/libm-le.abilist:
	Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc64/libm.abilist:
	Likewise.
	* sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/sh/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libm.abilist:
	Likewise.
	* sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libm.abilist:
	Likewise.
	* sysdeps/unix/sysv/linux/tile/tilepro/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/x86_64/64/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist: Likewise.
2016-10-12 01:20:30 +00:00
Adhemerval Zanella
5da2c626a5 Consolidate Linux sync_file_range implementations
This patch consolidates all the sync_file_range implementation for Linux
in only one (sysdeps/unix/sysv/linux/sync_file_range.c).  It also removes
the syscall from the auto-generation using assembly macros (except for
x86_64 due x32 [1]).

For current minimum supported kernel (2.6.32 for x86_64 and 3.2 for all
other architectures) either sync_file_range or sync_file_range2 is supported
and it is expected that any future Linux ABI will provide either of one
syscall.  So the code path that returns ENOSYS in the case of missing
syscall is removed.

Checked on x86_64, i386, powerpc64le, aarch64, and armhf.

	* sysdeps/unix/sysv/linux/Makefile (tests): Add tst-sync_file_range.
	* sysdeps/unix/sysv/linux/mips/mips32/sync_file_range.c: Remove file.
	* sysdeps/sysv/linux/powerpc/powerpc64/sync_file_range.c: Likewise.
	* sysdeps/unix/sysv/linux/sync_file_range.c: New file.
	* sysdeps/unix/sysv/linux/tst-sync_file_range.c (sync_file_range):
	Consolidate all Linux implementations.

[1] https://patchwork.ozlabs.org/patch/659794/
2016-10-11 16:21:12 -03:00
Florian Weimer
bf8c542403 resolv: Compile without -Wno-write-strings 2016-10-11 15:43:41 +02:00
Joseph Myers
4d5940f015 Avoid M_NAN + M_NAN in complex functions.
Some libm complex functions have code that computes M_NAN + M_NAN.
This is nonsensical; it's just equivalent to M_NAN, since it's a quiet
NaN (and the comments suggesting this raises an exception are
similarly wrong).  This patch changes the code just to use M_NAN (and
removes the bogus comments).  (Preferably, code should either
propagate an input NaN or do a computation that raises "invalid" and
generates a default NaN at the same time.  There are various cases,
however, that currently raise "invalid" even for NaN inputs; I think
those are cases where "invalid" is optional in ISO C so a change to
whether it's raised would be OK, but they would still need more
careful consideration than the cases where such issues do not arise.)

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

	* math/s_ccosh_template.c (M_DECL_FUNC (__ccosh)): Use M_NAN
	instead of M_NAN + M_NAN.
	* math/s_csinh_template.c (M_DECL_FUNC (__csinh)): Likewise.
2016-10-11 00:50:43 +00:00
Samuel Thibault
352db0bd05 hurd: Fix unused variable warning
* misc/getauxval.c [!HAVE_AUX_VECTOR] (__getauxval): Do not define
	unused variable 'p'.
2016-10-10 22:45:18 +02:00
Alan Modra
3f413ec8d1 powerpc32: make PLT call in _mcount compatible with -msecure-plt (bug 20554) 2016-10-09 21:43:50 +02:00
Joseph Myers
d0800ae0e7 Make iseqsig handle excess precision.
iseqsig, like other type-generic comparison macros, should behave like
a comparison operator in not removing excess range and precision from
its arguments (see C11 F.10.11).  This patch implements this by making
definitions of iseqsig appropriately conditional on
__FLT_EVAL_METHOD__ (including support for TS 18661-3 values of that
macro), with a corresponding testcase (that failed for 32-bit x86 in
the absence of the math.h changes) being added.  (Of course the
definitions may need reworking when float128 support is added, just as
with other type-generic macros.)

Tested for x86_64 and x86.

	* math/math.h [__GLIBC_USE (IEC_60559_BFP_EXT)] (iseqsig): Define
	conditional on value of [__FLT_EVAL_METHOD__].
	* math/test-iseqsig-excess-precision.c: New file.
	* math/Makefile (tests): Add test-iseqsig-excess-precision.
2016-10-07 23:28:33 +00:00
Adhemerval Zanella
12e5d361a4 Fix iseqsig for ports that do not support FE_INVALID
Microblaze, nios2, and tile do not support FE_INVALID and thus
define feraiseexcept as a empty macro.  Include math-private.h
to get such definition.

Checked with a build for microblaze, nios2, and tilepro.

	* math/s_iseqsig_template.c: Include math-private.h.
2016-10-07 14:18:31 -03:00
Adhemerval Zanella
96b7fe4243 Consolidate posix_fadvise implementations
This patch consolidates mostly of the Linux posix_fadvise{64} implementations
on sysdeps/unix/sysv/linux/posix_fadvise{64}.c.  It still keeps arch-specific
files for:

  * S390-32: it uses a packed structure to pass all the arguments on syscall.
    It is the only supported port that implements __NR_fadvise64_64 in this
    way.

  * ARM: it does not implement __NR_fadvise64 (as other 32-bits ports), so
    posix_fadvise calls internal posix_fadvise64 symbol.

  * MIPS64 n64: it requires a different version number that other ports.

The new macro SYSCALL_LL{64} is used to handle the offset argument and
INTERNAL_SYSCALL_CALL to handle passing the correct number of expect
arguments.

The default Linux adds two new defines a port can use to control how
__NR_fadvise64_64 passes the kernel arguments:

  * __ASSUME_FADVISE64_64_6ARG: the 'advise' argument is moved on second
    position.  This is the case of powerpc32 and arm to avoid implement
    7 argument syscall.

  * __ASSUME_FADVISE64_64_NO_ALIGN: for ABIs that defines
    __ASSUME_ALIGNED_REGISTER_PAIRS packs the offset without the leading
    '0'.  This is the case of tile 32 bits.

ARM also defines __NR_fadvise64_64 as __NR_arm_fadvise64_64 (which is also
handled on arch kernel-feature.h).

Tested on x86_64, x32, i686, armhf, and aarch64.

	* posix/Makefile (tests): Add tst-posix_fadvise and tst-posix_fadvise64.
	* posix/tst-posix_fadvise.c: New file.
	* posix/tst-posix_fadvise64.c: Likewise.
	* posix/tst-posix_fadvise-common.c: Likewise.
	* sysdeps/unix/sysv/linux/arm/kernel-features.h
	(__ASSUME_FADVISE64_64_6ARG): Define.
	* sysdeps/unix/sysv/linux/powerpc/kernel-features.h
	[!__powerpc64__] (__ASSUME_FADVISE64_64_6ARG): Add define.
	* sysdeps/unix/sysv/linux/arm/posix_fadvise64.c: Remove file.
	* sysdeps/unix/sysv/linux/generic/wordsize-32/posix_fadvise.c: Likewise.
	* sysdeps/unix/sysv/linux/i386/posix_fadvise64.S: Likewise.
	* sysdeps/unix/sysv/linux/mips/mips32/posix_fadvise.c: Likewise.
	* sysdeps/unix/sysv/linux/mips/mips32/posix_fadvise64.c: Likewise.
	* sysdeps/unix/sysv/linux/mips/mips64/n32/posix_fadvise.c: Likewise.
	* sysdeps/unix/sysv/linux/mips/mips64/n32/posix_fadvise64.c: Likewise.
	* sysdeps/unix/sysv/linux/mips/mips64/n64/posix_fadvise.c: Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc32/posix_fadvise.c: Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc32/posix_fadvise64.c:
	Likewise.
	* sysdeps/unix/sysv/linux/wordsize-64/posix_fadvise.c: Likewise.
	* sysdeps/unix/sysv/linux/wordsize-64/posix_fadvise64.c: Likewise.
	* sysdeps/unix/sysv/linux/mips/mips64/n64/posix_fadvise64.c
	(SHLIB_COMPAT(libc, GLIBC_2_2, GLIBC_2_3_3) [__posix_fadvise64_l64]:
	Alias to __posix_fadvise64_l32.
	(SHLIB_COMPAT(libc, GLIBC_2_2, GLIBC_2_3_3) [__posix_fadvise64_l32]:
	Add compat definition to posix_fadvise64.
	(SHLIB_COMPAT(libc, GLIBC_2_2, GLIBC_2_3_3) [__posix_fadvise64_l64]:
	Add versioned definition to posix_fadvise64.
	* sysdeps/unix/sysv/linux/posix_fadvise.c (posix_fadvise): Build iff
	__OFF_T_MATCHES_OFF64_T is defined, use INTERNAL_SYSCALL_CALL, add
	__ASSUME_FADVISE64_64_6ARG/__ASSUME_FADVISE64_64_NO_ALIGN support.
	* sysdeps/unix/sysv/linux/posix_fadvise64.c (posix_fadvise64): Add
	__ASSUME_FADVISE64_64_NO_ALIGN support and use INTERNAL_SYSCALL_CALL.
2016-10-07 14:16:41 -03:00
Adhemerval Zanella
45ff2bfcb3 Consolidate posix_fallocate{64} implementations
This patch consolidates all the posix_fallocate{64} implementation for Linux
in only one (sysdeps/unix/sysv/linux/posix_fallocate{64}.c).  It also removes
the syscall from the auto-generation using assembly macros.

The macro SYSCALL_LL{64} is used to handle the offset argument along with
the new INTERNAL_SYSCALL_CALL macro to define correct argument count for
internal INTERNAL_SYSCALL call.

Tested on x86_64, i686, x32, aarch64, ppc64le, and armhf.

	* io/Makefile (tests): Add tst-posix_fallocate and
	tst-posix_fallocate64.
	* io/tst-posix_fallocate-common.c: New file.
	* io/tst-posix_fallocate.c: Likewise.
	* io/tst-posix_fallocate64.c: Likewise.
	* sysdeps/unix/sysv/linux/mips/mips64/n32/posix_fallocate.c: Remove
	file.
	* sysdeps/unix/sysv/linux/mips/mips64/n32/posix_fallocate64.c:
	Likewise.
	* sysdeps/unix/sysv/linux/mips/mips64/n64/posix_fallocate.c: Likewise.
	* sysdeps/unix/sysv/linux/mips/mips64/n64/posix_fallocate64.c:
	Likewise.
	* sysdeps/unix/sysv/linux/wordsize-64/posix_fallocate.c: Likewise.
	* sysdeps/unix/sysv/linux/wordsize-64/posix_fallocate64.c: Likewise.
	* sysdeps/unix/sysv/linux/posix_fallocate.c (posix_fallocate): Use
	SYSCALL_LL to pass both offset and len arguments.
	* sysdeps/unix/sysv/linux/posix_fallocate64.c (posix_fallocate64):
	Likewise.
	* sysdeps/unix/sysv/linux/x86_64/syscalls.list (pwrite64): Add
	__libc_pwrite64 alias used by posix_fallocate64.
2016-10-07 14:16:41 -03:00
Adhemerval Zanella
6c63e2d8df Consolidate fallocate{64} implementations
This patch consolidates all the fallocate{64} implementation for Linux
in only one (sysdeps/unix/sysv/linux/fallocate{64}.c).  It also removes the
syscall from the auto-generation using assembly macros.

The new macro SYSCALL_LL{64} is used to handle the offset argument.

Checked on x86_64, x32, i386, aarch64, and ppc64le.

	* sysdeps/unix/sysv/linux/Makefile (test): Add tst-fallocate and
	tst-fallocate64.
	* sysdeps/unix/sysv/linux/tst-fallocate.c: New file.
	* sysdeps/unix/sysv/linux/tst-fallocate64.c: Likewise.
	* sysdeps/unix/sysv/linux/tst-fallocate-common.c: Likewise.
	* sysdeps/unix/sysv/linux/mips/mips64/n32/fallocate.c: Remove file.
	* sysdeps/unix/sysv/linux/mips/mips64/n32/fallocate64.c: Likewise.
	* sysdeps/unix/sysv/linux/mips/mips64/n64/fallocate.c: Likewise.
	* sysdeps/unix/sysv/linux/mips/mips64/n64/fallocate64.c: Likewise.
	* sysdeps/unix/sysv/linux/wordsize-64/fallocate.c: Likewise.
	* sysdeps/unix/sysv/linux/wordsize-64/fallocate64.c: Likewise.
	* sysdeps/unix/sysv/linux/fallocate.c (fallocate): Use SYSCALL_LL
	macro on offset argument.
	* sysdeps/unix/sysv/linux/fallocate64.c (fallocate64): Use
	SYSCALL_LL64 on offset argument.
	* test-skeleton.c (FAIL_RET): Add macro.
	(FAIL_EXIT): Likewise.
	(FAIL_EXIT1): Likewise.
	(_FAIL): Likewise.
2016-10-07 14:16:36 -03:00
Florian Weimer
5140d036f9 resolv: Remove RES_USEBSTRING and its implementation [BZ #20629]
In ns_name_ntop, the NS_CMPRSFLGS check is no longer needed because
labellen (called earlier) already rejects everything which is not
a plain label (compression references and extended label types).
2016-10-07 17:41:59 +02:00
Florian Weimer
7ec47a85d8 resolv: Remove RES_NOIP6DOTINT and its implementation 2016-10-07 17:41:59 +02:00
Florian Weimer
bfbd1de159 resolv: Deprecate unimplemented flags
RES_AAONLY, RES_PRIMARY, RES_NOCHECKNAME, RES_KEEPTSIG result
in compile-time warnings.  Some of these flags are still used in
applications.
2016-10-07 17:41:45 +02:00
Stefan Liebler
314ba75e4a Use libc_ifunc macro for siglongjmp, longjmp in libpthread.
This patch uses the libc_ifunc macro to create already existing ifunc functions
longjmp_ifunc, siglongjmp_ifunc if HAVE_IFUNC is defined.
The s390 pt-longjmp.c includes the common pt-longjmp.c and uses strong_alias
to create the longjmp, siglongjmp symbols for glibc version 2.19.

ChangeLog:

	* nptl/pt-longjmp.c (DEFINE_LONGJMP): Use libc_ifunc macro.
	* sysdeps/unix/sysv/linux/s390/pt-longjmp.c (longjmp, siglongjmp):
	Use strong_alias to create symbols for glibc verison 2.19.
2016-10-07 10:12:48 +02:00
Stefan Liebler
051f8be7c9 Use libc_ifunc macro for vfork in libpthread.
This patch uses the libc_ifunc macro to create already existing ifunc functions
vfork_ifunc and __vfork_ifunc if HAVE_IFUNC is defined.

ChangeLog:

	* nptl/pt-vfork.c (DEFINE_VFORK): Use libc_ifunc macro.
2016-10-07 10:12:48 +02:00
Stefan Liebler
75685c4d98 Use libc_ifunc macro for system in libpthread.
This patch uses the libc_ifunc macro to create already existing ifunc function
system_ifunc if HAVE_IFUNC is defined.

ChangeLog:

	* nptl/pt-system.c (system_ifunc): Use libc_ifunc macro.
2016-10-07 10:12:47 +02:00
Stefan Liebler
98ac7b7c85 Use libc_ifunc macro for clock_* symbols in librt.
This patch uses the libc_ifunc macro to create already existing ifunc functions
clock_getres, clock_gettime, clock_settime, clock_getcpuclockid and
clock_nanosleep. If HAVE_IFUNC is defined, the macro COMPAT_REDIRECT uses
the libc_ifunc macro.
Furthermore some whitespace damage is cleaned.

ChangeLog:

	* rt/clock-compat.c (COMPAT_REDIRECT): Use libc_ifunc macro.
2016-10-07 10:12:47 +02:00
Stefan Liebler
a4d7fe35cd ppc: Use libc_ifunc macro for time, gettimeofday.
This patch uses the libc_ifunc_hidden macro to create already existing ifunc functions
time and gettimeofday on power. This way, the libc_hidden_def macro can be used
instead of inline assemblies.
On ppc32, the __GI_* symbols do not target the ifunc symbol and thus the
redirection construct has to be applied here.

ChangeLog:

	* sysdeps/unix/sysv/linux/powerpc/gettimeofday.c (__gettimeofday):
	Use libc_ifunc_hidden and libc_hidden_def macro. Redirect ifunced function
	in header for using it as type for ifunc function because __GI_* symbols
	for ppc32 do not target the ifunc symbols.
	* sysdeps/unix/sysv/linux/powerpc/time.c (time): Likewise.
2016-10-07 10:12:46 +02:00
Stefan Liebler
e23faea6ae i386, x86: Use libc_ifunc macro for time, gettimeofday.
This patch uses the libc_ifunc_hidden macro to create already existing ifunc functions
time and gettimeofday on intel. This way, the libc_hidden_def macro can be used
instead of the libc_ifunc_hidden_def one which was only used here. Thus the
macro is removed from libc-symbols.h.
On i386, the __GI_* symbols do not target the ifunc symbol and thus the
redirection construct has to be applied here.

ChangeLog:

	* sysdeps/unix/sysv/linux/x86/gettimeofday.c (__gettimeofday):
	Use libc_ifunc_hidden macro. Use libc_hidden_def instead of
	libc_ifunc_hidden_def.
	* sysdeps/unix/sysv/linux/x86/time.c (time): Likewise.
	* sysdeps/unix/sysv/linux/i386/gettimeofday.c (__gettimeofday):
	Redirect ifunced function in header for using it as type of ifunc'ed
	function. Redefine libc_hidden_def to use fallback non ifunc'ed
	function for __GI_* symbol.
	* sysdeps/unix/sysv/linux/i386/time.c (time): Likewise.
	* include/libc-symbols.h
	(libc_ifunc_hidden_def, libc_ifunc_hidden_def1): Delete macro.
2016-10-07 10:12:42 +02:00
Stefan Liebler
18d6c45e12 s390: Refactor ifunc resolvers due to false debuginfo.
This patch adjusts the s390 specific ifunc helper macros in ifunc-resolve.h to
use the common __ifunc macro, which uses gcc attribute ifunc to get rid of the
false debuginfo. Therefore the redirection construct is applied where needed.

Perhaps in future we can switch some of the internal symbols __GI_* from the
fallback variant to the ifunc function. But this change is not
straightforward due to a segmentation fault while linking libc.so with older
binutils on s390.

ChangeLog:

	[BZ #20478]
	* sysdeps/s390/multiarch/ifunc-resolve.h
	(s390_vx_libc_ifunc2, s390_libc_ifunc): Use __ifunc from libc-symbols.h
	to create ifunc symbols.
	(s390_vx_libc_ifunc_init, s390_vx_libc_ifunc_redirected
	, s390_vx_libc_ifunc2_redirected, s390_libc_ifunc_init): New define.
	* sysdeps/s390/multiarch/memchr.c: Redirect ifunced function in header
	for using it as type for ifunc function.
	* sysdeps/s390/multiarch/mempcpy.c: Likewise.
	* sysdeps/s390/multiarch/rawmemchr.c: Likewise.
	* sysdeps/s390/multiarch/stpcpy.c: Likewise.
	* sysdeps/s390/multiarch/stpncpy.c: Likewise.
	* sysdeps/s390/multiarch/strcat.c: Likewise.
	* sysdeps/s390/multiarch/strchr.c: Likewise.
	* sysdeps/s390/multiarch/strcmp.c: Likewise.
	* sysdeps/s390/multiarch/strcpy.c: Likewise.
	* sysdeps/s390/multiarch/strcspn.c: Likewise.
	* sysdeps/s390/multiarch/strlen.c: Likewise.
	* sysdeps/s390/multiarch/strncmp.c: Likewise.
	* sysdeps/s390/multiarch/strncpy.c: Likewise.
	* sysdeps/s390/multiarch/strnlen.c: Likewise.
	* sysdeps/s390/multiarch/strpbrk.c: Likewise.
	* sysdeps/s390/multiarch/strrchr.c: Likewise.
	* sysdeps/s390/multiarch/strspn.c: Likewise.
	* sysdeps/s390/multiarch/wcschr.c: Likewise.
	* sysdeps/s390/multiarch/wcscmp.c: Likewise.
	* sysdeps/s390/multiarch/wcspbrk.c: Likewise.
	* sysdeps/s390/multiarch/wcsspn.c: Likewise.
	* sysdeps/s390/multiarch/wmemchr.c: Likewise.
	* sysdeps/s390/multiarch/wmemset.c: Likewise.
	* sysdeps/s390/s390-32/multiarch/memcmp.c: Likewise.
	* sysdeps/s390/s390-32/multiarch/memcpy.c: Likewise.
	* sysdeps/s390/s390-32/multiarch/memset.c: Likewise.
	* sysdeps/s390/s390-64/multiarch/memcmp.c: Likewise.
	* sysdeps/s390/s390-64/multiarch/memcpy.c: Likewise.
	* sysdeps/s390/s390-64/multiarch/memset.c: Likewise.
2016-10-07 10:11:21 +02:00
Stefan Liebler
00980d845f Use gcc attribute ifunc in libc_ifunc macro instead of inline assembly due to false debuginfo.
The current s390 ifunc resolver for vector optimized functions and the common
libc_ifunc macro in include/libc-symbols.h uses something like that to generate ifunc'ed functions:
extern void *__resolve___strlen(unsigned long int dl_hwcap) asm (strlen);
asm (".type strlen, %gnu_indirect_function");

This leads to false debug information:
objdump --dwarf=info libc.so:
...
<1><1e6424>: Abbrev Number: 43 (DW_TAG_subprogram)
    <1e6425>   DW_AT_external    : 1
    <1e6425>   DW_AT_name        : (indirect string, offset: 0x1146e): __resolve___strlen
    <1e6429>   DW_AT_decl_file   : 1
    <1e642a>   DW_AT_decl_line   : 23
    <1e642b>   DW_AT_linkage_name: (indirect string, offset: 0x1147a): strlen
    <1e642f>   DW_AT_prototyped  : 1
    <1e642f>   DW_AT_type        : <0x1e4ccd>
    <1e6433>   DW_AT_low_pc      : 0x998e0
    <1e643b>   DW_AT_high_pc     : 0x16
    <1e6443>   DW_AT_frame_base  : 1 byte block: 9c     (DW_OP_call_frame_cfa)
    <1e6445>   DW_AT_GNU_all_call_sites: 1
    <1e6445>   DW_AT_sibling     : <0x1e6459>
 <2><1e6449>: Abbrev Number: 44 (DW_TAG_formal_parameter)
    <1e644a>   DW_AT_name        : (indirect string, offset: 0x1845): dl_hwcap
    <1e644e>   DW_AT_decl_file   : 1
    <1e644f>   DW_AT_decl_line   : 23
    <1e6450>   DW_AT_type        : <0x1e4c8d>
    <1e6454>   DW_AT_location    : 0x122115 (location list)
...

The debuginfo for the ifunc-resolver function contains the DW_AT_linkage_name
field, which names the real function name "strlen". If you perform an inferior
function call to strlen in lldb, then it fails due to something like that:
"error: no matching function for call to 'strlen'
candidate function not viable: no known conversion from 'const char [6]'
to 'unsigned long' for 1st argument"

The unsigned long is the dl_hwcap argument of the resolver function.
The strlen function itself has no debufinfo.

The s390 ifunc resolver for memset & co uses something like that:
asm (".globl FUNC"
     ".type FUNC, @gnu_indirect_function"
     ".set FUNC, __resolve_FUNC");

This way the debuginfo for the ifunc-resolver function does not conain the
DW_AT_linkage_name field and the real function has no debuginfo, too.

Using this strategy for the vector optimized functions leads to some troubles
for functions like strnlen. Here we have __strnlen and a weak alias strnlen.
The __strnlen function is the ifunc function, which is realized with the asm-
statement above. The weak_alias-macro can't be used here due to undefined symbol:
gcc ../sysdeps/s390/multiarch/strnlen.c -c ...
In file included from <command-line>:0:0:
../sysdeps/s390/multiarch/strnlen.c:28:24: error: ‘strnlen’ aliased to undefined symbol ‘__strnlen’
 weak_alias (__strnlen, strnlen)
                        ^
./../include/libc-symbols.h:111:26: note: in definition of macro ‘_weak_alias’
   extern __typeof (name) aliasname __attribute__ ((weak, alias (#name)));
                          ^
../sysdeps/s390/multiarch/strnlen.c:28:1: note: in expansion of macro ‘weak_alias’
 weak_alias (__strnlen, strnlen)
 ^
make[2]: *** [build/string/strnlen.o] Error 1

As the __strnlen function is defined with asm-statements the function name
__strnlen isn't known by gcc. But the weak alias can also be done with an
asm statement to resolve this issue:
__asm__ (".weak  strnlen\n\t"
         ".set   strnlen,__strnlen\n");

In order to use the weak_alias macro, gcc needs to know the ifunc function. The
minimum gcc to build glibc is currently 4.7, which supports attribute((ifunc)).
See https://gcc.gnu.org/onlinedocs/gcc-4.7.0/gcc/Function-Attributes.html.
It is only supported if gcc is configured with --enable-gnu-indirect-function
or gcc supports it by default for at least intel and s390x architecture.
This patch uses the old behaviour if gcc support is not available.
Usage of attribute ifunc is something like that:
__typeof (FUNC) FUNC __attribute__ ((ifunc ("__resolve_FUNC")));

Then gcc produces the same .globl, .type, .set assembler instructions like above.
And the debuginfo does not contain the DW_AT_linkage_name field and there is no
debuginfo for the real function, too.

But in order to get it work, there is also some extra work to do.
Currently, the glibc internal symbol on s390x e.g. __GI___strnlen is not the
ifunc symbol, but the fallback __strnlen_c symbol. Thus I have to omit the
libc_hidden_def macro in strnlen.c (here is the ifunc function __strnlen)
because it is already handled in strnlen-c.c (here is __strnlen_c).

Due to libc_hidden_proto (__strnlen) in string.h, compiling fails:
gcc ../sysdeps/s390/multiarch/strnlen.c -c ...
In file included from <command-line>:0:0:
../sysdeps/s390/multiarch/strnlen.c:53:24: error: ‘strnlen’ aliased to undefined symbol ‘__strnlen’
 weak_alias (__strnlen, strnlen)
                        ^
./../include/libc-symbols.h:111:26: note: in definition of macro ‘_weak_alias’
   extern __typeof (name) aliasname __attribute__ ((weak, alias (#name)));
                          ^
../sysdeps/s390/multiarch/strnlen.c:53:1: note: in expansion of macro ‘weak_alias’
 weak_alias (__strnlen, strnlen)
 ^
make[2]: *** [build/string/strnlen.os] Error 1

I have to redirect the prototypes for __strnlen in string.h and create a copy
of the prototype for using as ifunc function:
__typeof (__redirect___strnlen) __strnlen __attribute__ ((ifunc ("__resolve_strnlen")));
weak_alias (__strnlen, strnlen)

This way there is no trouble with the internal __GI_* symbols.
Glibc builds fine with this construct and the debuginfo is "correct".
For functions without a __GI_* symbol like memccpy this redirection is not needed.

This patch adjusts the common libc_ifunc and libm_ifunc macro to use gcc
attribute ifunc. Due to this change, the macro users where the __GI_* symbol
does not target the ifunc symbol have to be prepared with the redirection
construct.
Furthermore a configure check to test gcc support is added. If it is not supported,
the old behaviour is used.

This patch also prepares the libc_ifunc macro to be useable in s390-ifunc-macro.
The s390 ifunc-resolver-functions do have an hwcaps parameter and not all
resolvers need the same initialization code. The next patch in this series
changes the s390 ifunc macros to use this common one.

ChangeLog:

	* include/libc-symbols.h (__ifunc_resolver):
	New macro is used by __ifunc* macros.
	(__ifunc): New macro uses gcc attribute ifunc or inline assembly
	depending on HAVE_GCC_IFUNC.
	(libc_ifunc, libm_ifunc): Use __ifunc as base macro.
	(libc_ifunc_redirected, libc_ifunc_hidden, libm_ifunc_init): New macro.
	* sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_finite.c:
	Redirect ifunced function in header for using as type for ifunc function.
	* sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_finitef.c: Likewise.
	* sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_isinf.c: Likewise.
	* sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_isinff.c: Likewise.
	* sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_isnan.c: Likewise.
	* sysdeps/powerpc/powerpc32/power4/multiarch/memcmp.c: Likewise.
	* sysdeps/powerpc/powerpc32/power4/multiarch/memcpy.c: Likewise.
	* sysdeps/powerpc/powerpc32/power4/multiarch/memmove.c: Likewise.
	* sysdeps/powerpc/powerpc32/power4/multiarch/mempcpy.c: Likewise.
	* sysdeps/powerpc/powerpc32/power4/multiarch/memset.c: Likewise.
	* sysdeps/powerpc/powerpc32/power4/multiarch/rawmemchr.c: Likewise.
	* sysdeps/powerpc/powerpc32/power4/multiarch/strchr.c: Likewise.
	* sysdeps/powerpc/powerpc32/power4/multiarch/strlen.c: Likewise.
	* sysdeps/powerpc/powerpc32/power4/multiarch/strncmp.c: Likewise.
	* sysdeps/powerpc/powerpc32/power4/multiarch/strnlen.c: Likewise.
	* sysdeps/powerpc/powerpc64/fpu/multiarch/s_finite.c: Likewise.
	* sysdeps/powerpc/powerpc64/fpu/multiarch/s_finitef.c: Likewise.
	* sysdeps/powerpc/powerpc64/fpu/multiarch/s_isinf.c: Likewise.
	* sysdeps/powerpc/powerpc64/fpu/multiarch/s_isinff.c: Likewise.
	* sysdeps/powerpc/powerpc64/fpu/multiarch/s_isnan.c: Likewise.
	* sysdeps/powerpc/powerpc64/multiarch/memcmp.c: Likewise.
	* sysdeps/powerpc/powerpc64/multiarch/mempcpy.c: Likewise.
	* sysdeps/powerpc/powerpc64/multiarch/rawmemchr.c: Likewise.
	* sysdeps/powerpc/powerpc64/multiarch/stpncpy.c: Likewise.
	* sysdeps/powerpc/powerpc64/multiarch/strcat.c: Likewise.
	* sysdeps/powerpc/powerpc64/multiarch/strchr.c: Likewise.
	* sysdeps/powerpc/powerpc64/multiarch/strcmp.c: Likewise.
	* sysdeps/powerpc/powerpc64/multiarch/strcpy.c: Likewise.
	* sysdeps/powerpc/powerpc64/multiarch/strncmp.c: Likewise.
	* sysdeps/powerpc/powerpc64/multiarch/strncpy.c: Likewise.
	* sysdeps/powerpc/powerpc64/multiarch/strnlen.c: Likewise.
	* sysdeps/powerpc/powerpc64/multiarch/strrchr.c: Likewise.
	* sysdeps/powerpc/powerpc64/multiarch/strstr.c: Likewise.
	* sysdeps/powerpc/powerpc64/multiarch/wcschr.c: Likewise.
	* sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_isnanf.c:
	Add libc_hidden_def() and use libc_ifunc_hidden() macro
	instead of libc_ifunc() macro.
	* sysdeps/powerpc/powerpc64/fpu/multiarch/s_isnanf.c: Likewise.
	* sysdeps/powerpc/powerpc64/multiarch/stpcpy.c: Likewise.
2016-10-07 10:03:20 +02:00
Stefan Liebler
022dfdce00 Add configure check to test if gcc supports attribute ifunc.
This patch adds a configure check to test if gcc supports attribute ifunc.
The support can either be enabled in <gcc-src>/gcc/config.gcc for one
architecture in general by setting default_gnu_indirect_function variable to yes
or by configuring gcc with --enable-gnu-indirect-function.

The next patch rewrites libc_ifunc macro to use gcc attribute ifunc instead
of inline assembly to generate the IFUNC symbols due to false debuginfo.

If gcc does not support attribute ifunc, the old approach for generating
ifunc'ed symbols is used. Then the debug-information is false. Thus it is
recommended to use a gcc with indirect function support (See notes in INSTALL).
After this patch-series these inline assemblies for ifunc-handling are not
scattered in multiple files but are used only indirect via ifunc-macros
and can simply removed in libc-symbols.h in future.

If glibc is configured with --enable-multi-arch and gcc does not support
attribute ifunc, a configure warning is dumped!

ChangeLog:

	* config.h.in (HAVE_GCC_IFUNC): New undef.
	* configure.ac: Add check if gcc supports attribute ifunc feature.
	* configure: Regenerated.
	* manual/install.texi: Add recommendation for gcc with
	indirect-function support.
	* INSTALL: Regenerated.
2016-10-07 10:02:59 +02:00
Joseph Myers
1e7c8fcca5 Add iseqsig.
TS 18661-1 adds an iseqsig type-generic comparison macro to <math.h>.
This macro is like the == operator except that unordered operands
result in the "invalid" exception and errno being set to EDOM.

This patch implements this macro for glibc.  Given the need to set
errno, this is implemented with out-of-line functions __iseqsigf,
__iseqsig and __iseqsigl (of which the last only exists at all if long
double is ABI-distinct from double, so no function aliases or compat
support are needed).  The present patch ignores excess precision
issues; I intend to deal with those in a followup patch.  (Like
comparison operators, type-generic comparison macros should *not*
convert operands to their semantic types but should preserve excess
range and precision, meaning that for some argument types and values
of FLT_EVAL_METHOD, an underlying function should be called for a
wider type than that of the arguments.)

The underlying functions are implemented with the type-generic
template machinery.  Comparing x <= y && x >= y is sufficient in ISO C
to achieve an equality comparison with "invalid" raised for unordered
operands (and the results of those two comparisons can also be used to
tell whether errno needs to be set).  However, some architectures have
GCC bugs meaning that unordered comparison instructions are used
instead of ordered ones.  Thus, a mechanism is provided for
architectures to use an explicit call to feraiseexcept to raise
exceptions if required.  If your architecture has such a bug you
should add a fix-fp-int-compare-invalid.h header for it, with a
comment pointing to the relevant GCC bug report; if such a GCC bug is
fixed, that header's contents should have a __GNUC_PREREQ conditional
added so that the workaround can eventually be removed for that
architecture.

Tested for x86_64, x86, mips64, arm and powerpc.

	* math/math.h [__GLIBC_USE (IEC_60559_BFP_EXT)] (iseqsig): New
	macro.
	* math/bits/mathcalls.h [__GLIBC_USE (IEC_60559_BFP_EXT)]
	(__iseqsig): New declaration.
	* math/s_iseqsig_template.c: New file.
	* math/Versions (__iseqsigf): New libm symbol at version
	GLIBC_2.25.
	(__iseqsig): Likewise.
	(__iseqsigl): Likewise.
	* math/libm-test.inc (iseqsig_test_data): New array.
	(iseqsig_test): New function.
	(main): Call iseqsig_test.
	* math/Makefile (gen-libm-calls): Add s_iseqsigF.
	* manual/arith.texi (FP Comparison Functions): Document iseqsig.
	* manual/libm-err-tab.pl: Update comment on interfaces without
	ulps tabulated.
	* sysdeps/generic/fix-fp-int-compare-invalid.h: New file.
	* sysdeps/powerpc/fpu/fix-fp-int-compare-invalid.h: Likewise.
	* sysdeps/x86/fpu/fix-fp-int-compare-invalid.h: Likewise.
	* sysdeps/nacl/libm.abilist: Update.
	* sysdeps/unix/sysv/linux/aarch64/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/alpha/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/arm/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/hppa/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/i386/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/ia64/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/microblaze/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/mips/mips32/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/mips/mips64/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/nios2/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist:
	Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist:
	Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc64/libm-le.abilist:
	Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc64/libm.abilist:
	Likewise.
	* sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/sh/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libm.abilist:
	Likewise.
	* sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libm.abilist:
	Likewise.
	* sysdeps/unix/sysv/linux/tile/tilepro/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/x86_64/64/libm.abilist: Likewise.
	* sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist: Likewise.
2016-10-06 22:19:38 +00:00
Siddhesh Poyarekar
36ee03e6a8 Update comments for some functions in s_sin.c
Update comments for some functions to bring them in sync with what the
functions are actually doing.
2016-10-06 13:09:02 +05:30
Siddhesh Poyarekar
9cb069308c Adjust calls to do_sincos_1 and do_sincos_2 in s_sincos.c
Adjust calls to do_sincos_1 and do_sincos_2 to pass a boolean
shift_quadrant instead of the numeric 0 and 1.

This does not affect codegen.
2016-10-06 12:57:07 +05:30
Siddhesh Poyarekar
ead1ef37d2 Make quadrant shift a boolean in reduce_and_compute in s_sin.c
Like the previous change, make the quadrant shift a boolean to make it
clearer that we will do at most a single rotation of the quadrants to
compute the cosine from the sine function.

This does not affect codegen.
2016-10-06 12:54:04 +05:30
Siddhesh Poyarekar
5455692aaf Manual typos: System Databases and Name Service Switch
* manual/nss.texi: Fix typos in the manual.
2016-10-06 12:36:26 +05:30
Rical Jasan
be20861940 Manual typos: Contributors to
2016-05-06  Rical Jasan  <ricaljasan@pacific.net>

	* manual/contrib.texi: Fix typos in the manual.
2016-10-06 12:30:03 +05:30
Rical Jasan
6d2857d350 Manual typos: Library Maintenance
2016-05-06  Rical Jasan  <ricaljasan@pacific.net>

	* manual/maint.texi: Fix typos in the manual.
2016-10-06 12:29:11 +05:30
Rical Jasan
b55a155f00 Manual typos: Installing
2016-05-06  Rical Jasan  <ricaljasan@pacific.net>

	* manual/install.texi: Fix typos in the manual.
	* INSTALL: Regenerated.
2016-10-06 12:28:45 +05:30
Rical Jasan
ae996b9f39 Manual typos: C Language Facilities in the Library
2016-05-06  Rical Jasan  <ricaljasan@pacific.net>

	* manual/lang.texi: Fix typos in the manual.
2016-10-06 12:27:48 +05:30
Rical Jasan
8e52276ef4 Manual typos: Internal probes
2016-05-06  Rical Jasan  <ricaljasan@pacific.net>

	* manual/probes.texi: Fix typos in the manual.
2016-10-06 12:26:35 +05:30
Rical Jasan
a309449484 Manual typos: POSIX Threads
2016-05-06  Rical Jasan  <ricaljasan@pacific.net>

	* manual/threads.texi: Fix typos in the manual.
2016-10-06 12:26:06 +05:30
Rical Jasan
db5e4e881f Manual typos: Debugging support
2016-05-06  Rical Jasan  <ricaljasan@pacific.net>

	* manual/debug.texi: Fix typos in the manual.
2016-10-06 12:25:38 +05:30
Rical Jasan
b8867dabdf Manual typos: DES Encryption and Password Handling
2016-05-06  Rical Jasan  <ricaljasan@pacific.net>

	* manual/crypt.texi: Fix typos in the manual.
2016-10-06 12:25:00 +05:30
Rical Jasan
d80cf4a6be Manual typos: System Configuration Parameters
2016-05-06  Rical Jasan  <ricaljasan@pacific.net>

	* manual/conf.texi: Fix typos in the manual.
2016-10-06 12:24:07 +05:30
Rical Jasan
61547c480f Manual typos: System Management
2016-05-06  Rical Jasan  <ricaljasan@pacific.net>

	* manual/sysinfo.texi: Fix typos in the manual.
2016-10-06 12:23:27 +05:30
Rical Jasan
9e302f97d4 Manual typos: Users and Groups
2016-05-06  Rical Jasan  <ricaljasan@pacific.net>

	* manual/users.texi: Fix typos in the manual.
2016-10-06 12:21:46 +05:30
Rical Jasan
d72457974d Manual typos: Job Control
2016-05-06  Rical Jasan  <ricaljasan@pacific.net>

	* manual/job.texi: Fix typos in the manual.
2016-10-06 12:20:28 +05:30
Rical Jasan
9cbcfebd02 Manual typos: Processes
2016-05-06  Rical Jasan  <ricaljasan@pacific.net>

	* manual/process.texi: Fix typos in the manual.
2016-10-06 12:20:00 +05:30
Rical Jasan
954cbda0fa Manual typos: The Basic Program/System Interface
2016-05-06  Rical Jasan  <ricaljasan@pacific.net>

	* manual/argp.texi: Fix typos in the manual.
	* manual/getopt.texi: Likewise.
	* manual/startup.texi: Likewise.
2016-10-06 12:19:25 +05:30
Rical Jasan
16c7d1ec26 Manual typos: Signal Handling
2016-05-06  Rical Jasan  <ricaljasan@pacific.net>

	* manual/signal.texi: Fix typos in the manual.
2016-10-06 12:18:05 +05:30
Rical Jasan
a96ce75c8e Manual typos: Non-Local Exits
2016-05-06  Rical Jasan  <ricaljasan@pacific.net>

	* manual/setjmp.texi: Fix typos in the manual.
2016-10-06 12:17:29 +05:30