<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Consolas;
        panose-1:2 11 6 9 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
span.EmailStyle18
        {mso-style-type:personal-reply;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri",sans-serif;
        mso-fareast-language:EN-US;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:70.85pt 70.85pt 2.0cm 70.85pt;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="DE" link="blue" vlink="purple" style="word-wrap:break-word">
<div class="WordSection1">
<p class="MsoNormal"><span lang="EN-GB" style="mso-fareast-language:EN-US">Hey Lang,<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="mso-fareast-language:EN-US">I can’t remember anymore but I think I haven’t tried with -femulated-tls.
<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-GB" style="mso-fareast-language:EN-US">I also forwarded the question to the Cling people because I think they got it running – but also haven’t heard back from there. I decided against emulated-tls
 and tried resolving the Windows symbols myself by adding another IR file to it which was compiled as the following:<br>
</span><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:blue;mso-fareast-language:EN-US">extern</span><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:black;mso-fareast-language:EN-US">
</span><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:#A31515;mso-fareast-language:EN-US">"C"</span><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:black;mso-fareast-language:EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:black;mso-fareast-language:EN-US">{<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:black;mso-fareast-language:EN-US">   
</span><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:blue;mso-fareast-language:EN-US">void</span><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:black;mso-fareast-language:EN-US"> Sleep(</span><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:blue;mso-fareast-language:EN-US">unsigned</span><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:black;mso-fareast-language:EN-US">
</span><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:blue;mso-fareast-language:EN-US">long</span><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:black;mso-fareast-language:EN-US">
</span><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:gray;mso-fareast-language:EN-US">dwMilliseconds</span><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:black;mso-fareast-language:EN-US">);<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:black;mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:black;mso-fareast-language:EN-US">   
</span><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:blue;mso-fareast-language:EN-US">static</span><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:black;mso-fareast-language:EN-US">
</span><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:blue;mso-fareast-language:EN-US">constexpr</span><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:black;mso-fareast-language:EN-US">
</span><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:blue;mso-fareast-language:EN-US">int</span><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:black;mso-fareast-language:EN-US"> EpochStart = std::</span><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:#2B91AF;mso-fareast-language:EN-US">numeric_limits</span><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:black;mso-fareast-language:EN-US"><</span><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:blue;mso-fareast-language:EN-US">int</span><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:black;mso-fareast-language:EN-US">>::min();<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:black;mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:black;mso-fareast-language:EN-US">   
</span><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:blue;mso-fareast-language:EN-US">unsigned</span><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:black;mso-fareast-language:EN-US">
</span><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:blue;mso-fareast-language:EN-US">int</span><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:black;mso-fareast-language:EN-US"> _tls_index         = 0;<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:black;mso-fareast-language:EN-US">   
</span><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:blue;mso-fareast-language:EN-US">int</span><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:black;mso-fareast-language:EN-US">          _Init_global_epoch = EpochStart;<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:black;mso-fareast-language:EN-US">   
</span><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:blue;mso-fareast-language:EN-US">int</span><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:black;mso-fareast-language:EN-US">          _Init_thread_epoch = EpochStart;</span><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:green;mso-fareast-language:EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:black;mso-fareast-language:EN-US">   
<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:black;mso-fareast-language:EN-US">    </span><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:blue;mso-fareast-language:EN-US">void</span><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:black;mso-fareast-language:EN-US">
 _Init_thread_header(</span><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:blue;mso-fareast-language:EN-US">volatile</span><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:black;mso-fareast-language:EN-US">
</span><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:blue;mso-fareast-language:EN-US">int</span><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:black;mso-fareast-language:EN-US">*
</span><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:gray;mso-fareast-language:EN-US">ptss</span><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:black;mso-fareast-language:EN-US">)<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:black;mso-fareast-language:EN-US">    {<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:black;mso-fareast-language:EN-US">       
</span><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:blue;mso-fareast-language:EN-US">while</span><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:black;mso-fareast-language:EN-US">(</span><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:blue;mso-fareast-language:EN-US">true</span><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:black;mso-fareast-language:EN-US">)<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:black;mso-fareast-language:EN-US">        {<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:black;mso-fareast-language:EN-US">           
</span><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:green;mso-fareast-language:EN-US">/* Try to acquire the first initialization lock */</span><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:black;mso-fareast-language:EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:black;mso-fareast-language:EN-US">           
</span><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:blue;mso-fareast-language:EN-US">int</span><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:black;mso-fareast-language:EN-US"> oldTss = _InterlockedCompareExchange(</span><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:blue;mso-fareast-language:EN-US">reinterpret_cast</span><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:black;mso-fareast-language:EN-US"><</span><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:blue;mso-fareast-language:EN-US">volatile</span><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:black;mso-fareast-language:EN-US">
</span><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:blue;mso-fareast-language:EN-US">long</span><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:black;mso-fareast-language:EN-US">*>(</span><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:gray;mso-fareast-language:EN-US">ptss</span><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:black;mso-fareast-language:EN-US">),
 -1, 0);<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:black;mso-fareast-language:EN-US">           
</span><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:blue;mso-fareast-language:EN-US">if</span><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:black;mso-fareast-language:EN-US">(oldTss == -1)<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:black;mso-fareast-language:EN-US">            {<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:black;mso-fareast-language:EN-US">               
</span><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:green;mso-fareast-language:EN-US">/* Busy, wait for the other thread to do the initialization */</span><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:black;mso-fareast-language:EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:black;mso-fareast-language:EN-US">                Sleep(0);<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:black;mso-fareast-language:EN-US">               
</span><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:blue;mso-fareast-language:EN-US">continue</span><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:black;mso-fareast-language:EN-US">;<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:black;mso-fareast-language:EN-US">            }<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:black;mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:black;mso-fareast-language:EN-US">           
</span><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:green;mso-fareast-language:EN-US">/* Either we acquired the lock and the caller will do the initializaion</span><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:black;mso-fareast-language:EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:green;mso-fareast-language:EN-US">            or the initialization is complete and the caller will skip it */</span><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:black;mso-fareast-language:EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:black;mso-fareast-language:EN-US">           
</span><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:blue;mso-fareast-language:EN-US">break</span><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:black;mso-fareast-language:EN-US">;<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:black;mso-fareast-language:EN-US">        }<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:black;mso-fareast-language:EN-US">    }<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:black;mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:black;mso-fareast-language:EN-US">   
</span><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:blue;mso-fareast-language:EN-US">void</span><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:black;mso-fareast-language:EN-US"> _Init_thread_footer(</span><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:blue;mso-fareast-language:EN-US">int</span><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:black;mso-fareast-language:EN-US">
 *</span><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:gray;mso-fareast-language:EN-US">ptss</span><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:black;mso-fareast-language:EN-US">)<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:black;mso-fareast-language:EN-US">    {<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:black;mso-fareast-language:EN-US">        *</span><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:gray;mso-fareast-language:EN-US">ptss</span><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:black;mso-fareast-language:EN-US">
 = _InterlockedIncrement(</span><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:blue;mso-fareast-language:EN-US">reinterpret_cast</span><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:black;mso-fareast-language:EN-US"><</span><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:blue;mso-fareast-language:EN-US">long</span><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:black;mso-fareast-language:EN-US">*>(&_Init_global_epoch));<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:black;mso-fareast-language:EN-US">    }<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:black;mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:black;mso-fareast-language:EN-US">   
