[lldb-dev] Call c/objc functions with the API

Jean-Daniel Dupas devlists at shadowlab.org
Sat Feb 23 02:42:57 PST 2013


Le 22 févr. 2013 à 22:56, Jim Ingham <jingham at apple.com> a écrit :

> 
> On Feb 22, 2013, at 1:51 PM, Enrico Granata <egranata at apple.com> wrote:
> 
>> CallMethod is right for C++, but for ObjC it would be CallSelector. I don’t think ObjC even has the notion of method in its lexicon.
> 
> Yeah, the ObjC guys are pretty sloppy about their nomenclature (is it a method, is it a message...)  And the selector defines the method, so I don't think you'd really need two calls.
> 
>> 
>> Also, dealing with the arguments is going to be tricky.
>> Problems I can see at a glance:
>> - how do you deal with each SBValue while making the string? expression path? numeric value + a cast? neither way looks perfect at a glance
> 
> I don't think you would make up a string.  You would implement this lower down than that, where we are directly populating the "arguments structure" that we are going to call, a la the Clang Functions.  And by the time we get there, we would have the method signature, so we'd know how to interpret the SBValues from the input arguments.
> 
>> - for ObjC you need to also extract the “names of the arguments” (i.e. foo:arg1 bar:arg2 baz:arg3), while in C++ (arg1,arg2,arg3) is enough
> 
> Again, you would be consing up a call to objc_msgSend with the arguments passed directly, so that would not be an issue.

If you go that route, you will have to take care of all the special cases introduced by the ABI (i.e calling the right objc_msgSend variant depending the arguments type and the return type).

-- Jean-Daniel








More information about the lldb-dev mailing list