This is the mail archive of the libc-alpha@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]

Re: [PATCH 4/4] Add IS_IN (testsuite) and remaining fixes.


On 02/20/2017 08:03 AM, Zack Weinberg wrote:
> This is the main change, adding 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.  And there's a third mode for when
> libc-symbols.h is included without MODULE_NAME being defined at all
> (this happens when preprocessing Versions files, for instance)---IS_IN
> always evaluates to false but _ISOMAC is *not* defined.  This is the
> way it has always worked, but now it's explicit.
> 
> There are still quite a few tests that need to see internal gunk of
> one variety or another.  There are three new Makefile variables to
> allow that.  'tests-internal' is the most straightforward: move a file
> from 'tests' to 'tests-internal' if it needs to be compiled as it
> always has (MODULE_NAME=nonlib).  'test-internal-extras' is the same
> thing, but for files formerly in 'test-extras'.  Finally,
> 'modules-names-tests' is for files in 'modules-names' that *should* be
> compiled with MODULE_NAME=testsuite (most of the things in
> 'modules-names' are *not* tests).  Unlike the other two, you need to
> list a test module in *both* modules-names and modules-names-tests.
> 
> The remaining changes to C source files in this patch seemed likely to
> cause problems in the absence of the main change:
> 
>  * tst-env-setuid-tunables.c needs to see HAVE_TUNABLES but no other
>    internal goo, so rather than put it in tests-internal I made it
>    include config.h itself
>  * similarly, tst-gettext2.c can define N_() itself instead of
>    expecting libc-symbols.h to do it
>  * some tests were defining _ISOMAC themselves; this is no longer
>    necessary (note that definitions of _ISOMAC by test scripts like
>    conform-test.pl are usually still necessary, since they don't use
>    libc-modules.h/libc-symbols.h at all)
>  * tst-strtod.c and tst-strtod5.c were testing both strtod and
>    __strtod_internal, so they got chopped in half
>  * ia64/fpu/libm-symbols.h is suppressed in _ISOMAC mode
>    (see discussion from last year about this file)
>  * string/test-strstr.c includes strstr.c, which uses
>    libc_hidden_builtin_def; it can be dummied out in this context
>  * several files that include string/test-string.h require
>    inhibit_loop_to_libcall but no other definitions from
>    libc-symbols.h/config.h; I chose to duplicate the definition of
>    inhibit_loop_to_libcall rather than make them internal tests
> 
>  * x86_64/fpu/math-tests-arch.h and x86_64/multiarch/test-multiarch.h
>    change from including init-arch.h to including cpu-features.h.
>    This is the change that I committed last week that had to be backed
>    out.  What's going on is, they actually *use* stuff from
>    x86/cpu-features.h, which is a non-installed non-wrapper header
>    whose contents vary depending on _LIBC and IS_IN.  It depends on
>    init-arch.h when it's used the way the test suite is currently
>    being compiled, hence the bustage, but with this patch init-arch.h
>    becomes unnecessary, and init-arch.h itself depends on the full
>    libc-symbols.h.  So the change comes back and is safe now.
> 
> N.B. extra-modules.mk was almost identical to cppflags-iterator.mk; the
> only differences were that it used a different input variable and it
> didn't let the caller control the module.  So I have removed it and
> changed the sole use to use cppflags-iterator.mk instead.

This change is looking good, it is a step in the right direction, and the
addition of '*-internal' markup is useful.

I still think we need a few improvements.

I'd like two senior developers to review this.

Here goes one review.

High level:

- This is a step in the right direction. My instinct is to want to move
  all the internal dependencies into functions in support/, but that's
  quite a bit of work. Either way they would have to be identified before
  being moved and your work does just that. Eventually I would hope that
  all the tests go back to being compiled with tests, we remove tests-internal,
  and only support/ functions can view the glibc internals through a well
  defined API.

Low level:

- Fix tst-dladdr by removing DL_LOOKUP_ADDRESS usage and keeping it in
  tests instead of tests-internal. I think this test should be as close
  to a real application as possible.

- Please carry out a built artifact comparison to ensure the IS_IN
  changes did not change any code generation in the library. Minimally
  x86_64 and one other architecture of your choice.

