aboutsummaryrefslogtreecommitdiff
path: root/support
AgeCommit message (Collapse)AuthorFilesLines
2019-11-13support: Fix support_set_small_thread_stack_size to build on HurdFlorian Weimer1-2/+7
PTHREAD_STACK_MIN comes from <limits.h>, so include it explicitly. However, it is not defined on Hurd, so compensate for that as well. Built on x86_64-linux-gnu, i686-linux-gnu, i686-gnu. Change-Id: Ifacc888ef86731c2639721b0932ae59583bd6b3e Reviewed-by: Christian Brauner <christian.brauner@ubuntu.com>
2019-11-11support: Add xsetlocale functionArjun Shankar3-0/+32
2019-11-11support: Add support_set_small_thread_stack_sizeFlorian Weimer4-0/+94
And support_small_stack_thread_attribute Change-Id: I1cf79a469984f8f30a4a947ee9ec2a5e74de8926
2019-10-31Sync timespec-{add,sub} with gnulibAdhemerval Zanella2-26/+14
It sync with gnulib commit 06011ed74e978613422aca43c0bd92dc44213933. Reviewed-by: Paul Eggert <eggert@cs.ucla.edu>
2019-10-30Change most internal uses of __gettimeofday to __clock_gettime.Zack Weinberg1-12/+11
Since gettimeofday will shortly be implemented in terms of clock_gettime on all platforms, internal code should use clock_gettime directly; in addition to removing a layer of indirection, this will allow us to remove the PLT-bypass gunk for gettimeofday. (We can't quite do that yet, but it'll be coming later in this patch series.) In many cases, the changed code does fewer conversions. The changed code always assumes __clock_gettime (CLOCK_REALTIME) cannot fail. Most of the call sites were assuming gettimeofday could not fail, but a few places were checking for errors. POSIX says clock_gettime can only fail if the clock constant is invalid or unsupported, and CLOCK_REALTIME is the one and only clock constant that's required to be supported. For consistency I grepped the entire source tree for any other places that checked for errors from __clock_gettime (CLOCK_REALTIME), found one, and changed it too. (For the record, POSIX also says gettimeofday can never fail.) (It would be nice if we could declare that GNU systems will always support CLOCK_MONOTONIC as well as CLOCK_REALTIME; there are several places where we are using CLOCK_REALTIME where _MONOTONIC would be more appropriate, and/or trying to use _MONOTONIC and then falling back to _REALTIME. But the Hurd doesn't support CLOCK_MONOTONIC yet, and it looks like adding it would involve substantial changes to gnumach's internals and API. Oh well.) A few Hurd-specific files were changed to use __host_get_time instead of __clock_gettime, as this seemed tidier. We also assume this cannot fail. Skimming the code in gnumach leads me to believe the only way it could fail is if __mach_host_self also failed, and our Hurd-specific code consistently assumes that can't happen, so I'm going with that. With the exception of support/support_test_main.c, test cases are not modified, mainly because I didn't want to have to figure out which test cases were testing gettimeofday specifically. The definition of GETTIME in sysdeps/generic/memusage.h had a typo and was not reading tv_sec at all. I fixed this. It appears nobody has been generating malloc traces on a machine that doesn't have a superseding definition. There are a whole bunch of places where the code could be simplified by factoring out timespec subtraction and/or comparison logic, but I want to keep this patch as mechanical as possible. Checked on x86_64-linux-gnu, i686-linux-gnu, powerpc64le-linux-gnu, powerpc64-linux-gnu, powerpc-linux-gnu, and aarch64-linux-gnu. Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org> Reviewed-by: Lukasz Majewski <lukma@denx.de>
2019-10-24Add wait-for-debugger test harness hooksDJ Delorie2-0/+75
If WAIT_FOR_DEBUGGER is set to a non-zero value in the environment, any test that runs will print some useful gdb information and wait for gdb to attach to it and clear the "wait_for_debugger" variable. Reviewed-by: Carlos O'Donell <carlos@redhat.com>
2019-09-19Fix building support_ptrace.c on i686-gnu.Stefan Liebler1-1/+0
On i686-gnu the build is broken: In file included from support_ptrace.c:22: ../include/sys/prctl.h:2:15: fatal error: sys/prctl.h: No such file or directory #include_next <sys/prctl.h> This patch just removes the unused prctl.h inclusion. ChangeLog: * support/support_ptrace.c: Remove inclusion of sys/prctl.h.
2019-09-18Add UNSUPPORTED check in elf/tst-pldd.Stefan Liebler3-0/+77
The testcase forks a child process and runs pldd with PID of this child. On systems where /proc/sys/kernel/yama/ptrace_scope differs from zero, pldd will fail with /usr/bin/pldd: cannot attach to process 3: Operation not permitted This patch checks if ptrace_scope exists, is zero "classic ptrace permissions" or one "restricted ptrace". If ptrace_scope exists and has a higher restriction, then the test is marked as UNSUPPORTED. The case "restricted ptrace" is handled by rearranging the processes involved during the test. Now we have the following process tree: -parent: do_test (performs output checks) --subprocess 1: pldd_process (becomes pldd via execve) ---subprocess 2: target_process (ptraced via pldd) ChangeLog: * elf/tst-pldd.c (do_test): Add UNSUPPORTED check. Rearrange subprocesses. (pldd_process): New function. * support/Makefile (libsupport-routines): Add support_ptrace. * support/xptrace.h: New file. * support/support_ptrace.c: Likewise.
2019-09-07Prefer https to http for gnu.org and fsf.org URLsPaul Eggert187-187/+187
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-08-14support: Include <support/descriptors.h> in support_descriptors.cFlorian Weimer1-0/+1
2019-07-10nss_db: fix endent wrt NULL mappings [BZ #24695] [BZ #24696]DJ Delorie3-0/+39
nss_db allows for getpwent et al to be called without a set*ent, but it only works once. After the last get*ent a set*ent is required to restart, because the end*ent did not properly reset the module. Resetting it to NULL allows for a proper restart. If the database doesn't exist, however, end*ent erroniously called munmap which set errno. The test case runs "makedb" inside the testroot, so needs selinux DSOs installed.
2019-06-28support: Add xdlvsym functionFlorian Weimer2-0/+21
2019-06-21support: Invent verbose_printf macroMike Crowe1-0/+8
Make it easier for tests to emit progress messages only when --verbose is specified. * support/test-driver.h: Add verbose_printf macro.
2019-06-21support: Add xclock_now helper function.Mike Crowe1-0/+10
It's easier to read and write tests with: const struct timespec ts = xclock_now(CLOCK_REALTIME); than struct timespec ts; xclock_gettime(CLOCK_REALTIME, &ts); * support/xtime.h: Add xclock_now() helper function.
2019-05-20support: Expose sbindir as support_sbindir_prefixFlorian Weimer3-0/+10
2019-05-20support: Add missing EOL terminators on timespecMike Crowe1-2/+2
The original implementations of test_timespec_before_impl and test_timespec_equal_or_after in 519839965197291924895a3988804e325035beee were missing the backslash required for a newline. Checked on x86_64-linux-gnu. * support/timespec.c: Add backslash to correct newline in failure message. Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
2019-05-20support: Correct confusing commentMike Crowe1-2/+2
* support/timespec.h: Correct confusing comment. Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
2019-05-16support: Report NULL blobs explicitly in TEST_COMPAREFlorian Weimer1-1/+3
Provide an explicit diagnostic if the length is positive, and do not just crash with a null pointer dereference. Null pointers are only valid if the length is zero, so this can only happen with a faulty test.
2019-05-15support: Add support_install_rootsbindirAlexandra Hájková3-1/+11
Reviewed by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
2019-05-14support: Export bindir path on support_pathAdhemerval Zanella3-1/+11
Checked on x86_64-linux-gnu. * support/Makefile (CFLAGS-support_paths.c): Add -DBINDIR_PATH. * support/support.h (support_bindir_prefix): New variable. * support/support_paths.c [BINDIR_PATH] (support_bindir_prefix): Reviewed-by: DJ Delorie <dj@redhat.com>
2019-05-10support: Fix timespec printfAdhemerval Zanella1-10/+11
The patch print timespec members as intmax_t instead of long int. It avoid the -Werror=format= build issue on x32: timespec.c: In function 'test_timespec_before_impl': timespec.c:32:23: error: format '%ld' expects argument of type 'long int', but argument 4 has type '__time_t' {aka 'const long long int'} [-Werror=format=] Checked on x86_64-linux-gnu-x32, x86_64-linux-gnu, and i686-linux-gnu. * support/timespec.c (test_timespec_before_impl, test_timespec_equal_or_after_impl): print timespec member as intmax_t insted of long int. Reviewed-by: Florian Weimer <fweimer@redhat.com>
2019-05-09support: Add timespec.hMike Crowe6-0/+287
It adds useful functions for tests that use struct timespec. Checked on x86_64-linux-gnu and i686-linux-gnu. * support/timespec.h: New file. Provide timespec helper functions along with macros in the style of those in check.h. * support/timespec.c: New file. Implement check functions declared in support/timespec.h. * support/timespec-add.c: New file from gnulib containing timespec_add implementation that handles overflow. * support/timespec-sub.c: New file from gnulib containing timespec_sub implementation that handles overflow. * support/README: Mention timespec.h. Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
2019-05-08support: Add xclock_gettimeMike Crowe4-0/+66
* support/xclock_gettime.c (xclock_gettime): New file. Provide clock_gettime wrapper for use in tests that fails the test rather than returning failure. * support/xtime.h: New file to declare xclock_gettime. * support/Makefile: Add xclock_gettime.c. * support/README: Mention xtime.h.
2019-04-17support: Add support_capture_subprogramAdhemerval Zanella10-50/+551
Its API is similar to support_capture_subprocess, but rather creates a new process based on the input path and arguments. Under the hoods it uses posix_spawn to create the new process. It also allows the use of other support_capture_* functions to check for expected results and free the resources. Checked on x86_64-linux-gnu. * support/Makefile (libsupport-routines): Add support_subprocess, xposix_spawn, xposix_spawn_file_actions_addclose, and xposix_spawn_file_actions_adddup2. (tst-support_capture_subprocess-ARGS): New rule. * support/capture_subprocess.h (support_capture_subprogram): New prototype. * support/support_capture_subprocess.c (support_capture_subprocess): Refactor to use support_subprocess and support_capture_poll. (support_capture_subprogram): New function. * support/tst-support_capture_subprocess.c (write_mode_to_str, str_to_write_mode, test_common, parse_int, handle_restart, do_subprocess, do_subprogram, do_multiple_tests): New functions. (do_test): Add support_capture_subprogram tests. * support/subprocess.h: New file. * support/support_subprocess.c: Likewise. * support/xposix_spawn.c: Likewise. * support/xposix_spawn_file_actions_addclose.c: Likewise. * support/xposix_spawn_file_actions_adddup2.c: Likewise. * support/xspawn.h: Likewise. Reviewed-by: Carlos O'Donell <carlos@redhat.com>
2019-02-13Avoid fall-through in test-container if execlp fails.Joseph Myers1-0/+1
One of the implicit-fallthrough warnings from compiling glibc with -Wextra appears to indicate an actual bug: the test-container code could fall through inappropriately if execlp returns (which only occurs on error). This patch adds appropriate error handling in this case to avoid that fall-through. Tested for x86_64. * support/test-container.c (recursive_remove): Use FAIL_EXIT1 if execlp returns.
2019-02-07support: Implement xdlmopenFlorian Weimer3-1/+33
Put xdlmopen into its own file, to avoid disturbing static linking tests (where dlmopen pulls in additional code).
2019-02-06support: Use dlerror to detect NULL symbols in xdlsymFlorian Weimer1-10/+10
2019-02-06Fix alignment of TLS variables for tls variant TLS_TCB_AT_TP [BZ #23403]Stefan Liebler5-0/+66
The alignment of TLS variables is wrong if accessed from within a thread for architectures with tls variant TLS_TCB_AT_TP. For the main thread the static tls data is properly aligned. For other threads the alignment depends on the alignment of the thread pointer as the static tls data is located relative to this pointer. This patch adds this alignment for TLS_TCB_AT_TP variants in the same way as it is already done for TLS_DTV_AT_TP. The thread pointer is also already properly aligned if the user provides its own stack for the new thread. This patch extends the testcase nptl/tst-tls1.c in order to check the alignment of the tls variables and it adds a pthread_create invocation with a user provided stack. The test itself is migrated from test-skeleton.c to test-driver.c and the missing support functions xpthread_attr_setstack and xposix_memalign are added. ChangeLog: [BZ #23403] * nptl/allocatestack.c (allocate_stack): Align pointer pd for TLS_TCB_AT_TP tls variant. * nptl/tst-tls1.c: Migrate to support/test-driver.c. Add alignment checks. * support/Makefile (libsupport-routines): Add xposix_memalign and xpthread_setstack. * support/support.h: Add xposix_memalign. * support/xthread.h: Add xpthread_attr_setstack. * support/xposix_memalign.c: New File. * support/xpthread_attr_setstack.c: Likewise.
2019-02-01support: Correct error message for TEST_COMPARE_STRINGFlorian Weimer2-7/+7
It should say "string", not "blob".
2019-02-01support: Handle AF_LOCAL, AF_UNSPEC in support_format_address_familyFlorian Weimer1-0/+4
2019-01-31nptl: Fix pthread_rwlock_try*lock stalls (Bug 23844)Carlos O'Donell3-0/+28
For a full analysis of both the pthread_rwlock_tryrdlock() stall and the pthread_rwlock_trywrlock() stall see: https://sourceware.org/bugzilla/show_bug.cgi?id=23844#c14 In the pthread_rwlock_trydlock() function we fail to inspect for PTHREAD_RWLOCK_FUTEX_USED in __wrphase_futex and wake the waiting readers. In the pthread_rwlock_trywrlock() function we write 1 to __wrphase_futex and loose the setting of the PTHREAD_RWLOCK_FUTEX_USED bit, again failing to wake waiting readers during unlock. The fix in the case of pthread_rwlock_trydlock() is to check for PTHREAD_RWLOCK_FUTEX_USED and wake the readers. The fix in the case of pthread_rwlock_trywrlock() is to only write 1 to __wrphase_futex if we installed the write phase, since all other readers would be spinning waiting for this step. We add two new tests, one exercises the stall for pthread_rwlock_trywrlock() which is easy to exercise, and one exercises the stall for pthread_rwlock_trydlock() which is harder to exercise. The pthread_rwlock_trywrlock() test fails consistently without the fix, and passes after. The pthread_rwlock_tryrdlock() test fails roughly 5-10% of the time without the fix, and passes all the time after. Signed-off-by: Carlos O'Donell <carlos@redhat.com> Signed-off-by: Torvald Riegel <triegel@redhat.com> Signed-off-by: Rik Prohaska <prohaska7@gmail.com> Co-authored-by: Torvald Riegel <triegel@redhat.com> Co-authored-by: Rik Prohaska <prohaska7@gmail.com>
2019-01-31nss_files: Fix /etc/aliases null pointer dereference [BZ #24059]Florian Weimer2-0/+4
If /etc/aliases ends with a continuation line (a line that starts with whitespace) which does not have a trailing newline character, the file parser would crash due to a null pointer dereference. Reviewed-by: Carlos O'Donell <carlos@redhat.com>
2019-01-24hurd: Fix libsupport xsigstack buildAdhemerval Zanella1-0/+7
Hurd does not support MAP_NORESERVE and MAP_STACK. Checked on i686-gnu build. * support/xsigstack.c (MAP_NORESERVE, MAP_STACK): Define if they are not defined.
2019-01-16Tests for minimal signal handler functionality in MINSIGSTKSZ space.Zack Weinberg4-0/+190
There is general agreement that the very short list of things that ISO C says you can do in an async signal handler should all work when the handler is running on an alternate signal stack with only MINSIGSTKSZ space. This patch adds tests to make sure those things do work. To facilitate this, there is a new set of test support routines for setting up alternate signal stacks; see support/xsignal.h for the API. * support/xsignal.h (xalloc_sigstack, xfree_sigstack) (xget_sigstack_location): New test support functions. * support/xsigstack.c: New file, implementing them. * support/tst-xsigstack.c: New test for them. * support/Makefile: Update. * signal/tst-minsigstksz-1.c * signal/tst-minsigstksz-2.c * signal/tst-minsigstksz-3.c * signal/tst-minsigstksz-3a.c * signal/tst-minsigstksz-4.c: New tests. * signal/Makefile: Run them.
2019-01-01Update copyright dates with scripts/update-copyrights.Joseph Myers169-169/+169
* 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-28Replace check_mul_overflow_size_t with __builtin_mul_overflowAdhemerval Zanella1-23/+3
Checked on x86_64-linux-gnu and i686-linux-gnu. * malloc/alloc_buffer_alloc_array.c (__libc_alloc_buffer_alloc_array): Use __builtin_mul_overflow in place of check_mul_overflow_size_t. * malloc/dynarray_emplace_enlarge.c (__libc_dynarray_emplace_enlarge): Likewise. * malloc/dynarray_resize.c (__libc_dynarray_resize): Likewise. * malloc/reallocarray.c (__libc_reallocarray): Likewise. * malloc/malloc-internal.h (check_mul_overflow_size_t): Remove function. * support/blob_repeat.c (check_mul_overflow_size_t, (minimum_stride_size, support_blob_repeat_allocate): Likewise.
2018-12-15support: Do not require overflow builtin in support/blob_repeat.cFlorian Weimer1-3/+23
It is only available in GCC 5 and later. Tested-by: Romain Naour <romain.naour@gmail.com>
2018-12-10test-container: move postclean outside of namespace changesDJ Delorie1-8/+37
During postclean.req testing it was found that the fork in the parent process (after the unshare syscall) would fail with ENOMEM (see recursive_remove() in test-container.c). While failing with ENOMEM is certainly unexpected, it is simply easier to refactor the design and have the parent remain outside of the namespace. This change moves the postclean.req processing to a distinct process (the parent) that then forks the test process (which will have to fork once more to complete uid/gid transitions). When the test process exists the cleanup process will ensure all files are deleted when a post clean is requested. Signed-off-by: DJ Delorie <dj@redhat.com> Reviewed-by: Carlos O'Donell <carlos@redhat.com> [BZ #23948] * support/test-container.c: Move postclean step to before we change namespaces.
2018-12-06support: Implement <support/descriptors.h> to track file descriptorsFlorian Weimer6-0/+533
2018-12-04test-container: add "su" command to run test as root, add unshare hintsDJ Delorie1-4/+64
* support/test-container.c (check_for_unshare_hints): New. (main): Call it if unshare fails. Add support for "su" scriptlet command.
2018-12-01support: Close original descriptors in support_capture_subprocessFlorian Weimer1-0/+6
2018-11-28support: Add signal support to support_capture_subprocess_checkFlorian Weimer3-11/+59
Signal zero does not terminate a process, so it is safe to use negative values for signal numbers. Adjust libio/tst-vtables-common.c to use this new functionality, instead of determining the termination status for a signal indirectly.
2018-11-28support_quote_string: Do not use str parameter nameFlorian Weimer1-2/+2
This avoids a build failure if this identifier is used as a macro in a test.
2018-11-27support: Implement support_quote_stringFlorian Weimer4-0/+93
Reviewed-by: Jonathan Nieder <jrnieder@gmail.com>
2018-11-19support: Print timestamps in timeout handlerFlorian Weimer1-0/+28
This is sometimes useful to determine if a test truly got stuck, or if it was making progress (logging information to standard output) and was merely slow to finish.
2018-11-07support: Fix printf format for TEST_COMPARE_STRINGAdhemerval Zanella1-1/+1
Fix the following on 32 bits targets: support_test_compare_string.c: In function ‘support_test_compare_string’: support_test_compare_string.c:80:37: error: format ‘%lu’ expects argument of type ‘long unsigned int’, but argument 2 has type ‘size_t’ {aka ‘unsigned int’} [-Werror=format=] printf (" string length: %lu bytes\n", left_length); ~~^ ~~~~~~~~~~~ %u Checked on arm-linux-gnueabihf. * support/support_test_compare_string.c (support_test_compare_string): Fix printf format.
2018-11-07support: Implement TEST_COMPARE_STRINGFlorian Weimer4-0/+213
2018-11-02support/shell-container.c: Use support_copy_file_rangeFlorian Weimer1-1/+1
Reviewed-by: DJ Delorie <dj@redhat.com>
2018-11-02support/test-container.c: Include <libc-pointer-arith.h>Florian Weimer1-0/+1
Reviewed-by: DJ Delorie <dj@redhat.com>
2018-10-30support_blob_repeat: Call mkstemp directory for the backing fileFlorian Weimer1-5/+9
This avoids a warning during post-test cleanup.