Florian Weimer [Thu, 21 May 2015 14:45:09 +0000 (15:45 +0100)]
vfprintf: Move jump table definition and the macros out of function
The second jump table will be moved to a separate function
in the next commit.
Carlos O'Donell [Thu, 21 May 2015 14:01:34 +0000 (10:01 -0400)]
Add sprintf benchmark.
Tests position and non-positional arguments with two
test string.
Andreas Schwab [Thu, 19 Feb 2015 14:52:08 +0000 (15:52 +0100)]
Simplify handling of nameserver configuration in resolver
Remove use of ext.nsmap member of struct __res_state and always use
an identity mapping betwen the nsaddr_list array and the ext.nsaddrs
array. The fact that a nameserver has an IPv6 address is signalled by
setting nsaddr_list[].sin_family to zero.
Joseph Myers [Wed, 20 May 2015 23:14:53 +0000 (23:14 +0000)]
conformtest: use proper _POSIX_C_SOURCE value for POSIX.
The conform/ tests were using -D_POSIX_C_SOURCE=199912 to test "POSIX"
(1995/6). This patch changes them to use 199506L, the proper value
from the relevant edition of POSIX. (This doesn't make any difference
to features.h, but is the logically correct value to use.) Tested for
x86_64.
* conform/GlibcConform.pm ($CFLAGS{"POSIX"}): Use
-D_POSIX_C_SOURCE=199506L.
Joseph Myers [Wed, 20 May 2015 22:56:27 +0000 (22:56 +0000)]
conformtest: correct POSIX expectations for locale.h.
When cleaning up conformtest expectations for POSIX for locale.h in
<https://sourceware.org/ml/libc-alpha/2012-11/msg00382.html>, I missed
that locale.h had contents defined in POSIX.2:1993 as well as
POSIX.1:1995/6. Thus, LC_MESSAGES *should* in fact be required for
POSIX, because POSIX.2 says so; this patch adds that expectation
back. Tested for x86_64.
* conform/data/locale.h-data [POSIX] (LC_MESSAGES): Require.
Joseph Myers [Wed, 20 May 2015 22:47:03 +0000 (22:47 +0000)]
conformtest: clean up POSIX expectations for unistd.h.
Concluding the series of patches to clean up conformtest expectations
for "POSIX" (POSIX.1:1995/6, union with POSIX.2:1993), this patch
cleans up expectations for unistd.h. Tested x86_64; the new XFAIL is
for missing _POSIX2_C_VERSION.
* conform/data/unistd.h-data (_POSIX_VERSION): Require.
(_POSIX2_C_VERSION): Require if [POSIX || XPG3 || XPG4 || UNIX98].
Do not mention otherwise.
[POSIX] (_XOPEN_VERSION): Do not expect.
[POSIX] (_XOPEN_XCU_VERSION): Likewise.
[POSIX] (_POSIX2_C_BIND): Likewise.
[POSIX] (_POSIX2_VERSION): Likewise.
[POSIX] (_XOPEN_XPG2): Likewise.
[POSIX] (_XOPEN_XPG3): Likewise.
[POSIX] (_XOPEN_XPG4): Likewise.
[POSIX] (_XOPEN_UNIX): Likewise.
[POSIX] (_POSIX_ADVISORY_INFO): Likewise.
[POSIX] (_POSIX_BARRIERS): Likewise.
[POSIX] (_POSIX_CLOCK_SELECTION): Likewise.
[POSIX] (_POSIX_CPUTIME): Likewise.
[POSIX] (_POSIX_MONOTONIC_CLOCK): Likewise.
[POSIX] (_POSIX_READER_WRITER_LOCKS): Likewise.
[POSIX] (_POSIX_SHELL): Likewise.
[POSIX] (_POSIX_SPAWN): Likewise.
[POSIX] (_POSIX_SPIN_LOCKS): Likewise.
[POSIX] (_POSIX_SPORADIC_SERVER): Likewise.
[POSIX] (_POSIX_THREAD_CPUTIME): Likewise.
[POSIX] (_POSIX_TYPED_MEMORY_OBJECTS): Likewise.
[POSIX] (_POSIX_THREAD_SPORADIC_SERVER): Likewise.
[POSIX] (_XBS5_ILP32_OFF32): Likewise.
[POSIX] (_XBS5_ILP32_OFBIG): Likewise.
[POSIX] (_XBS5_LP64_OFF64): Likewise.
[POSIX] (_XBS5_LPBIG_OFFBIG): Likewise.
[POSIX] (_POSIX_TIMEOUTS): Likewise.
[POSIX] (_POSIX2_PBS): Likewise.
[POSIX] (_POSIX2_PBS_ACCOUNTING): Likewise.
[POSIX] (_POSIX2_PBS_CHECKPOINT): Likewise.
[POSIX] (_POSIX2_PBS_LOCATE): Likewise.
[POSIX] (_POSIX2_PBS_MESSAGE): Likewise.
[POSIX] (_POSIX2_PBS_TRACK): Likewise.
[POSIX] (_POSIX_TIMESTAMP_RESOLUTION): Likewise.
[POSIX] (_CS_XBS5_ILP32_OFF32_CFLAGS): Likewise.
[POSIX] (_CS_XBS5_ILP32_OFF32_LDFLAGS): Likewise.
[POSIX] (_CS_XBS5_ILP32_OFF32_LIBS): Likewise.
[POSIX] (_CS_XBS5_ILP32_OFF32_LINTFLAGS): Likewise.
[POSIX] (_CS_XBS5_ILP32_OFFBIG_CFLAGS): Likewise.
[POSIX] (_CS_XBS5_ILP32_OFFBIG_LDFLAGS): Likewise.
[POSIX] (_CS_XBS5_ILP32_OFFBIG_LIBS): Likewise.
[POSIX] (_CS_XBS5_ILP32_OFFBIG_LINTFLAGS): Likewise.
[POSIX] (_CS_XBS5_LP64_OFF64_CFLAGS): Likewise.
[POSIX] (_CS_XBS5_LP64_OFF64_LDFLAGS): Likewise.
[POSIX] (_CS_XBS5_LP64_OFF64_LIBS): Likewise.
[POSIX] (_CS_XBS5_LP64_OFF64_LINTFLAGS): Likewise.
[POSIX] (_CS_XBS5_LPBIG_OFFBIG_CFLAGS): Likewise.
[POSIX] (_CS_XBS5_LPBIG_OFFBIG_LDFLAGS): Likewise.
[POSIX] (_CS_XBS5_LPBIG_OFFBIG_LIBS): Likewise.
[POSIX] (_CS_XBS5_LPBIG_OFFBIG_LINTFLAGS): Likewise.
[POSIX] (_SC_2_C_BIND): Likewise.
[POSIX] (_SC_2_C_VERSION): Likewise.
[POSIX] (_SC_2_PBS): Likewise.
[POSIX] (_SC_2_PBS_ACCOUNTING): Likewise.
[POSIX] (_SC_2_PBS_CHECKPOINT): Likewise.
[POSIX] (_SC_2_PBS_LOCATE): Likewise.
[POSIX] (_SC_2_PBS_MESSAGE): Likewise.
[POSIX] (_SC_2_PBS_TRACK): Likewise.
[POSIX] (_SC_ATEXIT_MAX): Likewise.
[POSIX] (_SC_BARRIERS): Likewise.
[POSIX] (_SC_BASE): Likewise.
[POSIX] (_SC_CLOCK_SELECTION): Likewise.
[POSIX] (_SC_DEVICE_IO): Likewise.
[POSIX] (_SC_DEVICE_SPECIFIC): Likewise.
[POSIX] (_SC_DEVICE_SPECIFIC_R): Likewise.
[POSIX] (_SC_FD_MGMT): Likewise.
[POSIX] (_SC_FIFO): Likewise.
[POSIX] (_SC_FILE_ATTRIBUTES): Likewise.
[POSIX] (_SC_FILE_LOCKING): Likewise.
[POSIX] (_SC_FILE_SYSTEM): Likewise.
[POSIX] (_SC_IOV_MAX): Likewise.
[POSIX] (_SC_MONOTONIC_CLOCK): Likewise.
[POSIX] (_SC_NETWORKING): Likewise.
[POSIX] (_SC_PAGE_SIZE): Likewise.
[POSIX] (_SC_PASS_MAX): Likewise.
[POSIX] (_SC_PIPE): Likewise.
[POSIX] (_SC_READER_WRITER_LOCKS): Likewise.
[POSIX] (_SC_REGEXP): Likewise.
[POSIX] (_SC_SHELL): Likewise.
[POSIX] (_SC_SIGNALS): Likewise.
[POSIX] (_SC_SINGLE_PROCESS): Likewise.
[POSIX] (_SC_SPIN_LOCKS): Likewise.
[POSIX] (_SC_TYPED_MEMORY_OBJECTS): Likewise.
[POSIX] (_SC_USER_GROUPS): Likewise.
[POSIX] (_SC_USER_GROUPS_R): Likewise.
[POSIX] (_SC_STREAMS): Likewise.
[POSIX] (_SC_XBS5_ILP32_OFF32): Likewise.
[POSIX] (_SC_XBS5_ILP32_OFFBIG): Likewise.
[POSIX] (_SC_XBS5_LP64_OFF64): Likewise.
[POSIX] (_SC_XBS5_LPBIG_OFFBIG): Likewise.
[POSIX] (_SC_THREAD_ROBUST_PRIO_INHERIT): Likewise.
[POSIX] (_SC_THREAD_ROBUST_PRIO_PROTECT): Likewise.
[POSIX] (_PC_FILESIZEBITS): Likewise.
[POSIX] (_PC_REC_INCR_XFER_SIZE): Likewise.
[POSIX] (_PC_REC_MAX_XFER_SIZE): Likewise.
[POSIX] (_PC_REC_MIN_XFER_SIZE): Likewise.
[POSIX] (_PC_REC_XFER_ALIGN): Likewise.
[POSIX] (uid_t): Likewise.
[POSIX] (gid_t): Likewise.
[POSIX] (off_t): Likewise.
[POSIX] (pid_t): Likewise.
[POSIX] (cuserid): Allow.
(_SC_2_CHAR_TERM): Require constant.
(_POSIX_ASYNCHRONOUS_IO): Remove duplicate optional-constant.
* conform/Makefile (test-xfail-POSIX/unistd.h/conform): New
variable.
Roland McGrath [Wed, 20 May 2015 21:52:05 +0000 (14:52 -0700)]
NaCl: Set tid field to a unique value.
Roland McGrath [Wed, 20 May 2015 21:18:21 +0000 (14:18 -0700)]
Move usleep.c using nanosleep to sysdeps/posix.
Adhemerval Zanella [Wed, 20 May 2015 19:37:52 +0000 (16:37 -0300)]
i386: Remove six-argument specialized implementations
This patch removes the specialized i386 assembly implementations for
fallocate{64}, pselect, and sync_file_range now that i386 have
support for 6 argument syscalls.
Wilco Dijkstra [Wed, 20 May 2015 12:48:48 +0000 (12:48 +0000)]
Add missing math_private includes.
Roland McGrath [Tue, 19 May 2015 23:51:27 +0000 (16:51 -0700)]
BZ#18434: Mark fixed in NEWS.
Joseph Myers [Tue, 19 May 2015 23:44:28 +0000 (23:44 +0000)]
Fix ldbl-96 remquol (finite, Inf) (bug 18244).
ldbl-96 remquol wrongly handles the case where the first argument is
finite and the second infinite, because the check for the second
argument being a NaN fails to disregard the explicit high mantissa bit
and so wrongly interprets an infinity as being a NaN. This patch
fixes this by masking off that bit, and improves test coverage for
both remainder and remquo (various cases were missing tests, or, as in
the case of the bug, were tested only for one of the two functions).
Tested for x86_64 and x86.
[BZ #18244]
* sysdeps/ieee754/ldbl-96/s_remquol.c (__remquol): Ignore explicit
high mantissa bit when testing whether P is a NaN.
* math/libm-test.inc (remainder_test_data): Add more tests.
(remquo_test_data): Likewise.
Joseph Myers [Tue, 19 May 2015 23:05:22 +0000 (23:05 +0000)]
Fix i386 atanhl spurious underflows (bug 18049).
The i386 implementation of atanhl, for small arguments, does a
calculation that involves computing twice the square of the argument,
resulting in spurious underflows for some arguments. This patch fixes
this by just returning the argument when its exponent is below -32,
with underflow being forced as needed for subnormal arguments.
Tested for x86 and x86_64.
[BZ #18049]
* sysdeps/i386/fpu/e_atanhl.S (__ieee754_atanhl): For exponents
below -32, return the argument, with underflow if subnormal.
* math/auto-libm-test-in: Add more tests of atanh.
* math/auto-libm-test-out: Regenerated.
Roland McGrath [Tue, 19 May 2015 22:04:41 +0000 (15:04 -0700)]
BZ#18434: Fix sem_post EOVERFLOW check for [!__HAVE_64B_ATOMICS].
Siddhesh Poyarekar [Tue, 19 May 2015 21:06:13 +0000 (02:36 +0530)]
Fix typo in safety annotations in envz_remove
Steve Ellcey [Tue, 19 May 2015 20:09:01 +0000 (13:09 -0700)]
* inet/rcmd.c (rresvport_af): Change ss to anonymous union
in order to avoid strict alias warnings.
(iruserok_af): Ditto for ra.
James Lemke [Tue, 19 May 2015 19:10:26 +0000 (12:10 -0700)]
Fix for test "malloc_usable_size: expected 7 but got 11"
[BZ #17581] The checking chain of unused chunks was terminated by a hash of
the block pointer, which was sometimes confused with the chunk length byte.
We now avoid using a length byte equal to the magic byte.
Richard Henderson [Tue, 19 May 2015 18:23:56 +0000 (11:23 -0700)]
soft-fp: Fix alpha kernel build problem
* soft-fp/op-common.h (_FP_FROM_INT): Don't write to R.
Richard Henderson [Tue, 19 May 2015 16:42:44 +0000 (09:42 -0700)]
alpha: Update libm-test-ulps
Siddhesh Poyarekar [Tue, 19 May 2015 01:10:37 +0000 (06:40 +0530)]
Avoid deadlock in malloc on backtrace (BZ #16159)
When the malloc subsystem detects some kind of memory corruption,
depending on the configuration it prints the error, a backtrace, a
memory map and then aborts the process. In this process, the
backtrace() call may result in a call to malloc, resulting in
various kinds of problematic behavior.
In one case, the malloc it calls may detect a corruption and call
backtrace again, and a stack overflow may result due to the infinite
recursion. In another case, the malloc it calls may deadlock on an
arena lock with the malloc (or free, realloc, etc.) that detected the
corruption. In yet another case, if the program is linked with
pthreads, backtrace may do a pthread_once initialization, which
deadlocks on itself.
In all these cases, the program exit is not as intended. This is
avoidable by marking the arena that malloc detected a corruption on,
as unusable. The following patch does that. Features of this patch
are as follows:
- A flag is added to the mstate struct of the arena to indicate if the
arena is corrupt.
- The flag is checked whenever malloc functions try to get a lock on
an arena. If the arena is unusable, a NULL is returned, causing the
malloc to use mmap or try the next arena.
- malloc_printerr sets the corrupt flag on the arena when it detects a
corruption
- free does not concern itself with the flag at all. It is not
important since the backtrace workflow does not need free. A free
in a parallel thread may cause another corruption, but that's not
new
- The flag check and set are not atomic and may race. This is fine
since we don't care about contention during the flag check. We want
to make sure that the malloc call in the backtrace does not trip on
itself and all that action happens in the same thread and not across
threads.
I verified that the test case does not show any regressions due to
this patch. I also ran the malloc benchmarks and found an
insignificant difference in timings (< 2%).
* malloc/Makefile (tests): New test case tst-malloc-backtrace.
* malloc/arena.c (arena_lock): Check if arena is corrupt.
(reused_arena): Find a non-corrupt arena.
(heap_trim): Pass arena to unlink.
* malloc/hooks.c (malloc_check_get_size): Pass arena to
malloc_printerr.
(top_check): Likewise.
(free_check): Likewise.
(realloc_check): Likewise.
* malloc/malloc.c (malloc_printerr): Add arena argument.
(unlink): Likewise.
(munmap_chunk): Adjust.
(ARENA_CORRUPTION_BIT): New macro.
(arena_is_corrupt): Likewise.
(set_arena_corrupt): Likewise.
(sysmalloc): Use mmap if there are no usable arenas.
(_int_malloc): Likewise.
(__libc_malloc): Don't fail if arena_get returns NULL.
(_mid_memalign): Likewise.
(__libc_calloc): Likewise.
(__libc_realloc): Adjust for additional argument to
malloc_printerr.
(_int_free): Likewise.
(malloc_consolidate): Likewise.
(_int_realloc): Likewise.
(_int_memalign): Don't touch corrupt arenas.
* malloc/tst-malloc-backtrace.c: New test case.
Siddhesh Poyarekar [Tue, 19 May 2015 01:06:29 +0000 (06:36 +0530)]
Succeed if make check does not report any errors
The conditional that evaluates if there are any FAILed test cases
currently always fails, since we ensure it fails if we find any
unexpected results in tests.sum and it would obviously fail if it does
not find failed results in tests.sum. This patch fixes this by simply
inverting the result of the egrep, i.e. succeed if egrep fails (to
find failed results) and fail if it succeeds.
Tested with 'make subdirs=localedata check' and 'make subdirs=locale
check' where all tests succeed and with 'make subdirs=elf check' where
a couple of tests fail for me.
* Makefile (summarize-tests): Fix return value on success.
Siddhesh Poyarekar [Tue, 19 May 2015 01:05:37 +0000 (06:35 +0530)]
Add envz_remove to the libc manual
I was told that Ma Shimao submitted a patch to add envz_remove to the
libc manual, but the patch could not be accepted since he does not
have a copyright assignment in place. I have been woefully behind on
libc-alpha recently and have not seen the patch or the discussion
thread. I have also not read the man page for envz_remove, so
Alexandre Oliva asked me if I could write this independently and post
a patch. The patch below is the result of the same - I have written
it based on the implementation in string/envz.c and Alex told me via
email that the function is AS, AC and MT-safe like envz_strip.
I assume Alex and Carlos cannot review this since they have been
tainted by the original patch (I haven't even tried to look for a link
to it since I don't want to be tainted) so someone else will have to
review this. If there are no reviewers till the end of the week, I
will commit this since I believe there is a chance that there are no
other reviewers who haven't read that thread.
* manual/string.texi (Envz Functions): Add envz_remove.
Roland McGrath [Mon, 18 May 2015 22:44:53 +0000 (15:44 -0700)]
Refactor opendir.
Siddhesh Poyarekar [Mon, 18 May 2015 09:56:26 +0000 (15:26 +0530)]
Add *.pyc to .gitignore
Ignore generated *.pyc files, particularly in the benchtests
directory.
Arjun Shankar [Mon, 18 May 2015 06:58:06 +0000 (12:28 +0530)]
Ensure `wint_t' is defined before use in include/stdio.h
While trying to get nptl/tst-initializers1.c to include the test skeleton, I
came across a couple of speed bumps. Firstly: after making the appropriate
changes to the test, running `make check' led to this error:
> In file included from ../malloc/malloc.h:24:0,
..
> from tst-initializers1.c:60:
> ../include/stdio.h:111:1: error: unknown type name `wint_t'
> extern wint_t __getwc_unlocked (FILE *__fp);
So, `wint_t' is used before being defined. Question: Why did test-skeleton.c
not cause this error in any of the other tests that include it?
Anyway, I noticed include/stdio.h includes stddef.h, which in turn defines
`wint_t', but only if `__need_wint_t' is defined. So I put in a
`#define __need_wint_t' before the include to get rid of the error. Is that
the correct fix?
A subsequent `make && make check' led to this second error:
> from tst-initializers1-c89.c:1:
> ../test-skeleton.c: In function `main':
> ../test-skeleton.c:356:11: error: `for' loop initial declarations are only
> allowed in C99 mode
> for (struct temp_name_list *n = temp_name_list;
Although there seem to be several other C89 no-noes in test-skeleton.c, I
needed only to fix this specific one for gcc-4.8.3 to stop complaining.
Adhemerval Zanella [Fri, 15 May 2015 19:50:09 +0000 (16:50 -0300)]
Fix stdlib/tst-setcontext3 with dash [BZ#18418]
This patch remove the non-portable array usage on tst-setcontext3.sh
script.
Carlos O'Donell [Sat, 16 May 2015 06:14:49 +0000 (02:14 -0400)]
Fail locale installation if localedef fails.
If any locale fails to compile then the installation
of locales via `make localedata/install-locales`
also fails.
Marko Myllynen [Sat, 16 May 2015 05:40:04 +0000 (01:40 -0400)]
Fix bo_CN and bo_IN.
Both bo_CN and bo_IN were not compiling. The following fix
gets them into a usable state again giving a clean build
result for `make localedata/install-locales`.
Joseph Myers [Fri, 15 May 2015 22:07:57 +0000 (22:07 +0000)]
Fix atanhl missing underflows (bug 16352).
Similar to various other bugs in this area, some atanh implementations
do not raise the underflow exception for subnormal arguments, when the
result is tiny and inexact. This patch forces the exception in a
similar way to previous fixes. (No change in this regard is needed
for the i386 implementation; special handling to force underflows in
these cases will only be needed there when the spurious underflows,
bug 18049, get fixed.)
Tested for x86_64, x86, powerpc and mips64.
[BZ #16352]
* sysdeps/i386/fpu/e_atanh.S (dbl_min): New object.
(__ieee754_atanh): Force underflow exception for results with
small absolute value.
* sysdeps/i386/fpu/e_atanhf.S (flt_min): New object.
(__ieee754_atanhf): Force underflow exception for results with
small absolute value.
* sysdeps/ieee754/dbl-64/e_atanh.c: Include <float.h>.
(__ieee754_atanh): Force underflow exception for results with
small absolute value.
* sysdeps/ieee754/flt-32/e_atanhf.c: Include <float.h>.
(__ieee754_atanhf): Force underflow exception for results with
small absolute value.
* sysdeps/ieee754/ldbl-128/e_atanhl.c: Include <float.h>.
(__ieee754_atanhl): Force underflow exception for results with
small absolute value.
* sysdeps/ieee754/ldbl-128ibm/e_atanhl.c: Include <float.h>.
(__ieee754_atanhl): Force underflow exception for results with
small absolute value.
* sysdeps/ieee754/ldbl-96/e_atanhl.c: Include <float.h>.
(__ieee754_atanhl): Force underflow exception for results with
small absolute value.
* math/auto-libm-test-in: Do not allow missing underflow
exceptions from atanh.
* math/auto-libm-test-out: Regenerated.
Joseph Myers [Fri, 15 May 2015 17:47:29 +0000 (17:47 +0000)]
Fix tanf spurious underflows (bug 18221).
The flt-32 implementation of tanf produces spurious underflow
exceptions for some small arguments, through computing values on the
order of x^5. This patch fixes this by adjusting the threshold for
returning x (or, as applicable, +/- 1/x) to 2**-13 (the next term in
the power series being x^3/3).
Tested for x86_64 and x86.
[BZ #18221]
* sysdeps/ieee754/flt-32/k_tanf.c (__kernel_tanf): Use 2**-13 not
2**-28 as threshold for returning x or +/- 1/x.
* math/auto-libm-test-in: Add more tests of tan.
* math/auto-libm-test-out: Regenerated.
Joseph Myers [Fri, 15 May 2015 17:21:08 +0000 (17:21 +0000)]
Fix lgammaf spurious underflows (bug 18220).
The flt-32 implementation of lgammaf produces spurious underflow
exceptions for some large arguments, because of calculations involving
x^-2 multiplied by small constants. This patch fixes this by
adjusting the threshold for a simpler computation to 2**26 (the error
in the simpler computation is on the order of 0.5 * log (x), for a
result on the order of x * log (x)).
Tested for x86_64 and x86.
[BZ #18220]
* sysdeps/ieee754/flt-32/e_lgammaf_r.c (__ieee754_lgammaf_r): Use
2**26 not 2**58 as threshold for returning x * (log (x) - 1).
* math/auto-libm-test-in: Add another test of lgamma.
* math/auto-libm-test-out: Regenerated.
Adhemerval Zanella [Fri, 15 May 2015 11:49:12 +0000 (08:49 -0300)]
Add BZ #16704 as fixed
Wilco Dijkstra [Fri, 15 May 2015 10:53:55 +0000 (10:53 +0000)]
Remove various ABS macros and replace uses with fabs (or in one case abs)
which is more efficient on all targets.
Joseph Myers [Fri, 15 May 2015 00:16:10 +0000 (00:16 +0000)]
Fix erfcf spurious underflows (bug 18217).
The flt-32 implementation of erfcf produces spurious underflow
exceptions for some arguments close to 0, because of calculations
squaring the argument and then multiplying by small constants. This
patch fixes this by adjusting the threshold for arguments for which
the result is so close to 1 that 1 - x will give the right result from
2**-56 to 2**-26. (If 1 - x * 2/sqrt(pi) were used, the errors would be
on the order of x^3 and a much larger threshold could be used.)
Tested for x86_64 and x86.
[BZ #18217]
* sysdeps/ieee754/flt-32/s_erff.c (__erfcf): Use 2**-26 not 2**-56
as threshold for returning 1 - x.
* math/auto-libm-test-in: Add more tests of erfc.
* math/auto-libm-test-out: Regenerated.
Joseph Myers [Thu, 14 May 2015 23:51:09 +0000 (23:51 +0000)]
Fix atanf spurious underflows (bug 18196).
The sysdeps/ieee754/flt-32 version of atanf produces spurious
underflow exceptions for some large arguments, because of computations
that compute x^-4. This patch fixes this by adjusting the threshold
for large arguments (for which +/- pi/2 can just be returned, the
correct result being roughly +/- pi/2 - 1/x) from 2^34 to 2^25.
Tested for x86_64 and x86.
[BZ #18196]
* sysdeps/ieee754/flt-32/s_atanf.c (__atanf): Use 2^25 not 2^34 as
threshold for large arguments.
* math/auto-libm-test-in: Add another test of atan.
* math/auto-libm-test-out: Regenerated.
Joseph Myers [Thu, 14 May 2015 23:38:07 +0000 (23:38 +0000)]
Fix log1p missing underflows (bug 16339).
Similar to various other bugs in this area, some log1p implementations
do not raise the underflow exception for subnormal arguments, when the
result is tiny and inexact. This patch forces the exception in a
similar way to previous fixes. (The ldbl-128ibm implementation
doesn't currently need any change as it already generates this
exception, albeit through code that would generate spurious exceptions
in other cases; special code for this issue will only be needed there
when fixing the spurious exceptions.)
Tested for x86_64, x86, powerpc and mips64.
[BZ #16339]
* sysdeps/i386/fpu/s_log1p.S (dbl_min): New object.
(__log1p): Force underflow exception for results with small
absolute value.
* sysdeps/i386/fpu/s_log1pf.S (flt_min): New object.
(__log1pf): Force underflow exception for results with small
absolute value.
* sysdeps/ieee754/dbl-64/s_log1p.c: Include <float.h>.
(__log1p): Force underflow exception for results with small
absolute value.
* sysdeps/ieee754/flt-32/s_log1pf.c: Include <float.h>.
(__log1pf): Force underflow exception for results with small
absolute value.
* sysdeps/ieee754/ldbl-128/s_log1pl.c: Include <float.h>.
(__log1pl): Force underflow exception for results with small
absolute value.
* math/auto-libm-test-in: Do not allow missing underflow
exceptions from log1p.
* math/auto-libm-test-out: Regenerated.
Adhemerval Zanella [Thu, 14 May 2015 17:59:23 +0000 (14:59 -0300)]
Fix non-portable echo usage in sysdeps/unix/make-syscalls.sh
This patch changes the way make-syscall-sh script uses echo to follow
POSIX spec.
Andrew Senkevich [Thu, 14 May 2015 14:28:06 +0000 (17:28 +0300)]
This is update for configure, build and install of vector math library.
Installation of libm.so as linker script only in case of libmvec.so build.
2015-05-14 Andrew Senkevich <andrew.n.senkevich@gmail.com>
* Makeconfig (rpath-dirs, all-subdirs): Added mathvec folder.
(libmvec): New variable.
* configure.ac: Added option for mathvec build.
* configure: Regenerated.
* mathvec/Depend: New file.
* mathvec/Makefile: New file.
* shlib-versions: Added libmvec.
* math/Makefile: Added rule for libm.so installation.
Andrew Senkevich [Thu, 14 May 2015 14:26:49 +0000 (17:26 +0300)]
This patch adds infrastructure for addition of SIMD
declarations for math functions in math.h. Added new headers math-vector.h
(only generic version for now) and libm-simd-decl-stubs.h with empty
definitions required for proper unfolding of new macros __MATHCALL_VEC which
will be used for declaration of vector math functions.
2015-05-14 Andrew Senkevich <andrew.senkevich@intel.com>
* bits/math-vector.h: New file.
* bits/libm-simd-decl-stubs.h: New header.
* math/Makefile (headers): Added new header libm-simd-decl-stubs.h.
* math/math.h (__MATHCALL_VEC): New macro.
Andrew Senkevich [Thu, 14 May 2015 14:14:45 +0000 (17:14 +0300)]
Last part of changes regarding to libm-test.inc: addition
of method for separation which exactly testing function needed to run with
help of generated during make check header with series of conditional
definitions.
2015-05-14 Andrew Senkevich <andrew.senkevich@intel.com>
* math/gen-libm-have-vector-test.sh: Script generates series of macros
for conditions in testing functions.
* math/Makefile: Added call of libm-have-vector-test.sh.
* math/libm-test.inc (HAVE_VECTOR): New macros.
Andrew Senkevich [Thu, 14 May 2015 14:11:50 +0000 (17:11 +0300)]
Refactoring of START for conditions in individual tests
and addition of macros used for runtime architecture check.
2015-05-14 Andrew Senkevich <andrew.senkevich@intel.com>
* math/libm-test.inc: START refactored.
* math/test-double.c (TEST_MATHVEC): Add define.
* math/test-float.c: Likewise.
* math/test-idouble.c: Likewise.
* math/test-ifloat.c: Likewise.
* math/test-ildoubl.c: Likewise.
* math/test-ldouble.c: Likewise.
* sysdeps/generic/math-tests-arch.h (INIT_ARCH_EXT, CHECK_ARCH_EXT):
New helper macros for runtime architecture check.
Andrew Senkevich [Thu, 14 May 2015 13:59:57 +0000 (16:59 +0300)]
This is the beginning of series of patches with addition
of vector math functions infrastructure and several x86_64 implementations.
This patch is preparatory change in libm-test.c - splitting of macros which
form name of tested functions for ability to use separate name for tested
functions and for functions used in test suite infrastructure.
2015-05-14 Andrew Senkevich <andrew.senkevich@intel.com>
* math/test-double.c (FUNC_TEST): New macro.
* math/test-float.c: Likewise.
* math/test-idouble.c: Likewise.
* math/test-ifloat.c: Likewise.
* math/test-ildoubl.c: Likewise.
* math/test-ldouble.c: Likewise.
* math/libm-test.inc: Use FUNC_TEST for name of tested functions.
Roland McGrath [Wed, 13 May 2015 19:50:25 +0000 (12:50 -0700)]
NaCl: Make fdopendir skip fcntl check.
Roland McGrath [Wed, 13 May 2015 19:39:01 +0000 (12:39 -0700)]
Nit fixes in last change.
Roland McGrath [Wed, 13 May 2015 19:34:11 +0000 (12:34 -0700)]
Refactor scandir/scandirat to use common tail.
Roland McGrath [Wed, 13 May 2015 19:33:56 +0000 (12:33 -0700)]
Break __scandir_cancel_handler out into its own file.
Roland McGrath [Wed, 13 May 2015 19:33:41 +0000 (12:33 -0700)]
Add a test case for scandir.
H.J. Lu [Wed, 13 May 2015 16:11:12 +0000 (09:11 -0700)]
Remove a trailing `\' in make-syscalls.sh
[BZ #18409]
* sysdeps/unix/make-syscalls.sh: Remove a trailing `\'.
Szabolcs Nagy [Wed, 13 May 2015 14:46:24 +0000 (15:46 +0100)]
[AArch64] Fix inline asm clobber list in tls-macros.h
Siddhesh Poyarekar [Wed, 13 May 2015 07:24:22 +0000 (12:54 +0530)]
Minor changelog fixup
Leonhard Holz [Tue, 12 May 2015 17:22:14 +0000 (22:52 +0530)]
Add strcoll benchmark
Leonhard Holz [Tue, 12 May 2015 15:02:50 +0000 (20:32 +0530)]
Split locale generation snippet into a separate file
This patch prepares for the strcoll benchmark by moving the makefile
code for generating the locale files into a standalone snippet that
can be used elsewhere.
Ondřej Bílka [Tue, 18 Mar 2014 10:01:38 +0000 (11:01 +0100)]
Use strspn/strcspn/strpbrk ifunc in internal calls.
To make a strtok faster and improve performance in general we need to do one
additional change.
A comment:
/* It doesn't make sense to send libc-internal strcspn calls through a PLT.
The speedup we get from using SSE4.2 instruction is likely eaten away
by the indirect call in the PLT. */
Does not make sense at all because nobody bothered to check it. Gap
between these implementations is quite big, when haystack is empty a
sse2 is around 40 cycles slower because it needs to populate a lookup
table and difference only increases with size. That is much bigger than
plt slowdown which is few cycles.
Even benchtest show a gap which also may be reverse by branch
misprediction but my internal benchmark shown.
simple_strspn stupid_strspn __strspn_sse42 __strspn_sse2
Length 0, alignment 0, acc len 6: 18.6562 35.2344 17.0469 61.6719
Length 6, alignment 0, acc len 6: 59.5469 72.5781 16.4219 73.625
This patch also handles strpbrk which is implemented by including a
x86_64/multiarch/strcspn.S file.
* sysdeps/x86_64/multiarch/strspn.S: Remove plt indirection.
* sysdeps/x86_64/multiarch/strcspn.S: Likewise.
Roland McGrath [Tue, 12 May 2015 17:54:47 +0000 (10:54 -0700)]
NaCl: Provide non-default values for uname.
Joseph Myers [Tue, 12 May 2015 17:09:49 +0000 (17:09 +0000)]
Fix linknamespace test handling of architecture-specific st_other.
For mips16, some of the linknamespace tests were failing because
[MIPS16] annotations in readelf output were wrongly interpreted as
falling in the symbol index field, meaning symbol index values were
wrongly interpreted as symbol names and such names as 1 and 2 then
resulted in namespace test failures.
This patch fixes this by removing the annotations for such
architecture-specific st_other bits before splitting the readelf
output into fields. Tested for x86_64 and mips16.
* conform/linknamespace.pl (list_syms): Remove \[.*?\] before
splitting into fields.
Leonhard Holz [Tue, 12 May 2015 09:37:52 +0000 (11:37 +0200)]
Improve strcoll with strdiff.
This patch improves strcoll hot case by finding first byte that
mismatches. That is in likely case enough to determine comparison
result.
Joseph Myers [Mon, 11 May 2015 22:58:10 +0000 (22:58 +0000)]
Fix mips16 __fpu_control static linking (bug 18397).
Programs are supposed to be able to define the __fpu_control variable,
overriding the library's version to cause the floating-point control
word to be set to the chosen value at startup.
This is broken for mips16 for static linking because the library's
__fpu_control variable is in the same object file as the helper
functions used by fpu_control.h for mips16, so test-fpucw-ieee-static
fails to link with multiple definitions of __fpu_control.
This patch fixes this by putting the helpers in a separate file rather
than overriding fpu_control.c. Tested for mips16 that this fixes the
link failure and the ABI tests still pass.
[BZ #18397]
* sysdeps/mips/mips32/fpu/fpu_control.c: Move to ....
* sysdeps/mips/mips32/fpu/fpucw-helpers.c: ... here. Include
<fpu_control.h> instead of <math/fpu_control.c>.
* sysdeps/mips/mips32/fpu/Makefile: New file.
Andreas Schwab [Wed, 25 Mar 2015 15:35:46 +0000 (16:35 +0100)]
Separate internal state between getXXent and getXXbyYY NSS calls (bug 18007)
Stefan Liebler [Mon, 11 May 2015 07:15:36 +0000 (09:15 +0200)]
Adjust tst-strfmon1 after da_DK locale change.
This patch adjusts the expected currency symbol kr to kr. after commit
"Update currency_symbol in da_DK"
(
92566b4922934676da1643bf496dc982791d54d0) which changed it.
* tst-strfmon1.c (tests): Update expected currency symbol.
Roland McGrath [Fri, 8 May 2015 20:06:41 +0000 (13:06 -0700)]
NaCl: Implement gethostname.
Joseph Myers [Fri, 8 May 2015 17:55:11 +0000 (17:55 +0000)]
Add more tests of csqrt, lgamma, log10, sinh.
This patch adds more randomly-generated tests of various libm
functions that are observed to increase ulps on x86_64.
Tested for x86_64 and x86 and ulps updated accordingly.
* math/auto-libm-test-in: Add more tests of csqrt, lgamma, log10
and sinh.
* math/auto-libm-test-out: Regenerated.
* sysdeps/i386/fpu/libm-test-ulps: Update.
* sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
Carlos O'Donell [Fri, 8 May 2015 15:20:32 +0000 (11:20 -0400)]
Bug 18125: Call exit after last linked context.
There appears to be a discrepancy among the implementations
of setcontext with regards to the function called once the last
linked-to context has finished executing via setcontext.
The POSIX standard says:
~~~
If the uc_link member of the ucontext_t structure pointed to by
the ucp argument is equal to 0, then this context is the main
context, and the thread will exit when this context returns.
~~~
It says "exit" not "exit immediately" nor "exit without running
functions registered with atexit or on_exit."
Therefore the AArch64, ARM, hppa and NIOS II implementations are
wrong and no test detects it.
It is questionable if this should even be fixed or just documented
that the above 4 targets are wrong. The functions are deprecated
and nobody should be using them, but at the same time it silly to
have cross-target differences that make it hard to port old
applications from say x86_64 to AArch64.
Therefore I will ix the 4 arches, and checkin a regression
test to prevent it from changing again.
https://sourceware.org/ml/libc-alpha/2015-03/msg00720.html
Siddhesh Poyarekar [Thu, 7 May 2015 06:28:40 +0000 (11:58 +0530)]
Update NEWS
Christian Schmidt [Thu, 7 May 2015 06:26:56 +0000 (11:56 +0530)]
Update currency_symbol in da_DK
Roland McGrath [Wed, 6 May 2015 20:32:18 +0000 (13:32 -0700)]
BZ#18383: Add test case for large alignment in TLS blocks.
Roland McGrath [Wed, 6 May 2015 19:55:58 +0000 (12:55 -0700)]
NaCl: Fix elf_loader file name in nacl-test-wrapper.sh
Joseph Myers [Wed, 6 May 2015 17:30:18 +0000 (17:30 +0000)]
Add more tests of acosh, atanh, cos, csqrt, erfc, sin, sincos.
This patch adds more randomly-generated tests of various libm
functions that are observed to increase ulps on x86_64.
Tested for x86_64 and x86 and ulps updated accordingly.
* math/auto-libm-test-in: Add more tests of acosh, atanh, cos,
csqrt, erfc, sin and sincos.
* math/auto-libm-test-out: Regenerated.
* sysdeps/i386/fpu/libm-test-ulps: Update.
* sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
Wilco Dijkstra [Wed, 6 May 2015 13:00:15 +0000 (13:00 +0000)]
2015-05-06 Szabolcs Nagy <szabolcs.nagy@arm.com>
* sysdeps/aarch64/libm-test-ulps: Update.
Joseph Myers [Tue, 5 May 2015 22:59:41 +0000 (22:59 +0000)]
Add further tests of libm functions.
This patch adds more randomly-generated tests of various libm
functions that are observed to increase ulps on x86_64. (This process
must eventually converge, when my random test generation stops finding
inputs that increase the listed ulps, except maybe for any cases
uncovered where the errors exceed the maximum allowed 9ulp error and
so indicate actual libm bugs needing fixing.)
Tested for x86_64 and x86 and ulps updated accordingly.
* math/auto-libm-test-in: Add more tests of acosh, atanh, clog,
clog10, csqrt, erfc, exp2, expm1, log10, log2 and sinh.
* math/auto-libm-test-out: Regenerated.
* sysdeps/i386/fpu/libm-test-ulps: Update.
* sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
Daniel Marjamäki [Tue, 5 May 2015 15:24:38 +0000 (17:24 +0200)]
Add __nonnull attribute to wcscpy and wcsncpy [BZ#18265]
Florian Weimer [Fri, 24 Apr 2015 11:50:18 +0000 (13:50 +0200)]
__ASSUME_FALLOCATE is always true on 32-bit architectures
This means we can clean up the generic code a bit. The 64-bit
variant still needs to support !__ASSUME_FALLOCATE for alpha.
Florian Weimer [Fri, 24 Apr 2015 11:26:09 +0000 (13:26 +0200)]
i386: Remove fallocate, fallocate64, posix_fallocate, posix_fallocate64
With 6-argument system call support, the generic Linux implementations of
these system calls work, and there is no need for i386-specific versions.
Joseph Myers [Sat, 2 May 2015 21:06:33 +0000 (21:06 +0000)]
Add more tests of libm functions.
This patch adds more randomly-generated tests of various libm
functions that are observed to increase ulps on x86_64.
Tested for x86_64 and x86 and ulps updated accordingly.
* math/auto-libm-test-in: Add more tests of atan, clog, clog10,
cos, csqrt, erf, erfc, exp2, lgamma, log1p, sin, sincos, tanh and
tgamma.
* math/auto-libm-test-out: Regenerated.
* sysdeps/i386/fpu/libm-test-ulps: Update.
* sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
Joseph Myers [Fri, 1 May 2015 23:15:07 +0000 (23:15 +0000)]
Add more tests of tgamma.
This patch adds some randomly-generated tests of tgamma that are
observed to increase ulps on x86_64.
Tested for x86_64 and x86 and ulps updated accordingly.
* math/auto-libm-test-in: Add more tests of tgamma.
* math/auto-libm-test-out: Regenerated.
* sysdeps/i386/fpu/libm-test-ulps: Update.
* sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
Joseph Myers [Fri, 1 May 2015 23:06:44 +0000 (23:06 +0000)]
Add more tests of tanh.
This patch adds some randomly-generated tests of tanh that are
observed to increase ulps on x86_64.
Tested for x86_64 and x86 and ulps updated accordingly.
* math/auto-libm-test-in: Add more tests of tanh.
* math/auto-libm-test-out: Regenerated.
* sysdeps/i386/fpu/libm-test-ulps: Update.
* sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
Joseph Myers [Fri, 1 May 2015 22:54:39 +0000 (22:54 +0000)]
Add more tests of tan.
This patch adds some randomly-generated tests of tan that are observed
to increase ulps on x86_64.
Tested for x86_64 and x86 and ulps updated accordingly.
* math/auto-libm-test-in: Add more tests of tan.
* math/auto-libm-test-out: Regenerated.
* sysdeps/i386/fpu/libm-test-ulps: Update.
* sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
Joseph Myers [Fri, 1 May 2015 22:41:00 +0000 (22:41 +0000)]
Add more tests of cos, sin, sincos.
This patch adds some randomly-generated tests of cos, sin and sincos
that are observed to increase ulps on x86_64.
Tested for x86_64 and x86 and ulps updated accordingly.
* math/auto-libm-test-in: Add more tests of cos, sin and sincos.
* math/auto-libm-test-out: Regenerated.
* sysdeps/i386/fpu/libm-test-ulps: Update.
* sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
Joseph Myers [Fri, 1 May 2015 22:31:24 +0000 (22:31 +0000)]
Add another test of pow.
This patch adds a randomly-generated test of pow that is observed to
increase ulps on x86_64.
Tested for x86_64 and x86 and ulps updated accordingly.
* math/auto-libm-test-in: Add another test of pow.
* math/auto-libm-test-out: Regenerated.
* sysdeps/x86_64/fpu/libm-test-ulps: Update.
Joseph Myers [Fri, 1 May 2015 22:17:19 +0000 (22:17 +0000)]
Add more tests of lgamma.
This patch adds some randomly-generated tests of lgamma that are
observed to increase ulps on x86_64.
Tested for x86_64 and x86 and ulps updated accordingly.
* math/auto-libm-test-in: Add more tests of lgamma.
* math/auto-libm-test-out: Regenerated.
* sysdeps/i386/fpu/libm-test-ulps: Update.
* sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
Joseph Myers [Fri, 1 May 2015 21:08:37 +0000 (21:08 +0000)]
Add more tests of log, log10, log1p, log2.
This patch adds some randomly-generated tests of log, log10, log1p and
log2 that are observed to increase ulps on x86_64.
Tested for x86_64 and x86 and ulps updated accordingly.
* math/auto-libm-test-in: Add more tests of log, log10, log2 and
log1p.
* math/auto-libm-test-out: Regenerated.
* sysdeps/i386/fpu/libm-test-ulps: Update.
* sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
Mark Wielaard [Fri, 1 May 2015 14:21:55 +0000 (16:21 +0200)]
elf.h: Add section compression constants and structures.
Add SHF_COMPRESSED section flag, Elf32_Chdr and Elf64_Chdr structs and
ELFCOMPRESS constants to elf/elf.h.
Joseph Myers [Fri, 1 May 2015 20:33:04 +0000 (20:33 +0000)]
Add more tests of exp, exp10, exp2, expm1.
This patch adds some randomly-generated tests of exp, exp10, exp2 and
expm1 that are observed to increase ulps on x86_64.
Tested for x86_64 and x86 and ulps updated accordingly.
* math/auto-libm-test-in: Add more tests of exp, exp10, exp2 and
expm1.
* math/auto-libm-test-out: Regenerated.
* sysdeps/i386/fpu/libm-test-ulps: Update.
* sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
Joseph Myers [Fri, 1 May 2015 17:49:44 +0000 (17:49 +0000)]
Add more tests of erf, erfc.
This patch adds some randomly-generated tests of erf and erfc that are
observed to increase ulps on x86_64.
Tested for x86_64 and x86 and ulps updated accordingly.
* math/auto-libm-test-in: Add more tests of erf and erfc.
* math/auto-libm-test-out: Regenerated.
* sysdeps/i386/fpu/libm-test-ulps: Update.
* sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
Szabolcs Nagy [Fri, 1 May 2015 12:58:55 +0000 (13:58 +0100)]
[AArch64] Fix the big endian loader name.
Joseph Myers [Thu, 30 Apr 2015 22:51:29 +0000 (22:51 +0000)]
Add more tests of csqrt.
This patch adds some randomly-generated tests of csqrt that are
observed to increase ulps on x86_64.
Tested for x86_64 and x86 and ulps updated accordingly.
* math/auto-libm-test-in: Add more tests of csqrt.
* math/auto-libm-test-out: Regenerated.
* sysdeps/i386/fpu/libm-test-ulps: Update.
* sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
Joseph Myers [Thu, 30 Apr 2015 22:32:08 +0000 (22:32 +0000)]
Add further tests of cosh and sinh.
This patch adds some further randomly-generated tests of cosh and sinh
that are observed to increase ulps on x86_64.
Tested for x86_64 and x86 and ulps updated accordingly.
* math/auto-libm-test-in: Add more tests of cosh and sinh.
* math/auto-libm-test-out: Regenerated.
* sysdeps/i386/fpu/libm-test-ulps: Update.
* sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
Joseph Myers [Thu, 30 Apr 2015 16:25:46 +0000 (16:25 +0000)]
Remove MIPS version of waitid.c.
Since glibc is no longer built with -Winline, a special MIPS version
of waitid.c to disable -Winline is no longer needed, and this patch
removes it. Tested that glibc does indeed build with the patch
applied.
* sysdeps/unix/sysv/linux/mips/mips32/waitid.c: Remove file.
Roland McGrath [Wed, 29 Apr 2015 22:34:34 +0000 (15:34 -0700)]
NaCl: Change clock_t to long int.
Roland McGrath [Wed, 29 Apr 2015 21:43:41 +0000 (14:43 -0700)]
NaCl: Fix symbol names for euidaccess.
Roland McGrath [Wed, 29 Apr 2015 20:34:32 +0000 (13:34 -0700)]
NaCl: Make __suseconds_t be long int rather than int32_t.
Florian Weimer [Wed, 29 Apr 2015 13:33:41 +0000 (15:33 +0200)]
Florian Weimer [Wed, 29 Apr 2015 12:41:25 +0000 (14:41 +0200)]
CVE-2014-8121: Do not close NSS files database during iteration [BZ #18007]
Robin Hack discovered Samba would enter an infinite loop processing
certain quota-related requests. We eventually tracked this down to a
glibc issue.
Running a (simplified) test case under strace shows that /etc/passwd
is continuously opened and closed:
…
open("/etc/passwd", O_RDONLY|O_CLOEXEC) = 3
lseek(3, 0, SEEK_CUR) = 0
read(3, "root:x:0:0:root:/root:/bin/bash\n"..., 4096) = 2717
lseek(3, 2717, SEEK_SET) = 2717
close(3) = 0
open("/etc/passwd", O_RDONLY|O_CLOEXEC) = 3
lseek(3, 0, SEEK_CUR) = 0
lseek(3, 0, SEEK_SET) = 0
read(3, "root:x:0:0:root:/root:/bin/bash\n"..., 4096) = 2717
lseek(3, 2717, SEEK_SET) = 2717
close(3) = 0
open("/etc/passwd", O_RDONLY|O_CLOEXEC) = 3
lseek(3, 0, SEEK_CUR) = 0
…
The lookup function implementation in
nss/nss_files/files-XXX.c:DB_LOOKUP has code to prevent that. It is
supposed skip closing the input file if it was already open.
/* Reset file pointer to beginning or open file. */ \
status = internal_setent (keep_stream); \
\
if (status == NSS_STATUS_SUCCESS) \
{ \
/* Tell getent function that we have repositioned the file pointer. */ \
last_use = getby; \
\
while ((status = internal_getent (result, buffer, buflen, errnop \
H_ERRNO_ARG EXTRA_ARGS_VALUE)) \
== NSS_STATUS_SUCCESS) \
{ break_if_match } \
\
if (! keep_stream) \
internal_endent (); \
} \
keep_stream is initialized from the stayopen flag in internal_setent.
internal_setent is called from the set*ent implementation as:
status = internal_setent (stayopen);
However, for non-host database, this flag is always 0, per the
STAYOPEN magic in nss/getXXent_r.c.
Thus, the fix is this:
- status = internal_setent (stayopen);
+ status = internal_setent (1);
This is not a behavioral change even for the hosts database (where the
application can specify the stayopen flag) because with a call to
sethostent(0), the file handle is still not closed in the
implementation of gethostent.
Joseph Myers [Tue, 28 Apr 2015 17:27:02 +0000 (17:27 +0000)]
Fix ldbl-128 roundl for exponents in [31, 47] (bug 18346).
The implementation of roundl for ldbl-128 involves undefined behavior
for arguments with exponents from 31 to 47 inclusive, from the shift:
u_int64_t i = -1ULL >> (j0 - 48);
For example, on mips64, this means roundl (0xffffffffffff.8p0L)
wrongly returns its argument, which is not an integer. A condition
checking for exponents < 31 should actually be checking for exponents
< 48, and this patch makes it do so. (That condition is for whether
the bit representing 0.5 is in the high 64-bit half of the
floating-point number. The value 31 might have arisen from an
incorrect conversion of the ldbl-96 version to handle ldbl-128.)
This was originally reported as a GCC libquadmath bug
<https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65757>.
Tested for mips64; also tested for x86_64 and x86 to make sure the new
tests pass there.
[BZ #18346]
* sysdeps/ieee754/ldbl-128/s_roundl.c (__roundl): Handle all
exponents less than 48 as cases where high part of mantissa needs
examining to determine whether argument is integral.
* math/libm-test.inc (round_test_data): Add more tests.
Mark Wielaard [Tue, 28 Apr 2015 11:56:15 +0000 (13:56 +0200)]
elf.h SHF_EXCLUDE signed int 31 bit shift triggers undefined behaviour.
Any use of SHF_EXCLUDE in code that tries to check it against sh_flags
will trigger undefined behaviour because it is defined as a 31 bit shift
against an signed integer. Fix by explicitly using an unsigned int.
David S. Miller [Mon, 27 Apr 2015 21:53:13 +0000 (14:53 -0700)]
Update sparc localplt.data
* sysdeps/unix/sysv/linux/sparc/sparc32/localplt.data: Remove
__tls_get_addr.
* sysdeps/unix/sysv/linux/sparc/sparc64/localplt.data: Likewise.
H.J. Lu [Mon, 27 Apr 2015 16:57:51 +0000 (09:57 -0700)]
Check tzspec_len == 0 in __tzfile_read
[BZ#18333]
* time/tzset.c (__tzfile_read): Check tzspec_len == 0.
Florian Weimer [Mon, 27 Apr 2015 13:41:03 +0000 (15:41 +0200)]
test-skeleton: Support temporary files without memory leaks [BZ#18333]
add_temp_file now makes a copy which is freed by delete_temp_files.
Callers to create_temp_file can now free the returned file name to
avoid the memory leak. These changes do not affect the leak behavior
of existing code.
Also address a NULL pointer derefence in tzset after a memoru allocation
failure, found during testing.
Florian Weimer [Fri, 24 Apr 2015 11:18:48 +0000 (13:18 +0200)]
posix_fallocate, posix_fallocate64 stub: Do not set errno
These functions return an error code.
Roland McGrath [Fri, 24 Apr 2015 17:51:49 +0000 (10:51 -0700)]
ARM: Define PI_STATIC_AND_HIDDEN.
Florian Weimer [Fri, 24 Apr 2015 15:34:47 +0000 (17:34 +0200)]
Make time zone file parser more robust [BZ #17715]