[llvm-dev] runStaticConstructorsDestructors() causes crash on exit

Geoff Levner via llvm-dev llvm-dev at lists.llvm.org
Fri Jun 15 02:29:28 PDT 2018

Wow, now that is an answer. Thank you very much!

On Fri, 15 Jun 2018 at 11:23, Alex Denisov <1101.debian at gmail.com> wrote:

> Hi Geoff,
> I hit the same problem some time ago.
> The problem that atexit handlers are registered from the JITted code, and
> the handlers point to the memory allocated by JIT.
> When the host program exits it calls the atexit handlers, but the memory
> is already deallocated by JIT.
> That's basically the reason of the crash.
> From what I see ExecutionEngine and MCJIT do not provide any helpful API
> for this case.
> I can only recommend switching to Orc APIs in this case: there you can use
> custom symbol resolver and redirect atexit functions to your own
> function(s).
> That function would record atexit handlers, which you can call manually
> after running your program.
> Orc APIs even provide a class for that: orc::LocalCXXRuntimeOverrides.
> I think this is the right place to ask such questions.
> Otherwise, feel free to ping me on #llvm (AlexDenisov) if you need some
> hints on how to JIT native code using Orc APIs.
> I hope it helps.
> Cheers,
> Alex.
> > On 14. Jun 2018, at 12:44, Geoff Levner via llvm-dev <
> llvm-dev at lists.llvm.org> wrote:
> >
> > Greetings, LLVM wizards.
> >
> > I am using clang to compile a C++ module, and an ExecutionEngine (MCJIT)
> to execute a function it defines. That works (or pretends to). However, if
> I call the module's constructors first:
> >
> > exec_engine->runStaticConstructorsDestructors(false);
> > exec_engine->runFunctionAsMain(function, argvec, NULL);
> >
> > execution still works, but my program crashes when it exits, in
> __run_exit_handlers(). I can't tell from gdb what exit handler is crashing,
> but no calls are made to atexit() or on_exit(); all exit handlers are
> installed via __cxa_atexit().
> >
> > This may or may not be meaningful, but I am forced to compile with
> -fno-use-cxa-atexit, otherwise clang complains that __dso_handle could not
> be resolved.
> >
> > Any guidance would be MUCH appreciated. I am at a loss... Also, if you
> know of a better place to look for help than this mailing list, that would
> be appreciated, too.
> >
> > Thanks,
> > Geoff
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20180615/6e9554f7/attachment.html>

More information about the llvm-dev mailing list