- The include/stdio.h change needs a detailed comment about why we undef 
  _IO_MTSAFE_IO.

- Why is tst-cancel-getpwuid_r in tests-internal? It was designed to be
  a standalone cancellation test.

- New test stdlib/tst-strtod1i.c should use new support/ test infrastructure.

- New test stdlib/tst-strtod5i.c needs a copyright header and should use
  new support/ test infrastructure.

> zw
> 
> 	* 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.
> 	Use cppflags-iterator.mk instead of extra-modules.mk for the
> 	files in $(modules-names).
> 	(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.
> 	* extra-modules.mk: Removed.
> 	* 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/stdio.h: If _ISOMAC is defined, undefine _IO_MTSAFE_IO
> 	before including libio/stdio.h (this causes the external version of
> 	_IO_lock_t to be visible).
> 	* 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.
> 
> 	* dlfcn/Makefile: Move tst-dladdr to tests-internal.
> 	* 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.
> 	* 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 and tst-cancel-getpwuid_r 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.
> 	* sysdeps/powerpc/Makefile: Move test-get_hwcap and
> 	test-get_hwcap-static to tests-internal.
> 	* sysdeps/x86_64/fpu/Makefile: Add all libmvec test modules to
> 	modules-names-tests.
> 
> 	* 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: Split locale_test to...
> 	* stdlib/tst-strtod1i.c: ...this new file.
> 	* stdlib/tst-strtod5.c: 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.
> 
> 	* misc/sys/cdefs.h (__NTHNL): New macro.
> 	* sysdeps/m68k/m680x0/fpu/bits/mathinline.h
> 	(__m81_defun): Use __NTHNL to avoid errors with GCC 6.
> ---
>  Makeconfig                                     |  3 +-
>  Makefile                                       |  4 +-
>  Makerules                                      | 55 +++++++++++++----
>  Rules                                          | 18 +++---
>  benchtests/strcoll-inputs/filelist#en_US.UTF-8 |  1 -
>  config.h.in                                    | 11 ----
>  dlfcn/Makefile                                 |  3 +-
>  elf/Makefile                                   | 58 ++++++++++--------
>  elf/tst-env-setuid-tunables.c                  |  6 ++
>  extra-modules.mk                               |  9 ---
>  include/errno.h                                |  2 +-
>  include/libc-symbols.h                         | 62 ++++++++++++++-----
>  include/math.h                                 |  5 ++
>  include/stdio.h                                | 10 ++-
>  include/stdlib.h                               |  4 --
>  include/string.h                               | 10 +--
>  include/time.h                                 |  4 --
>  include/unistd.h                               |  3 -
>  include/wchar.h                                |  2 -
>  inet/Makefile                                  |  4 +-
>  inet/tst-checks-posix.c                        |  1 -
>  intl/tst-gettext2.c                            |  2 +
>  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                                   |  6 +-
>  posix/Makefile                                 | 11 ++--
>  stdlib/Makefile                                | 17 +++---
>  stdlib/tst-strtod.c                            | 60 ------------------
>  stdlib/tst-strtod1i.c                          | 84 ++++++++++++++++++++++++++
>  stdlib/tst-strtod5.c                           | 54 ++++++-----------
>  stdlib/tst-strtod5i.c                          | 83 +++++++++++++++++++++++++
>  string/test-string.h                           | 12 ++++
>  string/test-strstr.c                           |  1 +
>  sysdeps/ia64/fpu/libm-symbols.h                |  2 +-
>  sysdeps/m68k/m680x0/fpu/bits/mathinline.h      | 15 ++---
>  sysdeps/powerpc/Makefile                       |  2 +-
>  sysdeps/x86_64/fpu/Makefile                    |  8 +++
>  sysdeps/x86_64/fpu/math-tests-arch.h           |  8 +--
>  sysdeps/x86_64/multiarch/test-multiarch.c      |  2 +-
>  43 files changed, 429 insertions(+), 260 deletions(-)
>  delete mode 100644 extra-modules.mk
>  create mode 100644 stdlib/tst-strtod1i.c
>  create mode 100644 stdlib/tst-strtod5i.c
> 
> diff --git a/Makeconfig b/Makeconfig
> index 97a15b569e..f4c4fb4f7b 100644
> --- a/Makeconfig
> +++ b/Makeconfig
> @@ -901,7 +901,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

OK.

>  
>  in-module = $(subst -,_,$(firstword $(libof-$(basename $(@F))) \
>  				    $(libof-$(<F)) \
> diff --git a/Makefile b/Makefile
> index 425cb796db..0ce12e9377 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -321,7 +321,7 @@ endif
>  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

OK.

>  $(objpfx)check-installed-headers-c.out: \
>      scripts/check-installed-headers.sh $(headers)
>  	$(SHELL) $(..)scripts/check-installed-headers.sh c \
> @@ -331,7 +331,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

OK.

>  $(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 e9194e54cf..69ab1a3a7c 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-%)

OK.

>  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
> @@ -797,12 +797,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
> -# extra-lib.mk is included once for each extra lib to define rules
> -# to build it, and to add its objects to the various variables.
> -# During its evaluation, $(lib) is set to the name of the library.
> -extra-modules-left := $(modules-names)
> -include $(patsubst %,$(..)extra-modules.mk,$(modules-names))
> +cpp-srcs-left := $(filter-out $(modules-names-tests),$(modules-names))
> +ifneq (,$(cpp-srcs-left))
> +lib := extramodules
> +include $(patsubst %,$(..)cppflags-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 %,$(..)cppflags-iterator.mk,$(cpp-srcs-left))
> +endif
> +endif
>  
>  extra-modules-build := $(filter-out $(modules-names-nobuild),$(modules-names))
>  $(extra-modules-build:%=$(objpfx)%.so): $(objpfx)%.so: \
> @@ -814,7 +823,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))

OK.

>  ifeq ($(build-programs),yes)
>  +depfiles += $(addsuffix .d,$(others) $(sysdep-others))
>  endif
> @@ -1326,7 +1335,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 %,$(..)cppflags-iterator.mk,$(cpp-srcs-left))
> +endif
> +
> +all-nonlib := $(strip $(tests-internal) $(test-internal-extras) $(others))

