[LLVMdev] [RFC] Stackmap and Patchpoint Intrinsic Proposal
Philip Reames
listmail at philipreames.com
Thu Oct 24 09:31:06 PDT 2013
On 10/23/13 10:03 PM, Andrew Trick wrote:
>
> On Oct 23, 2013, at 7:26 PM, Philip Reames <listmail at philipreames.com
> <mailto:listmail at philipreames.com>> wrote:
>
>> On 10/23/13 5:38 PM, Andrew Trick wrote:
>>>
>>> On Oct 23, 2013, at 5:27 PM, Philip Reames
>>> <listmail at philipreames.com <mailto:listmail at philipreames.com>> wrote:
>>>
>>>>> The implementation of the two intrinsics is actually very similar.
>>>>> In this case, the difference would be that llvm.stackmap does not
>>>>> reserve space for patching, while llvm.patchpoint does.
>>>> I'm slightly confused by this given that stackmap takes an argument
>>>> indicating the number of nops to emit as well, but it's not worth
>>>> debating this any more. Let's move on. We can revisit this once
>>>> I'm actually using the new intrinsics and can provide real concrete
>>>> feedback.
>>>
>>> I want this to be clear when we expose the intrinsics to other
>>> developers. I’ve been making an effort to improve the docs:
>>> http://llvm-reviews.chandlerc.com/D1981. Please let me know where
>>> clarification is needed
>> I responded in the review. The only big thing that might be worth
>> discussion here is the "full resume" semantics which are mentioned at
>> the very end. This seemed to disagree with our previous discussion.
>> Let me know if you're either a) unclear at what I was getting at or
>> b) believe the "full resume" semantics were a key part of the
>> intrinsic. In either case, we should probably hash it out here.
>
> Thanks for the review. I'll respond to each of your comments there.
>
> There's one important thing I'm not getting across. llvm.stackmap is
> not primarily intended for patching. As an additional
> feature, llvm.stackmap can specify the size of its shadow, but does
> not need to generate nops in its shadow. The shadow can contain
> arbitrary code from the same function. The only purpose of the shadow
> is to allow destructive patching. Destructive means that other that
> some arbitrary code may be overwritten. I think the only use for this
> is to invalidate compiled code in a way that allows the runtime to
> recover. That just happens to be a very important use. Note that if we
> didn't specify a shadow, the runtime would have a hard time knowing
> how to patch without potentially clobbering something outside the
> current function.
So essentially you're using the shadow region to enable creating either
a nop sled which carries you down into deopt code or a forced trap (i.e.
patching with an instruction sequence which forces a trap to a signal
handler)? Ok, that sounds reasonable. You should spell this out this
example explicitly in the documentation. It's useful for clarification
purposes.
Yours,
Philip
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20131024/187b2347/attachment.html>
More information about the llvm-dev
mailing list