[dmd-internals] Output reference to symbol
Jacob Carlborg via dmd-internals
dmd-internals at puremagic.com
Sun Dec 13 10:07:34 PST 2015
> On 8 dec 2015, at 22:20, Jacob Carlborg via dmd-internals <dmd-internals at puremagic.com> wrote:
>
> I’m looking in to if I can get to DMD output native TLS on OS X. I’m trying to output a reference to a symbol (not sure if that’s the correct terminology) using the “dtxoff” function that matches Clang. The code I have looks like this:
>
> const char *tlvInitName = concat(s->Sident, strlen(s->Sident), "$tlv$init", 9);
> Symbol* tlvInit = symbol_name(tlvInitName, SCstatic, type_fake(TYnfunc));
> tlvInit->Sdt = NULL;
> tlvInit->Sseg = MachObj::getsegment("__thread_data", "__DATA", 2, S_THREAD_LOCAL_REGULAR);
> Initializer_toDt(vd->_init, &tlvInit->Sdt);
> outdata(tlvInit);
>
> Symbol* tlvBootstrap = symbol_name("__tlv_bootstrap", SCglobal, type_fake(TYnfunc));
>
> dtxoff(&s->Sdt, tlvBootstrap, 0, TYnptr);
> dtsize_t(&s->Sdt, 0);
> dtxoff(&s->Sdt, tlvInit, 0, TYnptr);
I managed to solve the problem by changing the class of the “tlvInit” symbol to “export” after outputting it.
tlvInit->Sclass = SCextern;
--
/Jacob Carlborg
More information about the dmd-internals
mailing list