This is the mail archive of the glibc-cvs@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

GNU C Library master sources branch master updated. glibc-2.25-316-g7c3018f


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".

The branch, master has been updated
       via  7c3018f9e4de2e9d1f03a749be41b5eced6f9834 (commit)
       via  171199159214f2f548132a98988435f9a450d3ef (commit)
      from  31073a53d8ff1e8bac53e34cb626dae5aa6ce69c (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=7c3018f9e4de2e9d1f03a749be41b5eced6f9834

commit 7c3018f9e4de2e9d1f03a749be41b5eced6f9834
Author: Zack Weinberg <zackw@panix.com>
Date:   Sun Nov 20 20:46:30 2016 -0500

    Suppress internal declarations for most of the testsuite.
    
    This patch adds a new build module called 'testsuite'.
    IS_IN (testsuite) implies _ISOMAC, as do IS_IN_build and __cplusplus
    (which means several ad-hoc tests for __cplusplus can go away).
    libc-symbols.h now suppresses almost all of *itself* when _ISOMAC is
    defined; in particular, _ISOMAC mode does not get config.h
    automatically anymore.
    
    There are still quite a few tests that need to see internal gunk of
    one variety or another.  For them, we now have 'tests-internal' and
    'test-internal-extras'; files in this category will still be compiled
    with MODULE_NAME=nonlib, and everything proceeds as it always has.
    The bulk of this patch is moving tests from 'tests' to
    'tests-internal'.  There is also 'tests-static-internal', which has
    the same effect on files in 'tests-static', and 'modules-names-tests',
    which has the *inverse* effect on files in 'modules-names' (it's
    inverted because most of the things in modules-names are *not* tests).
    For both of these, the file must appear in *both* the new variable and
    the old one.
    
    There is also now a special case for when libc-symbols.h is included
    without MODULE_NAME being defined at all.  (This happens during the
    creation of libc-modules.h, and also when preprocessing Versions
    files.)  When this happens, IS_IN is set to be always false and
    _ISOMAC is *not* defined, which was the status quo, but now it's
    explicit.
    
    The remaining changes to C source files in this patch seemed likely to
    cause problems in the absence of the main change.  They should be
    relatively self-explanatory.  In a few cases I duplicated a definition
    from an internal header rather than move the test to tests-internal;
    this was a judgement call each time and I'm happy to change those
    however reviewers feel is more appropriate.
    
    	* Makerules: New subdir configuration variables 'tests-internal'
    	and 'test-internal-extras'.  Test files in these categories will
    	still be compiled with MODULE_NAME=nonlib.  Test files in the
    	existing categories (tests, xtests, test-srcs, test-extras) are
    	now compiled with MODULE_NAME=testsuite.
    	New subdir configuration variable 'modules-names-tests'.  Files
    	which are in both 'modules-names' and 'modules-names-tests' will
    	be compiled with MODULE_NAME=testsuite instead of
    	MODULE_NAME=extramodules.
    	(gen-as-const-headers): Move to tests-internal.
    	(do-tests-clean, common-mostlyclean): Support tests-internal.
    	* Makeconfig (built-modules): Add testsuite.
    	* Makefile: Change libof-check-installed-headers-c and
    	libof-check-installed-headers-cxx to 'testsuite'.
    	* Rules: Likewise.  Support tests-internal.
    	* benchtests/strcoll-inputs/filelist#en_US.UTF-8:
    	Remove extra-modules.mk.
    
    	* config.h.in: Don't check for __OPTIMIZE__ or __FAST_MATH__ here.
    	* include/libc-symbols.h: Move definitions of _GNU_SOURCE,
    	PASTE_NAME, PASTE_NAME1, IN_MODULE, IS_IN, and IS_IN_LIB to the
    	very top of the file and rationalize their order.
    	If MODULE_NAME is not defined at all, define IS_IN to always be
    	false, and don't define _ISOMAC.
    	If any of IS_IN (testsuite), IS_IN_build, or __cplusplus are
    	true, define _ISOMAC and suppress everything else in this file,
    	starting with the inclusion of config.h.
    	Do check for inappropriate definitions of __OPTIMIZE__ and
    	__FAST_MATH__ here, but only if _ISOMAC is not defined.
            Correct some out-of-date commentary.
    
    	* include/math.h: If _ISOMAC is defined, undefine NO_LONG_DOUBLE
    	and _Mlong_double_ before including math.h.
    	* include/string.h: If _ISOMAC is defined, don't expose
    	_STRING_ARCH_unaligned. Move a comment to a more appropriate
    	location.
    
    	* include/errno.h, include/stdio.h, include/stdlib.h, include/string.h
    	* include/time.h, include/unistd.h, include/wchar.h: No need to
    	check __cplusplus nor use __BEGIN_DECLS/__END_DECLS.
    
    	* misc/sys/cdefs.h (__NTHNL): New macro.
    	* sysdeps/m68k/m680x0/fpu/bits/mathinline.h
    	(__m81_defun): Use __NTHNL to avoid errors with GCC 6.
    
    	* elf/tst-env-setuid-tunables.c: Include config.h with _LIBC
    	defined, for HAVE_TUNABLES.
    	* inet/tst-checks-posix.c: No need to define _ISOMAC.
    	* intl/tst-gettext2.c: Provide own definition of N_.
    	* math/test-signgam-finite-c99.c: No need to define _ISOMAC.
    	* math/test-signgam-main.c: No need to define _ISOMAC.
    	* stdlib/tst-strtod.c: Convert to test-driver. Split locale_test to...
    	* stdlib/tst-strtod1i.c: ...this new file.
    	* stdlib/tst-strtod5.c: Convert to test-driver and add copyright notice.
            Split tests of __strtod_internal to...
    	* stdlib/tst-strtod5i.c: ...this new file.
    	* string/test-string.h: Include stdint.h. Duplicate definition of
    	inhibit_loop_to_libcall here (from libc-symbols.h).
    	* string/test-strstr.c: Provide dummy definition of
    	libc_hidden_builtin_def when including strstr.c.
    	* sysdeps/ia64/fpu/libm-symbols.h: Suppress entire file in _ISOMAC
    	mode; no need to test __STRICT_ANSI__ nor __cplusplus as well.
    	* sysdeps/x86_64/fpu/math-tests-arch.h: Include cpu-features.h.
    	Don't include init-arch.h.
    	* sysdeps/x86_64/multiarch/test-multiarch.h: Include cpu-features.h.
    	Don't include init-arch.h.
    
    	* elf/Makefile: Move tst-ptrguard1-static, tst-stackguard1-static,
    	tst-tls1-static, tst-tls2-static, tst-tls3-static, loadtest,
    	unload, unload2, circleload1, neededtest, neededtest2,
    	neededtest3, neededtest4, tst-tls1, tst-tls2, tst-tls3,
    	tst-tls6, tst-tls7, tst-tls8, tst-dlmopen2, tst-ptrguard1,
    	tst-stackguard1, tst-_dl_addr_inside_object, and all of the
    	ifunc tests to tests-internal.
    	Don't add $(modules-names) to test-extras.
    	* inet/Makefile: Move tst-inet6_scopeid_pton to tests-internal.
    	Add tst-deadline to tests-static-internal.
    	* malloc/Makefile: Move tst-mallocstate and tst-scratch_buffer to
    	tests-internal.
    	* misc/Makefile: Move tst-atomic and tst-atomic-long to tests-internal.
    	* nptl/Makefile: Move tst-typesizes, tst-rwlock19, tst-sem11,
    	tst-sem12, tst-sem13, tst-barrier5, tst-signal7, tst-tls3,
    	tst-tls3-malloc, tst-tls5, tst-stackguard1, tst-sem11-static,
    	tst-sem12-static, and tst-stackguard1-static to tests-internal.
            Link tests-internal with libpthread also.
    	Don't add $(modules-names) to test-extras.
    	* nss/Makefile: Move tst-field to tests-internal.
    	* posix/Makefile: Move bug-regex5, bug-regex20, bug-regex33,
    	tst-rfc3484, tst-rfc3484-2, and tst-rfc3484-3 to tests-internal.
    	* stdlib/Makefile: Move tst-strtod1i, tst-strtod3, tst-strtod4,
    	tst-strtod5i, tst-tls-atexit, and tst-tls-atexit-nodelete to
    	tests-internal.
            * sunrpc/Makefile: Move tst-svc_register to tests-internal.
    	* sysdeps/powerpc/Makefile: Move test-get_hwcap and
    	test-get_hwcap-static to tests-internal.
    	* sysdeps/unix/sysv/linux/Makefile: Move tst-setgetname to
    	tests-internal.
    	* sysdeps/x86_64/fpu/Makefile: Add all libmvec test modules to
    	modules-names-tests.

diff --git a/ChangeLog b/ChangeLog
index b08ac48..246a8b4 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,107 @@
 2017-05-11  Zack Weinberg  <zackw@panix.com>
 
+	* Makerules: New subdir configuration variables 'tests-internal'
+	and 'test-internal-extras'.  Test files in these categories will
+	still be compiled with MODULE_NAME=nonlib.  Test files in the
+	existing categories (tests, xtests, test-srcs, test-extras) are
+	now compiled with MODULE_NAME=testsuite.
+	New subdir configuration variable 'modules-names-tests'.  Files
+	which are in both 'modules-names' and 'modules-names-tests' will
+	be compiled with MODULE_NAME=testsuite instead of
+	MODULE_NAME=extramodules.
+	(gen-as-const-headers): Move to tests-internal.
+	(do-tests-clean, common-mostlyclean): Support tests-internal.
+	* Makeconfig (built-modules): Add testsuite.
+	* Makefile: Change libof-check-installed-headers-c and
+	libof-check-installed-headers-cxx to 'testsuite'.
+	* Rules: Likewise.  Support tests-internal.
+	* benchtests/strcoll-inputs/filelist#en_US.UTF-8:
+	Remove extra-modules.mk.
+
+	* config.h.in: Don't check for __OPTIMIZE__ or __FAST_MATH__ here.
+	* include/libc-symbols.h: Move definitions of _GNU_SOURCE,
+	PASTE_NAME, PASTE_NAME1, IN_MODULE, IS_IN, and IS_IN_LIB to the
+	very top of the file and rationalize their order.
+	If MODULE_NAME is not defined at all, define IS_IN to always be
+	false, and don't define _ISOMAC.
+	If any of IS_IN (testsuite), IS_IN_build, or __cplusplus are
+	true, define _ISOMAC and suppress everything else in this file,
+	starting with the inclusion of config.h.
+	Do check for inappropriate definitions of __OPTIMIZE__ and
+	__FAST_MATH__ here, but only if _ISOMAC is not defined.
+	Correct some out-of-date commentary.
+
+	* include/math.h: If _ISOMAC is defined, undefine NO_LONG_DOUBLE
+	and _Mlong_double_ before including math.h.
+	* include/string.h: If _ISOMAC is defined, don't expose
+	_STRING_ARCH_unaligned. Move a comment to a more appropriate
+	location.
+
+	* include/errno.h, include/stdio.h, include/stdlib.h, include/string.h
+	* include/time.h, include/unistd.h, include/wchar.h: No need to
+	check __cplusplus nor use __BEGIN_DECLS/__END_DECLS.
+
+	* misc/sys/cdefs.h (__NTHNL): New macro.
+	* sysdeps/m68k/m680x0/fpu/bits/mathinline.h
+	(__m81_defun): Use __NTHNL to avoid errors with GCC 6.
+
+	* elf/tst-env-setuid-tunables.c: Include config.h with _LIBC
+	defined, for HAVE_TUNABLES.
+	* inet/tst-checks-posix.c: No need to define _ISOMAC.
+	* intl/tst-gettext2.c: Provide own definition of N_.
+	* math/test-signgam-finite-c99.c: No need to define _ISOMAC.
+	* math/test-signgam-main.c: No need to define _ISOMAC.
+	* stdlib/tst-strtod.c: Convert to test-driver. Split locale_test to...
+	* stdlib/tst-strtod1i.c: ...this new file.
+	* stdlib/tst-strtod5.c: Convert to test-driver and add copyright notice.
+	Split tests of __strtod_internal to...
+	* stdlib/tst-strtod5i.c: ...this new file.
+	* string/test-string.h: Include stdint.h. Duplicate definition of
+	inhibit_loop_to_libcall here (from libc-symbols.h).
+	* string/test-strstr.c: Provide dummy definition of
+	libc_hidden_builtin_def when including strstr.c.
+	* sysdeps/ia64/fpu/libm-symbols.h: Suppress entire file in _ISOMAC
+	mode; no need to test __STRICT_ANSI__ nor __cplusplus as well.
+	* sysdeps/x86_64/fpu/math-tests-arch.h: Include cpu-features.h.
+	Don't include init-arch.h.
+	* sysdeps/x86_64/multiarch/test-multiarch.h: Include cpu-features.h.
+	Don't include init-arch.h.
+
+	* elf/Makefile: Move tst-ptrguard1-static, tst-stackguard1-static,
+	tst-tls1-static, tst-tls2-static, tst-tls3-static, loadtest,
+	unload, unload2, circleload1, neededtest, neededtest2,
+	neededtest3, neededtest4, tst-tls1, tst-tls2, tst-tls3,
+	tst-tls6, tst-tls7, tst-tls8, tst-dlmopen2, tst-ptrguard1,
+	tst-stackguard1, tst-_dl_addr_inside_object, and all of the
+	ifunc tests to tests-internal.
+	Don't add $(modules-names) to test-extras.
+	* inet/Makefile: Move tst-inet6_scopeid_pton to tests-internal.
+	Add tst-deadline to tests-static-internal.
+	* malloc/Makefile: Move tst-mallocstate and tst-scratch_buffer to
+	tests-internal.
+	* misc/Makefile: Move tst-atomic and tst-atomic-long to tests-internal.
+	* nptl/Makefile: Move tst-typesizes, tst-rwlock19, tst-sem11,
+	tst-sem12, tst-sem13, tst-barrier5, tst-signal7, tst-tls3,
+	tst-tls3-malloc, tst-tls5, tst-stackguard1, tst-sem11-static,
+	tst-sem12-static, and tst-stackguard1-static to tests-internal.
+	Link tests-internal with libpthread also.
+	Don't add $(modules-names) to test-extras.
+	* nss/Makefile: Move tst-field to tests-internal.
+	* posix/Makefile: Move bug-regex5, bug-regex20, bug-regex33,
+	tst-rfc3484, tst-rfc3484-2, and tst-rfc3484-3 to tests-internal.
+	* stdlib/Makefile: Move tst-strtod1i, tst-strtod3, tst-strtod4,
+	tst-strtod5i, tst-tls-atexit, and tst-tls-atexit-nodelete to
+	tests-internal.
+	* sunrpc/Makefile: Move tst-svc_register to tests-internal.
+	* sysdeps/powerpc/Makefile: Move test-get_hwcap and
+	test-get_hwcap-static to tests-internal.
+	* sysdeps/unix/sysv/linux/Makefile: Move tst-setgetname to
+	tests-internal.
+	* sysdeps/x86_64/fpu/Makefile: Add all libmvec test modules to
+	modules-names-tests.
+
+2017-05-11  Zack Weinberg  <zackw@panix.com>
+
 	* libio/libio.h: Condition dummy definition of _IO_lock_t on
 	_IO_lock_t_defined, not _IO_MTSAFE_IO. Unconditionally use the
 	non-_IO_MTSAFE_IO definitions for _IO_peekc, _IO_flockfile,
diff --git a/Makeconfig b/Makeconfig
index 1c81511..b494b82 100644
--- a/Makeconfig
+++ b/Makeconfig
@@ -908,7 +908,8 @@ libio-include = -I$(..)libio
 # List of non-library modules that we build.
 built-modules = iconvprogs iconvdata ldconfig lddlibc4 libmemusage \
 		libSegFault libpcprofile librpcsvc locale-programs \
-		memusagestat nonlib nscd extramodules libnldbl libsupport
+		memusagestat nonlib nscd extramodules libnldbl libsupport \
+		testsuite
 
 in-module = $(subst -,_,$(firstword $(libof-$(basename $(@F))) \
 				    $(libof-$(<F)) \
diff --git a/Makefile b/Makefile
index 1b896b9..3e0ae6f 100644
--- a/Makefile
+++ b/Makefile
@@ -270,7 +270,7 @@ $(objpfx)check-local-headers.out: scripts/check-local-headers.sh
 ifneq "$(headers)" ""
 # Special test of all the installed headers in this directory.
 tests-special += $(objpfx)check-installed-headers-c.out
-libof-check-installed-headers-c := nonlib
+libof-check-installed-headers-c := testsuite
 $(objpfx)check-installed-headers-c.out: \
     scripts/check-installed-headers.sh $(headers)
 	$(SHELL) $(..)scripts/check-installed-headers.sh c \
@@ -280,7 +280,7 @@ $(objpfx)check-installed-headers-c.out: \
 
 ifneq "$(CXX)" ""
 tests-special += $(objpfx)check-installed-headers-cxx.out
-libof-check-installed-headers-cxx := nonlib
+libof-check-installed-headers-cxx := testsuite
 $(objpfx)check-installed-headers-cxx.out: \
     scripts/check-installed-headers.sh $(headers)
 	$(SHELL) $(..)scripts/check-installed-headers.sh c++ \
diff --git a/Makerules b/Makerules
index 15f46e5..2000e54 100644
--- a/Makerules
+++ b/Makerules
@@ -277,7 +277,7 @@ $(common-objpfx)%.h $(common-objpfx)%.h.d: $(..)scripts/gen-as-const.awk \
 vpath %.sym $(sysdirs)
 before-compile += $(gen-as-const-headers:%.sym=$(common-objpfx)%.h)
 
-tests += $(gen-as-const-headers:%.sym=test-as-const-%)
+tests-internal += $(gen-as-const-headers:%.sym=test-as-const-%)
 generated += $(gen-as-const-headers:%.sym=test-as-const-%.c)
 $(objpfx)test-as-const-%.c: $(..)scripts/gen-as-const.awk $(..)Makerules \
 			    %.sym $(common-objpfx)%.h
@@ -793,10 +793,21 @@ endif
 
 # The makefile may define $(modules-names) to build additional modules.
 # These are built with $(build-module), except any in $(modules-names-nobuild).
+# MODULE_NAME=extramodules, except any in $(modules-names-tests).
 ifdef modules-names
-cpp-srcs-left := $(modules-names)
-lib = extramodules
-include $(patsubst %,$(..)libof-iterator.mk,$(modules-names))
+cpp-srcs-left := $(filter-out $(modules-names-tests),$(modules-names))
+ifneq (,$(cpp-srcs-left))
+lib := extramodules
+include $(patsubst %,$(..)libof-iterator.mk,$(cpp-srcs-left))
+endif
+
+ifdef modules-names-tests
+cpp-srcs-left := $(filter $(modules-names-tests),$(modules-names))
+ifneq (,$(cpp-srcs-left))
+lib := testsuite
+include $(patsubst %,$(..)libof-iterator.mk,$(cpp-srcs-left))
+endif
+endif
 
 extra-modules-build := $(filter-out $(modules-names-nobuild),$(modules-names))
 $(extra-modules-build:%=$(objpfx)%.so): $(objpfx)%.so: \
@@ -808,7 +819,7 @@ endif
 	     $(patsubst %.o,%.d,$(filter %.o,$(extra-objs:.os=.o))) \
 	     $(patsubst %.oS,%.d,$(filter %.oS,$(extra-objs))) \
 	     $(patsubst %.o,%.d,$(filter %.o,$(extra-test-objs:.os=.o))) \
-	     $(addsuffix .d,$(tests) $(xtests) $(test-srcs))
+	     $(addsuffix .d,$(tests) $(tests-internal) $(xtests) $(test-srcs))
 ifeq ($(build-programs),yes)
 +depfiles += $(addsuffix .d,$(others) $(sysdep-others))
 endif
@@ -1321,7 +1332,17 @@ check: tests
 .PHONY: xcheck
 xcheck: xtests
 
-all-nonlib = $(strip $(tests) $(xtests) $(test-srcs) $(test-extras) $(others))
+# The only difference between MODULE_NAME=testsuite and MODULE_NAME=nonlib is
+# that almost all internal declarations from config.h, libc-symbols.h, and
+# include/*.h are not available to 'testsuite' code, but are to 'nonlib' code.
+all-testsuite := $(strip $(tests) $(xtests) $(test-srcs) $(test-extras))
+ifneq (,$(all-testsuite))
+cpp-srcs-left = $(all-testsuite)
+lib := testsuite
+include $(patsubst %,$(..)libof-iterator.mk,$(cpp-srcs-left))
+endif
+
+all-nonlib := $(strip $(tests-internal) $(test-internal-extras) $(others))
 ifneq (,$(all-nonlib))
 cpp-srcs-left = $(all-nonlib)
 lib := nonlib
@@ -1535,22 +1556,32 @@ clean: common-clean
 mostlyclean: common-mostlyclean
 
 do-tests-clean:
-	-rm -f $(addprefix $(objpfx),$(addsuffix .out,$(tests) $(xtests) \
+	-rm -f $(addprefix $(objpfx),$(addsuffix .out,$(tests) \
+						      $(tests-internal) \
+						      $(xtests) \
 						      $(test-srcs)) \
 				     $(addsuffix .test-result,$(tests) \
+							      $(tests-internal) \
 							      $(xtests) \
 							      $(test-srcs)))
 
 # Remove the object files.
 common-mostlyclean:
-	-rm -f $(addprefix $(objpfx),$(tests) $(xtests) $(test-srcs) \
+	-rm -f $(addprefix $(objpfx),$(tests) $(tests-internal) $(xtests) \
+				     $(test-srcs) \
 				     $(others) $(sysdep-others) stubs \
-				     $(addsuffix .o,$(tests) $(xtests) \
-						    $(test-srcs) $(others) \
+				     $(addsuffix .o,$(tests) \
+						    $(tests-internal) \
+						    $(xtests) \
+						    $(test-srcs) \
+						    $(others) \
 						    $(sysdep-others)) \
-				     $(addsuffix .out,$(tests) $(xtests) \
+				     $(addsuffix .out,$(tests) \
+						      $(tests-internal) \
+						      $(xtests) \
 						      $(test-srcs)) \
 				     $(addsuffix .test-result,$(tests) \
+							      $(tests-internal) \
 							      $(xtests) \
 							      $(test-srcs)))
 	-rm -f $(addprefix $(objpfx),$(extra-objs) $(extra-test-objs) \
diff --git a/Rules b/Rules
index 917bc96..168cf50 100644
--- a/Rules
+++ b/Rules
@@ -84,7 +84,7 @@ common-generated += dummy.o dummy.c
 ifneq "$(headers)" ""
 # Special test of all the installed headers in this directory.
 tests-special += $(objpfx)check-installed-headers-c.out
-libof-check-installed-headers-c := nonlib
+libof-check-installed-headers-c := testsuite
 $(objpfx)check-installed-headers-c.out: \
     $(..)scripts/check-installed-headers.sh $(headers)
 	$(SHELL) $(..)scripts/check-installed-headers.sh c \
@@ -94,7 +94,7 @@ $(objpfx)check-installed-headers-c.out: \
 
 ifneq "$(CXX)" ""
 tests-special += $(objpfx)check-installed-headers-cxx.out
-libof-check-installed-headers-cxx := nonlib
+libof-check-installed-headers-cxx := testsuite
 $(objpfx)check-installed-headers-cxx.out: \
     $(..)scripts/check-installed-headers.sh $(headers)
 	$(SHELL) $(..)scripts/check-installed-headers.sh c++ \
@@ -129,12 +129,14 @@ endif
 others: $(py-const)
 
 ifeq ($(run-built-tests),no)
-tests: $(addprefix $(objpfx),$(filter-out $(tests-unsupported),$(tests)) \
+tests: $(addprefix $(objpfx),$(filter-out $(tests-unsupported), \
+                                          $(tests) $(tests-internal)) \
 			     $(test-srcs)) $(tests-special) \
 			     $(tests-printers-programs)
 xtests: tests $(xtests-special)
 else
-tests: $(tests:%=$(objpfx)%.out) $(tests-special) $(tests-printers-out)
+tests: $(tests:%=$(objpfx)%.out) $(tests-internal:%=$(objpfx)%.out) \
+       $(tests-special) $(tests-printers-out)
 xtests: tests $(xtests:%=$(objpfx)%.out) $(xtests-special)
 endif
 
@@ -143,7 +145,7 @@ xtests-special-notdir = $(patsubst $(objpfx)%, %, $(xtests-special))
 ifeq ($(run-built-tests),no)
 tests-expected =
 else
-tests-expected = $(tests) $(tests-printers)
+tests-expected = $(tests) $(tests-internal) $(tests-printers)
 endif
 tests:
 	$(..)scripts/merge-test-results.sh -s $(objpfx) $(subdir) \
@@ -156,7 +158,7 @@ xtests:
 
 ifeq ($(build-programs),yes)
 binaries-all-notests = $(others) $(sysdep-others)
-binaries-all-tests = $(tests) $(xtests) $(test-srcs)
+binaries-all-tests = $(tests) $(tests-internal) $(xtests) $(test-srcs)
 binaries-all = $(binaries-all-notests) $(binaries-all-tests)
 binaries-static-notests = $(others-static)
 binaries-static-tests = $(tests-static) $(xtests-static)
@@ -170,7 +172,7 @@ binaries-pie-notests =
 endif
 else
 binaries-all-notests =
-binaries-all-tests = $(tests) $(xtests) $(test-srcs)
+binaries-all-tests = $(tests) $(tests-internal) $(xtests) $(test-srcs)
 binaries-all = $(binaries-all-tests)
 binaries-static-notests =
 binaries-static-tests =
@@ -230,7 +232,7 @@ $(addprefix $(objpfx),$(binaries-static-tests)): %: %.o \
 	$(+link-static-tests)
 endif
 
-ifneq "$(strip $(tests) $(xtests) $(test-srcs))" ""
+ifneq "$(strip $(tests) $(tests-internal) $(xtests) $(test-srcs))" ""
 # These are the implicit rules for making test outputs
 # from the test programs and whatever input files are present.
 
diff --git a/config.h.in b/config.h.in
index 2caa412..2241857 100644
--- a/config.h.in
+++ b/config.h.in
@@ -1,14 +1,3 @@
-#if !defined IS_IN_build && !defined __ASSEMBLER__ && !defined _ISOMAC \
-    && !defined __OPTIMIZE__
-# error "glibc cannot be compiled without optimization"
-#endif
-
-/* Another evil option when it comes to compiling the C library is
-   --ffast-math since it alters the ABI.  */
-#if defined __FAST_MATH__ && !defined TEST_FAST_MATH
-# error "glibc must not be compiled with -ffast-math"
-#endif
-
 /* Define if building with SELinux support.  Set by --with-selinux.  */
 #undef	HAVE_SELINUX
 
diff --git a/elf/Makefile b/elf/Makefile
index baf9678..2fd6bf7 100644
--- a/elf/Makefile
+++ b/elf/Makefile
@@ -142,43 +142,49 @@ $(inst_auditdir)/sotruss-lib.so: $(objpfx)sotruss-lib.so $(+force)
 	$(do-install-program)
 endif
 
-tests = tst-tls1 tst-tls2 tst-tls9 tst-leaks1 \
-	tst-array1 tst-array2 tst-array3 tst-array4 tst-array5 \
-	tst-auxv
-tests-static = tst-tls1-static tst-tls2-static tst-stackguard1-static \
-	       tst-leaks1-static tst-array1-static tst-array5-static \
-	       tst-ptrguard1-static tst-dl-iter-static \
+tests-static-normal := tst-leaks1-static tst-array1-static tst-array5-static \
+	       tst-dl-iter-static \
 	       tst-tlsalign-static tst-tlsalign-extern-static \
 	       tst-linkall-static tst-env-setuid tst-env-setuid-tunables
+tests-static-internal := tst-tls1-static tst-tls2-static \
+	       tst-ptrguard1-static tst-stackguard1-static
+
+tests := tst-tls9 tst-leaks1 \
+	tst-array1 tst-array2 tst-array3 tst-array4 tst-array5 \
+	tst-auxv
+tests-internal := tst-tls1 tst-tls2 $(tests-static-internal)
+tests-static := $(tests-static-normal) $(tests-static-internal)
+
 ifeq (yes,$(build-shared))
 tests-static += tst-tls9-static
 tst-tls9-static-ENV = \
        LD_LIBRARY_PATH=$(objpfx):$(common-objpfx):$(common-objpfx)dlfcn
-endif
-tests += $(tests-static)
-ifeq (yes,$(build-shared))
-tests += loadtest restest1 preloadtest loadfail multiload origtest resolvfail \
-	 constload1 order noload filter unload \
+
+tests += restest1 preloadtest loadfail multiload origtest resolvfail \
+	 constload1 order noload filter \
 	 reldep reldep2 reldep3 reldep4 nodelete nodelete2 \
-	 nodlopen nodlopen2 neededtest neededtest2 \
-	 neededtest3 neededtest4 unload2 lateglobal initfirst global \
+	 nodlopen nodlopen2 lateglobal initfirst global \
 	 restest2 next dblload dblunload reldep5 reldep6 reldep7 reldep8 \
-	 circleload1 tst-tls3 tst-tls4 tst-tls5 tst-tls6 tst-tls7 tst-tls8 \
+	 tst-tls4 tst-tls5 \
 	 tst-tls10 tst-tls11 tst-tls12 tst-tls13 tst-tls14 tst-tls15 \
 	 tst-tls16 tst-tls17 tst-tls18 tst-tls19 tst-tls-dlinfo \
 	 tst-align tst-align2 $(tests-execstack-$(have-z-execstack)) \
 	 tst-dlmodcount tst-dlopenrpath tst-deep1 \
-	 tst-dlmopen1 tst-dlmopen2 tst-dlmopen3 \
+	 tst-dlmopen1 tst-dlmopen3 \
 	 unload3 unload4 unload5 unload6 unload7 unload8 tst-global1 order2 \
 	 tst-audit1 tst-audit2 tst-audit8 tst-audit9 \
-	 tst-stackguard1 tst-addr1 tst-thrlock \
+	 tst-addr1 tst-thrlock \
 	 tst-unique1 tst-unique2 $(if $(CXX),tst-unique3 tst-unique4 \
 	 tst-nodelete) \
 	 tst-initorder tst-initorder2 tst-relsort1 tst-null-argv \
-	 tst-ptrguard1 tst-tlsalign tst-tlsalign-extern tst-nodelete-opened \
+	 tst-tlsalign tst-tlsalign-extern tst-nodelete-opened \
 	 tst-nodelete2 tst-audit11 tst-audit12 tst-dlsym-error tst-noload \
 	 tst-latepthread tst-tls-manydynamic tst-nodelete-dlclose
 #	 reldep9
+tests-internal += loadtest unload unload2 circleload1 \
+	 neededtest neededtest2 neededtest3 neededtest4 \
+	 tst-tls3 tst-tls6 tst-tls7 tst-tls8 tst-dlmopen2 \
+	 tst-ptrguard1 tst-stackguard1
 ifeq ($(build-hardcoded-path-in-tests),yes)
 tests += tst-dlopen-aout
 LDFLAGS-tst-dlopen-aout = $(no-pie-ldflag)
@@ -289,21 +295,23 @@ CFLAGS-vismain.c = $(PIE-ccflag)
 endif
 modules-execstack-yes = tst-execstack-mod
 extra-test-objs += $(addsuffix .os,$(strip $(modules-names)))
-# We need this variable to be sure the test modules get the right CPPFLAGS.
-test-extras += $(modules-names)
 
 # filtmod1.so has a special rule
 modules-names-nobuild := filtmod1
 
+tests += $(tests-static)
+
 ifneq (no,$(multi-arch))
-tests-static += ifuncmain1static ifuncmain1picstatic \
+tests-ifuncstatic := ifuncmain1static ifuncmain1picstatic \
 		ifuncmain2static ifuncmain2picstatic \
 		ifuncmain4static ifuncmain4picstatic \
 		ifuncmain5static ifuncmain5picstatic \
 		ifuncmain7static ifuncmain7picstatic
-
+tests-static += $(tests-ifuncstatic)
+tests-internal += $(tests-ifuncstatic)
 ifeq (yes,$(build-shared))
-tests += ifuncmain1 ifuncmain1pic ifuncmain1vis ifuncmain1vispic \
+tests-internal += \
+	 ifuncmain1 ifuncmain1pic ifuncmain1vis ifuncmain1vispic \
 	 ifuncmain1staticpic \
 	 ifuncmain2 ifuncmain2pic ifuncmain3 ifuncmain4 \
 	 ifuncmain5 ifuncmain5pic ifuncmain5staticpic \
@@ -311,11 +319,11 @@ tests += ifuncmain1 ifuncmain1pic ifuncmain1vis ifuncmain1vispic \
 ifunc-test-modules = ifuncdep1 ifuncdep1pic ifuncdep2 ifuncdep2pic \
 		     ifuncdep5 ifuncdep5pic
 extra-test-objs += $(ifunc-test-modules:=.o)
-test-extras += $(ifunc-test-modules)
+test-internal-extras += $(ifunc-test-modules)
 ifeq (yes,$(have-fpie))
 ifunc-pie-tests = ifuncmain1pie ifuncmain1vispie ifuncmain1staticpie \
 		  ifuncmain5pie ifuncmain6pie ifuncmain7pie
-tests += $(ifunc-pie-tests)
+tests-internal += $(ifunc-pie-tests)
 tests-pie += $(ifunc-pie-tests)
 endif
 modules-names += ifuncmod1 ifuncmod3 ifuncmod5 ifuncmod6
@@ -357,7 +365,7 @@ endif
 # unit test driver must be able to link with the shared object
 # that is going to eventually go into an installed DSO.
 ifeq (yesyes,$(have-fpie)$(build-shared))
-tests += tst-_dl_addr_inside_object
+tests-internal += tst-_dl_addr_inside_object
 tests-pie += tst-_dl_addr_inside_object
 $(objpfx)tst-_dl_addr_inside_object: $(objpfx)dl-addr-obj.os
 CFLAGS-tst-_dl_addr_inside_object.c += $(PIE-ccflag)
diff --git a/elf/tst-env-setuid-tunables.c b/elf/tst-env-setuid-tunables.c
index a5f0a81..afcb146 100644
--- a/elf/tst-env-setuid-tunables.c
+++ b/elf/tst-env-setuid-tunables.c
@@ -19,6 +19,12 @@
    glibc.malloc.check and glibc.malloc.mmap_threshold but also retain
    glibc.malloc.mmap_threshold in an unprivileged child.  */
 
+/* This is compiled as part of the testsuite but needs to see
+   HAVE_TUNABLES. */
+#define _LIBC 1
+#include "config.h"
+#undef _LIBC
+
 #define test_parent test_parent_tunables
 #define test_child test_child_tunables
 
diff --git a/include/errno.h b/include/errno.h
index 7df41df..73fc32e 100644
--- a/include/errno.h
+++ b/include/errno.h
@@ -2,7 +2,7 @@
 
 #include <stdlib/errno.h>
 
-#if defined _ERRNO_H && !defined _ISOMAC && !defined __cplusplus
+#if defined _ERRNO_H && !defined _ISOMAC
 
 # if IS_IN (rtld)
 #  include <dl-sysdep.h>
diff --git a/include/libc-symbols.h b/include/libc-symbols.h
index 18f26b2..3310e3a 100644
--- a/include/libc-symbols.h
+++ b/include/libc-symbols.h
@@ -20,26 +20,46 @@
 #ifndef _LIBC_SYMBOLS_H
 #define _LIBC_SYMBOLS_H	1
 
-#define IN_MODULE PASTE_NAME (MODULE_, MODULE_NAME)
-#define IS_IN(lib) (IN_MODULE == MODULE_##lib)
+/* This file is included implicitly in the compilation of every source file,
+   using -include.  It includes config.h.  */
 
-/* Returns true if the current module is a versioned library.  Versioned
-   library names culled from shlib-versions files are assigned a MODULE_*
-   value lower than MODULE_LIBS_BEGIN.  */
-#define IS_IN_LIB (IN_MODULE > MODULE_LIBS_BEGIN)
-
-#define PASTE_NAME(a,b)      PASTE_NAME1 (a,b)
-#define PASTE_NAME1(a,b)     a##b
-
-/* This file's macros are included implicitly in the compilation of every
-   file in the C library by -imacros.
-
-   We include config.h which is generated by configure.
-   It should define for us the following symbol:
+/* Enable declarations of GNU extensions, since we are compiling them.  */
+#define _GNU_SOURCE 1
+
+#ifdef MODULE_NAME
+
+/* Use `#if IS_IN (module)` to detect what component is being compiled.  */
+#define PASTE_NAME1(a,b) a##b
+#define PASTE_NAME(a,b)	 PASTE_NAME1 (a,b)
+#define IN_MODULE	 PASTE_NAME (MODULE_, MODULE_NAME)
+#define IS_IN(lib)	 (IN_MODULE == MODULE_##lib)
+
+/* True if the current module is a versioned library.  Versioned
+   library names culled from shlib-versions files are assigned a
+   MODULE_* value greater than MODULE_LIBS_BEGIN.  */
+#define IS_IN_LIB	 (IN_MODULE > MODULE_LIBS_BEGIN)
+
+/* The testsuite, and some other ancillary code, should be compiled against
+   as close an approximation to the installed headers as possible.
+   Defining this symbol disables most internal-use-only declarations
+   provided by this header, and all those provided by other internal
+   wrapper headers.  */
+#if IS_IN (testsuite) || defined IS_IN_build || defined __cplusplus
+# define _ISOMAC 1
+#endif
 
-   * HAVE_ASM_SET_DIRECTIVE if we have `.set B, A' instead of `A = B'.
+#else
+/* The generation process for a few files created very early in the
+   build (notably libc-modules.h itself) involves preprocessing this
+   header without defining MODULE_NAME.  Under these conditions,
+   internal declarations (especially from config.h) must be visible,
+   but IS_IN should always evaluate as false.  */
+# define IS_IN(lib) 0
+# define IS_IN_LIB 0
+# define IN_MODULE (-1)
+#endif
 
-   */
+#ifndef _ISOMAC
 
 /* This is defined for the compilation of all C library code.  features.h
    tests this to avoid inclusion of stubs.h while compiling the library,
@@ -50,8 +70,17 @@
    itself is being compiled, or just some generator program.  */
 #define _LIBC	1
 
-/* Enable declarations of GNU extensions, since we are compiling them.  */
-#define _GNU_SOURCE	1
+/* Some files must be compiled with optimization on.  */
+#if !defined __ASSEMBLER__ && !defined __OPTIMIZE__
+# error "glibc cannot be compiled without optimization"
+#endif
+
+/* -ffast-math cannot be applied to the C library, as it alters the ABI.
+   Some test components that use -ffast-math are currently not part of
+   IS_IN (testsuite) for technical reasons, so we have a secondary override.  */
+#if defined __FAST_MATH__ && !defined TEST_FAST_MATH
+# error "glibc must not be compiled with -ffast-math"
+#endif
 
 #include <config.h>
 
@@ -936,4 +965,5 @@ for linking")
 # define _GL_ATTRIBUTE_CONST /* empty */
 #endif
 
+#endif /* !_ISOMAC */
 #endif /* libc-symbols.h */
diff --git a/include/math.h b/include/math.h
index a4f5562..6ff6783 100644
--- a/include/math.h
+++ b/include/math.h
@@ -1,5 +1,10 @@
 #ifndef	_MATH_H
 
+#ifdef _ISOMAC
+# undef NO_LONG_DOUBLE
+# undef _Mlong_double_
+#endif
+
 #include <math/math.h>
 
 #ifndef _ISOMAC
diff --git a/include/stdio.h b/include/stdio.h
index 4e7cfa1..ed6593b 100644
--- a/include/stdio.h
+++ b/include/stdio.h
@@ -1,11 +1,10 @@
 #ifndef _STDIO_H
-# if defined __need_FILE || defined __need___FILE || defined _ISOMAC
+# if defined _ISOMAC || defined __need_FILE || defined __need___FILE
 #  include <libio/stdio.h>
 # else
 #  include <libio/stdio.h>
 
 /* Now define the internal interfaces.  */
-__BEGIN_DECLS
 
 extern int __fcloseall (void);
 extern int __snprintf (char *__restrict __s, size_t __maxlen,
@@ -30,7 +29,6 @@ extern int __vsscanf (const char *__restrict __s,
 		      _G_va_list __arg)
      __attribute__ ((__format__ (__scanf__, 2, 0)));
 
-#  ifndef __cplusplus
 extern int __sprintf_chk (char *, int, size_t, const char *, ...) __THROW;
 extern int __snprintf_chk (char *, size_t, int, size_t, const char *, ...)
      __THROW;
@@ -52,7 +50,6 @@ extern int __obstack_printf_chk (struct obstack *, int, const char *, ...)
      __THROW;
 extern int __obstack_vprintf_chk (struct obstack *, int, const char *,
 				  _G_va_list) __THROW;
-#  endif
 
 extern int __isoc99_fscanf (FILE *__restrict __stream,
 			    const char *__restrict __format, ...) __wur;
@@ -186,7 +183,5 @@ libc_hidden_proto (__obstack_vprintf_chk)
 extern FILE * __fmemopen (void *buf, size_t len, const char *mode);
 libc_hidden_proto (__fmemopen)
 
-__END_DECLS
 # endif
-
 #endif
diff --git a/include/stdlib.h b/include/stdlib.h
index 929cead..c3ee680 100644
--- a/include/stdlib.h
+++ b/include/stdlib.h
@@ -9,8 +9,6 @@
 #if !defined _ISOMAC
 # include <sys/stat.h>
 
-__BEGIN_DECLS
-
 extern __typeof (strtol_l) __strtol_l;
 extern __typeof (strtoul_l) __strtoul_l;
 extern __typeof (strtoll_l) __strtoll_l;
@@ -261,8 +259,6 @@ extern __typeof (unsetenv) unsetenv attribute_hidden;
 extern __typeof (__strtoul_internal) __strtoul_internal attribute_hidden;
 # endif
 
-__END_DECLS
-
 #endif
 
 #endif  /* include/stdlib.h */
diff --git a/include/string.h b/include/string.h
index f166de9..ce71674 100644
--- a/include/string.h
+++ b/include/string.h
@@ -1,6 +1,8 @@
 #ifndef _STRING_H
 
-#if !defined _ISOMAC && !defined __cplusplus
+#ifndef _ISOMAC
+/* Some of these are defined as macros in the real string.h, so we must
+   prototype them before including it.  */
 #include <sys/types.h>
 
 extern void *__memccpy (void *__dest, const void *__src,
@@ -46,16 +48,14 @@ extern void __bzero (void *__s, size_t __n) __THROW __nonnull ((1));
 extern int __ffs (int __i) __attribute__ ((const));
 
 extern char *__strerror_r (int __errnum, char *__buf, size_t __buflen);
-#endif
 
 /* Get _STRING_ARCH_unaligned.  */
 #include <string_private.h>
+#endif
 
-/* Now the real definitions.  We do this here since some of the functions
-   above are defined as macros in the headers.  */
 #include <string/string.h>
 
-#if !defined _ISOMAC && !defined __cplusplus
+#ifndef _ISOMAC
 extern __typeof (strcoll_l) __strcoll_l;
 extern __typeof (strxfrm_l) __strxfrm_l;
 extern __typeof (strcasecmp_l) __strcasecmp_l;
diff --git a/include/time.h b/include/time.h
index 6badf0e..3a828e0 100644
--- a/include/time.h
+++ b/include/time.h
@@ -4,8 +4,6 @@
 #ifndef _ISOMAC
 # include <xlocale.h>
 
-__BEGIN_DECLS
-
 extern __typeof (strftime_l) __strftime_l;
 libc_hidden_proto (__strftime_l)
 extern __typeof (strptime_l) __strptime_l;
@@ -104,7 +102,5 @@ extern double __difftime (time_t time1, time_t time0);
    actual clock ID.  */
 #define CLOCK_IDFIELD_SIZE	3
 
-__END_DECLS
-
 #endif
 #endif
diff --git a/include/unistd.h b/include/unistd.h
index 0cdf06e..5b2a414 100644
--- a/include/unistd.h
+++ b/include/unistd.h
@@ -2,7 +2,6 @@
 # include <posix/unistd.h>
 
 # ifndef _ISOMAC
-__BEGIN_DECLS
 
 libc_hidden_proto (_exit, __noreturn__)
 rtld_hidden_proto (_exit, __noreturn__)
@@ -190,7 +189,5 @@ extern int __getlogin_r_loginuid (char *name, size_t namesize)
 extern __typeof (__access) __access_noerrno attribute_hidden;
 #  endif
 
-__END_DECLS
 # endif
-
 #endif
diff --git a/include/wchar.h b/include/wchar.h
index 6272130..e2579a1 100644
--- a/include/wchar.h
+++ b/include/wchar.h
@@ -172,7 +172,6 @@ extern int __vfwprintf (__FILE *__restrict __s,
 			const wchar_t *__restrict __format,
 			__gnuc_va_list __arg)
      /* __attribute__ ((__format__ (__wprintf__, 2, 0))) */;
-#ifndef __cplusplus
 extern int __vfwprintf_chk (FILE *__restrict __s, int __flag,
 			    const wchar_t *__restrict __format,
 			    __gnuc_va_list __arg)
@@ -184,7 +183,6 @@ extern int __vswprintf_chk (wchar_t *__restrict __s, size_t __n,
      /* __attribute__ ((__format__ (__wprintf__, 5, 0))) */;
 libc_hidden_proto (__vfwprintf_chk)
 libc_hidden_proto (__vswprintf_chk)
-#endif
 
 extern int __isoc99_fwscanf (__FILE *__restrict __stream,
 			     const wchar_t *__restrict __format, ...);
diff --git a/inet/Makefile b/inet/Makefile
index 6a7d3e0..38c61bd 100644
--- a/inet/Makefile
+++ b/inet/Makefile
@@ -52,11 +52,16 @@ aux := check_pf check_native ifreq
 tests := htontest test_ifindex tst-ntoa tst-ether_aton tst-network \
 	 tst-gethnm test-ifaddrs bug-if1 test-inet6_opt tst-ether_line \
 	 tst-getni1 tst-getni2 tst-inet6_rth tst-checks tst-checks-posix \
-	 tst-sockaddr tst-inet6_scopeid_pton test-hnto-types tst-deadline
+	 tst-sockaddr test-hnto-types
 
 # tst-deadline must be linked statically so that we can access
 # internal functions.
 tests-static += tst-deadline
+tests-static-internal := tst-deadline
+
+# tst-inet6_scopeid_pton also needs internal functions but does not
+# need to be linked statically.
+tests-internal := tst-inet6_scopeid_pton
 
 include ../Rules
 
diff --git a/inet/tst-checks-posix.c b/inet/tst-checks-posix.c
index e46b6a2..cdcb5cb 100644
--- a/inet/tst-checks-posix.c
+++ b/inet/tst-checks-posix.c
@@ -19,6 +19,5 @@
 /* Process tst-checks.c in POSIX mode.  */
 #undef _GNU_SOURCE
 #define _POSIX_C_SOURCE 200112L
-#define _ISOMAC
 
 #include "tst-checks.c"
diff --git a/intl/tst-gettext2.c b/intl/tst-gettext2.c
index bdfe76d..894e09e 100644
--- a/intl/tst-gettext2.c
+++ b/intl/tst-gettext2.c
@@ -24,6 +24,8 @@
 #include <stdlib.h>
 #include <stdio.h>
 
+#define N_(msgid) msgid
+
 struct data_t
 {
   const char *selection;
diff --git a/malloc/Makefile b/malloc/Makefile
index e380e96..d0f23f7 100644
--- a/malloc/Makefile
+++ b/malloc/Makefile
@@ -25,9 +25,9 @@ include ../Makeconfig
 dist-headers := malloc.h
 headers := $(dist-headers) obstack.h mcheck.h
 tests := mallocbug tst-malloc tst-valloc tst-calloc tst-obstack \
-	 tst-mallocstate tst-mcheck tst-mallocfork tst-trim1 \
+	 tst-mcheck tst-mallocfork tst-trim1 \
 	 tst-malloc-usable tst-realloc tst-posix_memalign \
-	 tst-pvalloc tst-memalign tst-mallopt tst-scratch_buffer \
+	 tst-pvalloc tst-memalign tst-mallopt \
 	 tst-malloc-backtrace tst-malloc-thread-exit \
 	 tst-malloc-thread-fail tst-malloc-fork-deadlock \
 	 tst-mallocfork2 \
@@ -39,6 +39,8 @@ tests-static := \
 	 tst-interpose-static-thread \
 	 tst-malloc-usable-static \
 
+tests-internal := tst-mallocstate tst-scratch_buffer
+
 ifneq (no,$(have-tunables))
 tests += tst-malloc-usable-tunables
 tests-static += tst-malloc-usable-static-tunables
diff --git a/math/test-signgam-finite-c99.c b/math/test-signgam-finite-c99.c
index a67a803..3dacef5 100644
--- a/math/test-signgam-finite-c99.c
+++ b/math/test-signgam-finite-c99.c
@@ -20,7 +20,6 @@
 #undef __LIBC_INTERNAL_MATH_INLINES
 #undef _GNU_SOURCE
 #undef _Mlong_double_
-#define _ISOMAC
 
 #include <math.h>
 #include <stdio.h>
diff --git a/math/test-signgam-main.c b/math/test-signgam-main.c
index 11ebbe3..e3cecf7 100644
--- a/math/test-signgam-main.c
+++ b/math/test-signgam-main.c
@@ -19,7 +19,6 @@
 #undef _LIBC
 #undef __LIBC_INTERNAL_MATH_INLINES
 #undef _GNU_SOURCE
-#define _ISOMAC
 
 #include <math.h>
 #include <stdio.h>
diff --git a/misc/Makefile b/misc/Makefile
index 622da67..91e425b 100644
--- a/misc/Makefile
+++ b/misc/Makefile
@@ -79,8 +79,9 @@ gpl2lgpl := error.c error.h
 tests := tst-dirname tst-tsearch tst-fdset tst-efgcvt tst-mntent tst-hsearch \
 	 tst-error1 tst-pselect tst-insremque tst-mntent2 bug-hsearch1 \
 	 tst-mntent-blank-corrupt tst-mntent-blank-passno bug18240 \
-	 tst-preadvwritev tst-preadvwritev64 tst-makedev tst-empty \
-	 tst-atomic tst-atomic-long
+	 tst-preadvwritev tst-preadvwritev64 tst-makedev tst-empty
+
+tests-internal := tst-atomic tst-atomic-long
 tests-static := tst-empty
 
 ifeq ($(run-built-tests),yes)
diff --git a/misc/sys/cdefs.h b/misc/sys/cdefs.h
index b03ebda..74f9a49 100644
--- a/misc/sys/cdefs.h
+++ b/misc/sys/cdefs.h
@@ -55,15 +55,18 @@
 #  define __THROW	__attribute__ ((__nothrow__ __LEAF))
 #  define __THROWNL	__attribute__ ((__nothrow__))
 #  define __NTH(fct)	__attribute__ ((__nothrow__ __LEAF)) fct
+#  define __NTHNL(fct)  __attribute__ ((__nothrow__)) fct
 # else
 #  if defined __cplusplus && __GNUC_PREREQ (2,8)
 #   define __THROW	throw ()
 #   define __THROWNL	throw ()
 #   define __NTH(fct)	__LEAF_ATTR fct throw ()
+#   define __NTHNL(fct) fct throw ()
 #  else
 #   define __THROW
 #   define __THROWNL
 #   define __NTH(fct)	fct
+#   define __NTHNL(fct) fct
 #  endif
 # endif
 
diff --git a/nptl/Makefile b/nptl/Makefile
index 5b34b5c..d39bb50 100644
--- a/nptl/Makefile
+++ b/nptl/Makefile
@@ -223,8 +223,7 @@ LDLIBS-tst-once5 = -lstdc++
 CFLAGS-tst-thread_local1.o = -std=gnu++11
 LDLIBS-tst-thread_local1 = -lstdc++
 
-tests = tst-typesizes \
-	tst-attr1 tst-attr2 tst-attr3 tst-default-attr \
+tests = tst-attr1 tst-attr2 tst-attr3 tst-default-attr \
 	tst-mutex1 tst-mutex2 tst-mutex3 tst-mutex4 tst-mutex5 tst-mutex6 \
 	tst-mutex7 tst-mutex8 tst-mutex9 tst-mutex5a tst-mutex7a \
 	tst-mutexpi1 tst-mutexpi2 tst-mutexpi3 tst-mutexpi4 tst-mutexpi5 \
@@ -244,13 +243,12 @@ tests = tst-typesizes \
 	tst-rwlock4 tst-rwlock5 tst-rwlock6 tst-rwlock7 tst-rwlock8 \
 	tst-rwlock9 tst-rwlock10 tst-rwlock11 tst-rwlock12 tst-rwlock13 \
 	tst-rwlock14 tst-rwlock15 tst-rwlock16 tst-rwlock17 tst-rwlock18 \
-	tst-rwlock19 \
 	tst-once1 tst-once2 tst-once3 tst-once4 tst-once5 \
 	tst-key1 tst-key2 tst-key3 tst-key4 \
 	tst-sem1 tst-sem2 tst-sem3 tst-sem4 tst-sem5 tst-sem6 tst-sem7 \
-	tst-sem8 tst-sem9 tst-sem10 tst-sem11 tst-sem12 tst-sem13 tst-sem14 \
+	tst-sem8 tst-sem9 tst-sem10 tst-sem14 \
 	tst-sem15 tst-sem16 \
-	tst-barrier1 tst-barrier2 tst-barrier3 tst-barrier4 tst-barrier5 \
+	tst-barrier1 tst-barrier2 tst-barrier3 tst-barrier4 \
 	tst-align tst-align3 \
 	tst-basic1 tst-basic2 tst-basic3 tst-basic4 tst-basic5 tst-basic6 \
 	tst-basic7 \
@@ -275,7 +273,7 @@ tests = tst-typesizes \
 	tst-cleanup0 tst-cleanup1 tst-cleanup2 tst-cleanup3 tst-cleanup4 \
 	tst-flock1 tst-flock2 \
 	tst-signal1 tst-signal2 tst-signal3 tst-signal4 tst-signal5 \
-	tst-signal6 tst-signal7 \
+	tst-signal6 \
 	tst-exec1 tst-exec2 tst-exec3 tst-exec4 tst-exec5 \
 	tst-exit1 tst-exit2 tst-exit3 \
 	tst-stdio1 tst-stdio2 \
@@ -300,6 +298,10 @@ tests = tst-typesizes \
 	tst-bad-schedattr \
 	tst-thread_local1 tst-mutex-errorcheck tst-robust10 \
 	tst-robust-fork tst-create-detached
+
+tests-internal := tst-typesizes tst-rwlock19 tst-sem11 tst-sem12 tst-sem13 \
+		  tst-barrier5 tst-signal7
+
 xtests = tst-setuid1 tst-setuid1-static tst-setuid2 \
 	tst-mutexpp1 tst-mutexpp6 tst-mutexpp10
 test-srcs = tst-oddstacklimit
@@ -357,8 +359,8 @@ tests += tst-cancelx2 tst-cancelx3 tst-cancelx4 tst-cancelx5 \
 	 tst-cleanupx0 tst-cleanupx1 tst-cleanupx2 tst-cleanupx3 tst-cleanupx4 \
 	 tst-oncex3 tst-oncex4
 ifeq ($(build-shared),yes)
-tests += tst-atfork2 tst-tls3 tst-tls3-malloc tst-tls4 tst-tls5 tst-_res1 \
-	 tst-fini1 tst-stackguard1
+tests += tst-atfork2 tst-tls4 tst-_res1 tst-fini1
+tests-internal += tst-tls3 tst-tls3-malloc tst-tls5 tst-stackguard1
 tests-nolibpthread += tst-fini1
 ifeq ($(have-z-execstack),yes)
 tests += tst-execstack
@@ -372,7 +374,7 @@ modules-names = tst-atfork2mod tst-tls3mod tst-tls4moda tst-tls4modb \
 		tst-join7mod
 extra-test-objs += $(addsuffix .os,$(strip $(modules-names))) \
 		   tst-cleanup4aux.o tst-cleanupx4aux.o
-test-extras += $(modules-names) tst-cleanup4aux tst-cleanupx4aux
+test-extras += tst-cleanup4aux tst-cleanupx4aux
 test-modules = $(addprefix $(objpfx),$(addsuffix .so,$(modules-names)))
 
 tst-atfork2mod.so-no-z-defs = yes
@@ -425,9 +427,9 @@ tests-static += tst-locale1 tst-locale2 tst-stackguard1-static \
 		tst-cancel21-static tst-cancel24-static tst-cond8-static \
 		tst-mutex8-static tst-mutexpi8-static tst-sem11-static \
 		tst-sem12-static
-tests += tst-stackguard1-static tst-cancel21-static tst-cancel24-static \
-	 tst-cond8-static tst-mutex8-static tst-mutexpi8-static \
-	 tst-sem11-static tst-sem12-static
+tests += tst-cancel21-static tst-cancel24-static \
+	 tst-cond8-static tst-mutex8-static tst-mutexpi8-static
+tests-internal += tst-sem11-static tst-sem12-static tst-stackguard1-static
 xtests-static += tst-setuid1-static
 
 # These tests are linked with libc before libpthread
@@ -622,8 +624,9 @@ ifeq ($(build-shared),yes)
 $(addprefix $(objpfx), \
   $(filter-out $(tests-static) $(xtests-static) $(tests-reverse) \
     $(tests-nolibpthread), \
-    $(tests) $(xtests) $(test-srcs))): $(objpfx)libpthread.so \
-				       $(objpfx)libpthread_nonshared.a
+    $(tests) $(tests-internal) $(xtests) $(test-srcs))): \
+	$(objpfx)libpthread.so \
+	$(objpfx)libpthread_nonshared.a
 $(objpfx)tst-unload: $(libdl)
 # $(objpfx)../libc.so is used instead of $(common-objpfx)libc.so,
 # since otherwise libpthread.so comes before libc.so when linking.
diff --git a/nss/Makefile b/nss/Makefile
index fa0418e..430be87 100644
--- a/nss/Makefile
+++ b/nss/Makefile
@@ -49,9 +49,9 @@ makedb-modules = xmalloc hash-string
 extra-objs		+= $(makedb-modules:=.o)
 
 tests-static            = tst-field
+tests-internal		= tst-field
 tests			= test-netdb tst-nss-test1 test-digits-dots \
-			  tst-nss-getpwent bug17079 \
-			  $(tests-static)
+			  tst-nss-getpwent bug17079
 xtests			= bug-erange
 
 # If we have a thread library then we can test cancellation against
diff --git a/posix/Makefile b/posix/Makefile
index fe722cb..0025d8a 100644
--- a/posix/Makefile
+++ b/posix/Makefile
@@ -69,24 +69,23 @@ tests		:= test-errno tstgetopt testfnm runtests runptests \
 		   tst-mmap tst-mmap-offset tst-getaddrinfo tst-truncate \
 		   tst-truncate64 tst-fork tst-fnmatch tst-regexloc tst-dir \
 		   tst-chmod bug-regex1 bug-regex2 bug-regex3 bug-regex4 \
-		   tst-gnuglob tst-regex bug-regex5 bug-regex6 bug-regex7 \
+		   tst-gnuglob tst-regex bug-regex6 bug-regex7 \
 		   bug-regex8 bug-regex9 bug-regex10 bug-regex11 bug-regex12 \
 		   bug-regex13 bug-regex14 bug-regex15 bug-regex16 \
-		   bug-regex17 bug-regex18 bug-regex19 bug-regex20 \
+		   bug-regex17 bug-regex18 bug-regex19 \
 		   bug-regex21 bug-regex22 bug-regex23 bug-regex24 \
 		   bug-regex25 bug-regex26 bug-regex27 bug-regex28 \
 		   bug-regex29 bug-regex30 bug-regex31 bug-regex32 \
-		   bug-regex33 tst-nice tst-nanosleep tst-regex2 \
+		   tst-nice tst-nanosleep tst-regex2 \
 		   transbug tst-rxspencer tst-pcre tst-boost \
 		   bug-ga1 tst-vfork1 tst-vfork2 tst-vfork3 tst-waitid \
 		   tst-getaddrinfo2 bug-glob1 bug-glob2 bug-glob3 tst-sysconf \
 		   tst-execvp1 tst-execvp2 tst-execlp1 tst-execlp2 \
 		   tst-execv1 tst-execv2 tst-execl1 tst-execl2 \
 		   tst-execve1 tst-execve2 tst-execle1 tst-execle2 \
-		   tst-execvp3 tst-execvp4 tst-rfc3484 tst-rfc3484-2 \
+		   tst-execvp3 tst-execvp4 \
 		   tst-execvpe1 tst-execvpe2 tst-execvpe3 tst-execvpe4 \
 		   tst-execvpe5 tst-execvpe6 \
-		   tst-rfc3484-3 \
 		   tst-getaddrinfo3 tst-fnmatch2 tst-cpucount tst-cpuset \
 		   bug-getopt1 bug-getopt2 bug-getopt3 bug-getopt4 \
 		   bug-getopt5 tst-getopt_long1 bug-regex34 bug-regex35 \
@@ -94,6 +93,8 @@ tests		:= test-errno tstgetopt testfnm runtests runptests \
 		   tst-fnmatch3 bug-regex36 tst-getaddrinfo5 \
 		   tst-posix_spawn-fd tst-posix_spawn-setsid \
 		   tst-posix_fadvise tst-posix_fadvise64
+tests-internal	:= bug-regex5 bug-regex20 bug-regex33 \
+		   tst-rfc3484 tst-rfc3484-2 tst-rfc3484-3
 xtests		:= bug-ga2
 ifeq (yes,$(build-shared))
 test-srcs	:= globtest
diff --git a/stdlib/Makefile b/stdlib/Makefile
index 4206f25..9b0acce 100644
--- a/stdlib/Makefile
+++ b/stdlib/Makefile
@@ -69,23 +69,26 @@ test-srcs	:= tst-fmtmsg
 tests		:= tst-strtol tst-strtod testmb testrand testsort testdiv   \
 		   test-canon test-canon2 tst-strtoll tst-environ	    \
 		   tst-xpg-basename tst-random tst-random2 tst-bsearch	    \
-		   tst-limits tst-rand48 bug-strtod tst-setcontext          \
+		   tst-limits tst-rand48 bug-strtod tst-setcontext	    \
 		   tst-setcontext2 test-a64l tst-qsort tst-system testmb2   \
-		   bug-strtod2 tst-atof1 tst-atof2 tst-strtod2 tst-strtod3  \
-		   tst-rand48-2 tst-makecontext tst-strtod4 tst-strtod5     \
+		   bug-strtod2 tst-atof1 tst-atof2 tst-strtod2		    \
+		   tst-rand48-2 tst-makecontext tst-strtod5		    \
 		   tst-qsort2 tst-makecontext2 tst-strtod6 tst-unsetenv1    \
 		   tst-makecontext3 bug-getcontext bug-fmtmsg1		    \
 		   tst-secure-getenv tst-strtod-overflow tst-strtod-round   \
-		   tst-tininess tst-strtod-underflow tst-tls-atexit	    \
-		   tst-setcontext3 tst-tls-atexit-nodelete		    \
+		   tst-tininess tst-strtod-underflow tst-setcontext3	    \
 		   tst-strtol-locale tst-strtod-nan-locale tst-strfmon_l    \
 		   tst-quick_exit tst-thread-quick_exit tst-width	    \
-		   tst-width-stdint tst-strfrom tst-strfrom-locale \
+		   tst-width-stdint tst-strfrom tst-strfrom-locale	    \
 		   tst-getrandom
+tests-internal	:= tst-strtod1i tst-strtod3 tst-strtod4 tst-strtod5i \
+		   tst-tls-atexit tst-tls-atexit-nodelete
+tests-static	:= tst-secure-getenv
+
 ifeq ($(build-hardcoded-path-in-tests),yes)
 tests += tst-empty-env
 endif
-tests-static	:= tst-secure-getenv
+
 ifeq ($(have-cxx-thread_local),yes)
 CFLAGS-tst-quick_exit.o = -std=c++11
 LDLIBS-tst-quick_exit = -lstdc++
diff --git a/stdlib/tst-strtod.c b/stdlib/tst-strtod.c
index ced6d8a..1ab7f8a 100644
--- a/stdlib/tst-strtod.c
+++ b/stdlib/tst-strtod.c
@@ -1,4 +1,5 @@
-/* Copyright (C) 1991-2017 Free Software Foundation, Inc.
+/* Basic tests for strtod.
+   Copyright (C) 1991-2017 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -79,7 +80,6 @@ static const struct ltest tests[] =
 
 static void expand (char *dst, int c);
 static int long_dbl (void);
-static int locale_test (void);
 
 static int
 do_test (void)
@@ -176,8 +176,6 @@ do_test (void)
 
   status |= long_dbl ();
 
-  status |= locale_test ();
-
   return status ? EXIT_FAILURE : EXIT_SUCCESS;
 }
 
@@ -217,63 +215,4 @@ long_dbl (void)
   return 0;
 }
 
-/* Perform a few tests in a locale with thousands separators.  */
-static int
-locale_test (void)
-{
-  static const struct
-  {
-    const char *loc;
-    const char *str;
-    double exp;
-    ptrdiff_t nread;
-  } tests[] =
-    {
-      { "de_DE.UTF-8", "1,5", 1.5, 3 },
-      { "de_DE.UTF-8", "1.5", 1.0, 1 },
-      { "de_DE.UTF-8", "1.500", 1500.0, 5 },
-      { "de_DE.UTF-8", "36.893.488.147.419.103.232", 0x1.0p65, 26 }
-    };
-#define ntests (sizeof (tests) / sizeof (tests[0]))
-  size_t n;
-  int result = 0;
-
-  puts ("\nLocale tests");
-
-  for (n = 0; n < ntests; ++n)
-    {
-      double d;
-      char *endp;
-
-      if (setlocale (LC_ALL, tests[n].loc) == NULL)
-	{
-	  printf ("cannot set locale %s\n", tests[n].loc);
-	  result = 1;
-	  continue;
-	}
-
-      /* We call __strtod_interal here instead of strtod to tests the
-	 handling of grouping.  */
-      d = __strtod_internal (tests[n].str, &endp, 1);
-      if (d != tests[n].exp)
-	{
-	  printf ("strtod(\"%s\") returns %g and not %g\n",
-		  tests[n].str, d, tests[n].exp);
-	  result = 1;
-	}
-      else if (endp - tests[n].str != tests[n].nread)
-	{
-	  printf ("strtod(\"%s\") read %td bytes and not %td\n",
-		  tests[n].str, endp - tests[n].str, tests[n].nread);
-	  result = 1;
-	}
-    }
-
-  if (result == 0)
-    puts ("all OK");
-
-  return result;
-}
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
+#include <support/test-driver.c>
diff --git a/stdlib/tst-strtod1i.c b/stdlib/tst-strtod1i.c
new file mode 100644
index 0000000..6f79425
--- /dev/null
+++ b/stdlib/tst-strtod1i.c
@@ -0,0 +1,84 @@
+/* Basic tests for __strtod_internal.
+   Copyright (C) 1991-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <ctype.h>
+#include <locale.h>
+#include <stddef.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <errno.h>
+#include <string.h>
+#include <math.h>
+
+/* Perform a few tests in a locale with thousands separators.  */
+static int
+do_test (void)
+{
+  static const struct
+  {
+    const char *loc;
+    const char *str;
+    double exp;
+    ptrdiff_t nread;
+  } tests[] =
+    {
+      { "de_DE.UTF-8", "1,5", 1.5, 3 },
+      { "de_DE.UTF-8", "1.5", 1.0, 1 },
+      { "de_DE.UTF-8", "1.500", 1500.0, 5 },
+      { "de_DE.UTF-8", "36.893.488.147.419.103.232", 0x1.0p65, 26 }
+    };
+#define ntests (sizeof (tests) / sizeof (tests[0]))
+  size_t n;
+  int result = 0;
+
+  puts ("\nLocale tests");
+
+  for (n = 0; n < ntests; ++n)
+    {
+      double d;
+      char *endp;
+
+      if (setlocale (LC_ALL, tests[n].loc) == NULL)
+	{
+	  printf ("cannot set locale %s\n", tests[n].loc);
+	  result = 1;
+	  continue;
+	}
+
+      d = __strtod_internal (tests[n].str, &endp, 1);
+      if (d != tests[n].exp)
+	{
+	  printf ("strtod(\"%s\") returns %g and not %g\n",
+		  tests[n].str, d, tests[n].exp);
+	  result = 1;
+	}
+      else if (endp - tests[n].str != tests[n].nread)
+	{
+	  printf ("strtod(\"%s\") read %td bytes and not %td\n",
+		  tests[n].str, endp - tests[n].str, tests[n].nread);
+	  result = 1;
+	}
+    }
+
+  if (result == 0)
+    puts ("all OK");
+
+  return result ? EXIT_FAILURE : EXIT_SUCCESS;
+}
+
+#include <support/test-driver.c>
diff --git a/stdlib/tst-strtod5.c b/stdlib/tst-strtod5.c
index 337c746..8976e39 100644
--- a/stdlib/tst-strtod5.c
+++ b/stdlib/tst-strtod5.c
@@ -1,3 +1,21 @@
+/* Tests of strtod in a locale using decimal comma.
+   Copyright (C) 2007-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
 #include <locale.h>
 #include <stdio.h>
 #include <stdlib.h>
@@ -9,38 +27,27 @@
 static const struct
 {
   const char *in;
-  int group;
   double expected;
 } tests[] =
   {
-    { "0", 0, 0.0 },
-    { "000", 0, 0.0 },
-    { "-0", 0, -0.0 },
-    { "-000", 0, -0.0 },
-    { "0,", 0, 0.0 },
-    { "-0,", 0, -0.0 },
-    { "0,0", 0, 0.0 },
-    { "-0,0", 0, -0.0 },
-    { "0e-10", 0, 0.0 },
-    { "-0e-10", 0, -0.0 },
-    { "0,e-10", 0, 0.0 },
-    { "-0,e-10", 0, -0.0 },
-    { "0,0e-10", 0, 0.0 },
-    { "-0,0e-10", 0, -0.0 },
-    { "0e-1000000", 0, 0.0 },
-    { "-0e-1000000", 0, -0.0 },
-    { "0,0e-1000000", 0, 0.0 },
-    { "-0,0e-1000000", 0, -0.0 },
-    { "0", 1, 0.0 },
-    { "000", 1, 0.0 },
-    { "-0", 1, -0.0 },
-    { "-000", 1, -0.0 },
-    { "0e-10", 1, 0.0 },
-    { "-0e-10", 1, -0.0 },
-    { "0e-1000000", 1, 0.0 },
-    { "-0e-1000000", 1, -0.0 },
-    { "000"NBSP"000"NBSP"000", 1, 0.0 },
-    { "-000"NBSP"000"NBSP"000", 1, -0.0 }
+    { "0", 0.0 },
+    { "000", 0.0 },
+    { "-0", -0.0 },
+    { "-000", -0.0 },
+    { "0,", 0.0 },
+    { "-0,", -0.0 },
+    { "0,0", 0.0 },
+    { "-0,0", -0.0 },
+    { "0e-10", 0.0 },
+    { "-0e-10", -0.0 },
+    { "0,e-10", 0.0 },
+    { "-0,e-10", -0.0 },
+    { "0,0e-10", 0.0 },
+    { "-0,0e-10", -0.0 },
+    { "0e-1000000", 0.0 },
+    { "-0e-1000000", -0.0 },
+    { "0,0e-1000000", 0.0 },
+    { "-0,0e-1000000", -0.0 },
   };
 #define NTESTS (sizeof (tests) / sizeof (tests[0]))
 
@@ -59,12 +66,7 @@ do_test (void)
   for (int i = 0; i < NTESTS; ++i)
     {
       char *ep;
-      double r;
-
-      if (tests[i].group)
-	r = __strtod_internal (tests[i].in, &ep, 1);
-      else
-	r = strtod (tests[i].in, &ep);
+      double r = strtod (tests[i].in, &ep);
 
       if (*ep != '\0')
 	{
@@ -84,5 +86,4 @@ do_test (void)
   return status;
 }
 
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
+#include <support/test-driver.c>
diff --git a/stdlib/tst-strtod5.c b/stdlib/tst-strtod5i.c
similarity index 62%
copy from stdlib/tst-strtod5.c
copy to stdlib/tst-strtod5i.c
index 337c746..7e31958 100644
--- a/stdlib/tst-strtod5.c
+++ b/stdlib/tst-strtod5i.c
@@ -1,3 +1,21 @@
+/* Tests of __strtod_internal in a locale using decimal comma.
+   Copyright (C) 2007-2017 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
 #include <locale.h>
 #include <stdio.h>
 #include <stdlib.h>
@@ -59,12 +77,7 @@ do_test (void)
   for (int i = 0; i < NTESTS; ++i)
     {
       char *ep;
-      double r;
-
-      if (tests[i].group)
-	r = __strtod_internal (tests[i].in, &ep, 1);
-      else
-	r = strtod (tests[i].in, &ep);
+      double r = __strtod_internal (tests[i].in, &ep, tests[i].group);
 
       if (*ep != '\0')
 	{
@@ -84,5 +97,4 @@ do_test (void)
   return status;
 }
 
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
+#include <support/test-driver.c>
diff --git a/string/test-string.h b/string/test-string.h
index 3f72876..6e13bf4 100644
--- a/string/test-string.h
+++ b/string/test-string.h
@@ -40,7 +40,18 @@ extern impl_t __start_impls[], __stop_impls[];
 
 #undef __USE_STRING_INLINES
 
+/* We are compiled under _ISOMAC, so libc-symbols.h does not do this
+   for us.  */
+#include "config.h"
+#ifdef HAVE_CC_INHIBIT_LOOP_TO_LIBCALL
+# define inhibit_loop_to_libcall \
+    __attribute__ ((__optimize__ ("-fno-tree-loop-distribute-patterns")))
+#else
+# define inhibit_loop_to_libcall
+#endif
+
 #include <getopt.h>
+#include <stdint.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
diff --git a/string/test-strstr.c b/string/test-strstr.c
index 21944f4..33f2211 100644
--- a/string/test-strstr.c
+++ b/string/test-strstr.c
@@ -23,6 +23,7 @@
 
 
 #define STRSTR simple_strstr
+#define libc_hidden_builtin_def(arg) /* nothing */
 #include "strstr.c"
 
 
diff --git a/sunrpc/Makefile b/sunrpc/Makefile
index 08bb9c6..125d538 100644
--- a/sunrpc/Makefile
+++ b/sunrpc/Makefile
@@ -100,7 +100,8 @@ xtests := tst-getmyaddr
 
 ifeq ($(have-thread-library),yes)
 xtests += thrsvc
-tests += tst-svc_register tst-udp-garbage
+tests += tst-udp-garbage
+tests-internal += tst-svc_register
 endif
 
 ifeq ($(run-built-tests),yes)
diff --git a/sysdeps/ia64/fpu/libm-symbols.h b/sysdeps/ia64/fpu/libm-symbols.h
index 31d6f36..505131b 100644
--- a/sysdeps/ia64/fpu/libm-symbols.h
+++ b/sysdeps/ia64/fpu/libm-symbols.h
@@ -1,4 +1,4 @@
-#if !defined __STRICT_ANSI__ && !defined __cplusplus
+#ifndef _ISOMAC
 # include <sysdep.h>
 # undef ret	/* get rid of the stupid "ret" macro; it breaks br.ret */
 
diff --git a/sysdeps/m68k/m680x0/fpu/bits/mathinline.h b/sysdeps/m68k/m680x0/fpu/bits/mathinline.h
index c2dca31..8e6bdc4 100644
--- a/sysdeps/m68k/m680x0/fpu/bits/mathinline.h
+++ b/sysdeps/m68k/m680x0/fpu/bits/mathinline.h
@@ -112,19 +112,22 @@ __NTH (__signbitl (long double __x))
 #ifdef	__LIBC_INTERNAL_MATH_INLINES
 /* This is used when defining the functions themselves.  Define them with
    __ names, and with `static inline' instead of `extern inline' so the
-   bodies will always be used, never an external function call.  */
+   bodies will always be used, never an external function call.
+   Note: GCC 6 objects to __attribute__ ((__leaf__)) on static functions.  */
 # define __m81_u(x)		__CONCAT(__,x)
 # define __m81_inline		static __inline
+# define __m81_nth(fn)		__NTHNL (fn)
 #else
 # define __m81_u(x)		x
-# define __m81_inline __MATH_INLINE
+# define __m81_inline		__MATH_INLINE
+# define __m81_nth(fn)		__NTH (fn)
 # define __M81_MATH_INLINES	1
 #endif
 
 /* Define a const math function.  */
 #define __m81_defun(rettype, func, args)				      \
   __m81_inline rettype __attribute__((__const__))			      \
-  __NTH (__m81_u(func) args)
+  __m81_nth (__m81_u(func) args)
 
 /* Define the three variants of a math function that has a direct
    implementation in the m68k fpu.  FUNC is the name for C (which will be
@@ -335,8 +338,8 @@ __inline_functions (long double,l)
 
 # define __inline_functions(float_type, s)				\
 __m81_inline void							\
-__NTH (__m81_u(__CONCAT(__sincos,s))(float_type __x, float_type *__sinx, \
-				     float_type *__cosx))		\
+__m81_nth (__m81_u(__CONCAT(__sincos,s))				\
+	   (float_type __x, float_type *__sinx, float_type *__cosx))	\
 {									\
   __asm __volatile__ ("fsincos%.x %2,%1:%0"				\
 		      : "=f" (*__sinx), "=f" (*__cosx) : "f" (__x));	\
@@ -353,8 +356,6 @@ __inline_functions (long double,l)
 
 /* Define inline versions of the user visible functions.  */
 
-/* Note that there must be no whitespace before the argument passed for
-   NAME, to make token pasting work correctly with -traditional.  */
 # define __inline_forward_c(rettype, name, args1, args2)	\
 __MATH_INLINE rettype __attribute__((__const__))		\
 __NTH (name args1)						\
diff --git a/sysdeps/powerpc/Makefile b/sysdeps/powerpc/Makefile
index 933810f..e03a202 100644
--- a/sysdeps/powerpc/Makefile
+++ b/sysdeps/powerpc/Makefile
@@ -27,7 +27,7 @@ gen-as-const-headers += locale-defines.sym
 endif
 
 ifeq ($(subdir),nptl)
-tests += test-get_hwcap test-get_hwcap-static
+tests-internal += test-get_hwcap test-get_hwcap-static
 tests-static += test-get_hwcap-static
 endif
 
diff --git a/sysdeps/unix/sysv/linux/Makefile b/sysdeps/unix/sysv/linux/Makefile
index 8e7a45d..ad477f5 100644
--- a/sysdeps/unix/sysv/linux/Makefile
+++ b/sysdeps/unix/sysv/linux/Makefile
@@ -199,7 +199,8 @@ CFLAGS-gai.c += -DNEED_NETLINK
 endif
 
 ifeq ($(subdir),nptl)
-tests += tst-setgetname tst-align-clone tst-getpid1 \
+tests += tst-align-clone tst-getpid1 \
 	tst-thread-affinity-pthread tst-thread-affinity-pthread2 \
 	tst-thread-affinity-sched
+tests-internal += tst-setgetname
 endif
diff --git a/sysdeps/x86_64/fpu/Makefile b/sysdeps/x86_64/fpu/Makefile
index 36f090b..2b7d69b 100644
--- a/sysdeps/x86_64/fpu/Makefile
+++ b/sysdeps/x86_64/fpu/Makefile
@@ -45,6 +45,12 @@ modules-names += test-double-libmvec-alias-mod \
 		 test-float-libmvec-alias-mod \
 		 test-float-libmvec-alias-avx-mod \
 		 test-float-libmvec-alias-avx2-mod
+modules-names-tests += test-double-libmvec-alias-mod \
+		 test-double-libmvec-alias-avx-mod \
+		 test-double-libmvec-alias-avx2-mod \
+		 test-float-libmvec-alias-mod \
+		 test-float-libmvec-alias-avx-mod \
+		 test-float-libmvec-alias-avx2-mod
 extra-test-objs += test-double-libmvec-sincos-avx-main.o \
 		   test-double-libmvec-sincos-avx2-main.o \
 		   test-double-libmvec-sincos-main.o \
@@ -146,6 +152,8 @@ tests += test-double-libmvec-alias-avx512 \
 	 test-float-libmvec-sincosf-avx512
 modules-names += test-double-libmvec-alias-avx512-mod \
 		 test-float-libmvec-alias-avx512-mod
+modules-names-tests += test-double-libmvec-alias-avx512-mod \
+		 test-float-libmvec-alias-avx512-mod
 extra-test-objs += test-double-libmvec-sincos-avx512-main.o \
 		   test-float-libmvec-sincosf-avx512-main.o
 test-double-libmvec-alias-avx512-mod.so-no-z-defs = yes
diff --git a/sysdeps/x86_64/fpu/math-tests-arch.h b/sysdeps/x86_64/fpu/math-tests-arch.h
index 98f7cf6..9278e34 100644
--- a/sysdeps/x86_64/fpu/math-tests-arch.h
+++ b/sysdeps/x86_64/fpu/math-tests-arch.h
@@ -16,11 +16,11 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include <cpu-features.h>
+
 #if defined REQUIRE_AVX
-# include <init-arch.h>
 
 # define INIT_ARCH_EXT
-
 # define CHECK_ARCH_EXT                                        \
   do                                                           \
     {                                                          \
@@ -29,10 +29,8 @@
   while (0)
 
 #elif defined REQUIRE_AVX2
-# include <init-arch.h>
 
 # define INIT_ARCH_EXT
-
 # define CHECK_ARCH_EXT                                        \
   do                                                           \
     {                                                          \
@@ -41,10 +39,8 @@
   while (0)
 
 #elif defined REQUIRE_AVX512F
-# include <init-arch.h>
 
 # define INIT_ARCH_EXT
-
 # define CHECK_ARCH_EXT                                        \
   do                                                           \
     {                                                          \
diff --git a/sysdeps/x86_64/multiarch/test-multiarch.c b/sysdeps/x86_64/multiarch/test-multiarch.c
index 3974842..597d64e 100644
--- a/sysdeps/x86_64/multiarch/test-multiarch.c
+++ b/sysdeps/x86_64/multiarch/test-multiarch.c
@@ -16,7 +16,7 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
-#include <init-arch.h>
+#include <cpu-features.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>

http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=171199159214f2f548132a98988435f9a450d3ef

commit 171199159214f2f548132a98988435f9a450d3ef
Author: Zack Weinberg <zackw@panix.com>
Date:   Wed Mar 1 08:17:07 2017 -0500

    Remove _IO_MTSAFE_IO from public headers.
    
    _IO_MTSAFE_IO controls whether stdio is *built* with support for
    multithreading.  In the distant past it might also have worked as a
    feature selection macro, allowing library *users* to select
    thread-safe or lock-free stdio at application build time, I haven't
    done the archaeology.  Nowadays, defining _IO_MTSAFE_IO while using
    the installed headers, or in _ISOMAC mode, will cause libio.h to throw
    syntax errors.
    
    This patch removes _IO_MTSAFE_IO from the public headers
    (specifically, from libio/libio.h).  The most important thing it
    controlled in there was whether libio.h defines _IO_lock_t itself or
    expects stdio-lock.h to have done it, and we do still need a
    inter-header communication macro for that, because stdio-lock.h can
    only define _IO_lock_t as a typedef.  I've invented
    _IO_lock_t_defined, which is defined by both versions of stdio-lock.h.
    
    _IO_MTSAFE_IO also controlled the definitions of a handful of macros
    that _might_ count as part of the public libio.h interface.  They are
    now unconditionally given their non-_IO_MTSAFE_IO definition in
    libio/libio.h, and include/libio.h redefines them with the
    _IO_MTSAFE_IO definition.  This should minimize the odds of breaking
    old software that actually uses those macros.
    
    I suspect that this entire mechanism is vestigial, and that glibc
    won't build anymore if you *don't* define _IO_MTSAFE_IO, but that's
    another patchset.  The bulk of libio.h is internal-use-only stuff that
    no longer makes sense to expose (libstdc++ gave up on making a FILE
    the same object as a C++ filebuf *decades* ago) but that, too, is
    another patchset.
    
    	* libio/libio.h: Condition dummy definition of _IO_lock_t on
    	_IO_lock_t_defined, not _IO_MTSAFE_IO. Unconditionally use the
    	non-_IO_MTSAFE_IO definitions for _IO_peekc, _IO_flockfile,
    	_IO_funlockfile, and _IO_ftrylockfile.  Only define
    	_IO_cleanup_region_start and _IO_cleanup_region_end if not
    	already defined.
    	* include/libio.h: If _IO_MTSAFE_IO is defined, redefine
            _IO_peekc, _IO_flockfile, _IO_funlockfile, and _IO_ftrylockfile
            appropriately.
    	* sysdeps/generic/stdio-lock.h, sysdeps/nptl/stdio-lock.h:
    	Define _IO_lock_t_defined after defining _IO_lock_t.

diff --git a/ChangeLog b/ChangeLog
index 8d2cfed..b08ac48 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,17 @@
+2017-05-11  Zack Weinberg  <zackw@panix.com>
+
+	* libio/libio.h: Condition dummy definition of _IO_lock_t on
+	_IO_lock_t_defined, not _IO_MTSAFE_IO. Unconditionally use the
+	non-_IO_MTSAFE_IO definitions for _IO_peekc, _IO_flockfile,
+	_IO_funlockfile, and _IO_ftrylockfile.  Only define
+	_IO_cleanup_region_start and _IO_cleanup_region_end if not
+	already defined.
+	* include/libio.h: If _IO_MTSAFE_IO is defined, redefine
+	_IO_peekc, _IO_flockfile, _IO_funlockfile, and _IO_ftrylockfile
+	appropriately.
+	* sysdeps/generic/stdio-lock.h, sysdeps/nptl/stdio-lock.h:
+	Define _IO_lock_t_defined after defining _IO_lock_t.
+
 2016-05-10  Adhemerval Zanella  <adhemerval.zanella@linaro.org>
 
 	* sysdeps/powerpc/powerpc32/backtrace.c (is_sigtramp_address): Use
diff --git a/include/libio.h b/include/libio.h
index 97fc5b5..d2fa796 100644
--- a/include/libio.h
+++ b/include/libio.h
@@ -21,16 +21,25 @@ libc_hidden_proto (_IO_sgetn)
 libc_hidden_proto (_IO_vfprintf)
 libc_hidden_proto (_IO_vfscanf)
 
-#if defined _IO_MTSAFE_IO && _IO_lock_inexpensive
+#ifdef _IO_MTSAFE_IO
+# undef _IO_peekc
 # undef _IO_flockfile
-# define _IO_flockfile(_fp) \
-  if (((_fp)->_flags & _IO_USER_LOCK) == 0)				      \
-     _IO_lock_lock (*(_fp)->_lock)
 # undef _IO_funlockfile
-# define _IO_funlockfile(_fp) \
-  if (((_fp)->_flags & _IO_USER_LOCK) == 0)				      \
-    _IO_lock_unlock (*(_fp)->_lock)
-#endif
+# undef _IO_ftrylockfile
+
+# define _IO_peekc(_fp) _IO_peekc_locked (_fp)
+# if _IO_lock_inexpensive
+#  define _IO_flockfile(_fp) \
+  if (((_fp)->_flags & _IO_USER_LOCK) == 0) _IO_lock_lock (*(_fp)->_lock)
+#  define _IO_funlockfile(_fp) \
+  if (((_fp)->_flags & _IO_USER_LOCK) == 0) _IO_lock_unlock (*(_fp)->_lock)
+# else
+#  define _IO_flockfile(_fp) \
+  if (((_fp)->_flags & _IO_USER_LOCK) == 0) _IO_flockfile (_fp)
+#  define _IO_funlockfile(_fp) \
+  if (((_fp)->_flags & _IO_USER_LOCK) == 0) _IO_funlockfile (_fp)
+# endif
+#endif /* _IO_MTSAFE_IO */
 
 #endif
 #endif
diff --git a/libio/libio.h b/libio/libio.h
index 2241c14..518ffd8 100644
--- a/libio/libio.h
+++ b/libio/libio.h
@@ -143,10 +143,9 @@
 
 struct _IO_jump_t;  struct _IO_FILE;
 
-/* Handle lock.  */
-#ifdef _IO_MTSAFE_IO
-/* _IO_lock_t defined in internal headers during the glibc build.  */
-#else
+/* During the build of glibc itself, _IO_lock_t will already have been
+   defined by internal headers.  */
+#ifndef _IO_lock_t_defined
 typedef void _IO_lock_t;
 #endif
 
@@ -441,20 +440,16 @@ extern void _IO_flockfile (_IO_FILE *) __THROW;
 extern void _IO_funlockfile (_IO_FILE *) __THROW;
 extern int _IO_ftrylockfile (_IO_FILE *) __THROW;
 
-#ifdef _IO_MTSAFE_IO
-# define _IO_peekc(_fp) _IO_peekc_locked (_fp)
-# define _IO_flockfile(_fp) \
-  if (((_fp)->_flags & _IO_USER_LOCK) == 0) _IO_flockfile (_fp)
-# define _IO_funlockfile(_fp) \
-  if (((_fp)->_flags & _IO_USER_LOCK) == 0) _IO_funlockfile (_fp)
-#else
-# define _IO_peekc(_fp) _IO_peekc_unlocked (_fp)
-# define _IO_flockfile(_fp) /**/
-# define _IO_funlockfile(_fp) /**/
-# define _IO_ftrylockfile(_fp) /**/
-# define _IO_cleanup_region_start(_fct, _fp) /**/
-# define _IO_cleanup_region_end(_Doit) /**/
-#endif /* !_IO_MTSAFE_IO */
+#define _IO_peekc(_fp) _IO_peekc_unlocked (_fp)
+#define _IO_flockfile(_fp) /**/
+#define _IO_funlockfile(_fp) /**/
+#define _IO_ftrylockfile(_fp) /**/
+#ifndef _IO_cleanup_region_start
+#define _IO_cleanup_region_start(_fct, _fp) /**/
+#endif
+#ifndef _IO_cleanup_region_end
+#define _IO_cleanup_region_end(_Doit) /**/
+#endif
 
 extern int _IO_vfscanf (_IO_FILE * __restrict, const char * __restrict,
 			_IO_va_list, int *__restrict);
diff --git a/sysdeps/generic/stdio-lock.h b/sysdeps/generic/stdio-lock.h
index 532bb5f..763c7d4 100644
--- a/sysdeps/generic/stdio-lock.h
+++ b/sysdeps/generic/stdio-lock.h
@@ -22,6 +22,7 @@
 #include <libc-lock.h>
 
 __libc_lock_define_recursive (typedef, _IO_lock_t)
+#define _IO_lock_t_defined 1
 
 /* We need recursive (counting) mutexes.  */
 #ifdef _LIBC_LOCK_RECURSIVE_INITIALIZER
diff --git a/sysdeps/nptl/stdio-lock.h b/sysdeps/nptl/stdio-lock.h
index 35d6ce0..df74906 100644
--- a/sysdeps/nptl/stdio-lock.h
+++ b/sysdeps/nptl/stdio-lock.h
@@ -27,6 +27,7 @@
 #define _IO_lock_inexpensive	1
 
 typedef struct { int lock; int cnt; void *owner; } _IO_lock_t;
+#define _IO_lock_t_defined 1
 
 #define _IO_lock_initializer { LLL_LOCK_INITIALIZER, 0, NULL }
 

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog                                 |  116 +++++++++++++++++++++++++++++
 Makeconfig                                |    3 +-
 Makefile                                  |    4 +-
 Makerules                                 |   53 ++++++++++---
 Rules                                     |   18 +++--
 config.h.in                               |   11 ---
 elf/Makefile                              |   58 ++++++++------
 elf/tst-env-setuid-tunables.c             |    6 ++
 include/errno.h                           |    2 +-
 include/libc-symbols.h                    |   68 ++++++++++++-----
 include/libio.h                           |   25 ++++--
 include/math.h                            |    5 +
 include/stdio.h                           |    7 +--
 include/stdlib.h                          |    4 -
 include/string.h                          |   10 +-
 include/time.h                            |    4 -
 include/unistd.h                          |    3 -
 include/wchar.h                           |    2 -
 inet/Makefile                             |    7 ++-
 inet/tst-checks-posix.c                   |    1 -
 intl/tst-gettext2.c                       |    2 +
 libio/libio.h                             |   31 +++-----
 malloc/Makefile                           |    6 +-
 math/test-signgam-finite-c99.c            |    1 -
 math/test-signgam-main.c                  |    1 -
 misc/Makefile                             |    5 +-
 misc/sys/cdefs.h                          |    3 +
 nptl/Makefile                             |   31 ++++----
 nss/Makefile                              |    4 +-
 posix/Makefile                            |   11 ++-
 stdlib/Makefile                           |   17 +++--
 stdlib/tst-strtod.c                       |   67 +----------------
 stdlib/tst-strtod1i.c                     |   84 +++++++++++++++++++++
 stdlib/tst-strtod5.c                      |   75 ++++++++++---------
 stdlib/{tst-strtod5.c => tst-strtod5i.c}  |   28 +++++--
 string/test-string.h                      |   11 +++
 string/test-strstr.c                      |    1 +
 sunrpc/Makefile                           |    3 +-
 sysdeps/generic/stdio-lock.h              |    1 +
 sysdeps/ia64/fpu/libm-symbols.h           |    2 +-
 sysdeps/m68k/m680x0/fpu/bits/mathinline.h |   15 ++--
 sysdeps/nptl/stdio-lock.h                 |    1 +
 sysdeps/powerpc/Makefile                  |    2 +-
 sysdeps/unix/sysv/linux/Makefile          |    3 +-
 sysdeps/x86_64/fpu/Makefile               |    8 ++
 sysdeps/x86_64/fpu/math-tests-arch.h      |    8 +--
 sysdeps/x86_64/multiarch/test-multiarch.c |    2 +-
 47 files changed, 539 insertions(+), 291 deletions(-)
 create mode 100644 stdlib/tst-strtod1i.c
 copy stdlib/{tst-strtod5.c => tst-strtod5i.c} (62%)


hooks/post-receive
-- 
GNU C Library master sources


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]