Add libm-test support for per-rounding-mode manually specified results.

This patch continues the libm-test move towards automatic testing of
all test inputs in all rounding modes by adding gen-libm-test.pl
support for tests specifying results in each rounding mode manually.

Previously a TEST_* line could specify arguments and results, or
arguments, results and flags.  Now there is the option of (arguments,
results-rd, flags-rd, results-rn, flags-rn, results-rz, flags-rz,
results-ru, flags-ru).  This is used to replace the separate arrays of
results in each rounding mode for lrint, llrint and rint.  (In the
case of rint, some tests were only in rint_test_data and needed to
have expectations for non-default rounding modes added, which I did
manually.  In various cases there were slight differences in things
such as the ordering of tests in the arrays for each mode.)

Tested x86_64 and x86.

	* math/gen-libm-test.pl (parse_args): Handle results specified for
	each rounding mode separately.
	* math/libm-test.inc (lrint_test_data): Merge in per-rounding-mode
	tests and results from lrint_tonearest_test_data,
	lrint_towardzero_test_data, lrint_downward_test_data and
	lrint_upward_test_data.
	(lrint_test): Use ALL_RM_TEST.
	(lrint_tonearest_test_data): Remove.
	(lrint_test_tonearest): Likewise.
	(lrint_towardzero_test_data): Likewise.
	(lrint_test_towardzero): Likewise.
	(lrint_downward_test_data): Likewise.
	(lrint_test_downward): Likewise.
	(lrint_upward_test_data): Likewise.
	(lrint_test_upward): Likewise.
	(llrint_test_data): Merge in per-rounding-mode tests and results
	from llrint_tonearest_test_data, llrint_towardzero_test_data,
	llrint_downward_test_data and llrint_upward_test_data.
	(llrint_test): Use ALL_RM_TEST.
	(llrint_tonearest_test_data): Remove.
	(llrint_test_tonearest): Likewise.
	(llrint_towardzero_test_data): Likewise.
	(llrint_test_towardzero): Likewise.
	(llrint_downward_test_data): Likewise.
	(llrint_test_downward): Likewise.
	(llrint_upward_test_data): Likewise.
	(llrint_test_upward): Likewise.
	(rint_test_data): Merge in per-rounding-mode tests and results
	from rint_tonearest_test_data, rint_towardzero_test_data,
	rint_downward_test_data and rint_upward_test_data.  Add
	per-rounding-mode results for tests not in those arrays.
	(rint_test): Use ALL_RM_TEST.
	(rint_tonearest_test_data): Remove.
	(rint_test_tonearest): Likewise.
	(rint_towardzero_test_data): Likewise.
	(rint_test_towardzero): Likewise.
	(rint_downward_test_data): Likewise.
	(rint_test_downward): Likewise.
	(rint_upward_test_data): Likewise.
	(rint_test_upward): Likewise.
	(main): Don't call removed functions.
Get rid of __LT_SPINLOCK_INIT

We got rid of LinuxThreads in 2005, but we didn't remove
__LT_SPINLOCK_INIT back then.  Do it now.

	* nptl/sysdeps/pthread/bits/libc-lockP.h [defined NOT_IN_libc
	&& !defined IS_IN_libpthread && __LT_SPINNOCK_INIT != 0]:
	Remove.
Fix up return codes for tests in tst-ftell-active-handler

The test functions used a variable ret to store failure codes for
individual tests, but the variable was incorrectly used to record
other failure codes too, resulting in overwriting of the tests status.
This is now fixed by making sure that the ret variable is used only
for recording test failures.

	* libio/tst-ftell-active-handler.c (do_ftell_test): Don't mix
	up test status with function return status.
	(do_write_test): Likewise.
	(do_append_test): Likewise.
