History log of /seL4-refos-master/libs/libmuslc/include/pthread.h
Revision Date Author Comments
# 31fb174d 07-Nov-2016 Rich Felker <dalias@aerifal.cx>

add limited pthread_setattr_default_np API to set stack size defaults

based on patch by Timo Teräs:

While generally this is a bad API, it is the only existing API to
affect c++ (std::thread) and c11 (thrd_create) thread stack size.
This patch allows applications only to increate stack and guard
page sizes.


# 8fb28b0b 16-Sep-2016 Felix Janda <felix.janda@posteo.de>

add pthread_setname_np

the thread name is displayed by gdb's "info threads".


# 3d981461 07-May-2016 Bobby Bingham <koorogi@koorogi.info>

pthread: implement try/timed join variants


# a603a75a 16-Sep-2015 Rich Felker <dalias@aerifal.cx>

remove attribute((const)) from pthread_self and errno location decls

this attribute was applied to pthread_self and the functions providing
the locations for errno and h_errno as an optimization; however, it is
subtly incorrect. as specified, it means the return value will always
be the same, which is not true; it varies per-thread.

this attribute also implies that the function does not depend on any
state, and that calls to it can safely be reordered across any other
code. however such reordering is unsafe for these functions: they
break when reordered before initialization of the thread pointer. such
breakage was actually observed when compiled by libfirm/cparser.

to some extent the reordering problem could be solved with strong
compiler barriers between the stages of early startup code, but the
specified meaning of of attribute((const)) is sufficiently strong that
a compiler would theoretically be justified inserting gratuitous calls
to attribute((const)) const functions at random locations (e.g. to
save the value in static storage for later use).

this reverts commit cbf35978a9870fb1f5c73a852c986d4fcca6c2d4.


# 102f6a01 21-Feb-2015 Rich Felker <dalias@aerifal.cx>

add new masked cancellation mode

this is a new extension which is presently intended only for
experimental and internal libc use. interface and behavior details may
change subject to feedback and experience from using it internally.

the basic concept for the new PTHREAD_CANCEL_MASKED state is that the
first cancellation point to observe the cancellation request fails
with an errno value of ECANCELED rather than acting on cancellation,
allowing the caller to process the status and choose whether/how to
act upon it.


# f164875a 08-Dec-2014 Bobby Bingham <koorogi@koorogi.info>

don't shadow functions with macros in C++

C++ programmers typically expect something like "::function(x,y)" to work
and may be surprised to find that "(::function)(x,y)" is actually required
due to the headers declaring a macro version of some standard functions.

We already omit function-like macros for C++ in most cases where there is
a real function available. This commit extends this to the remaining
function-like macros which have a real function version.


# 7406fdf5 10-Aug-2013 Rich Felker <dalias@aerifal.cx>

add pthread_setaffinity_np and pthread_getaffinity_np functions


# 0b2764d0 31-Mar-2013 Rich Felker <dalias@aerifal.cx>

provide prototype for pthread_getattr_np


# 5c6443ac 17-Nov-2012 Rich Felker <dalias@aerifal.cx>

add stub versions of some missing optional pthread interfaces

priority inheritance is not yet supported, and priority protection
probably will not be supported ever unless there's serious demand for
it (it's a fairly heavy-weight feature).

per-thread cpu clocks would be nice to have, but to my knowledge linux
is still not capable of supporting them. glibc fakes them by using the
_process_ cpu-time clock and subtracting the thread creation time,
which gives seriously incorrect semantics (worse than not supporting
the feature at all), so until there's a way to do it right, it will
remain as a stub that always fails.


# 1e21e78b 11-Nov-2012 Rich Felker <dalias@aerifal.cx>

add support for thread scheduling (POSIX TPS option)

linux's sched_* syscalls actually implement the TPS (thread
scheduling) functionality, not the PS (process scheduling)
functionality which the sched_* functions are supposed to have.
omitting support for the PS option (and having the sched_* interfaces
fail with ENOSYS rather than omitting them, since some broken software
assumes they exist) seems to be the only conforming way to do this on
linux.


# 455f9685 08-Sep-2012 Rich Felker <dalias@aerifal.cx>

remove all remaining redundant __restrict/__inline/_Noreturn defs


# 0c05bd3a 06-Sep-2012 Rich Felker <dalias@aerifal.cx>

further use of _Noreturn, for non-plain-C functions

note that POSIX does not specify these functions as _Noreturn, because
POSIX is aligned with C99, not the new C11 standard. when POSIX is
eventually updated to C11, it will almost surely give these functions
the _Noreturn attribute. for now, the actual _Noreturn keyword is not
used anyway when compiling with a c99 compiler, which is what POSIX
requires; the GCC __attribute__ is used instead if it's available,
however.

in a few places, I've added infinite for loops at the end of _Noreturn
functions to silence compiler warnings. presumably
__buildin_unreachable could achieve the same thing, but it would only
work on newer GCCs and would not be portable. the loops should have
near-zero code size cost anyway.