OK.

>  ifneq (,$(all-nonlib))
>  cpp-srcs-left = $(all-nonlib)
>  lib := nonlib
> @@ -1540,22 +1559,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) \

OK.

>  						      $(test-srcs)) \
>  				     $(addsuffix .test-result,$(tests) \
> +							      $(tests-internal) \

OK.

>  							      $(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) \

OK.

> +				     $(test-srcs) \
>  				     $(others) $(sysdep-others) stubs \
> -				     $(addsuffix .o,$(tests) $(xtests) \
> -						    $(test-srcs) $(others) \
> +				     $(addsuffix .o,$(tests) \
> +						    $(tests-internal) \

OK.

> +						    $(xtests) \
> +						    $(test-srcs) \
> +						    $(others) \
>  						    $(sysdep-others)) \
> -				     $(addsuffix .out,$(tests) $(xtests) \
> +				     $(addsuffix .out,$(tests) \
> +						      $(tests-internal) \

OK.

> +						      $(xtests) \
>  						      $(test-srcs)) \
>  				     $(addsuffix .test-result,$(tests) \
> +							      $(tests-internal) \

OK.

>  							      $(xtests) \
>  							      $(test-srcs)))
>  	-rm -f $(addprefix $(objpfx),$(extra-objs) $(extra-test-objs) \
> diff --git a/Rules b/Rules
> index 917bc969b5..168cf508d7 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

OK.

>  $(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

OK.

>  $(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)) \

OK.

>  			     $(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)

OK.

>  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)

OK.

>  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)

OK.

>  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)

Ok.

>  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))" ""

OK.

>  # These are the implicit rules for making test outputs
>  # from the test programs and whatever input files are present.
>  
> diff --git a/benchtests/strcoll-inputs/filelist#en_US.UTF-8 b/benchtests/strcoll-inputs/filelist#en_US.UTF-8
> index b7b38017d8..eb23b47484 100644
> --- a/benchtests/strcoll-inputs/filelist#en_US.UTF-8
> +++ b/benchtests/strcoll-inputs/filelist#en_US.UTF-8
> @@ -9667,7 +9667,6 @@ hr.po
>  libc.pot
>  ko.po
>  ru.po
> -extra-modules.mk

