On Fri, Oct 06, 2006 at 04:17:00PM -0700, Geoffrey Keating wrote:
(The big benefit of the non-emulated TLS is that memory is allocated
on pthread_create(), so you know that either memory gets allocated or
the thread doesn't get created, and either way you don't get random
crashes...)
That's actually only true for the local-exec and initial-exec tls
models, global-dynamic and local-dynamic tls models do sometimes
allocate memory on the first access and can abort the process
the same way as emutls does.
So, if libstdc++-v3 relies on no allocations being done on __thread
var access, it needs to use __attribute__((tls_model ("initial-exec"))),
at least on Linux or wherever else is initial-exec model allowed
even for dlopened shared libraries (though, it shouldn't really use more
than 8 or worst case 16 bytes there, the space for these in dlopened
libraries is quite limited).