[LLVMdev] JIT machine code deletion

Chris Lattner sabre at nondot.org
Thu May 11 17:06:26 PDT 2006


Hi All,

I just implemented an often-requested feature: the ability to delete 
machine code out of the JIT's code buffer (the 
ExecutionEngine::freeMachineCodeForFunction(F) method).

The implementation uses a very general free-list mechanism for tracking 
free ranges in the buffer, and it works perfectly in my simple test cases 
designed to cover all of the code paths.  However, I don't have any good 
"real world" way to test this thoroughly.

If you have an application for this API, please try it out.  Remember 
that, once deleted, the memory for a function can be reused for other 
functions.  This means you should only call this method if you *know* that 
execution could never reach this function again.  As a sanity check, in 
debug builds, I memset the freed buffer with garbage to try to make it 
obvious if the buffer is called into.

If you don't *know* that all (e.g.) function pointers to this code are 
dead (which means that execution could come back to the function), you 
should use the ExecutionEngine::recompileAndRelinkFunction(F) method.

I'm happy to answer any questions about this functionality, as usual.

-Chris

-- 
http://nondot.org/sabre/
http://llvm.org/




More information about the llvm-dev mailing list