OK.

>  intl
>  tst-gettext4-fr.po
>  tstcodeset.po
> diff --git a/config.h.in b/config.h.in
> index fb2cc51c03..50f03c0cd8 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
> -

OK. Moved to libc-symbols.h.

>  /* Define if building with SELinux support.  Set by --with-selinux.  */
>  #undef	HAVE_SELINUX
>  
> diff --git a/dlfcn/Makefile b/dlfcn/Makefile
> index 94f511d828..8e4f9d1241 100644
> --- a/dlfcn/Makefile
> +++ b/dlfcn/Makefile
> @@ -34,9 +34,10 @@ libdl-shared-only-routines := dlopenold dlfcn
>  endif
>  
>  ifeq (yes,$(build-shared))
> -tests = glrefmain failtest tst-dladdr default errmsg1 tstcxaatexit \
> +tests = glrefmain failtest default errmsg1 tstcxaatexit \

No.

>  	bug-dlopen1 bug-dlsym1 tst-dlinfo bug-atexit1 bug-atexit2 \
>  	bug-atexit3 tstatexit bug-dl-leaf tst-rec-dlopen

Please fix tst-dladdr by removing the use of DL_LOOKUP_ADDRESS, it is
not needed and only informative, worse it forces non-lazy resolution of
the particular symbol which other arches don't do and so modifies what
is being tested because of the side-effects.

> +tests-internal = tst-dladdr
>  endif
>  modules-names = glreflib1 glreflib2 glreflib3 failtestmod defaultmod1 \
>  		defaultmod2 errmsg1mod modatexit modcxaatexit \
> diff --git a/elf/Makefile b/elf/Makefile
> index 61abeb59ee..876641aa57 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

OK.

All of these require internal headers for special reasons.

> +
> +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

OK.

>  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)
> +

OK.

>  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)

OK.

>  ifeq (yes,$(build-shared))
> -tests += ifuncmain1 ifuncmain1pic ifuncmain1vis ifuncmain1vispic \
> +tests-internal += \
> +	 ifuncmain1 ifuncmain1pic ifuncmain1vis ifuncmain1vispic \

OK.

>  	 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)

OK.

>  ifeq (yes,$(have-fpie))
>  ifunc-pie-tests = ifuncmain1pie ifuncmain1vispie ifuncmain1staticpie \
>  		  ifuncmain5pie ifuncmain6pie ifuncmain7pie
> -tests += $(ifunc-pie-tests)
> +tests-internal += $(ifunc-pie-tests)

OK.

>  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

OK.

>  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 a5f0a81ef3..afcb146e6d 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

OK.

> +
>  #define test_parent test_parent_tunables
>  #define test_child test_child_tunables
>  
> diff --git a/extra-modules.mk b/extra-modules.mk
> deleted file mode 100644
> index 5f8e693b15..0000000000
> --- a/extra-modules.mk
> +++ /dev/null
> @@ -1,9 +0,0 @@
> -# This file is included several times in a row, once
> -# for each element of $(modules-names).  $(extra-modules-left)
> -# is initialized first to $(modules-names) so that with each
> -# inclusion, we advance $(module) to the next name.
> -
> -module := $(firstword $(extra-modules-left))
> -extra-modules-left := $(filter-out $(module),$(extra-modules-left))
> -
> -libof-$(notdir $(module)) := extramodules

OK.

> diff --git a/include/errno.h b/include/errno.h
> index 7df41dfc31..73fc32e5e0 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

OK.

>  # if IS_IN (rtld)
>  #  include <dl-sysdep.h>
> diff --git a/include/libc-symbols.h b/include/libc-symbols.h
> index 775d8af84e..922e4b638c 100644
> --- a/include/libc-symbols.h
> +++ b/include/libc-symbols.h

These changes to libc-symbols.h worry me the most, which is why I noted above
that you need to carry out a built artifact test to make sure you didn't change
any of the generated library code when you didn't mean to.

They look logically correct, and fixes up what I thought was ugly when I ported
this work into RHEL 7.2 (no offense to Siddhesh the work did a lot of good).

