aboutsummaryrefslogtreecommitdiff
path: root/nptl
AgeCommit message (Collapse)Author
2015-04-20libc-vdso.h place consolidationAdhemerval Zanella
This patch moves the libc-vdso.h internal header from bits folder to default architecture one and also corrects the remaning includes in the files.
2015-03-18Make sem_timedwait use FUTEX_CLOCK_REALTIME (bug 18138).Joseph Myers
sem_timedwait converts absolute timeouts to relative to pass them to the futex syscall. (Before the recent reimplementation, on x86_64 it used FUTEX_CLOCK_REALTIME, but not on other architectures.) Correctly implementing POSIX requirements, however, requires use of FUTEX_CLOCK_REALTIME; passing a relative timeout to the kernel does not conform to POSIX. The POSIX specification for sem_timedwait says "The timeout shall be based on the CLOCK_REALTIME clock.". The POSIX specification for clock_settime says "If the value of the CLOCK_REALTIME clock is set via clock_settime(), the new value of the clock shall be used to determine the time of expiration for absolute time services based upon the CLOCK_REALTIME clock. This applies to the time at which armed absolute timers expire. If the absolute time requested at the invocation of such a time service is before the new value of the clock, the time service shall expire immediately as if the clock had reached the requested time normally.". If a relative timeout is passed to the kernel, it is interpreted according to the CLOCK_MONOTONIC clock, and so fails to meet that POSIX requirement in the event of clock changes. This patch makes sem_timedwait use lll_futex_timed_wait_bitset with FUTEX_CLOCK_REALTIME when possible, as done in some other places in NPTL. FUTEX_CLOCK_REALTIME is always available for supported Linux kernel versions; unavailability of lll_futex_timed_wait_bitset is only an issue for hppa (an issue noted in <https://sourceware.org/glibc/wiki/PortStatus>, and fixed by the unreviewed <https://sourceware.org/ml/libc-alpha/2014-12/msg00655.html> that removes the hppa lowlevellock.h completely). In the FUTEX_CLOCK_REALTIME case, the glibc code still needs to check for negative tv_sec and handle that as timeout, because the Linux kernel returns EINVAL not ETIMEDOUT for that case, so resulting in failures of nptl/tst-abstime and nptl/tst-sem13 in the absence of that check. If we're trying to distinguish between Linux-specific and generic-futex NPTL code, I suppose having this in an nptl/ file isn't ideal, but there doesn't seem to be any better place at present. It's not possible to add a testcase for this issue to the testsuite because of the requirement to change the system clock as part of a test (this is a case where testing would require some form of container, with root in that container, and one whose CLOCK_REALTIME is isolated from that of the host; I'm not sure what forms of containers, short of a full virtual machine, provide that clock isolation). Tested for x86_64. Also tested for powerpc with the testcase included in the bug. [BZ #18138] * nptl/sem_waitcommon.c: Include <kernel-features.h>. (futex_abstimed_wait) [__ASSUME_FUTEX_CLOCK_REALTIME && lll_futex_timed_wait_bitset]: Use lll_futex_timed_wait_bitset with FUTEX_CLOCK_REALTIME instead of lll_futex_timed_wait.
2015-03-17Fix DTV race, assert, DTV_SURPLUS Static TLS limit, and nptl_db garbageAlexandre Oliva
for ChangeLog [BZ #17090] [BZ #17620] [BZ #17621] [BZ #17628] * NEWS: Update. * elf/dl-tls.c (_dl_update_slotinfo): Clean up outdated DTV entries with Static TLS too. Skip entries past the end of the allocated DTV, from Alan Modra. (tls_get_addr_tail): Update to glibc_likely/unlikely. Move Static TLS DTV entry set up from... (_dl_allocate_tls_init): ... here (fix modid assertion), ... * elf/dl-reloc.c (_dl_nothread_init_static_tls): ... here... * nptl/allocatestack.c (init_one_static_tls): ... and here... * elf/dlopen.c (dl_open_worker): Drop l_tls_modid upper bound for Static TLS. * elf/tlsdeschtab.h (map_generation): Return size_t. Check that the slot we find is associated with the given map before using its generation count. * nptl_db/db_info.c: Include ldsodefs.h. (rtld_global, dtv_slotinfo_list, dtv_slotinfo): New typedefs. * nptl_db/structs.def (DB_RTLD_VARIABLE): New macro. (DB_MAIN_VARIABLE, DB_RTLD_GLOBAL_FIELD): Likewise. (link_map::l_tls_offset): New struct field. (dtv_t::counter): Likewise. (rtld_global): New struct. (_rtld_global): New rtld variable. (dl_tls_dtv_slotinfo_list): New rtld global field. (dtv_slotinfo_list): New struct. (dtv_slotinfo): Likewise. * nptl_db/td_symbol_list.c: Drop gnu/lib-names.h include. (td_lookup): Rename to... (td_mod_lookup): ... this. Use new mod parameter instead of LIBPTHREAD_SO. * nptl_db/td_thr_tlsbase.c: Include link.h. (dtv_slotinfo_list, dtv_slotinfo): New functions. (td_thr_tlsbase): Check DTV generation. Compute Static TLS addresses even if the DTV is out of date or missing them. * nptl_db/fetch-value.c (_td_locate_field): Do not refuse to index zero-length arrays. * nptl_db/thread_dbP.h: Include gnu/lib-names.h. (td_lookup): Make it a macro implemented in terms of... (td_mod_lookup): ... this declaration. * nptl_db/db-symbols.awk (DB_RTLD_VARIABLE): Override. (DB_MAIN_VARIABLE): Likewise.
2015-03-10Let tests result in UNSUPPORTED; use that for unbuildable C++ casesRoland McGrath
2015-03-04Conditionalize some test code for SIGRTMIN, SA_SIGINFO.Roland McGrath
2015-03-04Avoid C++ tests when the C++ cannot be linked.Roland McGrath
2015-02-16Make error checking effective in nptl/tst-cond25.c.Torvald Riegel
2015-02-12Filter out PTHREAD_MUTEX_NO_ELISION_NP bit in pthread_mutexattr_gettype (BZ ↵Andreas Schwab
#15790) pthread_mutexattr_settype adds PTHREAD_MUTEX_NO_ELISION_NP to kind, which is an internal flag that pthread_mutexattr_gettype shouldn't expose, since pthread_mutexattr_settype wouldn't accept it.
2015-02-06NPTL: Conditionalize some sanity tests for SIGCANCEL/SIGSETXID.Roland McGrath
2015-02-06Conditionalize use of SIGRTMIN in nptl/tst-locale1.c.Roland McGrath
2015-02-06NPTL: Build tests using clone directly only for Linux.Roland McGrath
2015-02-06Use signal rather than sigaction in nptl/tst-cleanup2.Roland McGrath
2015-02-06Conditionalize some tests' use of SA_SIGINFO.Roland McGrath
2015-02-06Fix nptl/tst-kill5 not to presume SIGRTMAX exists.Roland McGrath
2015-02-06Clean up nptl/tst-join5 use of nanosleep.Roland McGrath
2015-02-06Clean up NPTL system to be compat-only.Roland McGrath
2015-02-06Clean up NPTL longjmp to be compat-only.Roland McGrath
2015-02-06Clean up NPTL fork to be compat-only.Roland McGrath
2015-01-23Also use uint64_t in __new_sem_wait_fastH.J. Lu
2015-01-23Use uint64_t and (uint64_t) 1 for 64-bit intH.J. Lu
This patch replaces unsigned long int and 1UL with uint64_t and (uint64_t) 1 to support ILP32 targets like x32. [BZ #17870] * nptl/sem_post.c (__new_sem_post): Replace unsigned long int with uint64_t. * nptl/sem_waitcommon.c (__sem_wait_cleanup): Replace 1UL with (uint64_t) 1. (__new_sem_wait_slow): Replace unsigned long int with uint64_t. Replace 1UL with (uint64_t) 1. * sysdeps/nptl/internaltypes.h (new_sem): Replace unsigned long int with uint64_t.
2015-01-21Fix semaphore destruction (bug 12674).Carlos O'Donell
This commit fixes semaphore destruction by either using 64b atomic operations (where available), or by using two separate fields when only 32b atomic operations are available. In the latter case, we keep a conservative estimate of whether there are any waiting threads in one bit of the field that counts the number of available tokens, thus allowing sem_post to atomically both add a token and determine whether it needs to call futex_wake. See: https://sourceware.org/ml/libc-alpha/2014-12/msg00155.html
2015-01-08NPTL: Fix generic pthread_sigmask.Roland McGrath
2015-01-08NPTL: Fixed missed conditionalization of setxid hooey.Roland McGrath
2015-01-08NPTL: Refactor cpu_set_t validation to be sysdeps-controlledRoland McGrath
This removes Linuxisms related to cpu_set_t validation from the generic NPTL code and puts them into a new sysdeps header file.
2015-01-08Add -Wno-trampolines as neededRichard Henderson
2015-01-06Function declaration cleanupAdhemerval Zanella
This patch changes the some function declaration from K&R style to default ANSI C. * nptl/pthread_cancel.c (pthread_cancel): Use ANSI prototype. * nptl/pthread_cond_timedwait.c (__pthread_cond_timedwait): Likewise. * nptl/pthread_cond_wait.c (__pthread_cond_wait): Likewise. * nptl/pthread_exit.c (__pthread_exit): Likewise. * nptl/pthread_join.c (pthread_join): Likewise. * nptl/pthread_timedjoin.c (pthread_timedjoin_np): Likewise. * sysdeps/posix/waitid.c (__waitid): Likewise. * sysdeps/unix/sysv/linux/arm/pread.c (__libc_pread): Likewise. * sysdeps/unix/sysv/linux/arm/pread64.c (__libc_pread64): Likewise. * sysdeps/unix/sysv/linux/arm/pwrite.c (__libc_pwrite): Likewise. * sysdeps/unix/sysv/linux/arm/pwrite64.c (__libc_pwrite64): Likewise. * sysdeps/unix/sysv/linux/generic/wordsize-32/pread.c (__libc_pread): Likewise. * sysdeps/unix/sysv/linux/generic/wordsize-32/pread64.c (__libc_pread64): Likewise. * sysdeps/unix/sysv/linux/generic/wordsize-32/pwrite.c (__libc_pwrite): Likewise. * sysdeps/unix/sysv/linux/generic/wordsize-32/pwrite64.c (__libc_pwrite64): Likewsie. * sysdeps/unix/sysv/linux/mips/pread.c (__libc_pread): Likewise. * sysdeps/unix/sysv/linux/mips/pread64.c (__libc_pread64): Likewise. * sysdeps/unix/sysv/linux/mips/pwrite.c (__libc_pwrite): Likewise. * sysdeps/unix/sysv/linux/mips/pwrite64.c (__libc_pwrite64): Likewise. * sysdeps/unix/sysv/linux/msgrcv.c (__libc_msgrcv): Likewise. * sysdeps/unix/sysv/linux/msgsnd.c (__libc_msgsnd): Likewise. * sysdeps/unix/sysv/linux/openat.c (OPENAT_NOT_CANCEL): Likewise. * sysdeps/unix/sysv/linux/powerpc/powerpc32/pread.c (__libc_pread): Likewise. * sysdeps/unix/sysv/linux/powerpc/powerpc32/pread64.c (__libc_pread64): Likewise. * sysdeps/unix/sysv/linux/powerpc/powerpc32/pwrite.c (__libc_pwrite): Likewise. * sysdeps/unix/sysv/linux/powerpc/powerpc32/pwrite64.c (__libc_pwrite64): Likewise. * sysdeps/unix/sysv/linux/pread.c (__libc_pread): Likewise. * sysdeps/unix/sysv/linux/pread64.c (__libc_pread64): Likewise. * sysdeps/unix/sysv/linux/preadv.c (PREADV): Likewise. * sysdeps/unix/sysv/linux/pthread_kill.c (__pthread_kill): Likewise. * sysdeps/unix/sysv/linux/pwrite.c (__libc_pwrite): Likewise. * sysdeps/unix/sysv/linux/pwrite64.c (__libc_pwrite64): Likewise. * sysdeps/unix/sysv/linux/pwritev.c (__libc_pwritev): Likewise. * sysdeps/unix/sysv/linux/sh/pread.c (__libc_pread): Likewise. * sysdeps/unix/sysv/linux/sh/pread64.c (__libc_pread64): Likewise. * sysdeps/unix/sysv/linux/sh/pwrite.c (__libc_pwrite): Likewise. * sysdeps/unix/sysv/linux/sh/pwrite64.c (__libc_write64): Likewise. * sysdeps/unix/sysv/linux/sigsuspend.c (__sigsuspend): Likewise. * sysdeps/unix/sysv/linux/sigtimedwait.c (__sigtimedwait): Likewise. * sysdeps/unix/sysv/linux/sigwait.c (__sigwait): Likewise. * sysdeps/unix/sysv/linux/sigwaitinfo.c (__sigwaitinfo): Likewise. * sysdeps/unix/sysv/linux/sparc/sparc64/msgrcv.c (__libc_msgrcv): Likewise.
2015-01-02Use single year in copyright notice in banner in ntpl/version.c.Joseph Myers
* nptl/version.c (banner): Use single year in copyright notice.
2015-01-02Update copyright dates not handled by scripts/update-copyrights.Joseph Myers
I've updated copyright dates in glibc for 2015. This is the patch for the changes not generated by scripts/update-copyrights and subsequent build / regeneration of generated files. Apart from the files updated last time (of which sotruss.ksh had moved to sotruss.sh during the year) this also updates nptl/version.c (missed from 2006 until October) and sysdeps/unix/sysv/linux/lddlibc4.c (missed since 2009). * NEWS: Update copyright dates. * catgets/gencat.c (print_version): Likewise. * csu/version.c (banner): Likewise. * debug/catchsegv.sh: Likewise. * debug/pcprofiledump.c (print_version): Likewise. * debug/xtrace.sh (do_version): Likewise. * elf/ldconfig.c (print_version): Likewise. * elf/ldd.bash.in: Likewise. * elf/pldd.c (print_version): Likewise. * elf/sotruss.sh: Likewise. * elf/sprof.c (print_version): Likewise. * iconv/iconv_prog.c (print_version): Likewise. * iconv/iconvconfig.c (print_version): Likewise. * locale/programs/locale.c (print_version): Likewise. * locale/programs/localedef.c (print_version): Likewise. * login/programs/pt_chown.c (print_version): Likewise. * malloc/memusage.sh (do_version): Likewise. * malloc/memusagestat.c (print_version): Likewise. * malloc/mtrace.pl: Likewise. * manual/libc.texinfo: Likewise. * nptl/version.c (banner): Likewise. * nscd/nscd.c (print_version): Likewise. * nss/getent.c (print_version): Likewise. * nss/makedb.c (print_version): Likewise. * posix/getconf.c (main): Likewise. * scripts/test-installation.pl: Likewise. * sysdeps/unix/sysv/linux/lddlibc4.c (main): Likewise.
2015-01-02Update copyright dates with scripts/update-copyrights.Joseph Myers
2014-12-30Replace %ld with %jd and cast to intmax_tH.J. Lu
2014-12-17NPTL: Move fork state variables to initializer files.Roland McGrath
2014-12-16Revert "Use pragmas rather than makefiles for necessary options for unwind ↵Roland McGrath
code." This reverts commit c324fcfe75c3976ae0b16943df00710e1d0d74f7.
2014-12-16Use pragmas rather than makefiles for necessary options for unwind code.Roland McGrath
2014-12-15Add comments for the generic lowlevellock implementation.Torvald Riegel
Patch by Bernard Ogden <bernie.ogden@linaro.org>.
2014-12-15Fix nptl/tst-sem4: always start with a fresh semaphore.Torvald Riegel
2014-12-15Fix nptl/tst-mutex5.c: Do not skip tests if elision is enabled.Torvald Riegel
2014-12-12NPTL: Refactor named semaphore code to use shm-directory.hRoland McGrath
2014-12-12NPTL: Add stubs for Linux-only extension functions.Roland McGrath
2014-12-12Fix NPTL build for !__ASSUME_SET_ROBUST_LIST case.Roland McGrath
2014-12-12Get rid of warning comparision will always evaluate as trueStefan Liebler
2014-12-11Move semaphore.h to sysdeps/pthread/.Joseph Myers
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-12-11Remove obsolete commentAndreas Schwab
2014-12-11Properly handle forced elision in pthread_mutex_trylock (bug 16657)Andreas Schwab
2014-12-06Fix pthreads getrlimit, gettimeofday namespace (bug 17682).Joseph Myers
Some pthreads functions use getrlimit and gettimeofday, but these functions are XSI, not base POSIX; this is a namespace issue for dynamic linking as well as static linking. This patch makes them use __getrlimit and __gettimeofday instead - the former needed to be newly exported from libc.so at GLIBC_PRIVATE (and so now needs libc_hidden_proto / libc_hidden_def), the latter was already exported. Tested for x86_64 (testsuite, and that disassembly of installed shared libraries is unchanged by the patch). [BZ #17682] * resource/Versions (libc): Add __getrlimit at GLIBC_PRIVATE. * resource/getrlimit.c (__getrlimit): Use libc_hidden_def. * sysdeps/mach/hurd/getrlimit.c (__getrlimit): Likewise. * include/sys/resource.h (__getrlimit): Use libc_hidden_proto. * nptl/nptl-init.c (__pthread_initialize_minimal_internal): Use __getrlimit instead of getrlimit. * nptl/pthread_cond_timedwait.c (__pthread_cond_timedwait): Use __gettimeofday instead of gettimeofday. * nptl/pthread_rwlock_timedrdlock.c (pthread_rwlock_timedrdlock): Likewise. * nptl/pthread_rwlock_timedwrlock.c (pthread_rwlock_timedwrlock): Likewise. * sysdeps/pthread/aio_misc.c (handle_fildes_io): Likewise. * conform/Makefile (test-xfail-POSIX2008/aio.h/linknamespace): Remove variable. (test-xfail-POSIX2008/pthread.h/linknamespace): Likewise. (test-xfail-POSIX2008/time.h/linknamespace): Likewise.
2014-12-02Fix warning in nptl/tst-stack4.c.Joseph Myers
This patch fixes a warning in a test that was added since my recent warning cleanup: tst-stack4.c: In function 'dso_process': tst-stack4.c:64:7: warning: format '%i' expects argument of type 'int', but argument 3 has type 'uintptr_t' [-Wformat=] The original variable has type int then is cast to uintptr_t, and from there to void *, to pass it to a thread, so reversing the process by casting to uintptr_t and then to int is natural; this patch does so. Tested for x86_64. * nptl/tst-stack4.c (dso_process): Use int not uintptr_t for t.
2014-12-02Fix -Waddress warnings in nptl/tst-mutex1.c.Joseph Myers
This patch fixes -Waddress warnings in nptl/tst-mutex1.c from comparing the address of an object with NULL (ATTR may either be NULL, or the address of an object when included from other tests, and the warning arises in the latter case). A macro ATTR_NULL is defined alongside ATTR and used for the tests. Tested for x86_64. * nptl/tst-mutex1.c: Include <stdbool.h>. [!ATTR] (ATTR_NULL): New macro. (do_test): Test !ATTR_NULL instead of ATTR != NULL. * nptl/tst-mutexpi1.c (ATTR_NULL): New macro. * nptl/tst-mutexpp1.c (ATTR_NULL): New macro.
2014-11-29Use ALIGN_UP in nptl/nptl-init.cCarlos O'Donell
Replace bespoke code to align a value with the ALIGN_UP macro to make it easier to read.
2014-11-28Resize DTV if the current DTV isn't big enoughH.J. Lu
This patch changes _dl_allocate_tls_init to resize DTV if the current DTV isn't big enough. Tested on X86-64, x32 and ia32. [BZ #13862] * elf/dl-tls.c: Include <atomic.h>. (oom): Remove #ifdef SHARED/#endif. (_dl_static_dtv, _dl_initial_dtv): Moved before ... (_dl_resize_dtv): This. Extracted from _dl_update_slotinfo. (_dl_allocate_tls_init): Resize DTV if the current DTV isn't big enough. (_dl_update_slotinfo): Call _dl_resize_dtv to resize DTV. * nptl/Makefile (tests): Add tst-stack4. (modules-names): Add tst-stack4mod. ($(objpfx)tst-stack4): New. (tst-stack4mod.sos): Likewise. ($(objpfx)tst-stack4.out): Likewise. ($(tst-stack4mod.sos)): Likewise. (clean): Likewise. * nptl/tst-stack4.c: New file. * nptl/tst-stack4mod.c: Likewise.
2014-11-26Fix nptl/tst-cancel-self-cancelstate.c warning.Joseph Myers
This patch fixes "../sysdeps/nptl/pthread.h:670:26: warning: initialization discards 'volatile' qualifier from pointer target type" arising when building nptl/tst-cancel-self-cancelstate.c. The problem is passing a volatile int * to a macro expecting void *; the patch adds an explicit cast. Tested for x86_64. * nptl/tst-cancel-self-cancelstate.c (do_test): Cast argument of pthread_cleanup_push to void *.
2014-11-26Fix synchronization of TPP min/max priorities.Torvald Riegel
* nptl/tpp.c (__init_sched_fifo_prio, __pthread_tpp_change_priority): Change synchronization of __sched_fifo_min_prio and __sched_fifo_max_prio. * nptl/pthread_mutexattr_getprioceiling.c (pthread_mutexattr_getprioceiling): Likewise. * nptl/pthread_mutexattr_setprioceiling.c (pthread_mutexattr_setprioceiling): Likewise. * nptl/pthread_mutex_init.c (__pthread_mutex_init): Likewise. * nptl/pthread_mutex_setprioceiling.c (pthread_mutex_setprioceiling): Likewise.