(original) (raw)
Hi,
Not sure whether this matches your use case, but the Orc-based JIT used in LLI appears to be using \`llvm::orc::LocalCXXRuntimeOverrides\` (http://llvm.org/doxygen/classllvm\_1\_1orc\_1\_1LocalCXXRuntimeOverrides.html) to override \`\_\_cxa\_atexit\`:
https://github.com/llvm-mirror/llvm/blob/release\_50/tools/lli/OrcLazyJIT.h#L74
https://github.com/llvm-mirror/llvm/blob/release\_50/tools/lli/lli.cpp#L631
Matt
On 11/23/2017 19:49, Stefan Gränitz via
llvm-dev wrote:
Maybe the easiest workaround would be overriding symbol resolution for the function name and redirect it to your own version in static code (and hope it has no bad side effect on your use case).
I think when running 3rd party code, the only way to definitely avoid this kind of trouble is to never deallocate any code or data sections. Doug Binks mentioned that too in his cppcast about Runtime Compiled C++ http://cppcast.com/2016/05/doug-binks/
Am 21.11.17 um 14:20 schrieb Nikodemus Siivola via llvm-dev:
Transform the atexit into equivalent code you can control, run it before the destructors of the JIT engine run?
On Tue, Nov 21, 2017 at 12:13 PM, Alex Denisov via llvm-dev <llvm-dev@lists.llvm.org> wrote:
> It's not the job of the Orc engine.
I could argue about this, but I won’t :)
\> Just don't use atexit.
The problem is that I run third-party programs. I cannot control them.
\> On 20\. Nov 2017, at 01:04, Joerg Sonnenberger via llvm-dev <llvm-dev@lists.llvm.org> wrote:
\>
\> On Mon, Nov 20, 2017 at 12:22:49AM +0100, Alex Denisov via llvm-dev wrote:
\>> JIT allocates and maps some memory for the execution. Some function X at address 0xdeadbeef is part of this memory.
\>> JIT calls a code that passes the X to atexit.
\>> JIT deallocates and unmaps the memory used for execution (either via objectLayer.removeObjectSet or by calling JIT's destructors)
\>> atexit (cxa\_finalize\_ranges) calls the X at 0xdeadbeef which does not belong to 'us' anymore, which leads to the crash.
\>
\> Sounds plausible.
\>
\>> Given that my assumption is correct what can we do about this? Is there
\>> anything that can be done to cover this case inside of the Orc engine?
\>
\> It's not the job of the Orc engine. Just don't use atexit.
\>
\> Joerg
\> \_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_
\> LLVM Developers mailing list
\> llvm-dev@lists.llvm.org
\> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_
LLVM Developers mailing list
llvm-dev@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_ LLVM Developers mailing list llvm-dev@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
-- https://weliveindetail.github.io/blog/ https://cryptup.org/pub/stefan.graenitz@gmail.com
\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_ LLVM Developers mailing list llvm-dev@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev