Commit Graph

31026 Commits

Author SHA1 Message Date
Adhemerval Zanella
75dafa2f32 Move fortified explicit_bzero back to string3
Commit 38765ab68f moved the bzero, bcopy, and explicit_bzero
fortified macros to a common header (strings_fortified.h).  However
the side effect is a fortified explicit_bzero is defined when including
only strings.h.

This patch moves back the fortified explicit_bzero definition to
strings3.h header.

Checked on x86_64-linux-gnu.

	* string/bits/strings_fortified.h (explicit_bzero): Move back to ..
	* string/bits/string3.h: ... here.
2017-01-09 13:48:44 -02:00
Joseph Myers
f68fcd95d3 Make fallback fesetexceptflag always succeed (bug 21028).
The fallback implementation of fesetexceptflag currently fails if any
exceptions are specified.  It should always succeed, because the
exception state is always that all exceptions (if any are defined in
<fenv.h> but not supported in this configuration) are always clear,
just as fallback fetestexcept always succeeds and fallback fesetenv
always succeeds unless asked to set FE_NOMASK_ENV.

This patch fixes it accordingly.  Together with the patch to
test-fexcept.c to allow feraiseexcept to fail in another place, this
stops that test from failing for MIPS soft-float.

Tested for mips64 soft-float.

	[BZ #21028]
	* math/fsetexcptflg.c (__fesetexceptflag): Always return 0.
	* math/test-fexcept.c (test_set): Allow failure of feraiseexcept
	if EXCEPTION_TESTS returns false.
2017-01-05 23:15:47 +00:00
Adhemerval Zanella
38765ab68f Use fortify macros for b{zero,copy} along decl from strings.h
As described in BZ#20558, bzero and bcopy declaration can only benefit
from fortified macros when decl came from string.h and when __USE_MISC
is defined (default behaviour).

This is due no standard includes those functions in string.h, so they
are only declared if __USE_MISC is defined (as pointed out in comment 4).
However fortification should be orthogona to other features test macros,
i.e, any function should be fortified if that function is declared.

To fix this behavior, the patch moved the bzero, bcopy, and
__explicit_bzero_chk to a common header (string/bits/strings_fortified.h)
and explicit fortified inclusion macros similar to string.h is added
on strings.h.  This allows to get fortified declarions by only including
strings.h.

Checked on x86_64-linux-gnu and along on a bootstrap installation to check
if the fortified are correctly triggered with example from bug report.

	[BZ #20558]
	* string/bits/string3.h [__USE_MISC] (bcopy): Move to
	strings_fortified.h.
	[__USE_MISC] (bzero): Likewise.
	[__USE_MISC] (explicit_bzero): Likewise.
	* string/strings.h: Include strings_fortified.h.
	* string/Makefile (headers): Add strings_fortified.h.
	* string/bits/strings_fortified.h: New file.
	* include/bits/strings_fortified.h: Likewise.
2017-01-05 15:54:13 -02:00
Joseph Myers
983a9637f7 Increase some test timeouts.
This patch increases timeouts on some tests I've observed timing out.

elf/tst-tls13 and iconvdata/tst-loading both dynamically load many
objects and so are slow when testing over NFS.  They had timeouts set
from before the default changed from 2 to 20 seconds; this patch
removes those old settings, so effectively increasing the timeout to
20 seconds (from 3 and 10 seconds respectively).

malloc/tst-malloc-thread-fail.c and malloc/tst-mallocfork2.c are slow
on slow systems and so I set a fairly arbitrary 100 second timeout,
which seems to suffice on the system where I saw them timing out.

nss/tst-cancel-getpwuid_r.c and nss/tst-nss-getpwent.c are slow on
systems with a large passwd file; I set timeouts that empirically
worked for me.  (It seems tst-cancel-getpwuid_r.c is hitting the
100000 getpwuid_r call limit in my testing, with each call taking a
bit over 0.007 seconds, so 700 seconds for the test.)

	* elf/tst-tls13.c (TIMEOUT): Remove.
	* iconvdata/tst-loading.c (TIMEOUT): Likewise.
	* malloc/tst-malloc-thread-fail.c (TIMEOUT): Increase to 100.
	* malloc/tst-mallocfork2.c (TIMEOUT): Define to 100.
	* nss/tst-cancel-getpwuid_r.c (TIMEOUT): Define to 900.
	* nss/tst-nss-getpwent.c (TIMEOUT): Define to 300.
2017-01-05 17:39:38 +00:00
Joseph Myers
30733525c6 Fix MIPS n64 readahead (bug 21026).
As noted in bug 20126, MIPS n64 uses an incorrect implementation of
readahead intended for 32-bit systems.  This patch adds a
syscalls.list entry to fix this.  An updated version of the
consolidation patch
<https://sourceware.org/ml/libc-alpha/2016-09/msg00527.html> could
remove this syscalls.list entry again.

Tested with compilation (only) for mips64; the nature of the syscall
doesn't allow for a glibc test to detect this issue.

	[BZ #21026]
	* sysdeps/unix/sysv/linux/mips/mips64/n64/syscalls.list
	(readahead): New syscall entry.
2017-01-05 17:35:53 +00:00
Joseph Myers
3ecd616cc1 Fix string/tester.c for GCC 7 -Wstringop-overflow=.
GCC 7 has a -Wstringop-overflow= warning that includes warning for
strncat with a size specified that is larger than the size of the
buffer (which is dubious usage, but valid at runtime if in fact there
isn't an overflow with the particular buffer contents present).
string/tester.c tests such cases; this patch arranges for this warning
to be ignored around relevant strncat calls.

Tested compilation for aarch64 (GCC mainline) with
build-many-glibcs.py; did execution testing for x86_64 (GCC 5).

	* string/tester.c (test_strncat): Disable -Wstringop-overflow=
	around tests of strncat with large sizes.
2017-01-04 23:33:31 +00:00
Joseph Myers
3d7229c250 Fix malloc/ tests for GCC 7 -Walloc-size-larger-than=.
GCC 7 has a -Walloc-size-larger-than= warning for allocations of half
the address space or more.  This causes errors building glibc tests
that deliberately test failure of very large allocations.  This patch
arranges for this warning to be ignored around the problematic
function calls.

Tested compilation for aarch64 (GCC mainline) with
build-many-glibcs.py; did execution testing for x86_64 (GCC 5).

	* malloc/tst-malloc.c: Include <libc-internal.h>.
	(do_test): Disable -Walloc-size-larger-than= around tests of
	malloc with negative sizes.
	* malloc/tst-mcheck.c: Include <libc-internal.h>.
	(do_test): Disable -Walloc-size-larger-than= around tests of
	malloc and realloc with negative sizes.
	* malloc/tst-realloc.c: Include <libc-internal.h>.
	(do_test): Disable -Walloc-size-larger-than= around tests of
	realloc with negative sizes.
2017-01-04 23:32:14 +00:00
Joseph Myers
179b86750c Update libm-test XFAILs for ibm128 format.
This patch cleans up and updates the libm-test XFAILs for the ibm128
format.  More of them are changed to use a new ibm128-libgcc
conditional, to reflect that they are not in fact needed if you've
patched libgcc to fix the known issues (at substantial performance
cost).  Many additional XFAILs are added for tests that fail with
unpatched libgcc (most but not all of them xfail-rounding).

Note that further such fixes will be needed for test-ldouble actually
to pass with default libgcc (in particular, XFAILs for pow tests and
for various affected tests directly embedded in libm-test.inc).  With
patched libgcc, there may be a few XFAILs needed but the results are
already substantially clean apart from a few ulps differences.

Tested for powerpc.

	* math/libm-test.inc (TEST_COND_ibm128_libgcc): New macro.
	(init_max_error) [TEST_COND_ibm128]: Increase maximum error
	allowed to 16 ulps.
	* math/auto-libm-test-in: Change most XFAILs for ibm128 to use
	ibm128-libgcc.  XFAIL more tests for ibm128-libgcc.
	* math/auto-libm-test-out: Regenerated.
2017-01-04 23:29:42 +00:00
Gabriel F. T. Gomes
f67d78192c Move wrappers to libm-compat-calls-auto
This commit moves one step towards the deprecation of wrappers that
use _LIB_VERSION / matherr / __kernel_standard functionality, by
adding the suffix '_compat' to their filenames and adjusting Makefiles
and #includes accordingly.

New template wrappers that do not use such functionality will be added
by future patches and will be first used by the float128 wrappers.
2017-01-04 16:25:04 -02:00
Joseph Myers
811de1a688 Fix MicroBlaze bits/setjmp.h for C++.
For MicroBlaze, setjmp/check-installed-headers-cxx fails with:

../setjmp/setjmp.h:34:8: error: '__jmp_buf_tag' has a field '__jmp_buf_tag::__jmpbuf' whose type depends on the type '<unnamed struct>' which has no linkage [-Werror=subobject-linkage]

This patch fixes this in the same way as for some other architectures:
the struct used for the internal __jmp_buf type is given the tag
__jmp_buf_internal_tag.

Tested (compilation tests) with build-many-glibcs.py.

	* sysdeps/microblaze/bits/setjmp.h (__jmp_buf): Give struct tag
	__jmp_buf_internal_tag.
2017-01-04 18:12:14 +00:00
Joseph Myers
f5ee5362bf Make MIPS soft-fp preserve NaN payloads for NAN2008.
This corresponds to a patch applied to libgcc.  In glibc it doesn't
actually affect much (only fma, I think).

The MIPS sfp-machine.h files have an _FP_CHOOSENAN implementation
which emulates hardware semantics of not preserving signaling NaN
payloads for an operation with two NaN arguments (although that
doesn't suffice to avoid sNaN payload preservation in any case with
just one NaN argument).

However, those are only hardware semantics in the legacy NaN case; in
the NAN2008 case, the architecture documentation says hardware
preserves payloads in such cases.  Furthermore, this implementation
assumes legacy NaN semantics, so in the NAN2008 case the
implementation actually has the effect of preserving sNaN payloads but
not preserving qNaN payloads, when both should be preserved.

This patch fixes the code just to copy from the first argument.

Tested for mips64 soft-float.

	* sysdeps/mips/mips32/sfp-machine.h (_FP_CHOOSENAN): Always
	preserve NaN payload if [__mips_nan2008].
	* sysdeps/mips/mips64/sfp-machine.h (_FP_CHOOSENAN): Likewise.
2017-01-04 17:15:39 +00:00
Joseph Myers
2b18fe78fe Fix MicroBlaze __backtrace get_frame_size namespace (bug 21022).
Many linknamespace tests fail for MicroBlaze because __backtrace (as
brought in by libc_fatal.c) uses an inline function get_frame_size
which is not declared static.  This patch fixes it to be declared
static.

Tested (compilation tests) with build-many-glibcs.py.

	[BZ #21022]
	* sysdeps/microblaze/backtrace.c (get_frame_size): Make static.
2017-01-04 01:06:04 +00:00
Joseph Myers
785fcbaef3 Update i386 libm-test-ulps.
When testing changes to i386 libm functions (that are shadowed for
i686 builds by i686 versions) recently, I saw that the plain i386
libm-test-ulps (as opposed to the i686 multiarch version) needed
updating for tests that had been added since it was last updated.
This patch updates it accordingly.

	* sysdeps/i386/fpu/libm-test-ulps: Update.
2017-01-03 21:05:46 +00:00
Adhemerval Zanella
640e44c5d0 Remove duplicate strcat implementations
Since commit 6e46de42fe default strcat implementation is essentially
the same for specialized ia64 and powerpc ones.  This patch removes the
redundant implementation and adjust powerpc64 ifunc code to use the
default one.

Checked on powerpc32-linux-gnu (default and power4) and ia64-linux build
and on powerpc64le-linux-gnu.

	* sysdeps/ia64/strcat.c: Remove file.
	* sysdeps/powerpc/strcat.c: Likewise.
	* sysdeps/powerpc/powerpc64/multiarch/strcat-power7.c: Use default
	C implementation.
	* sysdeps/powerpc/powerpc64/multiarch/strcat-power8.c: Likewise.
	* sysdeps/powerpc/powerpc64/multiarch/strcat-ppc64.c: Likewise.
2017-01-03 17:48:03 -02:00
Tulio Magno Quites Machado Filho
e9a96ea1ac powerpc: Fix write-after-destroy in lock elision [BZ #20822]
The update of *adapt_count after the release of the lock causes a race
condition when thread A unlocks, thread B continues and destroys the
mutex, and thread A writes to *adapt_count.
2017-01-03 17:21:41 -02:00
Joseph Myers
daaff5cc79 Fix math/test-fenvinline for no-exceptions configurations.
This patch fixes math/test-fenvinline.c to stop it failing in
no-exceptions configurations (where some exception macros are defined
but may not be supported at runtime).  The relevant parts of the test
are disabled in that case; some parts can still run (and the rounding
mode tests are written in a way such that they work even if the
rounding modes aren't supported).

Tested for mips64 soft-float, and for x86_64 to make sure the tests
still run when the exceptions are supported.

	* math/test-fenvinline.c (do_test): Disable tests of raised
	exceptions if !EXCEPTION_TESTS (FLOAT).
2017-01-03 18:45:28 +00:00
Adhemerval Zanella
8dad72997a Fix x86 strncat optimized implementation for large sizes
Similar to BZ#19387, BZ#21014, and BZ#20971, both x86 sse2 strncat
optimized assembly implementations do not handle the size overflow
correctly.

The x86_64 one is in fact an issue with strcpy-sse2-unaligned, but
that is triggered also with strncat optimized implementation.

This patch uses a similar strategy used on 3daef2c8ee, where
saturared math is used for overflow case.

Checked on x86_64-linux-gnu and i686-linux-gnu.  It fixes BZ #19390.

	[BZ #19390]
	* string/test-strncat.c (test_main): Add tests with SIZE_MAX as
	maximum string size.
	* sysdeps/i386/i686/multiarch/strcat-sse2.S (STRCAT): Avoid overflow
	in pointer addition.
	* sysdeps/x86_64/multiarch/strcpy-sse2-unaligned.S (STRCPY):
	Likewise.
2017-01-03 14:24:53 -02:00
Joseph Myers
d4d629e618 Fix elf/tst-ldconfig-X for cross testing.
elf/Makefile passes arguments to tst-ldconfig-X.sh that are different
from what it expects, so resulting in the test failing in cross
testing.  This patch corrects the arguments passed (the script itself
has correct logic for cross testing, it's just the Makefile that's
wrong).

Tested for powerpc (cross testing) and for x86_64 (native testing).

	* elf/Makefile ($(objpfx)tst-ldconfig-X.out): Correct arguments
	passed to tst-ldconfig-X.sh.
2017-01-03 15:11:17 +00:00
Martin Galvan
26e21ad35d Fix up tabs/spaces mismatches
Mixing them up breaks the gdb pretty printer tests.

ChangeLog:

2017-01-02  Martin Galvan  <martingalvan@sourceware.org>

	* nptl/nptl-printers.py: Fix tabs/spaces mismatches.
2017-01-03 12:56:23 +05:30
Joseph Myers
df19fdcfec Fix MIPS n32 lseek, lseek64 (bug 21019).
The lseek consolidation broke lseek64 for MIPS n32, so resulting in
io/test-lfs failing with an incorrect return from ftello64.  This
configuration uses the lseek syscall with a 64-bit return value; as
the C syscall macros return long, they cannot be used in this case and
so an assembly implementation is needed; accordingly, this patch adds
lseek64 back to syscalls.list for this configuration.

lseek was also broken, truncating the result without checking for
overflow.  lseek however was already broken before the consolidation;
it aliased lseek64 so would return an out-of-range value, resulting in
architecturally undefined behavior in the caller if it tried to use a
non-sign-extended value with a 32-bit instruction.  This patch adds a
custom lseek implementation in C for n32, which calls __lseek64 to get
the 64-bit value then checks for overflow.

Because the prior lseek breakage did not show in test results, and the
lseek64 breakage showed only indirectly through tests of ftello64,
test coverage was clearly inadequate.  This patch extends
io/test-lfs.c to test the lseek64 return value (at a point where it
has already seeked over 2GB into a file), and then to test the lseek
return value (with the latter's expectations depending on whether
off_t is smaller than off64_t).

Tested for mips64 n32.  Also tested test-lfs for x86_64 and x86, where
as expected it passes.

	[BZ #21019]
	* sysdeps/unix/sysv/linux/mips/mips64/n32/syscalls.list (lseek64):
	New syscall entry.
	* sysdeps/unix/sysv/linux/mips/mips64/n32/lseek.c: New file.
	* io/test-lfs.c (do_test): Test offset returned from lseek64 and
	lseek.
2017-01-02 23:09:25 +00:00
Joseph Myers
4179178bf0 Add build-many-glibcs.py powerpc-linux-gnu-power4 build.
The 32-bit powerpc configurations in build-many-glibcs.py were failing
to cover the powerpc32 multiarch code at all, because that code is
only built for power4 and above configurations.  This patch adds a
32-bit power4 configuration so that at least some of that multiarch
code gets build-tested.  (This is preparation for reviewing the w_*
file renaming, which affects such powerpc32 multiarch files.)

	* scripts/build-many-glibcs.py (Context.add_all_configs): Add
	power4 glibc for powerpc-linux-gnu.
2017-01-02 22:13:42 +00:00
Adhemerval Zanella
cbce12d22b Fix test-sysvsem on some platforms
The command IPC_STAT of semctl expects an union semun in its fourth
argument instead of struct semid_ds *.  This can cause failures on
powerpc32-linux-gnu.

Checked on x86_64-linux-gnu, i686-linux-gnu, and powerpc32-linux-gnu
(qemu system emulation).
2017-01-02 18:53:50 -02:00
Joseph Myers
e082ac7533 Fix math/test-nearbyint-except for no-exceptions configurations.
The test math/test-nearbyint-except conditions some of its tests on an
EXCEPTION_TESTS call, not not all that need such a condition.  This
patch fixes it to use such a conditional for all its tests and to
return 77 (UNSUPPORTED) if none of the floating-point types tested
support exceptions.

Tested for mips64 soft float (where the test previously failed and is
now UNSUPPORTED); also tested for x86_64 to make sure the test still
PASSes in exceptions-supported cases.

	* math/test-nearbyint-except.c: Include <stdbool.h>.
	(any_supported): New variable.
	(TEST_FUNC): Return early if !EXCEPTION_TESTS (FLOAT).  Otherwise
	set any_supported.
	(do_test): Return 77 if no floating-point type supported
	exceptions.
2017-01-02 20:47:17 +00:00
Joseph Myers
f39cd196c6 Correct MIPS math-tests.h condition for sNaN payload preservation.
Testing for MIPS soft float shows that the issue with NaN payload
preservation applies to soft float as well as hard float: the
sfp-machine.h emulates hardware non-preservation semantics, although
only for the case of two NaN arguments.

This patch duly changes the MIPS math-tests.h to expect such
non-preservation for soft float as well as hard float.  The issue in
the NAN2008 case for which I posted
<https://gcc.gnu.org/ml/gcc-patches/2017-01/msg00034.html>, of sNaN
payloads being preserved but qNaN payloads not being preserved, is not
currently an issue for glibc tests because we don't have any tests
that check for qNaN payloads being preserved by arithmetic, so a
simple __mips_nan2008 conditional suffices without needing compiler
version checks in the __mips_nan2008 case.

Tested for mips64 soft float.

	* sysdeps/mips/math-tests.h (SNAN_TESTS_PRESERVE_PAYLOAD): Do not
	condition on [__mips_hard_float].
2017-01-02 20:28:36 +00:00
Adhemerval Zanella
23d27709a4 Fix i686 memchr for large input sizes
Similar to BZ#19387 and BZ#20971, both i686 memchr optimized assembly
implementations (memchr-sse2-bsf and memchr-sse2) do not handle the
size overflow correctly.

It is shown by the new tests added by commit 3daef2c8ee, where
both implementation fails with size as SIZE_MAX.

This patch uses a similar strategy used on 3daef2c8ee, where
saturared math is used for overflow case.

Checked on i686-linux-gnu.

	[BZ #21014]
	* sysdeps/i386/i686/multiarch/memchr-sse2-bsf.S (MEMCHR): Avoid overflow
	in pointer addition.
	* sysdeps/i386/i686/multiarch/memchr-sse2.S (MEMCHR): Likewise.
2017-01-02 17:52:51 -02:00
Torvald Riegel
62210e7eb1 Fix pthread_cond_t on sparc for new condvar.
* sysdeps/sparc/nptl/bits/pthreadtypes.h (pthread_cond_t): Adapt to
	new condvar.
2017-01-02 15:39:14 +01:00
Joseph Myers
dcf83b54ab Make build-many-glibcs.py use binutils 2.28 branch by default.
Now that a release branch exists for binutils 2.28, this patch makes
build-many-glibcs.py use that by default in place of 2.27.

	* scripts/build-many-glibcs.py (Context.checkout): Default
	binutils version to 2.28 branch.
2017-01-02 13:30:03 +00:00
Florian Weimer
73dfd08893 support: struct netent portability fix for support_format_netent 2017-01-01 09:35:45 +01:00
Florian Weimer
8e2c31b57f support: Use %td for pointer difference in xwrite 2017-01-01 09:27:54 +01:00
Florian Weimer
34a63b0973 malloc: Run tunables tests only if tunables are enabled
Otherwise, the environment variable will not have any effect and
the test will fail.
2017-01-01 09:27:03 +01:00
Joseph Myers
779032576d Update config.guess and config.sub to current versions.
* scripts/config.guess: Update to version 2017-01-01.
	* scripts/config.sub: Update to version 2017-01-01.
2017-01-01 00:29:55 +00:00
Joseph Myers
58b587c1f8 Update copyright dates not handled by scripts/update-copyrights.
I've updated copyright dates in glibc for 2017.  This is the patch for
the changes not generated by scripts/update-copyrights and subsequent
build / regeneration of generated files.

Please remember to include 2017 in the dates for any new files added
in future (which means updating any existing uncommitted patches you
have that add new files to use the new copyright dates in them).

	* NEWS: Update copyright dates.
	* catgets/gencat.c (print_version): Likewise.
	* csu/version.c (banner): Likewise.
	* debug/catchsegv.sh: Likewise.
	* debug/pcprofiledump.c (print_version): Likewise.
	* debug/xtrace.sh (do_version): Likewise.
	* elf/ldconfig.c (print_version): Likewise.
	* elf/ldd.bash.in: Likewise.
	* elf/pldd.c (print_version): Likewise.
	* elf/sotruss.sh: Likewise.
	* elf/sprof.c (print_version): Likewise.
	* iconv/iconv_prog.c (print_version): Likewise.
	* iconv/iconvconfig.c (print_version): Likewise.
	* locale/programs/locale.c (print_version): Likewise.
	* locale/programs/localedef.c (print_version): Likewise.
	* login/programs/pt_chown.c (print_version): Likewise.
	* malloc/memusage.sh (do_version): Likewise.
	* malloc/memusagestat.c (print_version): Likewise.
	* malloc/mtrace.pl: Likewise.
	* manual/libc.texinfo: Likewise.
	* nptl/version.c (banner): Likewise.
	* nscd/nscd.c (print_version): Likewise.
	* nss/getent.c (print_version): Likewise.
	* nss/makedb.c (print_version): Likewise.
	* posix/getconf.c (main): Likewise.
	* scripts/test-installation.pl: Likewise.
	* sysdeps/unix/sysv/linux/lddlibc4.c (main): Likewise.
2017-01-01 00:26:24 +00:00
Joseph Myers
bfff8b1bec Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
Florian Weimer
4f157746e0 Update DNS RR type definitions [BZ #20593]
This commit includes a new script which allows generating parts of
the header files from IANA DNS parameters protocol registry.
2016-12-31 21:16:27 +01:00
Florian Weimer
fc82b0a2df CVE-2015-5180: resolv: Fix crash with internal QTYPE [BZ #18784]
Also rename T_UNSPEC because an upcoming public header file
update will use that name.
2016-12-31 20:27:44 +01:00
Florian Weimer
3c589b1a8a tunables: Use correct unused attribute 2016-12-31 20:27:36 +01:00
Siddhesh Poyarekar
7715d3ab50 Add NEWS item for tunables 2016-12-31 23:49:24 +05:30
Siddhesh Poyarekar
b31b4d6ae5 User manual documentation for tunables
Create a new node for tunables documentation and add notes for the
malloc tunables.

	* manual/tunables.texi: New chapter.
	* manual/Makefile (chapters): Add it.
	* manual/probes.texi (@node): Point to the Tunables chapter.
2016-12-31 23:49:24 +05:30
Siddhesh Poyarekar
6765d5d34d Enhance --enable-tunables to select tunables frontend at build time
At the GNU Tools Cauldron 2016, the state of the current tunables
patchset was considered OK with the addition of a way to select the
frontend to be used for the tunables.  That is, to avoid being locked
in to one type of frontend initially, it should be possible to build
tunables with a different frontend with something as simple as a
configure switch.

To that effect, this patch enhances the --enable-tunables option to
accept more values than just 'yes' or 'no'.  The current frontend (and
default when enable-tunables is 'yes') is called 'valstring', to
select the frontend where a single environment variable is set to a
colon-separated value string.  More such frontends can be added in
future.

	* Makeconfig (have-tunables): Check for non-negative instead
	of positive.
	* configure.ac: Add 'valstring' as a valid value for
	--enable-tunables.
	* configure: Regenerate.
	* elf/Makefile (have-tunables): Check for non-negative instead
	of positive.
	(CPPFLAGS-dl-tunables.c): Define TUNABLES_FRONTEND for
	dl-tunables.c.
	* elf/dl-tunables.c (GLIBC_TUNABLES): Define only when
	TUNABLES_FRONTEND == TUNABLES_FRONTEND_valstring.
	(tunables_strdup): Likewise.
	(disable_tunables): Likewise.
	(parse_tunables): Likewise.
	(__tunables_init): Process GLIBC_TUNABLES envvar only when.
	TUNABLES_FRONTEND == TUNABLES_FRONTEND_valstring.
	* elf/dl-tunables.h (TUNABLES_FRONTEND_valstring): New macro.
	(TUNABLES_FRONTEND_yes): New macro, define as
	TUNABLES_FRONTEND_valstring by default.
	* manual/install.texi: Document new acceptable values for
	--enable-tunables.
	* INSTALL: Regenerate.
2016-12-31 23:49:24 +05:30
Siddhesh Poyarekar
9dd409a5f4 Initialize tunable list with the GLIBC_TUNABLES environment variable
Read tunables values from the users using the GLIBC_TUNABLES
environment variable.  The value of this variable is a colon-separated
list of name=value pairs.  So a typical string would look like this:

GLIBC_TUNABLES=glibc.malloc.mmap_threshold=2048:glibc.malloc.trim_threshold=1024

	* config.make.in (have-loop-to-function): Define.
	* elf/Makefile (CFLAGS-dl-tunables.c): Add
	-fno-tree-loop-distribute-patterns.
	* elf/dl-tunables.c: Include libc-internals.h.
	(GLIBC_TUNABLES): New macro.
	(tunables_strdup): New function.
	(parse_tunables): New function.
	(min_strlen): New function.
	(__tunables_init): Use the new functions and macro.
	(disable_tunable): Disable tunable from GLIBC_TUNABLES.
	* malloc/tst-malloc-usable-tunables.c: New test case.
	* malloc/tst-malloc-usable-static-tunables.c: New test case.
	* malloc/Makefile (tests, tests-static): Add tests.
2016-12-31 23:49:24 +05:30
Siddhesh Poyarekar
67e58f3941 Add framework for tunables
The tunables framework allows us to uniformly manage and expose global
variables inside glibc as switches to users.  tunables/README has
instructions for glibc developers to add new tunables.

Tunables support can be enabled by passing the --enable-tunables
configure flag to the configure script.  This patch only adds a
framework and does not pose any limitations on how tunable values are
read from the user.  It also adds environment variables used in malloc
behaviour tweaking to the tunables framework as a PoC of the
compatibility interface.

	* manual/install.texi: Add --enable-tunables option.
	* INSTALL: Regenerate.
	* README.tunables: New file.
	* Makeconfig (CPPFLAGS): Define TOP_NAMESPACE.
	(before-compile): Generate dl-tunable-list.h early.
	* config.h.in: Add HAVE_TUNABLES.
	* config.make.in: Add have-tunables.
	* configure.ac: Add --enable-tunables option.
	* configure: Regenerate.
	* csu/init-first.c (__libc_init_first): Move
	__libc_init_secure earlier...
	* csu/init-first.c (LIBC_START_MAIN):... to here.
	Include dl-tunables.h, libc-internal.h.
	(LIBC_START_MAIN) [!SHARED]: Initialize tunables for static
	binaries.
	* elf/Makefile (dl-routines): Add dl-tunables.
	* elf/Versions (ld): Add __tunable_set_val to GLIBC_PRIVATE
	namespace.
	* elf/dl-support (_dl_nondynamic_init): Unset MALLOC_CHECK_
	only when !HAVE_TUNABLES.
	* elf/rtld.c (process_envvars): Likewise.
	* elf/dl-sysdep.c [HAVE_TUNABLES]: Include dl-tunables.h
	(_dl_sysdep_start): Call __tunables_init.
	* elf/dl-tunable-types.h: New file.
	* elf/dl-tunables.c: New file.
	* elf/dl-tunables.h: New file.
	* elf/dl-tunables.list: New file.
	* malloc/tst-malloc-usable-static.c: New test case.
	* malloc/Makefile (tests-static): Add it.
	* malloc/arena.c [HAVE_TUNABLES]: Include dl-tunables.h.
	Define TUNABLE_NAMESPACE.
	(DL_TUNABLE_CALLBACK (set_mallopt_check)): New function.
	(DL_TUNABLE_CALLBACK_FNDECL): New macro.  Use it to define
	callback functions.
	(ptmalloc_init): Set tunable values.
	* scripts/gen-tunables.awk: New file.
	* sysdeps/mach/hurd/dl-sysdep.c: Include dl-tunables.h.
	(_dl_sysdep_start): Call __tunables_init.
2016-12-31 23:49:24 +05:30
Florian Weimer
bbe989ee87 resolv: Deprecate RES_BLAST 2016-12-31 19:08:39 +01:00
Florian Weimer
b76e065991 resolv: Deprecate the "inet6" option and RES_USE_INET6 [BZ #19582] 2016-12-31 18:55:14 +01:00
Florian Weimer
5840c75c2d resolv: Add beginnings of a libresolv test suite 2016-12-31 18:52:32 +01:00
Florian Weimer
f47ae51866 support: Implement --verbose option for test programs
Some tests can produce rather verbose tracing information,
and the --verbose option provides a standardized way to enable
such logging output.
2016-12-31 18:51:15 +01:00
Florian Weimer
039c5a05cc support: Use support_record_failure consistently
This causes more test programs to link in the support_record_failure
function, which triggers an early call to mmap from an ELF
constructor, but this should not have side effects intefering
with the functionality actually under test (unlike, say, a call
to malloc).
2016-12-31 18:51:15 +01:00
Florian Weimer
5707a64d94 support: Helper functions for entering namespaces 2016-12-31 18:51:07 +01:00
Florian Weimer
a851999f61 getentropy: Declare it in <unistd.h> for __USE_MISC [BZ #17252] 2016-12-31 15:11:29 +01:00
Torvald Riegel
ed19993b5b New condvar implementation that provides stronger ordering guarantees.
This is a new implementation for condition variables, required
after http://austingroupbugs.net/view.php?id=609 to fix bug 13165.  In
essence, we need to be stricter in which waiters a signal or broadcast
is required to wake up; this couldn't be solved using the old algorithm.
ISO C++ made a similar clarification, so this also fixes a bug in
current libstdc++, for example.

We can't use the old algorithm anymore because futexes do not guarantee
to wake in FIFO order.  Thus, when we wake, we can't simply let any
waiter grab a signal, but we need to ensure that one of the waiters
happening before the signal is woken up.  This is something the previous
algorithm violated (see bug 13165).

There's another issue specific to condvars: ABA issues on the underlying
futexes.  Unlike mutexes that have just three states, or semaphores that
have no tokens or a limited number of them, the state of a condvar is
the *order* of the waiters.  A waiter on a semaphore can grab a token
whenever one is available; a condvar waiter must only consume a signal
if it is eligible to do so as determined by the relative order of the
waiter and the signal.
Therefore, this new algorithm maintains two groups of waiters: Those
eligible to consume signals (G1), and those that have to wait until
previous waiters have consumed signals (G2).  Once G1 is empty, G2
becomes the new G1.  64b counters are used to avoid ABA issues.

This condvar doesn't yet use a requeue optimization (ie, on a broadcast,
waking just one thread and requeueing all others on the futex of the
mutex supplied by the program).  I don't think doing the requeue is
necessarily the right approach (but I haven't done real measurements
yet):
* If a program expects to wake many threads at the same time and make
that scalable, a condvar isn't great anyway because of how it requires
waiters to operate mutually exclusive (due to the mutex usage).  Thus, a
thundering herd problem is a scalability problem with or without the
optimization.  Using something like a semaphore might be more
appropriate in such a case.
* The scalability problem is actually at the mutex side; the condvar
could help (and it tries to with the requeue optimization), but it
should be the mutex who decides how that is done, and whether it is done
at all.
* Forcing all but one waiter into the kernel-side wait queue of the
mutex prevents/avoids the use of lock elision on the mutex.  Thus, it
prevents the only cure against the underlying scalability problem
inherent to condvars.
* If condvars use short critical sections (ie, hold the mutex just to
check a binary flag or such), which they should do ideally, then forcing
all those waiter to proceed serially with kernel-based hand-off (ie,
futex ops in the mutex' contended state, via the futex wait queues) will
be less efficient than just letting a scalable mutex implementation take
care of it.  Our current mutex impl doesn't employ spinning at all, but
if critical sections are short, spinning can be much better.
* Doing the requeue stuff requires all waiters to always drive the mutex
into the contended state.  This leads to each waiter having to call
futex_wake after lock release, even if this wouldn't be necessary.

	[BZ #13165]
	* nptl/pthread_cond_broadcast.c (__pthread_cond_broadcast): Rewrite to
	use new algorithm.
	* nptl/pthread_cond_destroy.c (__pthread_cond_destroy): Likewise.
	* nptl/pthread_cond_init.c (__pthread_cond_init): Likewise.
	* nptl/pthread_cond_signal.c (__pthread_cond_signal): Likewise.
	* nptl/pthread_cond_wait.c (__pthread_cond_wait): Likewise.
	(__pthread_cond_timedwait): Move here from pthread_cond_timedwait.c.
	(__condvar_confirm_wakeup, __condvar_cancel_waiting,
	__condvar_cleanup_waiting, __condvar_dec_grefs,
	__pthread_cond_wait_common): New.
	(__condvar_cleanup): Remove.
	* npt/pthread_condattr_getclock.c (pthread_condattr_getclock): Adapt.
	* npt/pthread_condattr_setclock.c (pthread_condattr_setclock):
	Likewise.
	* npt/pthread_condattr_getpshared.c (pthread_condattr_getpshared):
	Likewise.
	* npt/pthread_condattr_init.c (pthread_condattr_init): Likewise.
	* nptl/tst-cond1.c: Add comment.
	* nptl/tst-cond20.c (do_test): Adapt.
	* nptl/tst-cond22.c (do_test): Likewise.
	* sysdeps/aarch64/nptl/bits/pthreadtypes.h (pthread_cond_t): Adapt
	structure.
	* sysdeps/arm/nptl/bits/pthreadtypes.h (pthread_cond_t): Likewise.
	* sysdeps/ia64/nptl/bits/pthreadtypes.h (pthread_cond_t): Likewise.
	* sysdeps/m68k/nptl/bits/pthreadtypes.h (pthread_cond_t): Likewise.
	* sysdeps/microblaze/nptl/bits/pthreadtypes.h (pthread_cond_t):
	Likewise.
	* sysdeps/mips/nptl/bits/pthreadtypes.h (pthread_cond_t): Likewise.
	* sysdeps/nios2/nptl/bits/pthreadtypes.h (pthread_cond_t): Likewise.
	* sysdeps/s390/nptl/bits/pthreadtypes.h (pthread_cond_t): Likewise.
	* sysdeps/sh/nptl/bits/pthreadtypes.h (pthread_cond_t): Likewise.
	* sysdeps/tile/nptl/bits/pthreadtypes.h (pthread_cond_t): Likewise.
	* sysdeps/unix/sysv/linux/alpha/bits/pthreadtypes.h (pthread_cond_t):
	Likewise.
	* sysdeps/unix/sysv/linux/powerpc/bits/pthreadtypes.h (pthread_cond_t):
	Likewise.
	* sysdeps/x86/bits/pthreadtypes.h (pthread_cond_t): Likewise.
	* sysdeps/nptl/internaltypes.h (COND_NWAITERS_SHIFT): Remove.
	(COND_CLOCK_BITS): Adapt.
	* sysdeps/nptl/pthread.h (PTHREAD_COND_INITIALIZER): Adapt.
	* nptl/pthreadP.h (__PTHREAD_COND_CLOCK_MONOTONIC_MASK,
	__PTHREAD_COND_SHARED_MASK): New.
	* nptl/nptl-printers.py (CLOCK_IDS): Remove.
	(ConditionVariablePrinter, ConditionVariableAttributesPrinter): Adapt.
	* nptl/nptl_lock_constants.pysym: Adapt.
	* nptl/test-cond-printers.py: Adapt.
	* sysdeps/unix/sysv/linux/hppa/internaltypes.h (cond_compat_clear,
	cond_compat_check_and_clear): Adapt.
	* sysdeps/unix/sysv/linux/hppa/pthread_cond_timedwait.c: Remove file ...
	* sysdeps/unix/sysv/linux/hppa/pthread_cond_wait.c
	(__pthread_cond_timedwait): ... and move here.
	* nptl/DESIGN-condvar.txt: Remove file.
	* nptl/lowlevelcond.sym: Likewise.
	* nptl/pthread_cond_timedwait.c: Likewise.
	* sysdeps/unix/sysv/linux/i386/i486/pthread_cond_broadcast.S: Likewise.
	* sysdeps/unix/sysv/linux/i386/i486/pthread_cond_signal.S: Likewise.
	* sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S: Likewise.
	* sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S: Likewise.
	* sysdeps/unix/sysv/linux/i386/i586/pthread_cond_broadcast.S: Likewise.
	* sysdeps/unix/sysv/linux/i386/i586/pthread_cond_signal.S: Likewise.
	* sysdeps/unix/sysv/linux/i386/i586/pthread_cond_timedwait.S: Likewise.
	* sysdeps/unix/sysv/linux/i386/i586/pthread_cond_wait.S: Likewise.
	* sysdeps/unix/sysv/linux/i386/i686/pthread_cond_broadcast.S: Likewise.
	* sysdeps/unix/sysv/linux/i386/i686/pthread_cond_signal.S: Likewise.
	* sysdeps/unix/sysv/linux/i386/i686/pthread_cond_timedwait.S: Likewise.
	* sysdeps/unix/sysv/linux/i386/i686/pthread_cond_wait.S: Likewise.
	* sysdeps/unix/sysv/linux/x86_64/pthread_cond_broadcast.S: Likewise.
	* sysdeps/unix/sysv/linux/x86_64/pthread_cond_signal.S: Likewise.
	* sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S: Likewise.
	* sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S: Likewise.
2016-12-31 14:56:47 +01:00
Andreas Schwab
c0ff3befa9 Revert "Fix ChangeLog typo"
This reverts commit d2d43afa11.
2016-12-31 08:53:42 +01:00