Stanislav Pankevich via llvm-dev
2016-Oct-18 20:33 UTC
[llvm-dev] Is it possible to execute Objective-C code via LLVM JIT?
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 <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 <https://twitter.com/sbpankevich/status/783363161537798144>. Thanks. Stanislav Pankevich -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20161018/e72a7384/attachment.html> -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 842 bytes Desc: Message signed with OpenPGP using GPGMail URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20161018/e72a7384/attachment.sig>
Lang Hames via llvm-dev
2016-Oct-18 21:10 UTC
[llvm-dev] Is it possible to execute Objective-C code via LLVM JIT?
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>
Steven Wu via llvm-dev
2016-Oct-18 21:22 UTC
[llvm-dev] Is it possible to execute Objective-C code via LLVM JIT?
Hi Stanislav, Lang I have a version of objc metadata parser based on LLVM which can handle objc2 metadata from MachO object and bitcode (bitcode version is even swift compatible). I don't know if there is enough interest for me to upstream it. It probably requires some work to clean up the interface and complete it by adding objc1 support and other object format support. Steven> On Oct 18, 2016, at 2:10 PM, Lang Hames via llvm-dev <llvm-dev at lists.llvm.org> wrote: > > 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 <mailto: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 <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 <https://twitter.com/sbpankevich/status/783363161537798144>. > > Thanks. > > Stanislav Pankevich > > > _______________________________________________ > 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-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20161018/314901fc/attachment.html>