On 30 May 2013 11:13, Johannes Pfau <nos...@example.com> wrote: > Am Thu, 30 May 2013 10:42:17 +0100 > schrieb Iain Buclaw <ibuc...@ubuntu.com>: > >> >> This is more of a lazy init that won't affect start-up speed. Note: >> this idea is based off what C++ (g++) does for say - static A a = new >> A(); >> > > I see. > >> >> I don't think it would have much slow down. Albeit the first >> initialisation would jump through the druntime library twice, but >> there after it's a single/two instruction test. Pretty negligible - >> but I'm not a speeeeeeeeed demon or freak who wants everything >> compiled with -fOMG-fast. =) > > I'm more worried about adding many roots to the GC. The code which > checks the guard variable is probably neglectable. > >> >> >> >> Though this should not be required if we have a proper TLS GC in >> >> place. >> > >> > Do you mean Martin Nowak's shared library/TLS work? That indeed >> > sounds like the proper solution. >> > >> >> It should certainly mean that we don't have to worry about removing >> roots once they've been added. > > AFAIK he also changed how TLS sections are looked up for the main > executable. _tlsstart and _tlsend are not used anymore. Instead some > mainly undocumented obscure glibc interface is used to ask the runtime > linker for the start and end of the TLS section. > > https://github.com/D-Programming-Language/druntime/blob/master/src/rt/sections_linux.d#L122 > https://github.com/D-Programming-Language/druntime/blob/master/src/rt/sections_linux.d#L164 > > https://github.com/D-Programming-Language/dmd/commit/313132b6e20c119fa64c6164574818421cb522ce > >> >> > (And maybe the D community should develop a sane standard interface >> > to the runtime linker to access sections. Then go lobbying all >> > major libcs out there...) >> >> You mean binutils? :-) >> >> See binutils/ld/scripttempl for the ldscripts used to lay out the tls >> data sections. (Note, only a few actually have a TLS section - and >> only winpe defines a _tls_start__ and _tls_end__ symbol). > > Well the start/end symbols could be introduced in binutils linker > scripts. But the elf format already has all the information about > section size and the runtime linker (ld.so) knows where every section > starts and it also knows its size. There's just no standard interface to > receive that information. (I had a quick look at the FreeBSD runtime > linker some time ago. With some C libraries you can even get the > elf header, but it's all non-standard and undocumented) > >
Yes, I've noticed (and even gave libdruntime a test on gdc shortly after the conference) - it's broken everything ... literally ... -- Iain Buclaw *(p < e ? p++ : p) = (c & 0x0f) + '0';