[llvm-dev] JIT and atexit crash

Matt P. Dziubinski via llvm-dev llvm-dev at lists.llvm.org
Thu Nov 23 13:15:18 PST 2017


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

Best,
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 at lists.llvm.org <mailto:llvm-dev at 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 at lists.llvm.org <mailto:llvm-dev at 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 at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>
>>     > http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>>     <http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev>
>>
>>
>>     _______________________________________________
>>     LLVM Developers mailing list
>>     llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>
>>     http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>>     <http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev>
>>
>>
>>
>>
>> _______________________________________________
>> LLVM Developers mailing list
>> llvm-dev at 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 at lists.llvm.org
> http://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/20171123/f6c4c0c5/attachment.html>


More information about the llvm-dev mailing list