[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