</span><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:blue;mso-fareast-language:EN-US">void</span><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:black;mso-fareast-language:EN-US"> _Init_thread_abort(</span><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:blue;mso-fareast-language:EN-US">volatile</span><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:black;mso-fareast-language:EN-US">
</span><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:blue;mso-fareast-language:EN-US">int</span><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:black;mso-fareast-language:EN-US">*
</span><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:gray;mso-fareast-language:EN-US">ptss</span><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:black;mso-fareast-language:EN-US">)<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:black;mso-fareast-language:EN-US">    {<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:black;mso-fareast-language:EN-US">       
</span><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:green;mso-fareast-language:EN-US">/* Abort the initialization */</span><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:black;mso-fareast-language:EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:black;mso-fareast-language:EN-US">        _InterlockedAnd(</span><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:blue;mso-fareast-language:EN-US">reinterpret_cast</span><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:black;mso-fareast-language:EN-US"><</span><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:blue;mso-fareast-language:EN-US">volatile</span><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:black;mso-fareast-language:EN-US">
</span><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:blue;mso-fareast-language:EN-US">long</span><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:black;mso-fareast-language:EN-US">*>(</span><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:gray;mso-fareast-language:EN-US">ptss</span><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:black;mso-fareast-language:EN-US">),
 0);<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-GB" style="font-size:9.5pt;font-family:Consolas;color:black;mso-fareast-language:EN-US">   
</span><span style="font-size:9.5pt;font-family:Consolas;color:black;mso-fareast-language:EN-US">}<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas;color:black;mso-fareast-language:EN-US">}<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:9.5pt;font-family:Consolas;color:black;mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="mso-fareast-language:EN-US">This was good enough for me until I hear a better way to do this – cause I got a feel that this is not really working? However my static variables were only initialized once no matter
 how many threads I threw at.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="mso-fareast-language:EN-US">I haven’t mentioned that solution yet cause I’m not much confident about it’s reliability. Maybe I should show this to the cling people too…
