Gaier, Bjoern via llvm-dev
2021-Feb-15 08:07 UTC
[llvm-dev] How to use thread local storage with ORC JIT?
Hello everyone, 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: __emutls_get_address __emutls_v._Init_thread_epoch 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. Any ideas? Also, in case you see double - I asked this question in the LLVM Discord already with no big success... Kind greetings Björn 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. -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20210215/0795a8a8/attachment.html>
Geoff Levner via llvm-dev
2021-Feb-15 10:17 UTC
[llvm-dev] How to use thread local storage with ORC JIT?
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. I think what you have to do is to compile your source code with Clang's -femulated-tls option, to avoid native thread-local storage calls. Geoff On Mon, Feb 15, 2021 at 9:07 AM Gaier, Bjoern via llvm-dev < llvm-dev at lists.llvm.org> wrote:> Hello everyone, > > > > 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: > > __emutls_get_address > > __emutls_v._Init_thread_epoch > > > > 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. > > > > Any ideas? > > > > Also, in case you see double - I asked this question in the LLVM Discord > already with no big success... > > > > Kind greetings > > Björn > 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. > _______________________________________________ > LLVM Developers mailing list > llvm-dev at lists.llvm.org > https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev >-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20210215/9754567e/attachment.html>
David Blaikie via llvm-dev
2021-Feb-22 20:11 UTC
[llvm-dev] How to use thread local storage with ORC JIT?
+Lang Hames <lhames at gmail.com> (though I think he's not got much bandwidth for a few months - so responses may be delayed) On Mon, Feb 15, 2021 at 12:07 AM Gaier, Bjoern via llvm-dev < llvm-dev at lists.llvm.org> wrote:> Hello everyone, > > > > 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: > > __emutls_get_address > > __emutls_v._Init_thread_epoch > > > > 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. > > > > Any ideas? > > > > Also, in case you see double - I asked this question in the LLVM Discord > already with no big success... > > > > Kind greetings > > Björn > 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. > _______________________________________________ > LLVM Developers mailing list > llvm-dev at lists.llvm.org > https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev >-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20210222/31a1fa1a/attachment.html>
Lang Hames via llvm-dev
2021-Mar-02 22:23 UTC
[llvm-dev] How to use thread local storage with ORC JIT?
Hi All, 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. 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.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. -- Lang. On Tue, Feb 23, 2021 at 7:11 AM David Blaikie <dblaikie at gmail.com> wrote:> +Lang Hames <lhames at gmail.com> (though I think he's not got much > bandwidth for a few months - so responses may be delayed) > > On Mon, Feb 15, 2021 at 12:07 AM Gaier, Bjoern via llvm-dev < > llvm-dev at lists.llvm.org> wrote: > >> Hello everyone, >> >> >> >> 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: >> >> __emutls_get_address >> >> __emutls_v._Init_thread_epoch >> >> >> >> 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. >> >> >> >> Any ideas? >> >> >> >> Also, in case you see double - I asked this question in the LLVM Discord >> already with no big success... >> >> >> >> Kind greetings >> >> Björn >> 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. >> _______________________________________________ >> LLVM Developers mailing list >> llvm-dev at lists.llvm.org >> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev >> >-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20210303/2a48351a/attachment.html>