On Sat, Apr 17, 2010 at 2:15 PM, Nick Lewycky <nicholas at mxc.ca> wrote:> lost wrote: >> Ok than, but how to insert a call to an undefined function? > > You need to have the function declaration and insert a call to that. > Once your LazyFunctionCreator is called, you fill in the body and call > JIT->getPointerToFunction() on it and return that result. > > I haven't actually tried this, but it seems to be the only way to use > this API, so I presume someone else has. The only potential problem I > can forsee is if the JIT isn't actually re-entrant.I actually tried that several months ago and, it turned out, the JIT wasn't actually reentrant and didn't like that at all.
So you mean that is not the way. But what is InstallLazyFunctionCreator for? 2010/4/17 Kenneth Uildriks <kennethuil at gmail.com>:> On Sat, Apr 17, 2010 at 2:15 PM, Nick Lewycky <nicholas at mxc.ca> wrote: >> lost wrote: >>> Ok than, but how to insert a call to an undefined function? >> >> You need to have the function declaration and insert a call to that. >> Once your LazyFunctionCreator is called, you fill in the body and call >> JIT->getPointerToFunction() on it and return that result. >> >> I haven't actually tried this, but it seems to be the only way to use >> this API, so I presume someone else has. The only potential problem I >> can forsee is if the JIT isn't actually re-entrant. > > I actually tried that several months ago and, it turned out, the JIT > wasn't actually reentrant and didn't like that at all. >
lost wrote:> So you mean that is not the way. But what is InstallLazyFunctionCreator for?You can use it to return a function pointer when asked for a function by name. It can replace dlsym() style lookups. I would've expected that given its name it could be used to lazily create functions too, but apparently not. Nick> > 2010/4/17 Kenneth Uildriks<kennethuil at gmail.com>: >> On Sat, Apr 17, 2010 at 2:15 PM, Nick Lewycky<nicholas at mxc.ca> wrote: >>> lost wrote: >>>> Ok than, but how to insert a call to an undefined function? >>> >>> You need to have the function declaration and insert a call to that. >>> Once your LazyFunctionCreator is called, you fill in the body and call >>> JIT->getPointerToFunction() on it and return that result. >>> >>> I haven't actually tried this, but it seems to be the only way to use >>> this API, so I presume someone else has. The only potential problem I >>> can forsee is if the JIT isn't actually re-entrant. >> >> I actually tried that several months ago and, it turned out, the JIT >> wasn't actually reentrant and didn't like that at all. >> >