external/glibc.git
9 years agoAdd more tests of tgamma.
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.

9 years agoAdd more tests of tanh.
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.

9 years agoAdd more tests of tan.
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.

9 years agoAdd more tests of cos, sin, sincos.
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.

9 years agoAdd another test of pow.
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.

9 years agoAdd more tests of lgamma.
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.

9 years agoAdd more tests of log, log10, log1p, log2.
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.

9 years agoelf.h: Add section compression constants and structures.
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.

9 years agoAdd more tests of exp, exp10, exp2, expm1.
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.

9 years agoAdd more tests of erf, erfc.
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.

9 years ago[AArch64] Fix the big endian loader name.
Szabolcs Nagy [Fri, 1 May 2015 12:58:55 +0000 (13:58 +0100)]
[AArch64] Fix the big endian loader name.

9 years agoAdd more tests of csqrt.
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.

9 years agoAdd further tests of cosh and sinh.
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.

9 years agoRemove MIPS version of waitid.c.
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.

9 years agoNaCl: Change clock_t to long int.
Roland McGrath [Wed, 29 Apr 2015 22:34:34 +0000 (15:34 -0700)]
NaCl: Change clock_t to long int.

9 years agoNaCl: Fix symbol names for euidaccess.
Roland McGrath [Wed, 29 Apr 2015 21:43:41 +0000 (14:43 -0700)]
NaCl: Fix symbol names for euidaccess.

9 years agoNaCl: Make __suseconds_t be long int rather than int32_t.
Roland McGrath [Wed, 29 Apr 2015 20:34:32 +0000 (13:34 -0700)]
NaCl: Make __suseconds_t be long int rather than int32_t.

9 years agoNEWS: BZ#18319 was fixed in commit ed159672eb3cd650a32b7e5cb4d5ec1fe0e63802
Florian Weimer [Wed, 29 Apr 2015 13:33:41 +0000 (15:33 +0200)]
NEWS: BZ#18319 was fixed in commit ed159672eb3cd650a32b7e5cb4d5ec1fe0e63802

