David,<br><br><div>I had a look at your llvm changes, but wasn't able to find the clang ones. Some questions.</div><div><br></div><div>How do you handle the calling of non-zero-on-return functions from within a zero-on-return function?</div><div>How much of that work do you think is applicable to other architectures? I'm interested in working on an implementation that (starting with x86) will work across platforms. If you plan on revisiting your work on it though and trying to get it committed upstream, I won't intrude.</div><br><div class="gmail_quote">On Sun Sep 14 2014 at 10:49:23 AM David Chisnall <<a href="mailto:David.Chisnall@cl.cam.ac.uk">David.Chisnall@cl.cam.ac.uk</a>> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On 14 Sep 2014, at 18:25, Russell Harmon <<a href="mailto:eatnumber1@google.com" target="_blank">eatnumber1@google.com</a>> wrote:<br>
<br>
> I'd love to discuss and/or have a look at your implementation. Szabolcs brings up some very good points about the difficulty of doing this correctly. Are you at the point where you're willing to share your work?<br>
<br>
It's in the CTSRD-CHERI LLVM / Clang trees on GitHub.  It's quite MIPS / CHERI specific.  The implementation is mostly in the back end and stores 0 to any stack slot that is used and invalidates and registers that are used.  I did most of the implementation a year ago and haven't had a chance to get back to it.  There are a few known issues that are fixable, but not quite implemented.<br>
<br>
I described it to Colin at BSDCan, but as it's unpublished work and needs a detailed security evaluation I haven't yet written it up properly.<br>
<br>
David<br>
<br>
</blockquote></div>