diff options
Diffstat (limited to 'manual/threads.texi')
-rw-r--r-- | manual/threads.texi | 64 |
1 files changed, 0 insertions, 64 deletions
diff --git a/manual/threads.texi b/manual/threads.texi index 49f249e..4ab0622 100644 --- a/manual/threads.texi +++ b/manual/threads.texi @@ -629,8 +629,6 @@ the standard. * Waiting with Explicit Clocks:: Functions for waiting with an explicit clock specification. * Single-Threaded:: Detecting single-threaded execution. -* Restartable Sequences:: Linux-specific Restartable Sequences - integration. @end menu @node Default Thread Attributes @@ -958,68 +956,6 @@ application-created thread because future versions of @theglibc{} may create background threads after the first thread has been created, and the application has no way of knowning that these threads are present. -@node Restartable Sequences -@subsubsection Restartable Sequences - -This section describes Restartable Sequences integration for -@theglibc{}. This functionality is only available on Linux. - -@deftypevar {struct rseq} __rseq_abi -@standards{Linux, sys/rseq.h} -@Theglibc{} implements a @code{__rseq_abi} TLS symbol to interact with -the Restartable Sequences system call. The layout of this structure is -defined by the @file{sys/rseq.h} header. Registration of each thread's -@code{__rseq_abi} is performed by @theglibc{} at library initialization -and thread creation. The manual for the rseq system call can be found -at @uref{https://git.kernel.org/pub/scm/libs/librseq/librseq.git/tree/doc/man/rseq.2}. - -The main executable and shared libraries may either have an undefined -@code{__rseq_abi} TLS symbol, or define their own, with the same -declaration as the one present in @file{sys/rseq.h}. The dynamic linker -will ensure that only one of those available symbols will be used at -runtime across the process. - -If the main executable or shared libraries observe an uninitialized -@code{__rseq_abi.cpu_id} field (value @code{RSEQ_CPU_ID_UNINITIALIZED}), -they may perform rseq registration to the kernel: this means either -glibc was prevented from doing the registration, or an older glibc -version, which does not include rseq support, is in use. When the main -executable or a library thus takes ownership of the registration, the -memory used to hold the @code{__rseq_abi} TLS variable must stay -allocated, and is not re-used, until the very end of the thread lifetime -or until an explicit rseq unregistration for that thread is performed. -It is not recommended to @code{dlclose} libraries owning the -@code{__rseq_abi} TLS variable. - -Users of the @code{__rseq_abi} TLS symbol can store the address of a -@code{struct rseq_cs} to the @code{__rseq_abi.rseq_cs} TLS variable, -thus informing the kernel that it enters a Restartable Sequence critical -section. This pointer and the code areas it itself points to must not -be left pointing to memory areas which are freed or re-used. Several -approaches can guarantee this. If the application or library can -guarantee that the memory used to hold the @code{struct rseq_cs} and the -code areas it refers to are never freed or re-used, no special action -must be taken. Else, before that memory is re-used of freed, the -application is responsible for setting the @code{__rseq_abi.rseq_cs} TLS -variable to @code{NULL} in each thread's TLS to guarantee that it does -not leak dangling references. Because the application does not -typically have knowledge of libraries' use of Restartable Sequences, it -is recommended that libraries using Restartable Sequences which may end -up freeing or re-using their memory set the @code{__rseq_abi.rseq_cs} -TLS variable to @code{NULL} before returning from library functions -which use Restartable Sequences. - -@end deftypevar - -@deftypevr Macro int RSEQ_SIG -@standards{Linux, sys/rseq.h} -Each supported architecture provides a @code{RSEQ_SIG} macro in -@file{sys/rseq.h} which contains a signature. That signature is -expected to be present in the code before each Restartable Sequences -abort handler. Failure to provide the expected signature may terminate -the process with a segmentation fault. -@end deftypevr - @c FIXME these are undocumented: @c pthread_atfork @c pthread_attr_destroy |