[llvm-dev] JIT and static constructors/destructors.
Lang Hames via llvm-dev
llvm-dev at lists.llvm.org
Tue Jun 26 14:49:43 PDT 2018
I think adding a method to RuntimeDyld to run the constructors (or retrieve
their addresses) would make sense, and should work on Linux and MachO. I
can't speak to COFF though.
This would be an improvement over the current utility code, as it would
support static constructors in pre-compiled object files too.
On Tue, Jun 26, 2018 at 2:36 AM Alex Denisov <1101.debian at gmail.com> wrote:
> Hello everyone,
> The question is related to the recent "runStaticConstructorsDestructors()
> crash on exit" thread .
> I was curious if the constructors/destructors thing can be done directly
> inspecting object files. Below is what I've found so far.
> On macOS, I was able to get symbols for constructors by looking at
> at _mod_init_func. Then, I used the symbol names to retrieve addresses of
> constructors (after relocations were applied) and calling them.
> It worked well in this very case.
> On Linux, same relocations are located inside of .rela.ctors or
> I tried the same approach as with MachO, but not all symbols have names.
> I.e., there are just references to some code (e.g. .text.startup+0x280).
> So I cannot retrieve the address based on the symbol name.
> I assume there can be an API within RuntimeDyld that can give the address
> a RelocationRef corresponding to a particular constructor relocation.
> In that case, it will work both for Linux and macOS. Probably on Windows
> as well.
> The question is: in what case this approach will not work?
> Note: I am only interested in a non-lazy JIT of a native code.
> Thank you,
>  http://lists.llvm.org/pipermail/llvm-dev/2018-June/124031.html
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the llvm-dev