aboutsummaryrefslogtreecommitdiff
path: root/lib/libthr
Commit message (Collapse)AuthorAgeFilesLines
* Implement _umtx_op_err.S on powerpc / powerpc64.Brandon Bergren2019-08-093-0/+46
| | | | | | | | | | | | | | As per r177853, we need to avoid using errno inside user mutex code, since signal handlers can interfere with it and mess up libthr internal state. So, implement _umtx_op_err() instead, which makes a raw syscall and returns the error value directly instead of using errno. Approved by: jhibbits (mentor) Differential Revision: https://reviews.freebsd.org/D20946 Notes: svn path=/head/; revision=350826
* Avoid conflicts with libc symbols in libthr jump table.Konstantin Belousov2019-07-311-2/+0
| | | | | | | | | | | | | | | | | | | In some corner cases of static linking and unexpected libraries order on the linker command line, libc symbol might preempt the same libthr symbol, in which case libthr jump table points back to libc causing either infinite recursion or loop. Handle all of such symbols by using private libthr names for them, ensuring that the right pointers are installed into the table. In collaboration with: arichardson PR: 239475 Tested by: pho MFC after: 2 weeks Sponsored by: The FreeBSD Foundation Differential revision: https://reviews.freebsd.org/D21088 Notes: svn path=/head/; revision=350483
* Avoid conflicts with libc symbols in libthr jump table.Konstantin Belousov2019-07-3121-216/+353
| | | | | | | | | | | | | | | | | | | In some corner cases of static linking and unexpected libraries order on the linker command line, libc symbol might preempt the same libthr symbol, in which case libthr jump table points back to libc causing either infinite recursion or loop. Handle all of such symbols by using private libthr names for them, ensuring that the right pointers are installed into the table. In collaboration with: arichardson PR: 239475 Tested by: pho MFC after: 2 weeks Sponsored by: The FreeBSD Foundation Differential revision: https://reviews.freebsd.org/D21088 Notes: svn path=/head/; revision=350481
* Restore ability to pass NULL name argument to pthread_set_name_np(3)Konstantin Belousov2019-07-111-1/+1
| | | | | | | | | | | to clear the thread name. PR: 239142 Submitted by: Lewis Donzis <lew@perftech.com> MFC after: 3 days Notes: svn path=/head/; revision=349912
* Add libc stub for pthread_getthreadid_np(3).Konstantin Belousov2019-06-231-0/+1
| | | | | | | | | | Requested by: jbeich PR: 238650 Sponsored by: The FreeBSD Foundation MFC after: 1 week Notes: svn path=/head/; revision=349299
* Do not access mutex memory after unlock.Konstantin Belousov2019-04-121-2/+3
| | | | | | | | | | PR: 237195 Reported by: freebsd@hurrikhan.eu Sponsored by: The FreeBSD Foundation MFC after: 1 week Notes: svn path=/head/; revision=346158
* Fix initial exec TLS mode for dynamically loaded shared objects.Konstantin Belousov2019-03-2912-2/+408
| | | | | | | | | | | | | | | | | | | | | | | | If dso uses initial exec TLS mode, rtld tries to allocate TLS in static space. If there is no space left, the dlopen(3) fails. If space if allocated, initial content from PT_TLS segment is distributed to all threads' pcbs, which was missed and caused un-initialized TLS segment for such dso after dlopen(3). The mode is auto-detected either due to the relocation used, or if the DF_STATIC_TLS dynamic flag is set. In the later case, the TLS segment is tried to allocate earlier, which increases chance of the dlopen(3) to succeed. LLD was recently fixed to properly emit the flag, ld.bdf did it always. Initial test by: dumbbell Tested by: emaste (amd64), ian (arm) Tested by: Gerald Aryeetey <aryeeteygerald_rogers.com> (arm64) Sponsored by: The FreeBSD Foundation MFC after: 2 weeks Differential revision: https://reviews.freebsd.org/D19072 Notes: svn path=/head/; revision=345703
* revert r341429 "disable BIND_NOW in libc, libthr, and rtld"Ed Maste2019-03-281-1/+0
| | | | | | | | | | | r345620 by kib@ fixed the rtld issue that caused a crash at startup during resolution of libc's ifuncs with BIND_NOW. PR: 233333 Sponsored by: The FreeBSD Foundation Notes: svn path=/head/; revision=345625
* Have pthread_cond_destroy() return EBUSY if the condvar has waiters.Mark Johnston2019-03-081-5/+14
| | | | | | | | | | | | | | | | This is not required of a compliant implementation, but it's easy to check for and helps improve compatibility with other common implementations. Moreover, it's consistent with our pthread_mutex_destroy(). PR: 234805 Reviewed by: jhb, kib, ngie MFC after: 2 weeks Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D19496 Notes: svn path=/head/; revision=344935
* silence cast-align warnings from clang on powerpc64Leandro Lupori2019-02-131-4/+5
| | | | | | | | | | | | | | | | | silence the following warning when compiling libthr with clang 8 for powerpc64 architecture: usr/src/lib/libthr/arch/powerpc/include/pthread_md.h:82:10: error: cast from 'uint8_t *' (aka 'unsigned char *') to 'struct tcb *' increases required alignment from 1 to 8 [-Werror,-Wcast-align] 82: return ((struct tcb *)(_tp - TP_OFFSET)); Submitted by: alfredo.junior_eldorado.org.br Reviewed by: git_bdragon.rtk0.net, emaste, kib, jhibbits, luporl Differential Revision: https://reviews.freebsd.org/D18807 Notes: svn path=/head/; revision=344109
* Fixes for very early use of the pthread_mutex_* and libthr malloc.Konstantin Belousov2019-02-042-0/+7
| | | | | | | | | | | | | | | | | | | | | When libthr is statically linked into the binary, order of the constructors execution is not deterministic. It is possible for the application constructor to use pthread_mutex_* functions before the libthr initialization was done. Handle it by: - making thr_malloc.c locking functions operational when curthread is not yet set; - making __thr_malloc_init() idempotent, allowing more than one call to it; - unconditionally calling __thr_malloc_init() before initializing a process-private mutex. Reported and tested by: mmel Sponsored by: The FreeBSD Foundation MFC after: 1 week Notes: svn path=/head/; revision=343754
* Rename rtld-elf/malloc.c to rtld-elf/rtld_malloc.c.Konstantin Belousov2019-01-301-2/+2
| | | | | | | | | | Then malloc.c file name is too generic to use it for libthr.a. Sponsored by: The FreeBSD Foundation MFC after: 13 days Notes: svn path=/head/; revision=343580
* Untangle jemalloc and mutexes initialization.Konstantin Belousov2019-01-298-10/+165
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | The need to use libc malloc(3) from some places in libthr always caused issues. For instance, per-thread key allocation was switched to use plain mmap(2) to get storage, because some third party mallocs used keys for implementation of calloc(3). Even more important, libthr calls calloc(3) during initialization of pthread mutexes, and jemalloc uses pthread mutexes. Jemalloc provides some way to both postpone the initialization, and to make initialization to use specialized allocator, but this is very fragile and often breaks. See the referenced PR for another example. Add the small malloc implementation used by rtld, to libthr. Use it in thr_spec.c and for mutexes initialization. This avoids the issues with mutual dependencies between malloc and libthr in principle. The drawback is that some more allocations are not interceptable for alternate malloc implementations. There should be not too much memory use from this allocator, and the alternative, direct use of mmap(2) is obviously worse. PR: 235211 MFC after: 2 weeks Sponsored by: The FreeBSD Foundation Differential revision: https://reviews.freebsd.org/D18988 Notes: svn path=/head/; revision=343566
* Remove declarations of syscalls not used in libthr.Brooks Davis2018-12-031-6/+0
| | | | | | | | Reviewed by: kib Sponsored by: DARPA, AFRL Notes: svn path=/head/; revision=341445
* disable BIND_NOW in libc, libthr, and rtldEd Maste2018-12-031-0/+1
| | | | | | | | | | | | | | | An issue remains with BIND_NOW and processes using threads. For now, restore libc's BIND_NOW disable, and also disable BIND_NOW in rtld and libthr. A patch is in review (D18400) that likely fixes this issue, but just disable BIND_NOW pending further testing after it is committed. PR: 233333 Sponsored by: The FreeBSD Foundation Notes: svn path=/head/; revision=341429
* Use _thr_isthreaded() and _thr_setthreaded() wrappersEric van Gyzen2018-11-302-4/+4
| | | | | | | | | | ...instead of directly using the global variable. MFC after: 2 weeks Sponsored by: Dell EMC Isilon Notes: svn path=/head/; revision=341278
* _thr_setthreaded() cannot fail; change return type to voidEric van Gyzen2018-11-303-8/+3
| | | | | | | | | | | | Also remove logic to avoid unnecessary stores to the global variable. Thread creation and destruction are heavy enough that any supposed savings is in the noise. MFC after: 2 weeks Sponsored by: Dell EMC Isilon Notes: svn path=/head/; revision=341277
* Make libthr(3) use sysconf(_SC_NPROCESSORS_CONF); this shaves offEdward Tomasz Napierala2018-11-191-2/+3
| | | | | | | | | | | | two calls to sysctl(2) from the binary startup. Reviewed by: kib MFC after: 2 weeks Sponsored by: DARPA, AFRL Differential Revision: https://reviews.freebsd.org/D18046 Notes: svn path=/head/; revision=340642
* libthr: minor spacing cleanup.Pedro F. Giffuni2018-08-211-2/+2
| | | | | | | | | No functional change. X-MFC with: r337992 Notes: svn path=/head/; revision=338125
* POSIX compliance improvements in the pthread(3) functions.Pedro F. Giffuni2018-08-1811-44/+61
| | | | | | | | | | | | | | | | This basically adds makes use of the C99 restrict keyword, and also adds some 'const's to four threading functions: pthread_mutexattr_gettype(), pthread_mutexattr_getprioceiling(), pthread_mutexattr_getprotocol(), and pthread_mutex_getprioceiling. The changes are in accordance to POSIX/SUSv4-2018. Hinted by: DragonFlyBSD Relnotes: yes MFC after: 1 month Differential Revision: D16722 Notes: svn path=/head/; revision=337992
* Add pthread_get_name_np(3).Konstantin Belousov2018-08-174-11/+62
| | | | | | | | | | | | | | | | The function retrieves the thread name previously set by pthread_set_name_np(3). The name is cached in the process memory. Requested by: Willem Jan Withagen <wjw@digiware.nl> Man page update: Yuri Pankov <yuripv@yuripv.net> Reviewed by: ian (previous version) Discussed with: arichardson, bjk (man page) Sponsored by: The FreeBSD Foundation MFC after: 2 weeks Differential revision: https://reviews.freebsd.org/D16702 Notes: svn path=/head/; revision=337983
* Remove unused file.Konstantin Belousov2018-06-161-29/+0
| | | | | | | | | | | The thr_new(2) syscall is called through libc stub. r154212 stopped generating it for libthr but did not cleaned the unused remnants. Sponsored by: The FreeBSD Foundation MFC after: 1 week Notes: svn path=/head/; revision=335258
* Remove references to the LIBC_SCCS and SYSLIBC_SCCS C macros.John Baldwin2018-05-231-4/+1
| | | | | | | | | This language dates back to when libthr was libc_r that included its own syscalls and replaced libc entirely. It hasn't been relevant for a long time. Notes: svn path=/head/; revision=334107
* Ensure thread library is initialized in pthread_testcancel().John Baldwin2018-03-211-1/+3
| | | | | | | | | | | | | | | | | | | | Call _thr_check_init() before reading curthread in pthread_testcancel(). If a constructor in a library creates a semaphore via sem_init() and then waits for it via sem_wait(), the program can core dump in _pthread_testcancel() called from sem_wait(). This is because the semaphore implementation lives in libc, so the library's constructors can be run before libthr's constructors. Reported by: arichardson Reviewed by: kib Obtained from: CheriBSD MFC after: 1 week Sponsored by: DARPA / AFRL Differential Revision: https://reviews.freebsd.org/D14786 Notes: svn path=/head/; revision=331324
* libthr: Fix missing break in switch.Pedro F. Giffuni2018-01-271-0/+1
| | | | | | | | | | This is also a warning in recent GCC with -Wimplicit-fallthrough. CID: 1356262 Obtained from: DragonFly (git 0f037c78 - partial) Notes: svn path=/head/; revision=328493
* lib: further adoption of SPDX licensing ID tags.Pedro F. Giffuni2017-11-2633-22/+88
| | | | | | | | | | | | | | | Mainly focus on files that use BSD 2-Clause license, however the tool I was using mis-identified many licenses so this was mostly a manual - error prone - task. The Software Package Data Exchange (SPDX) group provides a specification to make it easier for automated tools to detect and summarize well known opensource licenses. We are gradually adopting the specification, noting that the tags are considered only advisory and do not, in any way, superceed or replace the license texts. Notes: svn path=/head/; revision=326219
* General further adoption of SPDX licensing ID tags.Pedro F. Giffuni2017-11-2020-20/+61
| | | | | | | | | | | | | | | | | Mainly focus on files that use BSD 3-Clause license. The Software Package Data Exchange (SPDX) group provides a specification to make it easier for automated tools to detect and summarize well known opensource licenses. We are gradually adopting the specification, noting that the tags are considered only advisory and do not, in any way, superceed or replace the license texts. Special thanks to Wind River for providing access to "The Duke of Highlander" tool: an older (2014) run over FreeBSD tree was useful as a starting point. Notes: svn path=/head/; revision=326025
* spdx: initial adoption of licensing ID tags.Pedro F. Giffuni2017-11-189-9/+27
| | | | | | | | | | | | | | | | | | | | The Software Package Data Exchange (SPDX) group provides a specification to make it easier for automated tools to detect and summarize well known opensource licenses. We are gradually adopting the specification, noting that the tags are considered only advisory and do not, in any way, superceed or replace the license texts. Special thanks to Wind River for providing access to "The Duke of Highlander" tool: an older (2014) run over FreeBSD tree was useful as a starting point. Initially, only tag files that use BSD 4-Clause "Original" license. RelNotes: yes Differential Revision: https://reviews.freebsd.org/D13133 Notes: svn path=/head/; revision=325966
* Use MACHINE_CPUARCH in preference MACHINE for userland.Warner Losh2017-11-071-1/+1
| | | | | | | Sponsored by: Netflix Notes: svn path=/head/; revision=325510
* DIRDEPS_BUILD: Update dependencies.Bryan Drewery2017-10-314-4/+0
| | | | | | | Sponsored by: Dell EMC Isilon Notes: svn path=/head/; revision=325188
* Fix misleading comment.Michal Meloun2017-10-291-1/+2
| | | | | | | | | Not a functional change. MFC after: 3 days Notes: svn path=/head/; revision=325103
* [libthr] revert change of visibility of _thread_keytable to unbreak debuggerMichael Zhilin2017-10-022-1/+4
| | | | | | | | | | | | | | | | Fix regression by r318539. The sysutils/pstack uses library libthread_db to read information about threads state. The function pt_ta_new makes lookup of several key symbols including _thread_keytable. But r318539 mades this field static. It causes silent ignore of libthr library by pstack and as result sysutils/pstack doesn't output any thread information. This fix changes this field back to non-static. MFC after: 2 weeks Differential Revision: https://reviews.freebsd.org/D11738 Notes: svn path=/head/; revision=324219
* Add HAS_TESTS to all Makefiles that are currently using theEnji Cooper2017-08-021-0/+1
| | | | | | | | | `SUBDIR.${MK_TESTS}+= tests` idiom. This is a follow up to r321912. Notes: svn path=/projects/make-check-sandbox/; revision=321914
* Convert traditional ${MK_TESTS} conditional idiom for including testEnji Cooper2017-08-021-3/+1
| | | | | | | | | | | | | | directories to SUBDIR.${MK_TESTS} idiom This is being done to pave the way for future work (and homogenity) in ^/projects/make-check-sandbox . No functional change intended. MFC after: 1 weeks Notes: svn path=/head/; revision=321912
* libthr: check for possible overflow in the pthread_barrier_init() count.Pedro F. Giffuni2017-07-151-1/+1
| | | | | | | | | | | | | Following up on r320900, where the check for negative count values was removed, add a check to prevent integer overflow. This is to account that b_count, b_waiters but most importantly the total number of threads in the system are signed values. Discussed with: kib MFC after: 2 weeks Notes: svn path=/head/; revision=321011
* libthr: 'count' is unsigned so don't check for negative values.Pedro F. Giffuni2017-07-141-1/+1
| | | | | | | Obtained from: DragonFlyBSD (git e7db8139) Notes: svn path=/head/; revision=320990
* libthr: increase WARNS to the default (6)Eric van Gyzen2017-05-261-1/+1
| | | | | | | | | | | | ...and silence cast-align warnings from gcc. Reviewed by: kib MFC after: 3 days Sponsored by: Dell EMC Differential Revision: https://reviews.freebsd.org/D10935 Notes: svn path=/head/; revision=318956
* libthr: fix warnings at WARNS=6Eric van Gyzen2017-05-266-11/+3
| | | | | | | | | | | | Fix more warnings about redundant declarations. Reviewed by: kib emaste MFC after: 3 days Sponsored by: Dell EMC Differential Revision: https://reviews.freebsd.org/D10932 Notes: svn path=/head/; revision=318955
* libthr: fix style in previous commitEric van Gyzen2017-05-261-1/+1
| | | | | | | | | | | I intended to add this to the previous commit. Reviewed by: kib MFC after: 3 days Sponsored by: Dell EMC Notes: svn path=/head/; revision=318953
* libthr: prevent setcontext() from masking SIGTHREric van Gyzen2017-05-261-1/+1
| | | | | | | | | | | | | | | | | __thr_setcontext() mistakenly tested for the presence of SIGCANCEL in its local ucontext_t instead of the parameter. Therefore, if a thread calls setcontext() with a context whose signal mask contains SIGTHR (a.k.a. SIGCANCEL), that signal will be blocked, preventing the thread from being cancelled or suspended. Reported by: gcc 6.1 via RISC-V tinderbox Reviewed by: kib MFC after: 3 days Sponsored by: Dell EMC Differential Revision: https://reviews.freebsd.org/D10933 Notes: svn path=/head/; revision=318952
* libthr: fix warnings from GCC when WARNS=6Eric van Gyzen2017-05-235-20/+32
| | | | | | | | | | | | | | | | | | | Fix warnings about: - redundant declarations - a local variable shadowing a global function (dlinfo) - an old-style function definition (with an empty parameter list) - a variable that is possibly used uninitialized "make tinderbox" passes this time, except for a few unrelated kernel failures. Reviewed by: kib MFC after: 3 days Sponsored by: Dell EMC Differential Revision: https://reviews.freebsd.org/D10870 Notes: svn path=/head/; revision=318749
* Revert r318583 (libthr: use default WARNS level of 6)Eric van Gyzen2017-05-221-0/+1
| | | | | | | | | | | | Revert this while I fix RISC-V, SPARC, and probably all architectures that use GCC. Reported by: kib Pointy hat to: vangyzen Sponsored by: Dell EMC Notes: svn path=/head/; revision=318641
* libthr: Use CLI flags instead of pragmas to disable warningsEric van Gyzen2017-05-203-21/+6
| | | | | | | | | | | | | | | | | | People tweaking the build system or compilers tend to look into the Makefile and not into the source. Having some warning controls in the Makefile and some in the source code is surprising. Pragmas have the advantage that they leave the warnings enabled for more code, but that advantage isn't very relevant in these cases. Requested by: kib Reviewed by: kib MFC after: 3 days Sponsored by: Dell EMC Differential Revision: https://reviews.freebsd.org/D10832 Notes: svn path=/head/; revision=318584
* libthr: use default WARNS level of 6Eric van Gyzen2017-05-201-1/+0
| | | | | | | | | | Reviewed by: kib MFC after: 3 days Sponsored by: Dell EMC Differential Revision: https://reviews.freebsd.org/D10832 Notes: svn path=/head/; revision=318583
* Remove old spinlock_debug code from libcEric van Gyzen2017-05-202-7/+6
| | | | | | | | | | | | | | | This no longer seems useful. Remove it. This was prompted by a "cast discards volatile qualifier" warning in libthr when WARNS=6. Reviewed by: kib MFC after: 3 days Sponsored by: Dell EMC Differential Revision: https://reviews.freebsd.org/D10832 Notes: svn path=/head/; revision=318582
* libthr: change CHECK_AND_INIT_RWLOCK to an inline functionEric van Gyzen2017-05-201-24/+47
| | | | | | | | | | | | | This was prompted by a compiler warning about 'ret' shadowing a local variable in the callers of the macro. Reviewed by: kib MFC after: 3 days Sponsored by: Dell EMC Differential Revision: https://reviews.freebsd.org/D10832 Notes: svn path=/head/; revision=318581
* libthr: disable thread-safety warningsEric van Gyzen2017-05-201-0/+1
| | | | | | | | | | | | | These warnings don't make sense for code that implements the locking primitives. Reviewed by: kib MFC after: 3 days Sponsored by: Dell EMC Differential Revision: https://reviews.freebsd.org/D10832 Notes: svn path=/head/; revision=318580
* libthr: fix warnings at WARNS=6Eric van Gyzen2017-05-198-11/+33
| | | | | | | | | | | | | | | | | | | Fix warnings about the following when WARNS=6 (which I will commit soon): - casting away const - no previous 'extern' declaration for non-static variable - others as explained by #pragmas and comments - unused parameters The last is the only functional change. Reviewed by: kib MFC after: 3 days Sponsored by: Dell EMC Differential Revision: https://reviews.freebsd.org/D10808 Notes: svn path=/head/; revision=318539
* Fix __pthread_mutex_trylock() to call THR_CRITICAL_LEAVE() on failure ratherJason Evans2017-05-131-1/+1
| | | | | | | | | | than on success. This regression was introduced by r300043 (Add implementation of robust mutexes...). MFC after: 1 day Notes: svn path=/head/; revision=318254
* Add clock_nanosleep()Eric van Gyzen2017-03-192-0/+19
| | | | | | | | | | | | | | | | | | | | | | | | Add a clock_nanosleep() syscall, as specified by POSIX. Make nanosleep() a wrapper around it. Attach the clock_nanosleep test from NetBSD. Adjust it for the FreeBSD behavior of updating rmtp only when interrupted by a signal. I believe this to be POSIX-compliant, since POSIX mentions the rmtp parameter only in the paragraph about EINTR. This is also what Linux does. (NetBSD updates rmtp unconditionally.) Copy the whole nanosleep.2 man page from NetBSD because it is complete and closely resembles the POSIX description. Edit, polish, and reword it a bit, being sure to keep any relevant text from the FreeBSD page. Reviewed by: kib, ngie, jilles MFC after: 3 weeks Relnotes: yes Sponsored by: Dell EMC Differential Revision: https://reviews.freebsd.org/D10020 Notes: svn path=/head/; revision=315526