<div dir="ltr"><div>I can think of a few ways to tackle this.</div><div><br></div><div>(1) As you suggested, add a "remove loaded objects" method to MCJIT. I think this would be straightforward, but haven't thought about it carefully yet.</div><div><br></div><div>(2) Replicate some of MCJIT's functionality so that you can invalidate before running step one. E.g: You could call libCodeGen to produce an object file yourself, then scan it using libObject to perform your validation, then add the validated object to MCJIT using addObjectFile. The practicality of this option will depend on how much of MCJIT's logic you need to reimplement to do your validation. If you need to validate memory layout it'll be prohibitive, but if you just want to scan for prohibited instructions or calls it may be doable.</div><div><br></div><div>(3) Use multiple MCJIT instances chained together by a shared symbol resolver. This way you could just delete your newly added MCJIT instance if the IR doesn't validate.</div><div><br></div><div>(4) Use Orc. A basic Orc stack looks a lot like MCJIT from outside, but under the hood it manages multiple RuntimeDyld instances, and allows you to remove them whenever you like. This is basically option (3) made easy.</div><div><br></div><div>- Lang.</div><div><br></div><div><br></div><div> <br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Jun 5, 2015 at 12:19 AM, David Chisnall <span dir="ltr"><<a href="mailto:David.Chisnall@cl.cam.ac.uk" target="_blank">David.Chisnall@cl.cam.ac.uk</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">On 5 Jun 2015, at 00:15, Sanjoy Das <<a href="mailto:sanjoy@playingwithpointers.com">sanjoy@playingwithpointers.com</a>> wrote:<br>
><br>
> After running step (1) we may, in rare cases, decide that the<br>
> generated code is not usable by our runtime [*]<br>
<br>
</span>This use case is probably also relevant to the PNaCl people - if the output of the JIT violates the SFI requirements of their sandboxing platform (possible due to a compiler bug) then they need to be able to abort.  I think that they’re currently not lazily JITing, but given how important startup times are to them this is probably not ideal.<br>
<span class="HOEnZb"><font color="#888888"><br>
David<br>
<br>
</font></span></blockquote></div><br></div>