[llvm-dev] Is it possible to execute Objective-C code via LLVM JIT?

Lang Hames via llvm-dev llvm-dev at lists.llvm.org
Tue Oct 18 14:10:53 PDT 2016


Hi Stanislav,

I actually looked into this recently. It is possible, but takes some
non-trivial effort right now: You have to hook into the JIT memory
allocator, parse the objective C metadata sections in the object file, then
call the objective C runtime to register any newly added classes, protocols
and selectors.

I can't release my code as-is: I built it against a hacked up copy of the
runtime. The right way to do this would be to write parsers for the
objective C metadata, and an Objective-C registration call that uses the
parsers and calls the runtime. These should be made available conditionally
if the objective C runtime headers are available. This is something that
I'd like to get to eventually, but I have a long to-do list. If you or
anyone you know is interested in working on it I'd be happy to provide
pointers and code review.

Cheers,
Lang.

On Tue, Oct 18, 2016 at 1:33 PM, Stanislav Pankevich via llvm-dev <
llvm-dev at lists.llvm.org> wrote:

> Hello,
>
> Is it possible to execute Objective-C code using LLVM JIT?
>
> The original point for my research is this topic on StackOverflow:
>
> All selectors unrecognised when invoking Objective-C methods using the
> LLVM ExecutionEngine http://stackoverflow.com/questions/
> 10375324/all-selectors-unrecognised-when-invoking-
> objective-c-methods-using-the-llvm-exec
>
> Running that example with lli produces the following output:
>
> 2016-10-18 21:25:58.332 lli[12970:169282] *** NSForwarding: warning:
> selector (0x10356a38f) for message 'alloc' does not match selector known to
> Objective C runtime (0x7fff8e93afb5)-- abort
> 2016-10-18 21:25:58.334 lli[12970:169282] +[NSAutoreleasePool alloc]:
> unrecognized selector sent to class 0x7fff7a562130
> 2016-10-18 21:25:58.338 lli[12970:169282] *** Terminating app due to
> uncaught exception 'NSInvalidArgumentException', reason:
> '+[NSAutoreleasePool alloc]: unrecognized selector sent to class
> 0x7fff7a562130'
>
> See also additional discussion here: https://twitter.com/
> sbpankevich/status/783363161537798144.
>
> Thanks.
>
> Stanislav Pankevich
>
>
> _______________________________________________
> 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/20161018/529cda42/attachment.html>


More information about the llvm-dev mailing list