This week's experiment build gdc with tls disabled.
    Jacob Carlborg 
    doob at me.com
       
    Wed Dec 18 12:54:43 PST 2013
    
    
  
On 2013-12-18 18:36, Iain Buclaw wrote:
> I'm not so sure about 'module discovery' either.  At least, in
> emulated TLS, it has a completely different concept - each thread has
> a dynamically allocated range (effectively, a void**[] on the heap
> that gets destroyed upon thread termination) which is shared amongst
> all modules / loaded libraries in D for the duration of the thread.
> So when it comes to calling getTLSRange() - what is effectively
> happening is:
>
>    void**[] tlsarray = gthread_getspecific(emutls_key);
>    return cast(void[]) tlsarray[0 .. $];
>
> What I'm hoping is that whatever Martin has done, it is compatible
> with this way of doing things...
After the changes Margin has done DMD now emits .ctors and .dtors 
sections to to every executable and shared library. These will call 
"_d_dso_registry", passing in, among other things, the start and end of 
the module infos.
To get the TLS data the runtime iterates the sections of the 
executable/shared library and collections these.
I don't know if that will be compatible with how it's done in GDC.
This is only for Linux, FreeBSD and Mac OS X behaves as it did before. 
FreeBSD uses bracked sections and Mac OS X doing something similar as 
Linux does now, the dynamic linker has API's for this.
-- 
/Jacob Carlborg
    
    
More information about the D.gnu
mailing list