<div dir="ltr">Two things:<div><br></div><div>a) I'm not against this</div><div>b) So, what's your use case? I've got something I'm idly working on with someone else where we want patchable targets in both prologue and epilogue (and some other places...), and am thinking of how to make this someone generic enough to build off of there.</div><div><br></div><div>Thoughts?</div><div><br></div><div>-eric<br><br><div class="gmail_quote"><div dir="ltr">On Wed, Apr 6, 2016 at 12:11 AM Sanjoy Das via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">[Proposed langref entry]<br>
<br>
The "patchable-prologue" attribute on a function is a general<br>
mechanism to control the form of a function's prologue in ways that<br>
make it easy to patch at runtime.<br>
<br>
Currently only one value is supported:<br>
<br>
# "hotpatch-compact"<br>
<br>
If a function is marked with "patchable-prologue"="hotpatch-compact"<br>
then:<br>
<br>
  1. The first instruction of the function is at least two bytes long.<br>
  2. The first two bytes of the first instruction does not span a cache<br>
     line boundary.<br>
  3. The instruction denoted by (1) is preferably not a no-op, i.e.,<br>
     we'd prefer to "re-use" an instruction already present.  For<br>
     instance, we can emit a two byte form of a "push CSR" instruction<br>
     that we'd have needed anyway.<br>
<br>
"hotpatch-compact" is useful for runtimes that want to thread-safely<br>
overwrite the first instruction of a function with a short branch.<br>
<br>
[End proposed langref entry]<br>
<br>
<br>
We can consider adding more "schemes" in the future, for instance<br>
"hotpatch-ms" for the Microsoft hotpatching scheme.  I was initially<br>
thinking of proposing "num-patchable-bytes"="<count>" as the<br>
fundamental building block, but the more I thought about it the less I<br>
liked it, since a specific patching scheme has several tightly<br>
integrated constraints of which the number of bytes is just one.<br>
<br>
What do you think?<br>
<br>
-- Sanjoy<br>
_______________________________________________<br>
LLVM Developers mailing list<br>
<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><br>
</blockquote></div></div></div>