<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="mso-fareast-language:EN-US">Kind greetings<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="mso-fareast-language:EN-US">Björn<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<div style="border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0cm 0cm 0cm">
<p class="MsoNormal"><b><span lang="EN-US">From:</span></b><span lang="EN-US"> Lang Hames <lhames@gmail.com>
<br>
<b>Sent:</b> 02 March 2021 23:24<br>
<b>To:</b> David Blaikie <dblaikie@gmail.com><br>
<b>Cc:</b> Gaier, Bjoern <Bjoern.Gaier@horiba.com>; LLVM Developers Mailing List <llvm-dev@lists.llvm.org><br>
<b>Subject:</b> Re: [llvm-dev] How to use thread local storage with ORC JIT?<o:p></o:p></span></p>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<div>
<div>
<div>
<div>
<p class="MsoNormal">Hi All,<o:p></o:p></p>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">Björn -- I know we discussed this on discord already, but something just occurred to me: Are you compiling your target executable (whatever you're JITing in to, probably the same process as your JIT) with -femulated-tls? If so, have you
 made sure to include at least one thread local variable that is either used or marked as used (to ensure it's not dead stripped)? JIT'd code will be looking for those symbols in your executable so you'll need to make sure they're linked in there.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<blockquote style="border:none;border-left:solid #CCCCCC 1.0pt;padding:0cm 0cm 0cm 6.0pt;margin-left:4.8pt;margin-right:0cm">
<p class="MsoNormal">I am no expert, so take anything I say with a pinch of salt, but my understanding is that Orc JIT does not support native thread-local storage, it just emulates it.<o:p></o:p></p>
</blockquote>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">That is true for now, but I hope to have native thread locals supported (on MachO at least) by LLVM 12. The ORC runtime prototype [1] already contains support for POD thread locals, and I will be aiming to add support for thread locals
 with nontrivial constructors in the near future.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">-- Lang.<o:p></o:p></p>
</div>
</div>
</div>
</div>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<div>
<p class="MsoNormal">On Tue, Feb 23, 2021 at 7:11 AM David Blaikie <<a href="mailto:dblaikie@gmail.com">dblaikie@gmail.com</a>> wrote:<o:p></o:p></p>
</div>
<blockquote style="border:none;border-left:solid #CCCCCC 1.0pt;padding:0cm 0cm 0cm 6.0pt;margin-left:4.8pt;margin-right:0cm">
<div>
<p class="MsoNormal"><a href="mailto:lhames@gmail.com" target="_blank">+Lang Hames</a> (though I think he's not got much bandwidth for a few months - so responses may be delayed)<o:p></o:p></p>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<div>
<p class="MsoNormal">On Mon, Feb 15, 2021 at 12:07 AM Gaier, Bjoern via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>> wrote:<o:p></o:p></p>
</div>
<blockquote style="border:none;border-left:solid #CCCCCC 1.0pt;padding:0cm 0cm 0cm 6.0pt;margin-left:4.8pt;margin-right:0cm">
<div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span lang="EN-GB">Hello everyone,</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span lang="EN-GB"> </span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span lang="EN-GB">I'm using the ORC JIT to load and execute some IR files which I compiled with Clang-Cl from some source files - the host is Windows 64bit. Apparently, clang decided
 to generate code using the thread local storage for some of the code. When now loading and jitting those files I get the following undefined references:</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span lang="EN-GB">__emutls_get_address
</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span lang="EN-GB">__emutls_v._Init_thread_epoch</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span lang="EN-GB"> </span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span lang="EN-GB">A while ago I was told, that those references are coming from compiler-rt - so I build that project and at least I found "__emutls_get_address" in the "clang_rt.builtins-x86_64.lib"
 file. However, I haven't found "__emutls_v._Init_thread_epoch" anyway and don't know what to do with this symbol.</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span lang="EN-GB"> </span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span lang="EN-GB">Any ideas?</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span lang="EN-GB"> </span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span lang="EN-GB">Also, in case you see double - I asked this question in the LLVM Discord already with no big success...</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span lang="EN-GB"> </span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span lang="EN-GB">Kind greetings</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span lang="EN-GB">Björn</span><o:p></o:p></p>
</div>
<p class="MsoNormal">Als GmbH eingetragen im Handelsregister Bad Homburg v.d.H. HRB 9816, USt.ID-Nr. DE 114 165 789 Geschäftsführer: Dr. Hiroshi Nakamura, Dr. Robert Plank, Markus Bode, Takashi Nagano, Junichi Tajika, Ergin Cansiz.
<o:p></o:p></p>
</div>
<p class="MsoNormal">_______________________________________________<br>
LLVM Developers mailing list<br>
<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a><br>
<a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><o:p></o:p></p>
</blockquote>
</div>
</blockquote>
</div>
</div>
Als GmbH eingetragen im Handelsregister Bad Homburg v.d.H. HRB 9816, USt.ID-Nr. DE 114 165 789 Geschäftsführer: Dr. Hiroshi Nakamura, Dr. Robert Plank, Markus Bode, Takashi Nagano, Junichi Tajika, Ergin Cansiz.
</body>
</html>