like the previous _Noreturn commit, this one is based on patches
contributed by philomath.


# 400c5e5c 06-Sep-2012 Rich Felker <dalias@aerifal.cx>

use restrict everywhere it's required by c99 and/or posix 2008

to deal with the fact that the public headers may be used with pre-c99
compilers, __restrict is used in place of restrict, and defined
appropriately for any supported compiler. we also avoid the form
[restrict] since older versions of gcc rejected it due to a bug in the
original c99 standard, and instead use the form *restrict.


# d3675194 29-Feb-2012 Rich Felker <dalias@aerifal.cx>

use c++-friendly initializers for pthread initializer definitions

these will also avoid obnoxious warnings with gcc -Wbraces.


# afc35d5e 09-Feb-2012 Rich Felker <dalias@aerifal.cx>

replace bad cancellation cleanup abi with a sane one

the old abi was intended to duplicate glibc's abi at the expense of
being ugly and slow, but it turns out glib was not even using that abi
except on non-gcc-compatible compilers (which it doesn't even support)
and was instead using an exceptions-in-c/unwind-based approach whose
abi we could not duplicate anyway without nasty dwarf2/unwind
integration.

the new abi is copied from a very old glibc abi, which seems to still
be supported/present in current glibc. it avoids all unwinding,
whether by sjlj or exceptions, and merely maintains a linked list of
cleanup functions to be called from the context of pthread_exit. i've
made some care to ensure that longjmp out of a cleanup function should
work, even though it is not required to.

this change breaks abi compatibility with programs which were using
pthread cancellation, which is unfortunate, but that's why i'm making
the change now rather than later. considering that most pthread
features have not been usable until recently anyway, i don't see it as
a major issue at this point.


# 9205e486 14-Aug-2011 Rich Felker <dalias@aerifal.cx>

macro for pthread_equal

no sense bloating apps with a function call for an equality comparison...


# cbf35978 06-Jun-2011 Rich Felker <dalias@aerifal.cx>

use __attribute__((const)) for errno and pthread_self if __GNUC__ is defined

this is not too ugly and should result in significant code size and
performance improvements for many programs.


# ddd87b2f 30-May-2011 Rich Felker <dalias@aerifal.cx>

implement pthread_[sg]etconcurrency.

there is a resource limit of 0 bits to store the concurrency level
requested. thus any positive level exceeds a resource limit, resulting
in EAGAIN. :-)


# 3df3d4f5 01-Apr-2011 Rich Felker <dalias@aerifal.cx>

fix misspelled PTHREAD_CANCELED constant


# ea343364 25-Mar-2011 Rich Felker <dalias@aerifal.cx>

match glibc/lsb cancellation abi on i386

glibc made the ridiculous choice to use pass-by-register calling
convention for these functions, which is impossible to duplicate
directly on non-gcc compilers. instead, we use ugly asm to wrap and
convert the calling convention. presumably this works with every
compiler anyone could potentially want to use.


# 047e434e 17-Mar-2011 Rich Felker <dalias@aerifal.cx>

implement robust mutexes

some of this code should be cleaned up, e.g. using macros for some of
the bit flags, masks, etc. nonetheless, the code is believed to be
working and correct at this point.


# d8d19f4d 12-Mar-2011 Rich Felker <dalias@aerifal.cx>

pthread.h needs clockid_t

actually it gets this from time.h if _POSIX_C_SOURCE or any other
feature test macros are defined, but it breaks if they're not.


# f1821fce 11-Mar-2011 Rich Felker <dalias@aerifal.cx>

missing const in some pthread_attr_* prototypes


# 7d57e05f 07-Mar-2011 Rich Felker <dalias@aerifal.cx>

add prototypes for pthread_condattr_* and pthread_rwlockattr_*


# e9417fff 18-Feb-2011 Rich Felker <dalias@aerifal.cx>

add pthread_atfork interface

note that this presently does not handle consistency of the libc's own
global state during forking. as per POSIX 2008, if the parent process
was threaded, the child process may only call async-signal-safe
functions until one of the exec-family functions is called, so the
current behavior is believed to be conformant even if non-ideal. it
may be improved at some later time.


# e8827563 17-Feb-2011 Rich Felker <dalias@aerifal.cx>

reorganize pthread data structures and move the definitions to alltypes.h

this allows sys/types.h to provide the pthread types, as required by
POSIX. this design also facilitates forcing ABI-compatible sizes in
the arch-specific alltypes.h, while eliminating the need for
developers changing the internals of the pthread types to poke around
with arch-specific headers they may not be able to test.


# 56b784d6 16-Feb-2011 Rich Felker <dalias@aerifal.cx>

add to pthread.h: pthread_mutex_timedlock and sched.h, time.h


# 0b44a031 11-Feb-2011 Rich Felker <dalias@aerifal.cx>

initial check-in, version 0.5.0