Am Sun, 18 Mar 2012 22:06:41 +0100 schrieb Jacob Carlborg <d...@me.com>:
> On 2012-03-18 19:39, Johannes Pfau wrote: > > > You mean getting rid of __tls_beg and __tls_end? I'd also like to > > remove those, but: > > __tls_beg and __tls_end is not used by Mac OS X any more: > > https://github.com/D-Programming-Language/druntime/commit/73cf2c150665cb17d9365a6e3d6cf144d76312d6 > > https://github.com/D-Programming-Language/dmd/commit/054c525edba048ad7829dd5ec2d8d9261a6517c3 Yes, but OSX still uses emulated tls. With the way dmd emulates TLS it's possible to remove __tls_beg and __tls_end, but for native TLS those symbols are still needed. However, as the runtime linker (ld.so) has got the necessary information, it's possible that OSX even offers a API to access it. It's just that most C libraries don't provide a way to get the TLS segment sizes and the (per thread) addresses of the TLS blocks. > > TLS is mostly object-format specific (not as much OS specific). The > > ELF implementation lays out the TLS data for a module (module = > > shared library or the application) in a contiguous way. The details > > are described in "ELF Handling For Thread-Local > > Storage" (www.akkadia.org/drepper/tls.pdf). > > > > Mac OS X 10.7 + supports TLS natively. But I don't know where to find > documentation about it. It always possible to look at the source code. > Then it's probably already supported by GCC/GDC. But having working emulated TLS would be nice for many other architectures. Native TLS is not that widespread.