> @@ -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)
> +/* Enable declarations of GNU extensions, since we are compiling them.  */
> +#define _GNU_SOURCE 1
>  
> -#define PASTE_NAME(a,b)      PASTE_NAME1 (a,b)
> -#define PASTE_NAME1(a,b)     a##b
> +#ifdef MODULE_NAME
>  
> -/* This file's macros are included implicitly in the compilation of every
> -   file in the C library by -imacros.
> +/* 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)
>  
> -   We include config.h which is generated by configure.
> -   It should define for us the following symbol:
> +/* 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)
>  
> -   * HAVE_ASM_SET_DIRECTIVE if we have `.set B, A' instead of `A = B'.
> +/* 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
>  
> -   */
> +#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)

OK.

> +#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
>  

OK.

>  #include <config.h>
>  
> @@ -887,4 +916,5 @@ for linking")
>  # define inhibit_loop_to_libcall
>  #endif
>  
> +#endif /* !_ISOMAC */

OK.

>  #endif /* libc-symbols.h */
> diff --git a/include/math.h b/include/math.h
> index a4f556263a..6ff67830f8 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

OK.

> +
>  #include <math/math.h>
>  
>  #ifndef _ISOMAC
> diff --git a/include/stdio.h b/include/stdio.h
> index 17b5a05076..6c84dffdeb 100644
> --- a/include/stdio.h
> +++ b/include/stdio.h
> @@ -1,11 +1,13 @@
>  #ifndef _STDIO_H
> -# if defined __need_FILE || defined __need___FILE || defined _ISOMAC
> +# if defined _ISOMAC
> +#  undef _IO_MTSAFE_IO
> +#  include <libio/stdio.h>

Needs a detailed comment about why we undef _IO_MTSAFE_IO.

> +# elif defined __need_FILE || defined __need___FILE

OK.

>  #  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 +32,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 +53,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;
> @@ -184,7 +184,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
> -

OK.

>  #endif
> diff --git a/include/stdlib.h b/include/stdlib.h
> index 352339e859..8039876017 100644
> --- a/include/stdlib.h
> +++ b/include/stdlib.h
> @@ -13,8 +13,6 @@
>  #if !defined __Need_M_And_C && !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;
> @@ -265,8 +263,6 @@ extern __typeof (unsetenv) unsetenv attribute_hidden;
>  extern __typeof (__strtoul_internal) __strtoul_internal attribute_hidden;
>  # endif
>  
> -__END_DECLS
> -
>  #endif
>  

OK.

>  #undef __Need_M_And_C
> diff --git a/include/string.h b/include/string.h
> index f166de9c43..ce71674086 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.  */

OK.

>  #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

Ok.

>  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 684ceb812f..8fe18185ed 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;
> @@ -112,7 +110,5 @@ extern double __difftime (time_t time1, time_t time0);
>     actual clock ID.  */
>  #define CLOCK_IDFIELD_SIZE	3
>  
> -__END_DECLS
> -

OK.

>  #endif
>  #endif
> diff --git a/include/unistd.h b/include/unistd.h
> index 16d68a1505..fbcea1b92d 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__)
> @@ -188,7 +187,5 @@ extern int __getlogin_r_loginuid (char *name, size_t namesize)
>  extern __typeof (__access) __access_noerrno attribute_hidden;
>  #  endif
>  
> -__END_DECLS
>  # endif
> -

Ok.

>  #endif
> diff --git a/include/wchar.h b/include/wchar.h
> index 6272130e24..e2579a176a 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

OK.

>  
>  extern int __isoc99_fwscanf (__FILE *__restrict __stream,
>  			     const wchar_t *__restrict __format, ...);
> diff --git a/inet/Makefile b/inet/Makefile
> index 010792af8f..b33355602e 100644
> --- a/inet/Makefile
> +++ b/inet/Makefile
> @@ -52,7 +52,9 @@ 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-sockaddr test-hnto-types
> +
> +tests-internal := tst-inet6_scopeid_pton

OK. Begrudingly because there really should be a standard API to get the
scopeid from the ipv6 address, but there isn't, so we use an internal
helper to print an error message when the test fails.

>  
>  include ../Rules
>  
> diff --git a/inet/tst-checks-posix.c b/inet/tst-checks-posix.c
> index e46b6a2a69..cdcb5cb3aa 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

