[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