This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
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.