[llvm-dev] ORC JIT Weekly #2 -- COFF COMDAT Constants and Emulated TLS
David Chisnall via llvm-dev
llvm-dev at lists.llvm.org
Fri Jan 24 05:08:00 PST 2020
Hi Lang,
Thank you very much for writing these. I suspect that they are likely
to be drowned in the noise of this list and hidden from a lot of the
people that would find them valuable.
Would it be possible for them to be hosted somewhere permanently?
Perhaps they could either be incorporated as a subsection of LLVM Weekly
or put in a different location on the same server?
David
On 24/01/2020 03:27, Lang Hames via llvm-dev wrote:
> Hi All,
>
> This week I've been focused on removing some of the blockers for people
> transitioning from ORCv1 to ORCv2.
>
> Issue #1 (http://llvm.org/PR40074, http://llvm.org/PR44337):
>
> When LLVM codegens floating point constants for COFF we produce named
> constant pool entries of the form __real@<bitval>. These are stored in
> COFF COMDAT sections [1] which allow duplicate symbol definitions to be
> discarded (roughly equivalent to the concept of a weak symbol). This
> posed two problems: (1) ORC had no idea about the (rough) mapping
> between COMDAT and Weak, and (2) did not support late introduction of
> weak symbols via MaterializationResponsibility::defineMaterializing.
> This caused use of the same floating point constant in multiple files to
> result in duplicate definition errors for the constant pool entries.
>
> Both issues have been addressed in 84217ad6611, and floating point
> constants should now work in COFF. If you run in to any trouble with
> them please file a bug and CC me.
>
> Issue #2: Emulated TLS and name mangling (raised by Geoff Levner on
> llvm-dev):
>
> Use of emulated-tls affects the name mangling of LLVM IR symbols. For a
> thread local symbol with name <Name>, when emulated-tls is enabled we
> will produce at least one emulated-tls symbol: __emutls_v.<Name> (which
> must then be linker-mangled to get the final symbol name). If that
> symbol has a non-zero initializer a second symbol will also be produced:
> __emutls_t.<Name>. ORCv2 requires up-front specification of the exact
> set of /linker-level/ symbol names that a module produces, so that it
> can dispatch and track compiles, however none of the existing mangling
> code took emulated-tls into account. This has been fixed in ce2207abaf9
> (with follow up fixes for the various examples I broke), and you should
> now be able to use thread-locals in ORCv2.
>
> Besides these two bugs, I have continued work on the big static
> initializer patch. Unfortunately issue #2 interacts with it, so I have
> to do some integration work before it is ready to land, but I'm hopeful
> that it will be ready some time next week.
>
> Finally, I have added a new example (bb7a5707ac0)to
> llvm/examples/LLJITExamples: LLJITWithObjectLinkingLayerPlugin
> demonstrating how to write a custom ObjectLinkingLayer plugin.
> ObjectLinkingLayer plugins can be used to receive and respond to events
> in the linking layer, and to inspect and modify JITLink LinkGraphs
> during the linking process. ORC uses this internally to register EH
> frames, but the system is likely to be of interest to anyone who wants
> low level control/visibility into the JIT linker.
>
> — Lang.
>
> [1]
> https://docs.microsoft.com/en-us/windows/win32/debug/pe-format#comdat-sections-object-only
>
>
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>
More information about the llvm-dev
mailing list