9 years agoCVE-2014-8121: Do not close NSS files database during iteration [BZ #18007]
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.

9 years agoFix ldbl-128 roundl for exponents in [31, 47] (bug 18346).
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.

9 years agoelf.h SHF_EXCLUDE signed int 31 bit shift triggers undefined behaviour.
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.

9 years agoUpdate sparc localplt.data
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.

9 years agoCheck tzspec_len == 0 in __tzfile_read
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.

9 years agotest-skeleton: Support temporary files without memory leaks [BZ#18333]
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.

9 years agoposix_fallocate, posix_fallocate64 stub: Do not set errno
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.

9 years agoARM: Define PI_STATIC_AND_HIDDEN.
Roland McGrath [Fri, 24 Apr 2015 17:51:49 +0000 (10:51 -0700)]
ARM: Define PI_STATIC_AND_HIDDEN.

9 years agoMake time zone file parser more robust [BZ #17715]
Florian Weimer [Fri, 24 Apr 2015 15:34:47 +0000 (17:34 +0200)]
Make time zone file parser more robust [BZ #17715]

9 years agoDo not build with -Winline
Florian Weimer [Fri, 24 Apr 2015 09:10:24 +0000 (11:10 +0200)]
Do not build with -Winline

-Winline causes architecture- and optimization-dependent build failures
due to -Werror.  -Winline warns about inlining decisions based on
branch hints, in effect preventing the use of inline functions in
header files (because they might be called on unlikely branches, leading
to a decision not to inline).

The option was apparently added to the glibc build at a time when GCC
did not support the always_inline attribute.  With current GCC versions,
inlining failure for functions declared always_inline will receive a
warning under -Wattributes, which is enabled by default, so -Winline
appears unnecessary.

9 years agoS/390: Regenerate ULPs
Stefan Liebler [Fri, 24 Apr 2015 11:36:23 +0000 (13:36 +0200)]
S/390: Regenerate ULPs

9 years agoS/390: Get cache information via sysconf
Stefan Liebler [Fri, 24 Apr 2015 11:34:17 +0000 (13:34 +0200)]
S/390: Get cache information via sysconf

This patch adds support to query cache information on s390
via sysconf() function - e.g. with _SC_LEVEL1_ICACHE_SIZE.
The attributes size, linesize and assoc can be queried
for cache level 1 - 4 via "extract cpu attribute" instruction,
which was first available with z10.

* NEWS: Mention sysconf() cache information support for s390.
* sysdeps/unix/sysv/linux/s390/sysconf.c: New File.

9 years agoUse __copysign rather than copysign.
Wilco Dijkstra [Wed, 22 Apr 2015 12:07:56 +0000 (12:07 +0000)]
Use __copysign rather than copysign.

9 years agoCVE-2015-1781: resolv/nss_dns/dns-host.c buffer overflow [BZ#18287]
Arjun Shankar [Tue, 21 Apr 2015 12:06:31 +0000 (14:06 +0200)]
CVE-2015-1781: resolv/nss_dns/dns-host.c buffer overflow [BZ#18287]

9 years agolibc-vdso.h place consolidation
Adhemerval Zanella [Mon, 13 Apr 2015 19:38:16 +0000 (16:38 -0300)]
libc-vdso.h place consolidation

This patch moves the libc-vdso.h internal header from bits folder to
default architecture one and also corrects the remaning includes in
the files.

9 years agoBetter fix for setenv (..., NULL, ...)
Paul Eggert [Sun, 19 Apr 2015 08:06:33 +0000 (01:06 -0700)]
Better fix for setenv (..., NULL, ...)

* stdlib/setenv.c (__add_to_environ):
Dump core quickly if setenv (..., NULL, ...) is called.
This time, do it the right way, and pacify GCC with a pragma.

9 years agoAvoid confusing compiler with dynamically impossible statically invalid dereference...
Roland McGrath [Fri, 17 Apr 2015 21:29:40 +0000 (14:29 -0700)]
Avoid confusing compiler with dynamically impossible statically invalid dereference in _dl_close_worker.

9 years agoFuller check for invalid NSID in _dl_open.
Roland McGrath [Fri, 17 Apr 2015 19:11:58 +0000 (12:11 -0700)]
Fuller check for invalid NSID in _dl_open.

9 years agoSparc memchr/memcmp/strncmp fixes from Il'ya Malakhov.
David S. Miller [Fri, 17 Apr 2015 02:40:31 +0000 (19:40 -0700)]
Sparc memchr/memcmp/strncmp fixes from Il'ya Malakhov.

[BZ #17825]
* sysdeps/sparc/sparc64/memchr.S: Fix signedness handling of length.
* sysdeps/sparc/sparc64/memcmp.S: Likewise.
* sysdeps/sparc/sparc64/strncmp.S: Likewise.

9 years agoAdd arm-nacl port.
Roland McGrath [Fri, 17 Apr 2015 16:02:19 +0000 (09:02 -0700)]
Add arm-nacl port.

9 years agoConvert sparc over to lowlevellock-futex.h
David S. Miller [Thu, 16 Apr 2015 20:05:41 +0000 (13:05 -0700)]
Convert sparc over to lowlevellock-futex.h

* sysdeps/unix/sysv/linux/sparc/lowlevellock.h: Make use of
lowlevellock-futex.h

9 years agotile: Enable PI_STATIC_AND_HIDDEN
Chris Metcalf [Thu, 16 Apr 2015 13:40:21 +0000 (09:40 -0400)]
tile: Enable PI_STATIC_AND_HIDDEN

This does make ld.so very slightly larger (0.3%) and doesn't seem to
actually improve performance; in fact, my limited testing suggested a
slight (0.1%) performance decrease (running fork/exec of a no-op program
in a loop), but I didn't do enough testing to establish statistical
significance.

However, Roland agrees that it makes sense to switch tile to using
this path, since it's the more standard way.

9 years agopowerpc: Fix __wcschr static build
Adhemerval Zanella [Wed, 25 Feb 2015 19:22:10 +0000 (16:22 -0300)]
powerpc: Fix __wcschr static build

This patch fix the static build for strftime, which uses __wcschr.
Current powerpc32 implementation defines the __wcschr be an alias to
__wcschr_ppc32 and current implementation misses the correct alias for
static build.

It also changes the default wcschr.c logic so a IFUNC implementation
should just define WCSCHR and undefine the required alias/internal
definitions.

9 years agoRebuilt fresh sparc ULPS to get rid of removed tests.
David S. Miller [Wed, 15 Apr 2015 16:42:54 +0000 (09:42 -0700)]
Rebuilt fresh sparc ULPS to get rid of removed tests.

* sysdeps/sparc/fpu/libm-test-ulps: Regenerate from scratch.

9 years agoUse correct signedness in wcsncmp
Stefan Liebler [Mon, 13 Apr 2015 19:23:10 +0000 (21:23 +0200)]
Use correct signedness in wcsncmp

[BZ #18206]
* wcsmbs/wcsncmp.c (wcsncmp): Compare as wchar_t, not wint_t.
  Use signed comparision instead of substraction to avoid
  overflow bug.
* localedata/tests-mbwc/tst_wcsncmp.c (tst_wcsncmp):
  Take the sign of ret.
* localedata/tests-mbwc/dat_wcsncmp.c (tst_wcsncmp_loc):
  Do not expect precise return values. Only the sign matters.
* wcsmbs/Makefile (strop-tests): Add wcsncmp.
* wcsmbs/test-wcsncmp.c: New File.
* string/test-strncmp.c: Add wcsncmp support.

9 years agoSet errno for log1p on pole/domain error.
Stefan Liebler [Mon, 13 Apr 2015 19:16:56 +0000 (21:16 +0200)]
Set errno for log1p on pole/domain error.

According to bug 6792, errno is not set to ERANGE/EDOM
by calling log1p/log1pf/log1pl with x = -1 or x < -1.

This patch adds a wrapper which sets errno in those cases
and returns the value of the existing __log1p function.
The log1p is now an alias to the wrapper function
instead of __log1p.

The files in sysdeps are reflecting these changes.
The ia64 implementation sets errno by itself,
thus the wrapper-file is empty.

The libm-test is adjusted for log1p-tests to check errno.

[BZ #6792]
* math/w_log1p.c: New file.
* math/w_log1pf.c: Likewise.
* math/w_log1pl.c: Likewise.
* math/Makefile (libm-calls): Add w_log1p.
* math/s_log1pl.c (log1pl): Remove weak_alias.
* sysdeps/i386/fpu/s_log1p.S (log1p): Likewise.
* sysdeps/i386/fpu/s_log1pf.S (log1pf): Likewise.
* sysdeps/i386/fpu/s_log1pl.S (log1pl): Likewise.
* sysdeps/x86_64/fpu/s_log1pl.S (log1pl): Likewise.
* sysdeps/ieee754/dbl-64/s_log1p.c (log1p): Likewise.
[NO_LONG_DOUBLE] (log1pl): Likewise.
* sysdeps/ieee754/flt-32/s_log1pf.c (log1pf): Likewise.
* sysdeps/ieee754/ldbl-128/s_log1pl.c (log1pl): Likewise.
* sysdeps/ieee754/ldbl-64-128/s_log1pl.c
(log1p): Remove long_double_symbol.
* sysdeps/ieee754/ldbl-128ibm/s_log1pl.c (log1pl): Likewise.
* sysdeps/ieee754/ldbl-64-128/w_log1pl.c: New file.
* sysdeps/ieee754/ldbl-128ibm/w_log1pl.c: Likewise.
* sysdeps/m68k/m680x0/fpu/s_log1p.c: Define empty weak_alias to
remove weak_alias for corresponding log1p function.
* sysdeps/m68k/m680x0/fpu/s_log1pf.c: Likewise.
* sysdeps/m68k/m680x0/fpu/s_log1pl.c: Likewise.
* sysdeps/ia64/fpu/w_log1p.c: New file.
* sysdeps/ia64/fpu/w_log1pf.c: Likewise.
* sysdeps/ia64/fpu/w_log1pl.c: Likewise.
* math/libm-test.inc (log1p_test_data): Add errno expectations.

9 years agoUpdate tst_mbrlen/tst_mbrtowc for mblen change
Stefan Liebler [Fri, 10 Apr 2015 22:42:00 +0000 (15:42 -0700)]
Update tst_mbrlen/tst_mbrtowc for mblen change

commit 9781a370023952383028e07399fd196a889bb2be changed the expected
results for mbrlen in case of passing n=0 to -2. The initialization of
tst_mbrlen_loc and tst_mbrtowc should be updated accordingly.

* tests-mbwc/dat_mbrlen.c (tst_mbrlen_loc): Change expected
result to -2 in case of n == 0.
* tests-mbwc/tst_mbrtowc.c (tst_mbrtowc): Check result against
-2 instead of 0.

9 years agoFix strtof decimal rounding close to half least subnormal (bug 18247).
Joseph Myers [Fri, 10 Apr 2015 20:45:30 +0000 (20:45 +0000)]
Fix strtof decimal rounding close to half least subnormal (bug 18247).

Bug 18247 is an off-by-one error in strtof's determination of a
decimal exponent such that any value with that decimal exponent is at
most half the least subnormal and so the appropriate underflowing
value for the rounding mode can be determined with no
multiple-precision computations.  (Whether the value is in fact safe
despite the off-by-one depends on the floating-point format in
question.  It's wrong for float and for m68k ldbl-96 but not for other
supported formats.)  This patch corrects the computation of the
exponent in question to be safe in general, adding a comment
explaining the new computation.

Tested for x86_64.

[BZ #18247]
* stdlib/strtod_l.c (____STRTOF_INTERNAL): Decrease minimum
decimal exponent by 1.
* stdlib/tst-strtod-round-data: Add more tests.
* stdlib/tst-strtod-round.c (tests): Regenerated.

9 years agoAdd more tests of clog and clog10.
Joseph Myers [Thu, 9 Apr 2015 22:14:00 +0000 (22:14 +0000)]
Add more tests of clog and clog10.

This patch adds some randomly-generated tests of clog and clog10 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 clog and clog10.
* math/auto-libm-test-out: Regenerated.
* sysdeps/i386/fpu/libm-test-ulps: Update.
* sysdeps/x86_64/fpu/libm-test-ulps: Likewise.

9 years agoOmit libc-modules.h for all .v.i files.
Roland McGrath [Thu, 9 Apr 2015 21:42:29 +0000 (14:42 -0700)]
Omit libc-modules.h for all .v.i files.

9 years agoLet non-add-on preconfigure scripts set libc_config_ok.
Roland McGrath [Thu, 9 Apr 2015 20:55:11 +0000 (13:55 -0700)]
Let non-add-on preconfigure scripts set libc_config_ok.

9 years agoMake test-skeleton.c grok TEST_DIRECT magic environment variable.
Roland McGrath [Thu, 9 Apr 2015 18:15:17 +0000 (11:15 -0700)]
Make test-skeleton.c grok TEST_DIRECT magic environment variable.

9 years agoscratch_buffer: Suppress truncation warning on 32-bit
Florian Weimer [Thu, 9 Apr 2015 15:12:42 +0000 (17:12 +0200)]
scratch_buffer: Suppress truncation warning on 32-bit

9 years agoUpdate SPARC ulps.
David S. Miller [Thu, 9 Apr 2015 03:34:49 +0000 (20:34 -0700)]
Update SPARC ulps.

* sysdeps/sparc/fpu/libm-test-ulps: Update.

9 years agoAdd more tests of atanh.
Joseph Myers [Wed, 8 Apr 2015 21:13:35 +0000 (21:13 +0000)]
Add more tests of atanh.

This patch adds some randomly-generated tests of atanh 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 atanh.
* math/auto-libm-test-out: Regenerated.
* sysdeps/i386/fpu/libm-test-ulps: Update.
* sysdeps/x86_64/fpu/libm-test-ulps: Likewise.

9 years agoAdd more tests of atan.
Joseph Myers [Wed, 8 Apr 2015 21:00:03 +0000 (21:00 +0000)]
Add more tests of atan.

This patch adds some randomly-generated tests of atan 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.
* math/auto-libm-test-out: Regenerated.
* sysdeps/i386/fpu/libm-test-ulps: Update.
* sysdeps/x86_64/fpu/libm-test-ulps: Likewise.

9 years agonscd_getgr_r: Use struct scratch_buffer instead of extend_alloca
Florian Weimer [Wed, 8 Apr 2015 18:58:58 +0000 (20:58 +0200)]
nscd_getgr_r: Use struct scratch_buffer instead of extend_alloca

The lack of alloca accounting means that the old code could run out of
stack space if multiple retries are needed.

9 years agogetnameinfo: Use struct scratch_buffer instead of extend_alloca
Florian Weimer [Wed, 8 Apr 2015 18:56:35 +0000 (20:56 +0200)]
getnameinfo: Use struct scratch_buffer instead of extend_alloca

This patch adjusts the internal function nrl_domainname, too.

9 years ago_nss_compat_initgroups_dyn: Use struct scratch_buffer instead of extend_alloca
Florian Weimer [Wed, 8 Apr 2015 18:55:02 +0000 (20:55 +0200)]
_nss_compat_initgroups_dyn: Use struct scratch_buffer instead of extend_alloca

9 years agogrp: Rewrite to use struct scratch_buffer instead of extend_alloca
Florian Weimer [Wed, 8 Apr 2015 18:51:34 +0000 (20:51 +0200)]
grp: Rewrite to use struct scratch_buffer instead of extend_alloca

grp/compat-initgroups.c is included from nscd/initgrcache.c, which is
why the #include directive has to be added there as well.

9 years agopldd: Use struct scratch_buffer instead of extend_alloca
Florian Weimer [Wed, 8 Apr 2015 17:11:21 +0000 (19:11 +0200)]
pldd: Use struct scratch_buffer instead of extend_alloca

9 years agoAdd more tests of cbrt.
Joseph Myers [Wed, 8 Apr 2015 17:56:15 +0000 (17:56 +0000)]
Add more tests of cbrt.

This patch adds some randomly-generated tests of cbrt 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 cbrt.
* math/auto-libm-test-out: Regenerated.
* sysdeps/x86_64/fpu/libm-test-ulps: Update.

9 years agoAdd more tests of cabs.
Joseph Myers [Wed, 8 Apr 2015 17:46:07 +0000 (17:46 +0000)]
Add more tests of cabs.

This patch adds some randomly-generated tests of cabs 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 cabs.
* math/auto-libm-test-out: Regenerated.
* sysdeps/i386/fpu/libm-test-ulps: Update.
* sysdeps/x86_64/fpu/libm-test-ulps: Likewise.

9 years agoFix dbl-64 atan2 in non-default rounding modes (bug 18210, bug 18211).
Joseph Myers [Wed, 8 Apr 2015 17:32:17 +0000 (17:32 +0000)]
Fix dbl-64 atan2 in non-default rounding modes (bug 18210, bug 18211).

The dbl-64 implementation of atan2 does computations that expect to
run in round-to-nearest mode, and in other modes the errors can
accumulate to more than the maximum accepted 9ulp.  This patch makes
it use FE_TONEAREST internally, similar to other functions with such
issues.  Tests that previously produced large errors are added for
atan2 and the closely related carg, clog and clog10 functions.

Tested for x86_64 and x86 and ulps updated accordingly.

[BZ #18210]
[BZ #18211]
* sysdeps/ieee754/dbl-64/e_atan2.c: Include <fenv.h>.
(__ieee754_atan2): Set FE_TONEAREST mode for internal
computations.
* math/auto-libm-test-in: Add more tests of atan2, carg, clog and
clog10.
* math/auto-libm-test-out: Regenerated.
* sysdeps/i386/fpu/libm-test-ulps: Update.
* sysdeps/x86_64/fpu/libm-test-ulps: Likewise.

9 years agoFix dbl-64 atan in non-default rounding modes (bug 18197).
Joseph Myers [Wed, 8 Apr 2015 17:14:12 +0000 (17:14 +0000)]
Fix dbl-64 atan in non-default rounding modes (bug 18197).

The dbl-64 implementation of atan does computations that expect to run
in round-to-nearest mode, and in other modes the errors can accumulate
to more than the maximum accepted 9ulp.  This patch makes it use
FE_TONEAREST internally, similar to other functions with such issues.

Tested for x86_64 and x86; no ulps updates needed.

[BZ #18197]
* sysdeps/ieee754/dbl-64/s_atan.c: Include <fenv.h>.
(atan): Set FE_TONEAREST mode for internal computations.
* math/auto-libm-test-in: Add more tests of atan.
* math/auto-libm-test-out: Regenerated.

9 years ago[BZ #17930] MIPS: Define SHM_NORESERVE.
James Cowgill [Tue, 7 Apr 2015 17:23:54 +0000 (17:23 +0000)]
[BZ #17930] MIPS: Define SHM_NORESERVE.

[BZ #17930]
* sysdeps/unix/sysv/linux/mips/bits/shm.h (SHM_NORESERVE): Define.

9 years agoscratch_buffer_grow_preserve: Add missing #include <string.h>
Florian Weimer [Tue, 7 Apr 2015 15:46:58 +0000 (17:46 +0200)]
scratch_buffer_grow_preserve: Add missing #include <string.h>

9 years agoAdd struct scratch_buffer and its internal helper functions
Florian Weimer [Tue, 7 Apr 2015 09:03:43 +0000 (11:03 +0200)]
Add struct scratch_buffer and its internal helper functions

These will be used from NSS modules, so they have to be exported.

9 years agomath/test-fenvinline: Cast fe_exc to unsigned int before printing
Richard Henderson [Mon, 6 Apr 2015 17:43:59 +0000 (10:43 -0700)]
math/test-fenvinline: Cast fe_exc to unsigned int before printing

On Alpha and IA-64, fexcept_t is unsigned long.  But all the values
fit within an int, so the cast is ok for printing.  All other hosts
use unsigned int or unsigned short already.

9 years agoalpha: Update libm-test-ulps
Richard Henderson [Mon, 6 Apr 2015 17:38:16 +0000 (10:38 -0700)]
alpha: Update libm-test-ulps

Regenerated from scratch.

9 years agoalpha: Unconditionally include dl-sysdep.h in sysdep.h
Richard Henderson [Mon, 6 Apr 2015 17:36:44 +0000 (10:36 -0700)]
alpha: Unconditionally include dl-sysdep.h in sysdep.h

Fixes a -Wundef error wrt RTLD_PRIVATE_ERRNO.

9 years agoHandle mblen return code when n is zero.
Ondřej Bílka [Fri, 3 Apr 2015 13:46:29 +0000 (15:46 +0200)]
Handle mblen return code when n is zero.

9 years agoDefine libc_max_align_t for internal use
Florian Weimer [Thu, 2 Apr 2015 08:07:04 +0000 (10:07 +0200)]
Define libc_max_align_t for internal use

9 years agoaarch64: Increase MINSIGSTKSZ and SIGSTKSZ (bug 16850)
Andreas Schwab [Tue, 30 Sep 2014 10:41:11 +0000 (12:41 +0200)]
aarch64: Increase MINSIGSTKSZ and SIGSTKSZ (bug 16850)

9 years agomalloc: Consistently apply trim_threshold to all heaps [BZ #17195]
Mel Gorman [Thu, 2 Apr 2015 06:44:14 +0000 (12:14 +0530)]
malloc: Consistently apply trim_threshold to all heaps [BZ #17195]

Trimming heaps is a balance between saving memory and the system overhead
required to update page tables and discard allocated pages. The malloc
option M_TRIM_THRESHOLD is a tunable that users are meant to use to decide
where this balance point is but it is only applied to the main arena.

For scalability reasons, glibc malloc has per-thread heaps but these are
shrunk with madvise() if there is one page free at the top of the heap.
In some circumstances this can lead to high system overhead if a thread
has a control flow like

    while (data_to_process) {
        buf = malloc(large_size);
        do_stuff();
        free(buf);
    }

For a large size, the free() will call madvise (pagetable teardown, page
free and TLB flush) every time followed immediately by a malloc (fault,
kernel page alloc, zeroing and charge accounting). The kernel overhead
can dominate such a workload.

This patch allows the user to tune when madvise gets called by applying
the trim threshold to the per-thread heaps and using similar logic to the
main arena when deciding whether to shrink. Alternatively if the dynamic
brk/mmap threshold gets adjusted then the new values will be obeyed by
the per-thread heaps.

Bug 17195 was a test case motivated by a problem encountered in scientific
applications written in python that performance badly due to high page fault
overhead. The basic operation of such a program was posted by Julian Taylor
https://sourceware.org/ml/libc-alpha/2015-02/msg00373.html

With this patch applied, the overhead is eliminated. All numbers in this
report are in seconds and were recorded by running Julian's program 30
times.

pyarray
                                 glibc               madvise
                                  2.21                    v2
System  min             1.81 (  0.00%)        0.00 (100.00%)
System  mean            1.93 (  0.00%)        0.02 ( 99.20%)
System  stddev          0.06 (  0.00%)        0.01 ( 88.99%)
System  max             2.06 (  0.00%)        0.03 ( 98.54%)
Elapsed min             3.26 (  0.00%)        2.37 ( 27.30%)
Elapsed mean            3.39 (  0.00%)        2.41 ( 28.84%)
Elapsed stddev          0.14 (  0.00%)        0.02 ( 82.73%)
Elapsed max             4.05 (  0.00%)        2.47 ( 39.01%)

               glibc     madvise
                2.21          v2
User          141.86      142.28
System         57.94        0.60
Elapsed       102.02       72.66

Note that almost a minutes worth of system time is eliminted and the
program completes 28% faster on average.

To illustrate the problem without python this is a basic test-case for
the worst case scenario where every free is a madvise followed by a an alloc

/* gcc bench-free.c -lpthread -o bench-free */
static int num = 1024;

void __attribute__((noinline,noclone)) dostuff (void *p)
{
}

void *worker (void *data)
{
  int i;

  for (i = num; i--;)
    {
      void *m = malloc (48*4096);
      dostuff (m);
      free (m);
    }

  return NULL;
}

int main()
{
  int i;
  pthread_t t;
  void *ret;
  if (pthread_create (&t, NULL, worker, NULL))
    exit (2);
  if (pthread_join (t, &ret))
    exit (3);
  return 0;
}

Before the patch, this resulted in 1024 calls to madvise. With the patch applied,
madvise is called twice because the default trim threshold is high enough to avoid
this.

This a more complex case where there is a mix of frees. It's simply a different worker
function for the test case above

void *worker (void *data)
{
  int i;
  int j = 0;
  void *free_index[num];

  for (i = num; i--;)
    {
      void *m = malloc ((i % 58) *4096);
      dostuff (m);
      if (i % 2 == 0) {
        free (m);
      } else {
        free_index[j++] = m;
      }
    }
  for (; j >= 0; j--)
    {
      free(free_index[j]);
    }

  return NULL;
}

glibc 2.21 calls malloc 90305 times but with the patch applied, it's
called 13438. Increasing the trim threshold will decrease the number of
times it's called with the option of eliminating the overhead.

ebizzy is meant to generate a workload resembling common web application
server workloads. It is threaded with a large working set that at its core
has an allocation, do_stuff, free loop that also hits this case. The primary
metric of the benchmark is records processed per second. This is running on
my desktop which is a single socket machine with an I7-4770 and 8 cores.
Each thread count was run for 30 seconds. It was only run once as the
performance difference is so high that the variation is insignificant.

                glibc 2.21              patch
threads 1            10230              44114
threads 2            19153              84925
threads 4            34295             134569
threads 8            51007             183387

Note that the saving happens to be a concidence as the size allocated
by ebizzy was less than the default threshold. If a different number of
chunks were specified then it may also be necessary to tune the threshold
to compensate

This is roughly quadrupling the performance of this benchmark. The difference in
system CPU usage illustrates why.

ebizzy running 1 thread with glibc 2.21
10230 records/s 306904
real 30.00 s
user  7.47 s
sys  22.49 s

22.49 seconds was spent in the kernel for a workload runinng 30 seconds. With the
patch applied

ebizzy running 1 thread with patch applied
44126 records/s 1323792
real 30.00 s
user 29.97 s
sys   0.00 s

system CPU usage was zero with the patch applied. strace shows that glibc
running this workload calls madvise approximately 9000 times a second. With
the patch applied madvise was called twice during the workload (or 0.06
times per second).

2015-02-10  Mel Gorman  <mgorman@suse.de>

  [BZ #17195]
  * malloc/arena.c (free): Apply trim threshold to per-thread heaps
    as well as the main arena.

9 years agoLimit threads sharing L2 cache to 2 for SLM/KNL
H.J. Lu [Tue, 31 Mar 2015 20:17:51 +0000 (13:17 -0700)]
Limit threads sharing L2 cache to 2 for SLM/KNL

Silvermont and Knights Landing have a modular system design with two cores
sharing an L2 cache.  If more than 2 cores are detected to shared L2 cache,
it should be adjusted for Silvermont and Knights Landing.

[BZ #18185]
* sysdeps/x86_64/cacheinfo.c (init_cacheinfo): Limit threads
sharing L2 cache to 2 for Silvermont/Knights Landing.

9 years agoAdd a testcase for copy reloc against protected data
H.J. Lu [Tue, 31 Mar 2015 12:20:55 +0000 (05:20 -0700)]
Add a testcase for copy reloc against protected data

Linkers in some versions of binutils 2.25 and 2.26 don't support protected
data symbol with error messsage like:

/usr/bin/ld: copy reloc against protected `bar' is invalid
/usr/bin/ld: failed to set dynamic section sizes: Bad value

We check if linker supports copy reloc against protected data symbol to
avoid running the test if linker is broken.

[BZ #17711]
* config.make.in (have-protected-data): New.
* configure.ac: Check linker support for protected data symbol.
* configure: Regenerated.
* elf/Makefile (modules-names): Add tst-protected1moda and
tst-protected1modb if $(have-protected-data) is yes.
(tests): Add tst-protected1a and tst-protected1b if
$(have-protected-data) is yes.
($(objpfx)tst-protected1a): New.
($(objpfx)tst-protected1b): Likewise.
(tst-protected1modb.so-no-z-defs): Likewise.
* elf/tst-protected1a.c: New file.
* elf/tst-protected1b.c: Likewise.
* elf/tst-protected1mod.h: Likewise.
* elf/tst-protected1moda.c: Likewise.
* elf/tst-protected1modb.c: Likewise.

9 years agoAdd ELF_RTYPE_CLASS_EXTERN_PROTECTED_DATA to x86
H.J. Lu [Tue, 31 Mar 2015 12:15:43 +0000 (05:15 -0700)]
Add ELF_RTYPE_CLASS_EXTERN_PROTECTED_DATA to x86

With copy relocation, address of protected data defined in the shared
library may be external.   When there is a relocation against the
protected data symbol within the shared library, we need to check if we
should skip the definition in the executable copied from the protected
data.  This patch adds ELF_RTYPE_CLASS_EXTERN_PROTECTED_DATA and defines
it for x86.  If ELF_RTYPE_CLASS_EXTERN_PROTECTED_DATA isn't 0, do_lookup_x
will skip the data definition in the executable from copy reloc.

[BZ #17711]
* elf/dl-lookup.c (do_lookup_x): When UNDEF_MAP is NULL, which
indicates it is called from do_lookup_x on relocation against
protected data, skip the data definion in the executable from
copy reloc.
(_dl_lookup_symbol_x): Pass ELF_RTYPE_CLASS_EXTERN_PROTECTED_DATA,
instead of ELF_RTYPE_CLASS_PLT, to do_lookup_x for
EXTERN_PROTECTED_DATA relocation against STT_OBJECT symbol.
* sysdeps/generic/ldsodefs.h * (ELF_RTYPE_CLASS_EXTERN_PROTECTED_DATA):
New.  Defined to 4 if DL_EXTERN_PROTECTED_DATA is defined,
otherwise to 0.
* sysdeps/i386/dl-lookupcfg.h (DL_EXTERN_PROTECTED_DATA): New.
* sysdeps/i386/dl-machine.h (elf_machine_type_class): Set class
to ELF_RTYPE_CLASS_EXTERN_PROTECTED_DATA for R_386_GLOB_DAT.
* sysdeps/x86_64/dl-lookupcfg.h (DL_EXTERN_PROTECTED_DATA): New.
* sysdeps/x86_64/dl-machine.h (elf_machine_type_class): Set class
to ELF_RTYPE_CLASS_EXTERN_PROTECTED_DATA for R_X86_64_GLOB_DAT.

9 years agoNPTL: Remove duplicate definition of PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP
Martin Galvan [Sat, 28 Mar 2015 04:41:35 +0000 (01:41 -0300)]
NPTL: Remove duplicate definition of PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP

The PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP macro was defined twice with the
same values in pthread.h; this removes the second definition.

9 years agoNPTL: swap comments for THREAD_SETMEM and THREAD_SETMEM_NC for i386 and x86_64
Martin Galvan [Sat, 28 Mar 2015 04:31:56 +0000 (01:31 -0300)]
NPTL: swap comments for THREAD_SETMEM and THREAD_SETMEM_NC for i386 and x86_64

The comments for THREAD_SETMEM and THREAD_SETMEM_NC were swapped for
i386 and x86_64; this patch fixes that.

9 years agoConvert dlfcn/tststatic to use test-skeleton.
Roland McGrath [Fri, 27 Mar 2015 19:55:25 +0000 (12:55 -0700)]
Convert dlfcn/tststatic to use test-skeleton.

9 years agoHarden powerpc64 elf_machine_fixup_plt
Alan Modra [Thu, 26 Mar 2015 02:00:45 +0000 (12:30 +1030)]
Harden powerpc64 elf_machine_fixup_plt

IFUNC is difficult to correctly implement on any target needing a GOT
to support position independent code, due to the dependency on order
of dynamic relocations.  ld.so should be changed to apply IFUNC
relocations last, globally, because without that it is actually
impossible to write an IFUNC resolver in C that works in all
situations.  Case in point, vfork in libpthread.so is an IFUNC with
the resolver returning &__libc_vfork.  (system and fork are similar.)
If another shared library, libA say, uses vfork then it is quite
possible that libpthread.so hasn't been dynamically relocated before
the unfortunate libA is dynamically relocated.  In that case the GOT
entry for &__libc_vfork is still zero, so the IFUNC resolver returns
NULL.  LD_BIND_NOW=1 results in libA PLT dynamic relocations being
applied using this NULL value and ld.so segfaults.

This patch hardens ld.so to not segfault on a NULL from an IFUNC
resolver.  It also fixes a problem with undefined weak.  If you leave
the plt entry as-is for undefined weak then if the entry is ever
called it will loop in ld.so rather than segfaulting.

* sysdeps/powerpc/powerpc64/dl-machine.h (elf_machine_fixup_plt):
Don't segfault if ifunc resolver returns a NULL.  Do set plt to
zero for undefined weak.
(elf_machine_plt_conflict): Similarly.

9 years agoAdd more tests of acosh, asinh and atanh.
Joseph Myers [Wed, 25 Mar 2015 22:21:20 +0000 (22:21 +0000)]
Add more tests of acosh, asinh and atanh.

This patch adds some randomly-generated tests of acosh, asinh and
atanh 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, asinh and
atanh.
* math/auto-libm-test-out: Regenerated.
* sysdeps/i386/fpu/libm-test-ulps: Update.
* sysdeps/x86_64/fpu/libm-test-ulps: Likewise.

9 years agoAdd another test of asin.
Joseph Myers [Wed, 25 Mar 2015 21:57:04 +0000 (21:57 +0000)]
Add another test of asin.

This patch adds a randomly-generated test of asin 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 asin.
* math/auto-libm-test-out: Regenerated.
* sysdeps/i386/fpu/libm-test-ulps: Update.
* sysdeps/x86_64/fpu/libm-test-ulps: Likewise.

9 years agoRemove unused macros from i386 lowlevellock.h.
Joseph Myers [Wed, 25 Mar 2015 21:21:18 +0000 (21:21 +0000)]
Remove unused macros from i386 lowlevellock.h.

In the course of the work on six-argument syscalls I noticed that the
i386 lowlevellock.h contained some unused macro definitions (already
unused before my patch).  This patch removes them.

Tested for x86 that installed stripped shared libraries are unchanged
by this patch.

* sysdeps/unix/sysv/linux/i386/lowlevellock.h (LLL_EBX_LOAD):
Remove macro.
(LLL_EBX_REG): Likewise.
(LLL_ENTER_KERNEL): Likewise.

9 years agoAdd more tests of asin.
Joseph Myers [Wed, 25 Mar 2015 17:53:58 +0000 (17:53 +0000)]
Add more tests of asin.

This patch adds some randomly-generated tests of asin 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 asin.
* math/auto-libm-test-out: Regenerated.
* sysdeps/i386/fpu/libm-test-ulps: Update.
* sysdeps/x86_64/fpu/libm-test-ulps: Likewise.

9 years agoSupport six-argument syscalls from C for 32-bit x86, use generic lowlevellock-futex...
Joseph Myers [Wed, 25 Mar 2015 15:17:54 +0000 (15:17 +0000)]
Support six-argument syscalls from C for 32-bit x86, use generic lowlevellock-futex.h (bug 18138).

This patch follows the approach outlined in
<https://sourceware.org/ml/libc-alpha/2015-03/msg00656.html> to
support six-argument syscalls from INTERNAL_SYSCALL for 32-bit x86,
making them call a function __libc_do_syscall that takes the syscall
number and three syscall arguments in the registers in which the
kernel expects them, along with a pointer to a structure containing
the other three arguments.

In turn, this allows the generic lowlevellock-futex.h to be used on
32-bit x86, so supporting lll_futex_timed_wait_bitset (and so allowing
FUTEX_CLOCK_REALTIME to be used in various cases, so fixing bug 18138
for 32-bit x86 and leaving hppa as the only architecture missing
lll_futex_timed_wait_bitset).  The change to lowlevellock.h's
definition of SYS_futex is because the generic lowlevelloc-futex.h
ends up bringing in bits/syscall.h which defines SYS_futex to
__NR_futex, so resulting in redefinition errors.  The revised
definition in lowlevellock.h is in line with what the x86_64 version
does.

__libc_do_syscall is only needed in libpthread at present (meaning
nothing special needs to be done to make it shared-only in most
libraries containing it, static in libc only, as on ARM).

Tested for 32-bit x86, with the glibc testsuite and with the test in
bug 18138.  The failures seen

FAIL: nptl/tst-cleanupx4
FAIL: rt/tst-cpuclock2

are pre-existing.

[BZ #18138]
* sysdeps/unix/sysv/linux/i386/sysdep.h (struct
libc_do_syscall_args): New structure.
(INTERNAL_SYSCALL_MAIN_0): New macro.
(INTERNAL_SYSCALL_MAIN_1): Likewise.
(INTERNAL_SYSCALL_MAIN_2): Likewise.
(INTERNAL_SYSCALL_MAIN_3): Likewise.
(INTERNAL_SYSCALL_MAIN_4): Likewise.
(INTERNAL_SYSCALL_MAIN_5): Likewise.
(INTERNAL_SYSCALL_MAIN_6): Likewise.  Call __libc_do_syscall.
(INTERNAL_SYSCALL): Define to use INTERNAL_SYSCALL_MAIN_##nr.
Replace conditional definitions by conditional definitions of ....
(INTERNAL_SYSCALL_MAIN_INLINE): ... this.  New macro.
* sysdeps/unix/sysv/linux/i386/libc-do-syscall.S: New file.
* sysdeps/unix/sysv/linux/i386/Makefile [$(subdir) = nptl]
(libpthread-sysdep_routines): Add libc-do-syscall.
* sysdeps/unix/sysv/linux/i386/lowlevellock-futex.h: Remove file.
* sysdeps/unix/sysv/linux/i386/lowlevellock.h (SYS_futex): Define
to __NR_futex not 240.

9 years agopowerpc __tls_get_addr call optimization
Alan Modra [Wed, 25 Mar 2015 05:23:47 +0000 (15:53 +1030)]
powerpc __tls_get_addr call optimization

This patch is glibc support for a PowerPC TLS optimization, inspired
by Alexandre Oliva's TLS optimization for other processors,
http://www.lsd.ic.unicamp.br/~oliva/writeups/TLS/RFC-TLSDESC-x86.txt

In essence, this optimization uses a zero module id in the tls_index
GOT entry to indicate that a TLS variable is allocated space in the
static TLS area.  A special plt call linker stub for __tls_get_addr
checks for such a tls_index and if found, returns the offset
immediately.  The linker communicates the fact that the special
__tls_get_addr stub is used by setting a bit in the dynamic tag
DT_PPC64_OPT/DT_PPC_OPT.  glibc communicates to the linker that this
optimization is available by the presence of __tls_get_addr_opt.

tst-tlsmod2.so is built with -Wl,--no-tls-get-addr-optimize for
tst-tls-dlinfo, which otherwise would fail since it tests that no
static tls is allocated.  The ld option --no-tls-get-addr-optimize has
been available since binutils-2.20 so doesn't need a configure test.

* NEWS: Advertise TLS optimization.
* elf/elf.h (R_PPC_TLSGD, R_PPC_TLSLD, DT_PPC_OPT, PPC_OPT_TLS): Define.
(DT_PPC_NUM): Increment.
* elf/dynamic-link.h (HAVE_STATIC_TLS): Define.
(CHECK_STATIC_TLS): Use here.
* sysdeps/powerpc/powerpc32/dl-machine.h (elf_machine_rela): Optimize
TLS descriptors.
* sysdeps/powerpc/powerpc64/dl-machine.h (elf_machine_rela): Likewise.
* sysdeps/powerpc/dl-tls.c: New file.
* sysdeps/powerpc/Versions: Add __tls_get_addr_opt.
* sysdeps/powerpc/tst-tlsopt-powerpc.c: New tls test.
* sysdeps/unix/sysv/linux/powerpc/Makefile: Add new test.
Build tst-tlsmod2.so with --no-tls-get-addr-optimize.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/ld.abilist: Update.
* sysdeps/unix/sysv/linux/powerpc/powerpc64/ld.abilist: Likewise.
* sysdeps/unix/sysv/linux/powerpc/powerpc64/ld-le.abilist: Likewise.

9 years agopowerpc64 configure message
Alan Modra [Wed, 25 Mar 2015 05:15:36 +0000 (15:45 +1030)]
powerpc64 configure message

This feature doesn't depend on the linker, as can be seen from the
actual test.  It's a compiler feature.

* sysdeps/powerpc/powerpc64/configure.ac: Correct "linker support
for overlapping .opd entries" to "support...".
* sysdeps/powerpc/powerpc64/configure: Regenerate

9 years agoAdd more tests of acos.
Joseph Myers [Wed, 25 Mar 2015 00:30:10 +0000 (00:30 +0000)]
Add more tests of acos.

This patch adds some randomly-generated tests of acos 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 acos.
* math/auto-libm-test-out: Regenerated.
* sysdeps/i386/fpu/libm-test-ulps: Update.
* sysdeps/x86_64/fpu/libm-test-ulps: Likewise.

9 years agoAdd more tests of expm1.
Joseph Myers [Wed, 25 Mar 2015 00:05:13 +0000 (00:05 +0000)]
Add more tests of expm1.

This patch adds some randomly-generated tests of 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 expm1.
* math/auto-libm-test-out: Regenerated.
* sysdeps/i386/fpu/libm-test-ulps: Update.
* sysdeps/x86_64/fpu/libm-test-ulps: Likewise.

9 years agoAdd more tests of cosh, sinh.
Joseph Myers [Tue, 24 Mar 2015 23:48:04 +0000 (23:48 +0000)]
Add more tests of cosh, sinh.

This patch adds some 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.

9 years agoRegenerate x86_64, x86 ulps from scratch.
Joseph Myers [Tue, 24 Mar 2015 23:30:19 +0000 (23:30 +0000)]
Regenerate x86_64, x86 ulps from scratch.

The x86_64 and x86 libm-test-ulps files hadn't been regenerated from
scratch for some time, as evidenced by the presence of entries for
*_tonearest functions (those tests duplicated the
default-rounding-mode tests, and such duplicates are no longer run).
The aarch64, alpha, hppa, ia64, m68k, microblaze, powerpc, s390, sh,
sparc, tile files similarly could do with from-scratch regeneration as
evidenced by the presence of such entries.  (Truncate the existing
file then run "make regen-ulps" and move the resulting file into
place.)

This patch regenerates the x86_64 and x86 files from scratch.  It's
likely some of the reduced / removed ulps will need restoring because
they appear on processors or compiler versions other than the one I
tested on, but in such cases I'd like to first see if I can generate
new tests that show such ulps on the Intel processor I'm testing on,
to reduce the effects from different people using different processors
and compilers to regenerate the ulps.

* sysdeps/i386/fpu/libm-test-ulps: Regenerated.
* sysdeps/x86_64/fpu/libm-test-ulps: Likewise.

9 years agoAdd more tests of log2.
Joseph Myers [Tue, 24 Mar 2015 23:06:28 +0000 (23:06 +0000)]
Add more tests of log2.

In testing for x86_64 on an AMD processor, I observed libm test
failures of the form:

testing long double (without inline functions)
Failure: Test: log2_downward (0x2.b7e151628aed4p+0)
Result:
 is:          1.44269504088896356633e+00   0xb.8aa3b295c17f67600000p-3
 should be:   1.44269504088896356622e+00   0xb.8aa3b295c17f67500000p-3
 difference:  1.08420217248550443400e-19   0x8.00000000000000000000p-66
 ulp       :  1.0000
 max.ulp   :  0.0000
Maximal error of `log2_downward'
 is      : 1 ulp
 accepted: 0 ulp

These issues arise because the maximum ulps when regenerating on one
processor are not the same as on another processor, so regeneration on
several processors may be needed when updating libm-test-ulps to avoid
failures for some users testing glibc - but such regeneration on
multiple processors is inconvenient.  Causes can be: on x86 and, for
x86_64, for long double, variation in results of x87 instructions for
transcendental operations between processors; on x86, variation in
compiler excess precision between compiler versions and
configurations; on any processor where the compiler may contract
expressions using fused multiply-add, variation in what contraction
occurs.

Although it's hard to be sure libm-test-ulps covers all ulps that may
be seen in any configuration for the given architecture, in practice
it helps simply to add wider test coverage to make it more likely
that, when testing on one processor, the ulps seen are the biggest
that can be seen for that function on that processor, and hopefully
they are also the biggest that can be seen for that function in other
configurations for that architecture.  Thus, this patch adds some
tests of log2 that increase the ulps I see on x86_64 on an Intel
processor, so that hopefully future from-scratch regenerations on that
processor will produce ulps big enough not to have errors from testing
on AMD processors.  These tests were found by randomly generating
inputs and seeing what produced ulps larger than those currently in
libm-test-ulps.  Of course such increases also improve the accuracy of
the empirical table of known ulps generated from libm-test-ulps files
that goes in the manual.

Tested for x86_64 and x86 and ulps updated accordingly.

* math/auto-libm-test-in: Add more tests of log2.
* math/auto-libm-test-out: Regenerated.
* sysdeps/i386/fpu/libm-test-ulps: Update.
* sysdeps/x86_64/fpu/libm-test-ulps: Likewise.

9 years agoMinor cleanups in libio/iofdopen.c
Roland McGrath [Mon, 23 Mar 2015 20:46:36 +0000 (13:46 -0700)]
Minor cleanups in libio/iofdopen.c

9 years agopthread_setaffinity (Linux variant): Rewrite to use VLA instead of alloca
Florian Weimer [Mon, 23 Mar 2015 15:34:48 +0000 (16:34 +0100)]
pthread_setaffinity (Linux variant): Rewrite to use VLA instead of alloca

extend_alloca was used to emulate VLA deallocation.  The new version
also handles the res == 0 corner case more explicitly, by returning 0
instead of the (potentially undefined, but usually zero) system call
error.

9 years agoAvoid SIGFPE in wordexp [BZ #18100]
Florian Weimer [Mon, 23 Mar 2015 15:12:38 +0000 (16:12 +0100)]
Avoid SIGFPE in wordexp [BZ #18100]

Check for a zero divisor and integer overflow before performing
division in arithmetic expansion.

9 years agoRemove HAVE_ASM_PPC_REL16 references
Alan Modra [Thu, 19 Mar 2015 07:58:38 +0000 (18:28 +1030)]
Remove HAVE_ASM_PPC_REL16 references

In bc0cdc498 the configure check for HAVE_ASM_PPC_REL16 was removed
on the grounds that the minimum binutils supports rel16 relocs.  This
is true, but not all references to HAVE_ASM_PPC_REL16 in the sources
were removed.

* config.h.in: Remove HAVE_ASM_PPC_REL16.
* sysdeps/powerpc/powerpc32/tls-macros.h: Remove HAVE_ASM_PPC_REL16
and false branch of conditional.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/swapcontext-common.S:
Likewise.

9 years agoAdd more exception to local headers list
Samuel Thibault [Sun, 22 Mar 2015 23:28:42 +0000 (00:28 +0100)]
Add more exception to local headers list

* scripts/check-local-headers.sh (exclude): Add device/,
hurd/hurd_types.h, hurd/ioctl_types.h, hurd/paths.h, hurd/ioctls.defs,
cthreads.h.

9 years agoFix visibility of EXTPROC macro
Samuel Thibault [Sun, 22 Mar 2015 16:27:51 +0000 (17:27 +0100)]
Fix visibility of EXTPROC macro

* bits/termios.h [!__USE_MISC] (EXTPROC): Do not define.

9 years agoNote old commit as having resolved bug 11505.
Joseph Myers [Sat, 21 Mar 2015 17:50:13 +0000 (17:50 +0000)]
Note old commit as having resolved bug 11505.

9 years agoFix warnings
Samuel Thibault [Sat, 21 Mar 2015 03:49:44 +0000 (04:49 +0100)]
Fix warnings

* sysdeps/mach/hurd/Makefile ($(common-objpfx)errnos.d): Depend on
libc-modules.h
* sysdeps/mach/hurd/i386/trampoline.c (_hurd_setup_sighandler): Remove
unused declaration of _hurd_intr_rpc_msg_in_trap.
* mach/mach_init.c (__mach_init): Test whether HAVE_HOST_PAGE_SIZE is
defined instead of whether it is non-zero.
* sysdeps/mach/hurd/i386/intr-msg.h (INTR_MSG_TRAP): Use "+m"
input constraint instead of both input and output constraint.  Use ecx
clobber instead of %ecx.
* sysdeps/mach/hurd/malloc-machine.h (mutex_init, mutex_lock,
mutex_unlock): Use a statement expression instead of an expression list.
* sysdeps/mach/hurd/setitimer.c (_hurd_itimer_thread_stack_size): Set
type to vm_size_t instead of vm_address_t.
* sysdeps/mach/hurd/fork.c (__fork): Test whether STACK_GROWTH_UP is
defined instead of whether it is non-zero.
* hurd/hurd/ioctl.h (_hurd_locked_install_cttyid): New declaration.
* sysdeps/mach/hurd/setsid.c: Include <hurd/ioctl.h>.
* sysdeps/mach/hurd/mmap.c (__mmap): Use 0 instead of NULL for
comparisons with mapaddr.
* nscd/nscd-client.h: Include <time.h>.
* sysdeps/mach/hurd/dl-sysdep.c (fmh): Pass vm_offset_t dummy
9th parameter to __vm_region instead of int.