The adaptive system currently only considers Interruptible methods for optimizing recompilation (see RecompilationStrategy.getPreviousCompiler).
This doesn't matter too much for opt compiled bootimages, but for prototype-opt it means that we'll never select any of the Uninterruptible/Unpreemptible methods in the bootimage for optimization compilation (in particular, pretty much all of MMTk is uninterruptible).
The reason we do this is that there are a very small number of uninterruptible bootimage methods whose PC's may have leaked out into the bootImageRunner. We should simply not do this any more (leak JTOC/TIB offsets instead) and force the C code to make the proper indirections to find the current compiled version. If we do this, then I believe we could remove the current hack in RecompilationStrategy.
We'll need to be a little careful to make sure that speculative optimizations aren't applied in uninterruptible code (to avoid getting ourselves backed into a corner where we no longer have a valid copy of a method that is needed to invalidate methods), but that should be fairly easy to do and is actually an independent issue of whether or not the code is uninterruptible.