OK.

>  
>  #include "tst-checks.c"
> diff --git a/intl/tst-gettext2.c b/intl/tst-gettext2.c
> index bdfe76de66..894e09e41e 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
> +

OK.

>  struct data_t
>  {
>    const char *selection;
> diff --git a/malloc/Makefile b/malloc/Makefile
> index e93b83b57d..ca83228b1c 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

OK.

> +
>  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 a67a803c99..3dacef5147 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
>  

OK.

>  #include <math.h>
>  #include <stdio.h>
> diff --git a/math/test-signgam-main.c b/math/test-signgam-main.c
> index 11ebbe3628..e3cecf7fa1 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

OK.

>  
>  #include <math.h>
>  #include <stdio.h>
> diff --git a/misc/Makefile b/misc/Makefile
> index ed988c3967..bd88253c26 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

OK.

>  tests-static := tst-empty
>  
>  ifeq ($(run-built-tests),yes)
> diff --git a/misc/sys/cdefs.h b/misc/sys/cdefs.h
> index e5fe4f89d9..39c91e1225 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
>  

OK.

> diff --git a/nptl/Makefile b/nptl/Makefile
> index 6d48c0cfc8..edffb66272 100644
> --- a/nptl/Makefile
> +++ b/nptl/Makefile
> @@ -220,8 +220,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 \
> @@ -241,13 +240,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 \
> @@ -272,7 +270,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 \
> @@ -297,6 +295,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

OK.

> +
>  xtests = tst-setuid1 tst-setuid1-static tst-setuid2 \
>  	tst-mutexpp1 tst-mutexpp6 tst-mutexpp10
>  test-srcs = tst-oddstacklimit
> @@ -354,8 +356,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

OK.

>  tests-nolibpthread += tst-fini1
>  ifeq ($(have-z-execstack),yes)
>  tests += tst-execstack
> @@ -369,7 +371,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
> @@ -422,9 +424,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

OK.

>  xtests-static += tst-setuid1-static
>  
>  # These tests are linked with libc before libpthread
> @@ -619,8 +621,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

Why doesn't this use $(shared-thread-library)?

>  $(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 de6c47a1db..6d165f2734 100644
> --- a/nss/Makefile
> +++ b/nss/Makefile
> @@ -49,15 +49,15 @@ 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
>  # some routines like getpwuid_r.
>  ifeq (yes,$(have-thread-library))
> -tests += tst-cancel-getpwuid_r
> +tests-internal += tst-cancel-getpwuid_r

Why is this in tests-internal? It should have no internal header dependencies.

>  endif
>  
>  # Specify rules for the nss_* modules.  We have some services.
> diff --git a/posix/Makefile b/posix/Makefile
> index 8f23d647c8..e07aae58eb 100644
> --- a/posix/Makefile
> +++ b/posix/Makefile
> @@ -67,24 +67,23 @@ tests		:= 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 \
> @@ -92,6 +91,8 @@ tests		:= tstgetopt testfnm runtests runptests	     \
>  		   tst-fnmatch3 bug-regex36 tst-getaddrinfo5 \
>  		   tst-posix_spawn-fd \
>  		   tst-posix_fadvise tst-posix_fadvise64
> +tests-internal	:= bug-regex5 bug-regex20 bug-regex33 \
> +		   tst-rfc3484 tst-rfc3484-2 tst-rfc3484-3

OK.

>  xtests		:= bug-ga2
>  ifeq (yes,$(build-shared))
>  test-srcs	:= globtest
> diff --git a/stdlib/Makefile b/stdlib/Makefile
> index 5751b5d600..d4edcf8eef 100644
> --- a/stdlib/Makefile
> +++ b/stdlib/Makefile
> @@ -68,23 +68,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
> +

OK.

>  ifeq ($(build-hardcoded-path-in-tests),yes)
>  tests += tst-empty-env
>  endif
> -tests-static	:= tst-secure-getenv
> +

OK.

>  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 ced6d8a351..e0f096c325 100644
> --- a/stdlib/tst-strtod.c
> +++ b/stdlib/tst-strtod.c
> @@ -79,7 +79,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 +175,6 @@ do_test (void)
>  
>    status |= long_dbl ();
>  
> -  status |= locale_test ();
> -
>    return status ? EXIT_FAILURE : EXIT_SUCCESS;
>  }
>  
> @@ -217,63 +214,6 @@ 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;
> -}