Fix offset caching for streams and use it for ftell (BZ #16680)

The ftell implementation was made conservative to ensure that
incorrectly cached offsets never affect it.  However, this causes
problems for append mode when a file stream is rewound.  Additionally,
the 'clever' trick of using stat to get position for append mode files
caused more problems than it solved and broke old behavior.  I have
described the various problems that it caused and then finally the
solution.

For a and a+ mode files, rewinding the stream should result in ftell
returning 0 as the offset, but the stat() trick caused it to
(incorrectly) always return the end of file.  Now I couldn't find
anything in POSIX that specifies the stream position after rewind()
for a file opened in 'a' mode, but for 'a+' mode it should be set to
0.  For 'a' mode too, it probably makes sense to keep it set to 0 in
the interest of retaining old behavior.

The initial file position for append mode files is implementation
defined, so the implementation could either retain the current file
position or move the position to the end of file.  The earlier ftell
implementation would move the offset to end of file for append-only
mode, but retain the old offset for a+ mode.  It would also cache the
offset (this detail is important).  My patch broke this and would set
the initial position to end of file for both append modes, thus
breaking old behavior.  I was ignorant enough to write an incorrect
test case for it too.

The Change:

I have now brought back the behavior of seeking to end of file for
append-only streams, but with a slight difference.  I don't cache the
offset though, since we would want ftell to query the current file
position through lseek while the stream is not active.  Since the
offset is moved to the end of file, we can rely on the file position
reported by lseek and we don't need to resort to the stat() nonsense.

Finally, the cache is always reliable, except when there are unflished
writes in an append mode stream (i.e. both a and a+).  In the latter
case, it is safe to just do an lseek to SEEK_END.  The value can be
safely cached too, since the file handle is already active at this
point.  Incidentally, this is the only state change we affect in the
file handle (apart from taking locks of course).

I have also updated the test case to correct my impression of the
initial file position for a+ streams to the initial behavior.  I have
verified that this does not break any existing tests in the testsuite
and also passes with the new tests.
Change offset in fdopen only if setting O_APPEND

fdopen should only be allowed to change the offset in the file it
attaches to if it is setting O_APPEND.  If O_APPEND is already set, it
should not change the state of the handle.
Fix __PTHREAD_MUTEX_HAVE_ELISION -Wundef warning

ChangeLog:

2014-03-17  Will Newton  <will.newton@linaro.org>

	* nptl/sysdeps/pthread/pthread.h: Check
	__PTHREAD_MUTEX_HAVE_ELISION is defined before testing
	its value.
Fix HP_SMALL_TIMING_AVAIL -Wundef warnings

ChangeLog:

2014-03-17  Will Newton  <will.newton@linaro.org>

	* sysdeps/generic/ldsodefs.h: Check whether
	HP_SMALL_TIMING_AVAIL is defined with #ifdef rather
	than #if.
Fix _IO_JUMPS_OFFSET -Wundef warnings

ChangeLog:

2014-03-17  Will Newton  <will.newton@linaro.org>

	* libio/genops.c: Check whether
	_IO_JUMPS_OFFSET is defined with #ifdef rather
	than #if.
	* libio/libioP.h: Likewise.
	* stdio-common/vfprintf.c: Likewise.
Fix __STRICT_ANSI__ -Wundef warnings

ChangeLog:

2014-03-17  Will Newton  <will.newton@linaro.org>

	* argp/argp-fmtstream.h: Check whether
	__STRICT_ANSI__ is defined with #ifdef rather
	than #if.
	* argp/argp.h: Likewise.
Fix HAVE_RM_CTX -Wundef warnings

ChangeLog:

2014-03-17  Will Newton  <will.newton@linaro.org>

	* sysdeps/generic/math_private.h: Check whether
	HAVE_RM_CTX is defined with #ifdef rather
	than #if.
Revert "Fix HAVE_RM_CTX -Wundef warnings"

This reverts commit 9290130a8de3f30970f741c79dfe8459f798e05f.
Revert "Fix _IO_JUMPS_OFFSET -Wundef warnings"

This reverts commit f7efd7c3dfffa3c417e9d3c4cb19d9954a3b1421.
Revert "Fix HP_SMALL_TIMING_AVAIL -Wundef warnings"

This reverts commit 53f1bed39263541ef7f3d86f9701005524938016.
Revert "Fix __PTHREAD_MUTEX_HAVE_ELISION -Wundef warning"

This reverts commit 788bba368c2eaf8aa3fd2ca18d269395d6bc8afb.
Test rint and nearbyint with same inputs, in all rounding modes.

This patch arranges for rint and nearbyint to be tested by
libm-test.inc with the same inputs (previously each had some test
inputs the other didn't, although there was a lot of overlap as well),
and for nearbyint to be tested in all rounding modes where previously
it was only tested in round-to-nearest mode.  The expected results are
the same for each function, except that rint is expected to have
"inexact" exceptions for non-integer input and nearbyint is expected
not to have those exceptions.

Tested x86_64 and x86.

	* math/libm-test.inc (nearbyint_test_data): Include all tests used
	for rint.  Include results for all rounding modes.
	(nearbyint_test): Use ALL_RM_TEST.
	(rint_test_data): Include all tests used for nearbyint.
Exit with error status on check-abi failure.

	* Makerules [!subdir] (check-abi): Exit with error status if a
	test failed.