aboutsummaryrefslogtreecommitdiff
path: root/Makefile
AgeCommit message (Collapse)AuthorFilesLines
2020-01-01Update copyright dates with scripts/update-copyrights.Joseph Myers1-1/+1
2019-12-04Do not use ld.so to open statically linked programs in debugglibc.shGabriel F. T. Gomes1-2/+14
Debugging programs that have been dynamically linked against an uninstalled glibc requires unusual steps, such as letting gdb know where the thread db library is located and explicitly calling the loader. However, when the program under test is statically linked, these steps are not required (as a matter of fact, using the dynamic loader to run a statically linked program is wrong and will fail), and gdb should be called the usual way. This patch modifies debugglibc.sh so that it checks if the program under test is statically linked, then runs the debugger appropriately. Reviewed-by: Carlos O'Donell <carlos@redhat.com>
2019-12-04Attach to test in container from debugglibc.shGabriel F. T. Gomes1-0/+20
Some test cases are meant to be ran inside the container infrastructure and make check automatically runs them as such. However, running a single test case in a container without make check is useful. This patch adds a new --tool option to testrun.sh that makes this easy, as well as it adds a new option (-c or --in-container) to debugglibc.sh, which causes the program under test to be ran in a container (with WAIT_FOR_DEBUGGER=1), then automatically attaches GDB to it. Automatically detecting if a test case is supposed to be ran inside a container is harder (if not impossible), as Carlos pointed out [1], however, this patch makes it easier to do it manually: Using testrun.sh with containerized test: $ ./testrun.sh --tool=container /absolute/path/to/program Using debugglibc.sh with containerized test: $ ./debugglibc.sh -c /absolute/path/to/program Note: running these commands with relative paths causes error and warning messages to be displayed, although the test case might succeed. For example, with relative path: $ ./testrun.sh --tool=container elf/tst-ldconfig-bad-aux-cache error: subprocess failed: execv error: unexpected error output from subprocess /sbin/ldconfig: Warning: ignoring configuration file that cannot be opened: /etc/ld.so.conf: No such file or directory info: f 0 1064 /var/cache/ldconfig/aux-cache 20 aux-cache [...] Whereas with absolute paths, the errors and warnings are gone: $ ./testrun.sh --tool=container $PWD/elf/tst-ldconfig-bad-aux-cache info: f 0 1064 /var/cache/ldconfig/aux-cache 20 aux-cache [...] [1] https://sourceware.org/ml/libc-alpha/2019-11/msg00873.html Reviewed-by: Carlos O'Donell <carlos@redhat.com>
2019-11-05Fix run-one-test so that it runs elf testsArjun Shankar1-1/+1
The `test' make target passes a trailing slash in the subdir argument. This does not play well with elf/rtld-Rules which looks for `elf' without any trailing slash, and therefore doesn't find a match when running an elf test individually. This commit removes the trailing slash from the invocation. Reviewed-by: DJ Delorie <dj@redhat.com>
2019-10-24Install charmaps uncompressed in testrootDJ Delorie1-1/+8
The testroot does not have a gunzip command, so the charmap files should not be installed gzipped else they cannot be used (and thus tested). With this patch, installing with INSTALL_UNCOMPRESSED=yes installs uncompressed charmaps instead. Note that we must purge the $(symbolic_link_list) as it contains references to $(DESTDIR), which we change during the testroot installation. Reviewed-by: Carlos O'Donell <carlos@redhat.com>
2019-10-22Fix testroot.pristine creation copying dynamic linker.Joseph Myers1-2/+2
This patch addresses an issue reported in <https://sourceware.org/ml/libc-alpha/2019-07/msg00661.html> where the creation of testroot.pristine, on encountering LD_TRACE_LOADED_OBJECTS=1 of the form libc.so.6 => /scratch/jmyers/glibc/mbs/obj/glibc-8-0-mips64-linux-gnu-x86_64-linux-gnu/default/libc.so.6 (0x772dd000) /lib32/ld.so.1 => /scratch/jmyers/glibc/mbs/obj/glibc-8-0-mips64-linux-gnu-x86_64-linux-gnu/default/elf/ld.so.1 (0x7747b000) tries to copy /lib32/ld.so.1 (which does not exist) into the testroot instead of copying the path on the RHS of "=>", which does exist, because the Makefile logic assumes that the path on such a line with '/' should be copied, when if there are such paths on both the LHS and the RHS of "=>", only the one on the RHS necessarily exists and so only that should be copied. The patch follows the approach suggested by DJ in <https://sourceware.org/ml/libc-alpha/2019-07/msg00662.html>, with the suggestion from Andreas in <https://sourceware.org/ml/libc-alpha/2019-10/msg00514.html> of a single sed command in place of pipeline of grep and three sed commands. Tested for x86_64, with and without --enable-hardcoded-path-in-tests; a previous version with multiple sed commands, implementing the same logic, also tested for MIPS, with and without --enable-hardcoded-path-in-tests, to confirm it fixes the original problem. Co-authored-by: DJ Delorie <dj@redhat.com>
2019-10-18Add run-one-test convenience target and makefile help textDJ Delorie1-2/+20
Adds "make test" for re-running just one test. Also adds "make help" for help with our Makefile targets, and adds a mini-help when you just run "make". Reviewed-by: Carlos O'Donell <carlos@redhat.com>
2019-10-02Enable passing arguments to the inferior in debugglibc.shArjun Shankar1-8/+22
This patch adds the ability to run debugglibc.sh's inferior program with arguments specified on the command line. This enables convenient debugging of non-testcase programs such as iconv/iconv_prog or other dynamically linked programs. Program arguments may be passed using `--' as a separator. For example: $ ./debugglibc.sh -b iconv -- iconv/iconv_prog -f ASCII -t UTF-8 input.txt
2019-09-30Add helper script for glibc debuggingGabriel F. T. Gomes1-1/+157
This patch adds a new make rule that generates a helper script for debugging glibc test cases. The new script, debugglibc.sh, is similar to testrun.sh, in the sense that it allows the execution of the specified test case, however, it opens the test case in GDB, setting the library path the same way that testrun.sh does. The commands are based on the instructions on the wiki for glibc debugging [1,2]. By default, the script tells GDB to load the test case for symbol information, so that, when a breakpoint is hit, the call stack is displayed correctly (instead of printing lots of '??'s). For instance, after running 'make' and 'make check', one could do the following: $ ./debugglibc.sh nptl/tst-exec1 -b pthread_join Reading symbols from /home/gabriel/build/powerpc64le/glibc//elf/ld.so...done. Breakpoint 1 at 0x1444 add symbol table from file "nptl/tst-exec1" [Thread debugging using libthread_db enabled] Using host libthread_db library "/home/gabriel/build/powerpc64le/glibc//nptl_db/libthread_db.so.1". Breakpoint 1, 0x00007ffff7fb1444 in _dl_start_user () from /home/gabriel/build/powerpc64le/glibc/elf/ld.so Breakpoint 2 at 0x7ffff7f49d48: file pthread_join.c, line 23. Notice that the script will always start GDB with the program running and halted at _dl_start_user. So, in order to reach the actual breakpoint of interest, one should hit 'c', not 'r': >>> c Continuing. [New Thread 0x7ffff7d1f180 (LWP 76443)] [Switching to Thread 0x7ffff7d1f180 (LWP 76443)] Thread 2 "ld.so" hit Breakpoint 2, __pthread_join (threadid=140737354087616, thread_return=0x0) at pthread_join.c:24 24 return __pthread_timedjoin_ex (threadid, thread_return, NULL, true); Then inspect the call stack with 'bt', as usual, and see symbols from both the test case and from the libraries themselves: >>> bt #0 __pthread_join (threadid=140737354087616, thread_return=0x0) at pthread_join.c:24 #1 0x0000000010001f4c in tf (arg=<optimized out>) at tst-exec1.c:37 #2 0x00007ffff7f487e8 in start_thread (arg=0x7ffff7510000) at pthread_create.c:479 #3 0x00007ffff7e523a8 in clone () at ../sysdeps/unix/sysv/linux/powerpc/powerpc64/clone.S:82 Tested for powerpc64le and x86_64. [1] https://sourceware.org/glibc/wiki/Debugging/Loader_Debugging [2] https://sourceware.org/glibc/wiki/Testing/Builds#Required_gdb_setup Reviewed-by: Carlos O'Donell <carlos@redhat.com> Reviewed-by: Dmitry V. Levin <ldv@altlinux.org> Reviewed-by: Joseph Myers <joseph@codesourcery.com> Reviewed-by: Andreas Schwab <schwab@suse.de>
2019-09-07Prefer https to http for gnu.org and fsf.org URLsPaul Eggert1-1/+1
Also, change sources.redhat.com to sourceware.org. This patch was automatically generated by running the following shell script, which uses GNU sed, and which avoids modifying files imported from upstream: sed -ri ' s,(http|ftp)(://(.*\.)?(gnu|fsf|sourceware)\.org($|[^.]|\.[^a-z])),https\2,g s,(http|ftp)(://(.*\.)?)sources\.redhat\.com($|[^.]|\.[^a-z]),https\2sourceware.org\4,g ' \ $(find $(git ls-files) -prune -type f \ ! -name '*.po' \ ! -name 'ChangeLog*' \ ! -path COPYING ! -path COPYING.LIB \ ! -path manual/fdl-1.3.texi ! -path manual/lgpl-2.1.texi \ ! -path manual/texinfo.tex ! -path scripts/config.guess \ ! -path scripts/config.sub ! -path scripts/install-sh \ ! -path scripts/mkinstalldirs ! -path scripts/move-if-change \ ! -path INSTALL ! -path locale/programs/charmap-kw.h \ ! -path po/libc.pot ! -path sysdeps/gnu/errlist.c \ ! '(' -name configure \ -execdir test -f configure.ac -o -f configure.in ';' ')' \ ! '(' -name preconfigure \ -execdir test -f preconfigure.ac ';' ')' \ -print) and then by running 'make dist-prepare' to regenerate files built from the altered files, and then executing the following to cleanup: chmod a+x sysdeps/unix/sysv/linux/riscv/configure # Omit irrelevant whitespace and comment-only changes, # perhaps from a slightly-different Autoconf version. git checkout -f \ sysdeps/csky/configure \ sysdeps/hppa/configure \ sysdeps/riscv/configure \ sysdeps/unix/sysv/linux/csky/configure # Omit changes that caused a pre-commit check to fail like this: # remote: *** error: sysdeps/powerpc/powerpc64/ppc-mcount.S: trailing lines git checkout -f \ sysdeps/powerpc/powerpc64/ppc-mcount.S \ sysdeps/unix/sysv/linux/s390/s390-64/syscall.S # Omit change that caused a pre-commit check to fail like this: # remote: *** error: sysdeps/sparc/sparc64/multiarch/memcpy-ultra3.S: last line does not end in newline git checkout -f sysdeps/sparc/sparc64/multiarch/memcpy-ultra3.S
2019-07-29test-container: Install with $(sorted-subdirs) [BZ #24794]Tulio Magno Quites Machado Filho1-1/+1
Commit 35e038c1d2ccb3a75395662f9c4f28d85a61444f started to use an incomplete list of subdirs based on $(all-subdirs) causing testroot.pristine to miss files from nss. Tested if the list of files in testroot.pristine remains the same. [BZ #24794] * Makeconfig (all-subdirs): Improved source comments. * Makefile (testroot.pristine/install.stamp): Pass subdirs='$(sorted-subdirs)' to make install.
2019-07-23test-container: Install with $(all-subdirs) [BZ #24794]Tulio Magno Quites Machado Filho1-1/+2
Whenever a sub-make is created, it inherits the variable subdirs from its parent. This is also true when make check is called with a restricted list of subdirs. In this scenario, make install is executed "partially" and testroot.pristine ends up with an incomplete installation. [BZ #24794] * Makefile (testroot.pristine/install.stamp): Pass subdirs='$(all-subdirs)' to make install. Reviewed-by: DJ Delorie <dj@redhat.com>
2019-07-23test-container: Avoid copying unintended system librariesTulio Magno Quites Machado Filho1-2/+2
Some DSOs are distributed in hardware capability directories, e.g. /usr/lib64/power7/libc.so.6 Whenever the processor is able to use one of these hardware-enabled DSOs, testroot.pristine ends up with copies of glibc-provided libraries from the system because it can't overwrite or remove them. This patch avoids the unintended copies by executing ld.so with the same arguments passed to each glibc test. * Makefile (testroot.pristine/install.stamp): Execute ld.so with the same arguments used in all tests.
2019-02-16Add check for missing wrapper headersFlorian Weimer1-2/+7
If building on a subset of architectures only, it is easy to miss wrapper headers which are required by other architectures because they lack the corresponding sysdeps header. The check ensures that every installed header which is not itself a sysdeps header has a header under include/ (that presumably wraps the header, and perhaps also adding declarations and definitions for !_ISOMAC). Also check for the absence of the sysdeps/generic/bits directory removed in commit c72565e5f1124c2dc72573e83406fe999e56091f, to make accidental re-introduction more difficult. Reviewed-by: Carlos O'Donell <carlos@redhat.com>
2019-02-04testrun.sh: Exit in case of incorrect argumentMatthew Malcomson1-0/+1
2019-01-01Update copyright dates with scripts/update-copyrights.Joseph Myers1-1/+1
* All files with FSF copyright notices: Update copyright dates using scripts/update-copyrights. * locale/programs/charmap-kw.h: Regenerated. * locale/programs/locfile-kw.h: Likewise.
2018-12-04Stop test-in-container trying to run other-OS binaries.Joseph Myers1-0/+2
I noticed that, now that build-many-glibcs.py no longer copies glibc sources, I was getting core dumps in my glibc source directories. The cause appears to be, from the i686-gnu build: for dso in ` env LD_TRACE_LOADED_OBJECTS=1 \ /scratch/jmyers/glibc-bot/build/glibcs/i686-gnu/glibc/elf/ld.so.1 \ /scratch/jmyers/glibc-bot/build/glibcs/i686-gnu/glibc/testroot.pristine/bin/sh \ [...] Segmentation fault (core dumped) In this case, the x86 architecture means the binary executes, but dumps core rather than actually working. Anything involving running the newly built glibc should only be done ifeq ($(run-built-tests),yes). This patch conditions the relevant part of the testroot setup accordingly. Tested for x86_64, and with build-many-glibcs.py for i686-gnu. * Makefile ($(objpfx)testroot.pristine/install.stamp): Do not run dynamic linker unless [$(run-built-tests) = yes].
2018-09-26Remove leading space from testrun.shAndreas Schwab1-1/+1
2018-08-22Add test-in-container infrastructure.DJ Delorie1-0/+56
* Makefile (testroot.pristine): New rules to initialize the test-in-container "testroot". * Makerules (all-testsuite): Add tests-container. * Rules (tests-expected): Add tests-container. (binaries-all-tests): Likewise. (tests-container): New, run these tests in the testroot container. * support/Makefile (others): Add *-container, support_paths.c, xmkdirp, and links-dso-program. * support/links-dso-program-c.c: New. * support/links-dso-program.cc: New. * support/test-container.c: New. * support/shell-container.c: New. * support/echo-container.c: New. * support/true-container.c: New. * support/xmkdirp.c: New. * support/xsymlink.c: New. * support/support_paths.c: New. * support/support.h: Add support paths prototypes. * support/xunistd.h: Add xmkdirp () and xsymlink (). * nss/tst-nss-test3.c: Convert to test-in-container. * nss/tst-nss-test3.root/: New.
2018-07-04testrun.sh: Implement --tool=strace, --tool=valgrindFlorian Weimer1-6/+49
$(file …) appears to be the only convenient way to create files with newlines and make substitution variables. This needs make 4.0 (released in 2013), so update the requirement to match. Reviewed-by: Carlos O'Donell <carlos@redhat.com>
2018-01-01Update copyright dates with scripts/update-copyrights.Joseph Myers1-1/+1
* All files with FSF copyright notices: Update copyright dates using scripts/update-copyrights. * locale/programs/charmap-kw.h: Regenerated. * locale/programs/locfile-kw.h: Likewise.
2017-10-05Remove add-ons mechanism.Joseph Myers1-2/+1
glibc has an add-ons mechanism to allow additional software to be integrated into the glibc build. Such add-ons may be within the glibc source tree, or outside it at a path passed to the --enable-add-ons configure option. localedata and crypt were once add-ons, distributed in separate release tarballs, but long since stopped using that mechanism. Linuxthreads was always an add-on. Ports spent some time as an add-on with separate release tarballs, then was first moved into the glibc source tree, then had its sysdeps files moved into the main sysdeps hierarchy so the add-ons mechanism was no longer used. NPTL spent some time as an add-on in the main glibc tree before stopping using the add-on mechanism. libidn used to have separate release tarballs but no longer does so, but still uses the add-ons mechanism within the glibc source tree. Various other software has supported building with the add-ons mechanism at times in the past, but I don't think any is still widely used. Add-ons involve significant, little-used complexity in the glibc build system, and make it hard to understand what the space of possible glibc configurations is. This patch removes the add-ons mechanism. libidn is now built via the Subdirs mechanism to cause any configuration using sysdeps/unix/inet to build libidn; HAVE_LIBIDN (which effectively means shared libraries are available) is now defined via sysdeps/unix/inet/configure. Various references to add-ons around the source tree are removed (in the case of maint.texi, the example list of sysdeps directories is still very out of date). Externally maintained ports should now put their files in the normal sysdeps directory structure rather than being arranged as add-ons; they probably need to change e.g. elf.h anyway, rather than actually being able to work just as a drop-in subtree. Hurd libpthread should be arranged similarly to NPTL, so some files might go in a hurd-pthreads (or similar) top-level directory in glibc, while sysdeps files should go in the normal sysdeps directory structure (possibly in hurd or hurd-pthreads subdirectories, just as there are nptl subdirectories in the sysdeps tree). Tested for x86_64, and with build-many-glibcs.py. * configure.ac (--enable-add-ons): Remove option. (machine): Do not mention add-ons in comment. (LIBC_PRECONFIGURE): Likewise. (add_ons): Remove variable and sanity checks and logic to locate add-ons. (add_ons_automatic): Remove variable. (configured_add_ons): Likewise. (add_ons_sfx): Likewise. (add_ons_pfx): Likewise. (add_on_subdirs): Likewise. (sysnames_add_ons): Likewise. Remove loop over add-ons and consideration of add-ons in Implies handling. (sysdeps_add_ons): Likewise. * configure: Regenerated. * libidn/configure.ac: Remove. * libidn/configure: Likewise. * sysdeps/unix/inet/configure.ac: New file. * sysdeps/unix/inet/configure: New generated file. * sysdeps/unix/inet/Subdirs: Add libidn. * Makeconfig (sysdeps-srcdirs): Remove variable. (+sysdep_dirs): Do not include $(sysdeps-srcdirs). ($(common-objpfx)config.status): Do not depend on add-on files. ($(common-objpfx)shlib-versions.v.i): Do not mention add-ons in comment. (all-subdirs): Do not include $(add-on-subdirs). * Makefile (dist-prepare): Do not use $(sysdeps-add-ons). * config.make.in (add-ons): Remove variable. (add-on-subdirs): Likewise. (sysdeps-add-ons): Likewise. * manual/Makefile (add-chapters): Remove. ($(objpfx)texis): Do not depend on $(add-chapters). (nonexamples): Do not handle $(add-chapters). (examples): Do not handle $(add-ons). (chapters.% top-menu.%): Do not pass '$(add-chapters)' to libc-texinfo.sh. * manual/install.texi (Installation): Do not mention add-ons. (--enable-add-ons): Do not document configure option. * INSTALL: Regenerated. * manual/libc-texinfo.sh: Do not handle $2 add-ons argument. * manual/maint.texi (Hierarchy Conventions): Do not mention add-ons. * scripts/build-many-glibcs.py (Glibc.build_glibc): Do not use --enable-add-ons. * scripts/gen-sorted.awk: Do not handle Subdirs files from add-ons. * scripts/test-installation.pl: Do not handle glibc-compat add-on. * sysdeps/nptl/Makeconfig: Do not mention add-ons in comment.
2017-05-11Suppress internal declarations for most of the testsuite.Zack Weinberg1-2/+2
This patch adds a new build module called 'testsuite'. IS_IN (testsuite) implies _ISOMAC, as do IS_IN_build and __cplusplus (which means several ad-hoc tests for __cplusplus can go away). libc-symbols.h now suppresses almost all of *itself* when _ISOMAC is defined; in particular, _ISOMAC mode does not get config.h automatically anymore. There are still quite a few tests that need to see internal gunk of one variety or another. For them, we now have 'tests-internal' and 'test-internal-extras'; files in this category will still be compiled with MODULE_NAME=nonlib, and everything proceeds as it always has. The bulk of this patch is moving tests from 'tests' to 'tests-internal'. There is also 'tests-static-internal', which has the same effect on files in 'tests-static', and 'modules-names-tests', which has the *inverse* effect on files in 'modules-names' (it's inverted because most of the things in modules-names are *not* tests). For both of these, the file must appear in *both* the new variable and the old one. There is also now a special case for when libc-symbols.h is included without MODULE_NAME being defined at all. (This happens during the creation of libc-modules.h, and also when preprocessing Versions files.) When this happens, IS_IN is set to be always false and _ISOMAC is *not* defined, which was the status quo, but now it's explicit. The remaining changes to C source files in this patch seemed likely to cause problems in the absence of the main change. They should be relatively self-explanatory. In a few cases I duplicated a definition from an internal header rather than move the test to tests-internal; this was a judgement call each time and I'm happy to change those however reviewers feel is more appropriate. * Makerules: New subdir configuration variables 'tests-internal' and 'test-internal-extras'. Test files in these categories will still be compiled with MODULE_NAME=nonlib. Test files in the existing categories (tests, xtests, test-srcs, test-extras) are now compiled with MODULE_NAME=testsuite. New subdir configuration variable 'modules-names-tests'. Files which are in both 'modules-names' and 'modules-names-tests' will be compiled with MODULE_NAME=testsuite instead of MODULE_NAME=extramodules. (gen-as-const-headers): Move to tests-internal. (do-tests-clean, common-mostlyclean): Support tests-internal. * Makeconfig (built-modules): Add testsuite. * Makefile: Change libof-check-installed-headers-c and libof-check-installed-headers-cxx to 'testsuite'. * Rules: Likewise. Support tests-internal. * benchtests/strcoll-inputs/filelist#en_US.UTF-8: Remove extra-modules.mk. * config.h.in: Don't check for __OPTIMIZE__ or __FAST_MATH__ here. * include/libc-symbols.h: Move definitions of _GNU_SOURCE, PASTE_NAME, PASTE_NAME1, IN_MODULE, IS_IN, and IS_IN_LIB to the very top of the file and rationalize their order. If MODULE_NAME is not defined at all, define IS_IN to always be false, and don't define _ISOMAC. If any of IS_IN (testsuite), IS_IN_build, or __cplusplus are true, define _ISOMAC and suppress everything else in this file, starting with the inclusion of config.h. Do check for inappropriate definitions of __OPTIMIZE__ and __FAST_MATH__ here, but only if _ISOMAC is not defined. Correct some out-of-date commentary. * include/math.h: If _ISOMAC is defined, undefine NO_LONG_DOUBLE and _Mlong_double_ before including math.h. * include/string.h: If _ISOMAC is defined, don't expose _STRING_ARCH_unaligned. Move a comment to a more appropriate location. * include/errno.h, include/stdio.h, include/stdlib.h, include/string.h * include/time.h, include/unistd.h, include/wchar.h: No need to check __cplusplus nor use __BEGIN_DECLS/__END_DECLS. * misc/sys/cdefs.h (__NTHNL): New macro. * sysdeps/m68k/m680x0/fpu/bits/mathinline.h (__m81_defun): Use __NTHNL to avoid errors with GCC 6. * elf/tst-env-setuid-tunables.c: Include config.h with _LIBC defined, for HAVE_TUNABLES. * inet/tst-checks-posix.c: No need to define _ISOMAC. * intl/tst-gettext2.c: Provide own definition of N_. * math/test-signgam-finite-c99.c: No need to define _ISOMAC. * math/test-signgam-main.c: No need to define _ISOMAC. * stdlib/tst-strtod.c: Convert to test-driver. Split locale_test to... * stdlib/tst-strtod1i.c: ...this new file. * stdlib/tst-strtod5.c: Convert to test-driver and add copyright notice. Split tests of __strtod_internal to... * stdlib/tst-strtod5i.c: ...this new file. * string/test-string.h: Include stdint.h. Duplicate definition of inhibit_loop_to_libcall here (from libc-symbols.h). * string/test-strstr.c: Provide dummy definition of libc_hidden_builtin_def when including strstr.c. * sysdeps/ia64/fpu/libm-symbols.h: Suppress entire file in _ISOMAC mode; no need to test __STRICT_ANSI__ nor __cplusplus as well. * sysdeps/x86_64/fpu/math-tests-arch.h: Include cpu-features.h. Don't include init-arch.h. * sysdeps/x86_64/multiarch/test-multiarch.h: Include cpu-features.h. Don't include init-arch.h. * elf/Makefile: Move tst-ptrguard1-static, tst-stackguard1-static, tst-tls1-static, tst-tls2-static, tst-tls3-static, loadtest, unload, unload2, circleload1, neededtest, neededtest2, neededtest3, neededtest4, tst-tls1, tst-tls2, tst-tls3, tst-tls6, tst-tls7, tst-tls8, tst-dlmopen2, tst-ptrguard1, tst-stackguard1, tst-_dl_addr_inside_object, and all of the ifunc tests to tests-internal. Don't add $(modules-names) to test-extras. * inet/Makefile: Move tst-inet6_scopeid_pton to tests-internal. Add tst-deadline to tests-static-internal. * malloc/Makefile: Move tst-mallocstate and tst-scratch_buffer to tests-internal. * misc/Makefile: Move tst-atomic and tst-atomic-long to tests-internal. * nptl/Makefile: Move tst-typesizes, tst-rwlock19, tst-sem11, tst-sem12, tst-sem13, tst-barrier5, tst-signal7, tst-tls3, tst-tls3-malloc, tst-tls5, tst-stackguard1, tst-sem11-static, tst-sem12-static, and tst-stackguard1-static to tests-internal. Link tests-internal with libpthread also. Don't add $(modules-names) to test-extras. * nss/Makefile: Move tst-field to tests-internal. * posix/Makefile: Move bug-regex5, bug-regex20, bug-regex33, tst-rfc3484, tst-rfc3484-2, and tst-rfc3484-3 to tests-internal. * stdlib/Makefile: Move tst-strtod1i, tst-strtod3, tst-strtod4, tst-strtod5i, tst-tls-atexit, and tst-tls-atexit-nodelete to tests-internal. * sunrpc/Makefile: Move tst-svc_register to tests-internal. * sysdeps/powerpc/Makefile: Move test-get_hwcap and test-get_hwcap-static to tests-internal. * sysdeps/unix/sysv/linux/Makefile: Move tst-setgetname to tests-internal. * sysdeps/x86_64/fpu/Makefile: Add all libmvec test modules to modules-names-tests.
2017-03-16Remove C++ namespace handling from glibc headers.Joseph Myers1-51/+0
glibc headers include some code (not particularly consistent or systematic) to put various declarations in C++ namespaces std and __c99, if _GLIBCPP_USE_NAMESPACES is defined. As noted in <https://gcc.gnu.org/ml/libstdc++/2017-03/msg00025.html>, this macro was removed from libstdc++ in 2000. I don't expect compilation with such old versions of libstdc++ to work with current glibc headers anyway (whereas old *binaries* are expected to stay working with current glibc); this patch (which should be a no-op with any libstdc++ version postdating that removal) removes all this code from the glibc headers. The begin-end-check.pl test, whose comments say it is about checking these namespace macro calls, is also removed. The code in that test would have covered __BEGIN_DECLS / __END_DECLS as well, but if those weren't properly matched it would show up with the check-installed-headers-cxx tests, so I don't think there is an actual use for keeping begin-end-check.pl with the namespace code removed. Tested for x86_64 and x86 (testsuite, and that installed stripped shared libraries are unchanged by the patch). * misc/sys/cdefs.h (__BEGIN_NAMESPACE_STD): Remove macro. (__END_NAMESPACE_STD): Likewise. (__USING_NAMESPACE_STD): Likewise. (__BEGIN_NAMESPACE_C99): Likewise. (__END_NAMESPACE_C99): Likewise. (__USING_NAMESPACE_C99): Likewise. * math/math.h (_Mdouble_BEGIN_NAMESPACE): Do not define and undefine macro. (_Mdouble_END_NAMESPACE): Likewise. * ctype/ctype.h: Do not handle C++ namespaces. * libio/bits/stdio-ldbl.h: Likewise. * libio/stdio.h: Likewise. * locale/locale.h: Likewise. * math/bits/mathcalls.h: Likewise. * setjmp/setjmp.h: Likewise. * signal/signal.h: Likewise. * stdlib/bits/stdlib-float.h: Likewise. * stdlib/bits/stdlib-ldbl.h: Likewise. * stdlib/stdlib.h: Likewise. * string/string.h: Likewise. * sysdeps/x86/fpu/bits/mathinline.h: Likewise. * time/bits/types/clock_t.h: Likewise. * time/bits/types/struct_tm.h: Likewise. * time/bits/types/time_t.h: Likewise. * time/time.h: Likewise. * wcsmbs/bits/wchar-ldbl.h: Likewise. * wcsmbs/uchar.h: Likewise. * wcsmbs/wchar.h: Likewise. [_GLIBCPP_USE_NAMESPACES] (wint_t): Remove conditional definition. * wctype/wctype.h: Do not handle C++ namespaces. * scripts/begin-end-check.pl: Remove. * Makefile (installed-headers): Likewise. (tests-special): Do not add $(objpfx)begin-end-check.out. ($(objpfx)begin-end-check.out): Remove.
2017-01-01Update copyright dates with scripts/update-copyrights.Joseph Myers1-1/+1
2016-09-23Installed header hygiene (BZ#20366): Test of installed headers.Zack Weinberg1-0/+23
This adds a test to ensure that the problems fixed in the last several patches do not recur. Each directory checks the headers that it installs for two properties: first, each header must be compilable in isolation, as both C and C++, under a representative combination of language and library conformance levels; second, there is a blacklist of identifiers that may not appear in any installed header, currently consisting of the legacy BSD typedefs. (There is an exemption for the headers that define those typedefs, and for the RPC headers. It may be necessary to make this more sophisticated if we add more stuff to the blacklist in the future.) In order for this test to work correctly, every wrapper header that actually defines something must guard those definitions with #ifndef _ISOMAC. This is the existing mechanism used by the conform/ tests to tell wrapper headers not to define anything that the public header wouldn't, and not to use anything from libc-symbols.h. conform/ only cares for headers that we need to check for standards conformance, whereas this test applies to *every* header. (Headers in include/ that are either installed directly, or are internal-use-only and do *not* correspond to any installed header, are not affected.) * scripts/check-installed-headers.sh: New script. * Rules: In each directory that defines header files to be installed, run check-installed-headers.sh on them as a special test. * Makefile: Likewise for the headers installed at top level. * include/aliases.h, include/alloca.h, include/argz.h * include/arpa/nameser.h, include/arpa/nameser_compat.h * include/elf.h, include/envz.h, include/err.h * include/execinfo.h, include/fpu_control.h, include/getopt.h * include/gshadow.h, include/ifaddrs.h, include/libintl.h * include/link.h, include/malloc.h, include/mcheck.h * include/mntent.h, include/netinet/ether.h * include/nss.h, include/obstack.h, include/printf.h * include/pty.h, include/resolv.h, include/rpc/auth.h * include/rpc/auth_des.h, include/rpc/auth_unix.h * include/rpc/clnt.h, include/rpc/des_crypt.h * include/rpc/key_prot.h, include/rpc/netdb.h * include/rpc/pmap_clnt.h, include/rpc/pmap_prot.h * include/rpc/pmap_rmt.h, include/rpc/rpc.h * include/rpc/rpc_msg.h, include/rpc/svc.h * include/rpc/svc_auth.h, include/rpc/xdr.h * include/rpcsvc/nis_callback.h, include/rpcsvc/nislib.h * include/rpcsvc/yp.h, include/rpcsvc/ypclnt.h * include/rpcsvc/ypupd.h, include/shadow.h * include/stdio_ext.h, include/sys/epoll.h * include/sys/file.h, include/sys/gmon.h, include/sys/ioctl.h * include/sys/prctl.h, include/sys/profil.h * include/sys/statfs.h, include/sys/sysctl.h * include/sys/sysinfo.h, include/ttyent.h, include/utmp.h * sysdeps/arm/nacl/include/bits/setjmp.h * sysdeps/mips/include/sys/asm.h * sysdeps/unix/sysv/linux/include/sys/sysinfo.h * sysdeps/unix/sysv/linux/include/sys/timex.h * sysdeps/x86/fpu/include/bits/fenv.h: Add #ifndef _ISOMAC guard around internal declarations. Add multiple-inclusion guard if not already present.
2016-08-02Support __STDC_WANT_LIB_EXT2__ feature test macro.Joseph Myers1-1/+2
This patch implements support for the __STDC_WANT_LIB_EXT2__ feature test macro from ISO/IEC TR 24731-2:2010, thereby implementing one possible approach for supporting ISO C feature test macros. Recall that, as described in <https://sourceware.org/ml/libc-alpha/2016-05/msg00486.html>, these macros work based on the definition when affected headers are included, so cannot be handled once when the first system header is included because that might not be one of the headers the particular macro in question affects. <https://sourceware.org/ml/libc-alpha/2016-05/msg00680.html> expresses views on possible approaches for implementation and <https://sourceware.org/ml/libc-alpha/2016-06/msg00039.html> follows up on that. This patch arranges things so that the relevant condition is __GLIBC_USE (LIB_EXT2), following one of the suggestions given. Headers using these macros include <bits/libc-header-start.h>, which in turn includes <features.h>. Headers must define __GLIBC_INTERNAL_STARTING_HEADER_IMPLEMENTATION before including <bits/libc-header-start.h>, to discourage inclusion outside glibc as requested. __USE_GNU conditions on affected functions are changed to __GLIBC_USE (LIB_EXT2), while it's added as an additional alternative on the conditions for functions already enabled for some POSIX versions. It would be possible to convert existing __USE_* conditionals to __GLIBC_USE (with the relevant __GLIBC_USE_* being defined in <features.h> where __USE_* are presently defined), and so make them typo-proof (given -Wundef -Werror in glibc builds) because __GLIBC_USE is used with #if not #ifdef / #if defined. No attempt is made to enforce the rule about diagnosing different definitions of __STDC_WANT_LIB_EXT2__ when affected headers are included; such a diagnostic is incompatible with multiple-include guards on the affected headers, unless compiler extensions are added to support it. As previously noted, glibc does not implement all features from TR 24731-2:2010: the functions aswprintf vaswprintf getwdelim getwline are not in glibc, although they would be appropriate to add if someone wished to do so. But I think it makes sense to support the feature test macro if *any* of the controlled features are present in glibc. Tested for x86_64 and x86 (testsuite, and that installed stripped shared libraries are unchanged by the patch). * bits/libc-header-start.h: New file. * Makefile (headers): Add bits/libc-header-start.h. * include/features.h (__STDC_WANT_LIB_EXT2__): Document. (__GLIBC_USE): New macro. * libio/stdio.h: Define __GLIBC_INTERNAL_STARTING_HEADER_IMPLEMENTATION and include <bits/libc-header-start.h> instead of including <features.h>. (fmemopen): Declare also if [__GLIBC_USE (LIB_EXT2)]. (open_memstream): Likewise. (vasprintf): Declare if [__GLIBC_USE (LIB_EXT2)], not [__USE_GNU]. (__asprintf): Likewise. (asprintf): Likewise. (__getdelim): Declare also if [__GLIBC_USE (LIB_EXT2)]. (getdelim): Likewise. (getline): Likewise. * string/string.h: Define __GLIBC_INTERNAL_STARTING_HEADER_IMPLEMENTATION and include <bits/libc-header-start.h> instead of including <features.h>. (strdup): Declare also if [__GLIBC_USE (LIB_EXT2)] (strndup): Likewise. * wcsmbs/wchar.h: Define __GLIBC_INTERNAL_STARTING_HEADER_IMPLEMENTATION and include <bits/libc-header-start.h> instead of including <features.h>. (open_wmemstream): Declare also if [__GLIBC_USE (LIB_EXT2)]. * manual/creature.texi (__STDC_WANT_LIB_EXT2__): Document macro.
2016-03-04Fix edito in last change.Roland McGrath1-1/+1
2016-03-04Conditionalize c++-types-check.out addition to tests-special.Roland McGrath1-2/+2
2016-03-04Fix c++-types-check conditionalization.Roland McGrath1-1/+1
2016-01-04Update copyright dates with scripts/update-copyrights.Joseph Myers1-1/+1
2015-11-24Implement "make update-all-abi"Florian Weimer1-0/+1
* scripts/update-abilist.sh: New file. * Makefile (+subdir_targets): Add subdir_update-all-abi. * Makerules (update-all-abi-%, update-all-abi) (subdir_update-all-abi): New targets. * elf/Makefile (update-all-abi): New target.
2015-10-27Use -std=gnu11 instead of -std=gnu99.Joseph Myers1-1/+1
Now that GCC 4.7 or later is required to build glibc, this patch moves the build from using -std=gnu99 to -std=gnu11 (option added in 4.7). This allows use of C11 features from GCC's headers, such as new float.h macros and max_align_t. Tested for x86_64 and x86 (testsuite; installed stripped shared libraries are unchanged by the patch on x86_64, while I see some slight code reordering of no significance on x86). * Makeconfig (CFLAGS): Use -std=gnu11 instead of -std=gnu99. * Makefile ($(objpfx)c++-types-check.out): Filter out -std=gnu11 instead of -std=gnu99. * configure.ac (systemtap): Test with -std=gnu11 instead of -std=gnu99. * configure: Regenerated. * math/gen-auto-libm-tests.c: Use -std=gnu11 instead of -std=gnu99 in compilation command in comment.
2015-10-26Remove support for removing glibc 2.0 headers.Joseph Myers1-27/+0
There is a configure test for the presence of glibc 2.0 headers (that were renamed / no longer installed in glibc 2.1) and associated support for removing them on "make install". Normal practice for subsequent removal / renaming of installed files has been not to do anything special about removing them; if you want installed files from an old installation removed reliably, you need to use a packaging system that tracks what files were installed by a previous glibc package (via installing in an intermediate directory with install_root). I think it's been long enough since 2.0 that it's not particularly useful to have that special logic for those old headers either; this patch removes it. Tested for x86_64 and x86 (testsuite, and that installed shared libraries are unchanged by the patch). * configure.ac (old_glibc_headers): Remove configure test. * configure: Regenerated. * config.make.in (old-glibc-headers): Remove variable. * Makefile [!$(install_root) && $(old-glibc-headers) = yes] (install): Remove dependency on remove-old-headers. (headers2_0): Remove variable. (remove-old-headers): Remove rule.
2015-10-21Use -Wold-style-definition.Joseph Myers1-1/+1
This patch makes glibc build with -Wold-style-definition to avoid old-style function definitions creeping back in by accident. Tested for x86_64 and x86 (testsuite, and that installed shared libraries are unchanged by the patch). Also tested build for arm, mips64 and powerpc32. Hopefully there aren't any remaining system-specific files with old-style definitions whose formatting evaded my searches, but if there are, they will be easy to fix. * Makeconfig (+gccwarn-c): Add -Wold-style-definition. * Makefile ($(objpfx)c++-types-check.out): Filter out $(+gccwarn-c) instead of -Wstrict-prototypes.
2015-09-14Prevent check-local-headers.sh hang.Carlos O'Donell1-1/+1
Consensus in [1] was that the right way to fix this was simply to redirect from /dev/null to terminate the test if no inputs was found by the tests own globbing e.g. "*/*.{o,os,oS}.d" This can happen when the build is incomplete and the tests are started. This failure causes check-local-headers.sh to hang forever waiting for input from stdin. This change makes the test terminate immediately if the glob doesn't return any files. [1] https://sourceware.org/ml/libc-alpha/2014-12/msg00337.html
2015-09-03Don't install bits/libc-lock.h or bits/stdio-lock.h.Joseph Myers1-1/+1
The bits/libc-lock.h and bits/stdio-lock.h headers are installed, but not used by any other installed header. Accordingly, this patch stops these headers from being installed. A followup is intended to move these headers out of the bits/ namespace. Tested for x86_64 (testsuite, and that installed stripped shared libraries are unchanged by the patch). * Makefile (headers): Remove bits/libc-lock.h. * libio/Makefile (headers): Remove bits/stdio-lock.h.
2015-05-19Succeed if make check does not report any errorsSiddhesh Poyarekar1-1/+1
The conditional that evaluates if there are any FAILed test cases currently always fails, since we ensure it fails if we find any unexpected results in tests.sum and it would obviously fail if it does not find failed results in tests.sum. This patch fixes this by simply inverting the result of the egrep, i.e. succeed if egrep fails (to find failed results) and fail if it succeeds. Tested with 'make subdirs=localedata check' and 'make subdirs=locale check' where all tests succeed and with 'make subdirs=elf check' where a couple of tests fail for me. * Makefile (summarize-tests): Fix return value on success.
2015-03-10Let tests result in UNSUPPORTED; use that for unbuildable C++ casesRoland McGrath1-12/+9
2015-01-02Update copyright dates with scripts/update-copyrights.Joseph Myers1-1/+1
2014-12-11Move semaphore.h to sysdeps/pthread/.Joseph Myers1-1/+1
Carlos reported failures in conform/ tests in environments where the compiler used could only find headers in glibc's source and build trees, not any previously installed headers <https://sourceware.org/ml/libc-alpha/2014-09/msg00040.html>. This patch moves nptl/semaphore.h to sysdeps/pthread/semaphore.h so that it can be found by builds from all glibc subdirectories; it's not in any way NPTL-specific. (I left the Makefile setting to install this header in nptl/, but maybe it should move as well - it's just not clear to me what ifeq ($(subdir),...) conditional should be used to select the directory to associate the header with for installation purposes. The path in the toplevel Makefile used for begin-end-check also remains hardcoded; it's a known todo issue to rework that test to run in each subdirectory checking the headers installed from that subdirectory, rather than a separate hardcoded list.) Tested for x86_64 (testsuite, and that installed stripped shared libraries are unchanged by the patch). I did *not* test a configuration such as that in which Carlos saw failure. * nptl/semaphore.h: Move to ... * sysdeps/pthread/semaphore.h: ... here. * Makefile (installed-headers): Change nptl/semaphore.h to sysdeps/pthread/semaphore.h.
2014-06-13Fix pthread.h in installed-headers list.Stefan Liebler1-1/+1
2014-06-07Remove redundant C locale settings.Joseph Myers1-1/+1
Various glibc build / install / test code has C locale settings that are redundant with LC_ALL=C. LC_ALL takes precedence over LANG, so anywhere that sets LC_ALL=C (explicitly, or through it being in the default environment for running tests) does not need to set LANG=C. LC_ALL=C also takes precedence over LANGUAGE, since 2001-01-02 Ulrich Drepper <drepper@redhat.com> * intl/dcigettext.c (guess_category_value): Rewrite so that LANGUAGE value is ignored if the selected locale is the C locale. * intl/tst-gettext.c: Set locale for above change. * intl/tst-translit.c: Likewise. and so settings of LANGUAGE=C are also redundant when LC_ALL=C is set. One test also had LC_ALL=C in its -ENV setting, although it's part of the default environment used for tests. This patch removes the redundant settings. It removes a suggestion in install.texi of setting LANGUAGE=C LC_ALL=C for "make install"; the Makefile.in target "install" already sets LC_ALL_C so there's no need for the user to set it (and nor should there be any need for the user to set it). If some build machine tool used by "make install" uses a version of libintl predating that 2001 change, and the user has LANGUAGE set, the removal of LANGUAGE=C from the Makefile.in "install" rule could in principle affect the user's installation. However, I don't think we need to be concerned about pre-2001 build tools. Tested x86_64. * Makefile (install): Don't set LANGUAGE. * Makefile.in (install): Likewise. * assert/Makefile (test-assert-ENV): Remove variable. (test-assert-perr-ENV): Likewise. * elf/Makefile (neededtest4-ENV): Likewise. * iconvdata/Makefile ($(inst_gconvdir)/gconv-modules) [$(cross-compiling) = no]: Don't set LANGUAGE. * io/ftwtest-sh (LANG): Remove variable. * libio/Makefile (tst-widetext-ENV): Likewise. * manual/install.texi (Running make install): Don't refer to environment settings for make install. * INSTALL: Regenerated. * nptl/tst-tls6.sh: Don't set LANG. * posix/globtest.sh (LANG): Remove variable. * string/Makefile (tester-ENV): Likewise. (inl-tester-ENV): Likewise. (noinl-tester-ENV): Likewise. * sysdeps/s390/s390-64/Makefile ($(inst_gconvdir)/gconv-modules) [$(cross-compiling) = no]: Don't set LANGUAGE. * timezone/Makefile (build-testdata): Use $(built-program-cmd) without explicit environment settings. localedata/ChangeLog: * tst-fmon.sh: Don't set LANGUAGE. * tst-locale.sh: Likewise.
2014-05-21Consistently use $(elf-objpfx).Joseph Myers1-3/+3
As previously noted <https://sourceware.org/ml/libc-alpha/2013-05/msg00696.html>, $(elf-objpfx) and $(elfobjdir) are redundant and should be consolidated. This patch consolidates on $(elf-objpfx) (for consistency with $(csu-objpfx)), also changing direct uses of $(common-objpfx)elf/ to use $(elf-objpfx). Tested x86_64, including that installed shared libraries are unchanged by the patch. * Makeconfig [$(build-hardcoded-path-in-tests) = yes] (rtld-tests-LDFLAGS): Use $(elf-objpfx) instead of $(common-objpfx)elf/. (link-libc-before-gnulib): Likewise. (elfobjdir): Remove variable. * Makefile (install): Use $(elf-objpfx) instead of $(common-objpfx)elf/. * Makerules (link-libc-args): Use $(elf-objpfx) instead of $(elfobjdir)/. (link-libc-deps): Likewise. ($(common-objpfx)libc.so): Likewise. ($(common-objpfx)linkobj/libc.so): Likewise. [$(cross-compiling) = no] (symbolic-link-prog): Use $(elf-objpfx) instead of $(common-objpfx)elf/. (symbolic-link-list): Likewise. * iconvdata/Makefile ($(inst_gconvdir)/gconv-modules) [$(cross-compiling) = no]: Likewise. * sysdeps/arm/Makefile (gnulib-arch): Use $(elf-objpfx) instead of $(elfobjdir)/. (static-gnulib-arch): Likewise. * sysdeps/s390/s390-64/Makefile ($(inst_gconvdir)/gconv-modules) [$(cross-compiling) = no]: Use $(elf-objpfx) instead of $(common-objpfx)elf/. localedata/ChangeLog: * Makefile (LOCALEDEF): Use $(elf-objpfx) instead of $(common-objpfx)elf/.
2014-03-14Do not terminate default test runs on test failure.Joseph Myers1-0/+12
This patch is an updated version of <https://sourceware.org/ml/libc-alpha/2014-01/msg00198.html> and <https://sourceware.org/ml/libc-alpha/2014-03/msg00180.html>. Normal practice for software testsuites is that rather than terminating immediately when a test fails, they continue running and report at the end on how many tests passed or failed. The principle behind the glibc testsuite stopping on failure was probably that the expected state is no failures and so any failure indicates a problem such as miscompilation. In practice, while this is fairly close to true for native testing on x86_64 and x86 (kernel bugs and race conditions can still cause intermittent failures), it's less likely to be the case on other platforms, and so people testing glibc run the testsuite with "make -k" and then examine the logs to determine whether the failures are what they expect to fail on that platform, possibly with some automation for the comparison. This patch switches the glibc testsuite to the normal convention of not stopping on failure - unless you use stop-on-test-failure=y, in which case it behaves essentially as it did before (and does not generate overall test summaries on failure). Instead, the summary tests.sum may contain tests that FAILed. At the end of the test run, any FAIL or ERROR lines from tests.sum are printed, and then it exits with error status if there were any such lines. In addition, build failures will also cause the test run to stop - this has the justification that those *do* indicate serious problems that should be promptly fixed and aren't generally hard to fix (but apart from that, avoiding the build stopping on those failures seems harder). Note that unlike the previous patches in this series, this *does* require people with automation around testing glibc to change their processes - either to start using tests.sum / xtests.sum to track failures and compare them with expectations (with or without also using "make -k" and examining "make" logs to identify build failures), or else to use stop-on-test-failure=y and ignore the new tests.sum / xtests.sum mechanism. (If all you check is the exit status from "make check", no changes are needed unless you want to avoid test runs continuing after the first failure.) Tested x86_64. * scripts/evaluate-test.sh: Handle fourth argument to determine whether test run should stop on failure. * Makeconfig (stop-on-test-failure): New variable. (evaluate-test): Pass fourth argument to evaluate-test.sh based on $(stop-on-test-failure). * Makefile (tests): Give a summary of results from testing and exit with failure status if they include an ERROR or FAIL. (xtests): Likewise. * manual/install.texi (Configuring and compiling): Mention stop-on-test-failure=y. * INSTALL: Regenerated.
2014-03-07Generate overall summary of test results.Joseph Myers1-0/+11
This patch, an updated version of <https://sourceware.org/ml/libc-alpha/2014-01/msg00197.html>, makes testsuite runs generate an overall summary of test results. A new script merge-test-results.sh deals both with collecting results within a directory to a file with all the results from that directory, and collecting the results from subdirectories into a single overall file (there's not much in common between the two modes of operation of the script, but it seemed silly to have two separate scripts for this). Within a directory, missing results produce UNRESOLVED lines; at top level, missing results for a whole directory produce an ERROR line (since toplevel can't identify what the specific missing tests are in this case). Note that this does not change the rules for when "make" considers there has been an error, or terminates, so unexpected failures will still cause make to terminate, or, with -k, mean the commands for "tests" don't get run because of failure of a dependency. Tested x86_64, including that the summary does in fact reflect all the tests with .test-result files. * scripts/merge-test-results.sh: New file. * Makefile (tests-special-notdir): New variable. (tests): Run merge-test-results.sh. (xtests): Likewise. * Rules (tests-special-notdir): New variable. (xtests-special-notdir): Likewise. (tests): Run merge-test-results.sh (xtests): Likewise.
2014-03-06Enumerate tests with special rules in tests-special variable.Joseph Myers1-2/+4
This patch is a revised and updated version of <https://sourceware.org/ml/libc-alpha/2014-01/msg00196.html>. In order to generate overall summaries of the results of all tests in the glibc testsuite, we need to identify and concatenate the files with the results of individual tests. Tomas Dohnalek's patch used $(common-objpfx)*/*.test-result for this. However, the normal glibc approach is explicit enumeration of the expected set of files with a given property, rather than all files matching some pattern like that. Furthermore, we would like to be able to mark tests as UNRESOLVED if the file with their results is for some reason missing, and in future we would like to be able to mark tests as UNSUPPORTED if they are disabled for a particular configuration (rather than simply having them missing from the list of tests as at present). Such handling of tests that were not run or did not record results requires an explicit enumeration of tests. For the tests following the default makefile rules, $(tests) (and $(xtests)) provides such an enumeration. Others, however, are added directly as dependencies of the "tests" and "xtests" makefile targets. This patch changes the makefiles to put them in variables tests-special and xtests-special, with appropriate dependencies on the tests listed there then being added centrally. Those variables are used in Rules and so need to be set before Rules is included in a subdirectory makefile, which is often earlier in the makefile than the dependencies were present before. We previously discussed the question of where to include Rules; see the question at <https://sourceware.org/ml/libc-alpha/2012-11/msg00798.html>, and a discussion in <https://sourceware.org/ml/libc-alpha/2013-01/msg00337.html> of why Rules is included early rather than late in subdirectory makefiles. It was necessary to avoid an indirection through the check-abi target and get the check-abi-* targets for individual libraries into the tests-special variable. The intl/ test $(objpfx)tst-gettext.out, previously built only because of dependencies from other tests, was also added to tests-special for the same reason. The entries in tests-special are the full makefile targets, complete with $(objpfx) and .out. If a future change causes tests to be named consistently with a .out suffix, this can be changed to include just the path relative to $(objpfx), without .out. Tested x86_64, including that the same set of files is generated in the build directory by a build and testsuite run both before and after the patch (except for changes to the elf/tst-null-argv.debug.out.<number> file name), and a build with run-built-tests=no to verify there aren't any more obvious instances of the issue Marcus Shawcroft reported with a previous version in <https://sourceware.org/ml/libc-alpha/2014-01/msg00462.html>. * Makefile (tests): Change dependencies to .... (tests-special): ... additions to this variable. (tests): Depend on $(tests-special). * Makerules (check-abi-list): New variable. (check-abi): Depend on $(check-abi-list). [$(subdir) = elf] (tests-special): Add $(objpfx)check-abi-libc.out. [$(build-shared) = yes && subdir] (tests-special): Add $(check-abi-list). [$(build-shared) = yes && subdir] (tests): Do not depend on check-abi. * Rules (tests): Depend on $(tests-special). (xtests): Depend on $(xtests-special). * catgets/Makefile (tests): Change dependencies to .... (tests-special): ... additions to this variable. * conform/Makefile (tests): Change dependencies to .... (tests-special): ... additions to this variable. * elf/Makefile (tests): Change dependencies to .... (tests-special): ... additions to this variable. * grp/Makefile (tests): Change dependencies to .... (tests-special): ... additions to this variable. * iconv/Makefile (xtests): Change dependencies to .... (xtests-special): ... additions to this variable. * iconvdata/Makefile (tests): Change dependencies to .... (tests-special): ... additions to this variable. * intl/Makefile (tests): Change dependencies to .... (tests-special): ... additions to this variable. Also add $(objpfx)tst-gettext.out. * io/Makefile (tests): Change dependencies to .... (tests-special): ... additions to this variable. * libio/Makefile (tests): Change dependencies to .... (tests-special): ... additions to this variable. * malloc/Makefile (tests): Change dependencies to .... (tests-special): ... additions to this variable. * misc/Makefile (tests): Change dependencies to .... (tests-special): ... additions to this variable. * nptl/Makefile (tests): Change dependencies to .... (tests-special): ... additions to this variable. * nptl_db/Makefile (tests): Change dependencies to .... (tests-special): ... additions to this variable. * posix/Makefile (tests): Change dependencies to .... (tests-special): ... additions to this variable. (xtests): Change dependencies to .... (xtests-special): ... additions to this variable. * resolv/Makefile (tests): Change dependencies to .... (tests-special): ... additions to this variable. (xtests): Change dependencies to .... (xtests-special): ... additions to this variable. * stdio-common/Makefile (tests): Change dependencies to .... (tests-special): ... additions to this variable. (do-tst-unbputc): Remove target. (do-tst-printf): Likewise. * stdlib/Makefile (tests): Change dependencies to .... (tests-special): ... additions to this variable. * string/Makefile (tests): Change dependencies to .... (tests-special): ... additions to this variable. * sysdeps/x86/Makefile (tests): Change dependencies to .... (tests-special): ... additions to this variable. localedata: * Makefile (tests): Change dependencies to .... (tests-special): ... additions to this variable.
2014-02-21Generate .test-result files for tests with special rules.Joseph Myers1-3/+6
This patch, an updated version of <https://sourceware.org/ml/libc-alpha/2014-01/msg00194.html> now proposed for inclusion in glibc, extends the generation of PASS and FAIL status in .test-result files for individual tests to cover tests with their own custom makefile rules. This is just adding $(evaluate-test) calls to all such rules, since tests with multiple commands were previously split into separate tests. Note that the tests the makefiles expect to fail (posix/annexc and conformtest) currently get FAIL listed in the .test-result file, rather than XFAIL; a subsequent patch will introduce a better XFAIL mechanism. Tested x86_64. * Makefile ($(objpfx)c++-types-check.out): Use $(evaluate-test). ($(objpfx)check-local-headers.out): Likewise. ($(objpfx)begin-end-check.out): Likewise. * Makerules (check-abi-%.out): Likewise. * catgets/Makefile ($(objpfx)test1.cat): Likewise. ($(objpfx)test2.cat): Likewise. ($(objpfx)de/libc.cat): Likewise. ($(objpfx)test-gencat.out): Likewise. * conform/Makefile ($(objpfx)run-conformtest.out): Likewise. * elf/Makefile ($(objpfx)order-cmp.out): Likewise. ($(objpfx)noload-mem): Likewise. ($(objpfx)tst-pathopt.out): Likewise. ($(objpfx)tst-rtld-load-self.out): Likewise. ($(objpfx)tst-array1-cmp.out): Likewise. ($(objpfx)tst-array1-static-cmp.out): Likewise. ($(objpfx)tst-array2-cmp.out): Likewise. ($(objpfx)tst-array3-cmp.out): Likewise. ($(objpfx)tst-array4-cmp.out): Likewise. ($(objpfx)tst-array5-cmp.out): Likewise. ($(objpfx)tst-array5-static-cmp.out): Likewise. ($(objpfx)check-textrel.out): Likewise. ($(objpfx)check-execstack.out): Likewise. ($(objpfx)check-localplt.out): Likewise. ($(objpfx)order2-cmp.out): Likewise. ($(objpfx)tst-leaks1-mem): Likewise. ($(objpfx)tst-leaks1-static-mem): Likewise. ($(objpfx)tst-initorder-cmp.out): Likewise. ($(objpfx)tst-initorder2-cmp.out): Likewise. ($(objpfx)tst-unused-dep.out): Likewise. ($(objpfx)tst-unused-dep-cmp.out): Likewise. * grp/Makefile ($(objpfx)tst_fgetgrent.out): Likewise. * iconv/Makefile (test-iconvconfig): Likewise. * iconvdata/Makefile ($(objpfx)mtrace-tst-loading): Likewise. ($(objpfx)iconv-test.out): Likewise. ($(objpfx)tst-tables.out): Likewise. * intl/Makefile ($(objpfx)mtrace-tst-gettext): Likewise. ($(objpfx)tst-gettext.out): Likewise. ($(objpfx)tst-translit.out): Likewise. ($(objpfx)tst-gettext2.out): Likewise. ($(objpfx)tst-gettext4.out): Likewise. ($(objpfx)tst-gettext6.out): Likewise. * io/Makefile ($(objpfx)ftwtest.out): Likewise. * libio/Makefile ($(objpfx)test-freopen.out): Likewise. ($(objpfx)tst-fopenloc-cmp.out): Likewise. ($(objpfx)tst-fopenloc-mem.out): Likewise. * malloc/Makefile ($(objpfx)tst-mtrace.out): Likewise. * misc/Makefile ($(objpfx)tst-error1-mem): Likewise. * posix/Makefile ($(objpfx)globtest.out): Likewise. ($(objpfx)wordexp-tst.out): Likewise. ($(objpfx)annexc.out): Likewise. ($(objpfx)tst-fnmatch-mem): Likewise. ($(objpfx)bug-regex2-mem): Likewise. ($(objpfx)bug-regex14-mem): Likewise. ($(objpfx)bug-regex21-mem): Likewise. ($(objpfx)bug-regex31-mem): Likewise. ($(objpfx)tst-vfork3-mem): Likewise. ($(objpfx)tst-rxspencer-no-utf8-mem): Likewise. ($(objpfx)tst-pcre-mem): Likewise. ($(objpfx)tst-boost-mem): Likewise. ($(objpfx)tst-getconf.out): Likewise. ($(objpfx)bug-ga2-mem): Likewise. ($(objpfx)bug-glob2-mem): Likewise. * resolv/Makefile ($(objpfx)mtrace-tst-leaks): Likewise. ($(objpfx)mtrace-tst-leaks2): Likewise. * stdio-common/Makefile ($(objpfx)tst-unbputc.out): Likewise. ($(objpfx)tst-printf.out): Likewise. ($(objpfx)tst-setvbuf1.out): Likewise. ($(objpfx)tst-setvbuf1-cmp.out): Likewise. * stdlib/Makefile ($(objpfx)isomac.out): Likewise. ($(objpfx)tst-fmtmsg.out): Likewise. * string/Makefile ($(objpfx)tst-svc-cmp.out): Likewise. * sysdeps/x86/Makefile ($(objpfx)tst-xmmymm.out): Likewise. localedata: * Makefile ($(objpfx)sort-test.out): Use $(evaluate-test). ($(objpfx)tst-fmon.out): Likewise. ($(objpfx)tst-numeric.out): Likewise. ($(objpfx)tst-locale.out): Likewise. ($(objpfx)tst-rpmatch.out): Likewise. ($(objpfx)tst-trans.out): Likewise. ($(objpfx)tst-mbswcs.out): Likewise. ($(objpfx)tst-ctype.out): Likewise. ($(objpfx)tst-wctype.out): Likewise. ($(objpfx)tst-langinfo.out): Likewise. ($(objpfx)mtrace-tst-leaks): Likewise. nptl: * Makefile ($(objpfx)tst-stack3-mem): Use $(evaluate-test). ($(objpfx)tst-tls6.out): Likewise. ($(objpfx)tst-cleanup0.out): Likewise. ($(objpfx)tst-cleanup0-cmp.out): Likewise. ($(objpfx)tst-cancel-wrappers.out): Likewise. ($(objpfx)tst-oddstacklimit.out): Likewise. nptl_db: * Makefile ($(objpfx)db-symbols.out): Use $(evaluate-test).
2014-02-12Remove reference to subdir_lint.out.Joseph Myers1-1/+1
The toplevel Makefile's subdir_targets variable refers to subdir_lint.out. As far as I can tell, this is not defined or referenced anywhere else in the tree. Having .out makefile references that don't refer to the output from testcases seems confusing; this patch removes the reference to subdir_lint.out. Tested x86_64. * Makefile (subdir_targets): Remove subdir_lint.out.
2014-01-01Update copyright notices with scripts/update-copyrightsAllan McRae1-1/+1