OK.

>  
>  #define TEST_FUNCTION do_test ()
>  #include "../test-skeleton.c"
> diff --git a/stdlib/tst-strtod1i.c b/stdlib/tst-strtod1i.c
> new file mode 100644
> index 0000000000..5c2ba9981d
> --- /dev/null
> +++ b/stdlib/tst-strtod1i.c
> @@ -0,0 +1,84 @@
> +/* 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;
> +}
> +
> +#define TEST_FUNCTION do_test ()
> +#include "../test-skeleton.c"

This should use the new support/ test infrastructure.

> diff --git a/stdlib/tst-strtod5.c b/stdlib/tst-strtod5.c
> index 337c746989..691759e366 100644
> --- a/stdlib/tst-strtod5.c
> +++ b/stdlib/tst-strtod5.c
> @@ -9,38 +9,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 +48,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')
>  	{
> diff --git a/stdlib/tst-strtod5i.c b/stdlib/tst-strtod5i.c
> new file mode 100644
> index 0000000000..92ed983141
> --- /dev/null
> +++ b/stdlib/tst-strtod5i.c
> @@ -0,0 +1,83 @@

Needs a copyright header.

> +#include <locale.h>
> +#include <stdio.h>
> +#include <stdlib.h>
> +#include <string.h>
> +#include <math.h>
> +
> +#define NBSP "\xc2\xa0"
> +
> +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 }
> +  };
> +#define NTESTS (sizeof (tests) / sizeof (tests[0]))
> +
> +
> +static int
> +do_test (void)
> +{
> +  if (setlocale (LC_ALL, "cs_CZ.UTF-8") == NULL)
> +    {
> +      puts ("could not set locale");
> +      return 1;
> +    }
> +
> +  int status = 0;
> +
> +  for (int i = 0; i < NTESTS; ++i)
> +    {
> +      char *ep;
> +      double r = __strtod_internal (tests[i].in, &ep, tests[i].group);
> +
> +      if (*ep != '\0')
> +	{
> +	  printf ("%d: got rest string \"%s\", expected \"\"\n", i, ep);
> +	  status = 1;
> +	}
> +
> +      if (r != tests[i].expected
> +	  || copysign (10.0, r) != copysign (10.0, tests[i].expected))
> +	{
> +	  printf ("%d: got wrong results %g, expected %g\n",
> +		  i, r, tests[i].expected);
> +	  status = 1;
> +	}
> +    }
> +
> +  return status;
> +}
> +
> +#define TEST_FUNCTION do_test ()
> +#include "../test-skeleton.c"

New tests should use new support/ infrastructure.

> diff --git a/string/test-string.h b/string/test-string.h
> index 2c36b44c22..9f45898238 100644
> --- a/string/test-string.h
> +++ b/string/test-string.h
> @@ -40,6 +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

OK.

> +
> +
> +#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 c29d37446c..404c374331 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 */

OK.

>  #include "strstr.c"
>  
>  
> diff --git a/sysdeps/ia64/fpu/libm-symbols.h b/sysdeps/ia64/fpu/libm-symbols.h
> index 31d6f36de9..505131b813 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

OK.

>  # 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 c2dca317f4..8e6bdc4e27 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)

OK.

>  # 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 099fbf68cd..aafa226f7f 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

OK.

>  tests-static += test-get_hwcap-static
>  endif
>  
> diff --git a/sysdeps/x86_64/fpu/Makefile b/sysdeps/x86_64/fpu/Makefile
> index fad605a841..e4462b9337 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

OK.

>  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

OK.

>  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 98f7cf6548..9278e3440b 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
> -

OK.

>  # define CHECK_ARCH_EXT                                        \
>    do                                                           \
>      {                                                          \
> diff --git a/sysdeps/x86_64/multiarch/test-multiarch.c b/sysdeps/x86_64/multiarch/test-multiarch.c
> index 3974842c19..597d64e1e8 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>
> 

OK.

-- 
Cheers,
Carlos.


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