texplain nptl stuff - plan9port - [fork] Plan 9 from user space
 (HTM) git clone git://src.adamsgaard.dk/plan9port
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 9a4f7bced2db86a1f8031ecb639018470df9c8d0
 (DIR) parent 3d867865ef5663f640f7c607fadfd3fb0c0ac625
 (HTM) Author: rsc <devnull@localhost>
       Date:   Tue, 18 Jan 2005 18:13:24 +0000
       
       explain nptl stuff
       
       Diffstat:
         A src/libthread/README.Linux          |      37 +++++++++++++++++++++++++++++++
       
       1 file changed, 37 insertions(+), 0 deletions(-)
       ---
 (DIR) diff --git a/src/libthread/README.Linux b/src/libthread/README.Linux
       t@@ -0,0 +1,37 @@
       +Thread support on Linux is confused by the recent thread local storage (TLS)
       +support that has been put into the ELF tool chain.  The TLS libraries are 
       +installed in /lib/tls on most Linux systems.
       +
       +We provide two different implementations of the os-dependent parts
       +of libthread for Linux.  The first is intended for use on Linux 2.4 and earlier
       +kernels, which do not support TLS.  It is in Linux.c and Linuxasm.c and
       +does not use the pthread interface.  The second is intended for Linux 2.6
       +and later kernels, which do support TLS.  It is in pthread.c and uses the
       +standard pthread interface.  It expects to be linked against the TLS-aware
       +thread library aka NPTL.
       +
       +If you use Linux.c and Linuxasm.c with TLS libraries, they do not
       +set up the TLS properly so you will get incorrect programs.
       +For example, there will only be one errno among all the procs
       +in your program instead of one per proc.  The pthread NPTL
       +implementation is needed to use the TLS libraries properly.
       +
       +If you use pthread.c without TLS libraries (i.e., with the old Linux
       +pthread library known as LinuxThreads), then you will also get
       +incorrect programs, although more obviously so.  The LinuxThreads
       +library assumes it can look at the stack pointer to distinguish between
       +threads, but libthread does its own stack management, breaking this
       +assumption.  If you run a pthread-compiled program with the 
       +LinuxThreads library, LinuxThreads itself will cause a segmentation
       +fault in __pthread_getspecific() the first time it is called from a
       +non-standard stack.
       +
       +So, it is important that you compile binaries that match your
       +system's choice of TLS vs. not-TLS libraries.  The hard part is figuring
       +out which your system has chosen.  Plan9port looks at the kernel
       +version you are running and assumes that on kernels that support
       +TLS (2.6+) you will be using TLS.
       +
       +Apparently Gentoo and maybe other distributions do not follow this rule.
       +They use non-TLS libraries even on kernels that can support TLS.
       +