diff options
author | Sanjoy Das <sanjoy@playingwithpointers.com> | 2015-07-28 23:50:30 +0000 |
---|---|---|
committer | Sanjoy Das <sanjoy@playingwithpointers.com> | 2015-07-28 23:50:30 +0000 |
commit | 44d65eac432eaa3e926ec404a55e66f823cb0848 (patch) | |
tree | 4b08d78209c1a3f84232eb4a5299d78bc66537ce /docs/Statepoints.rst | |
parent | a27dfaf544862befdbd45c77cd915c0bf4ffeef0 (diff) | |
download | llvm-44d65eac432eaa3e926ec404a55e66f823cb0848.tar.gz |
[Statepoints] Let patchable statepoints have a symbolic call target.
Summary:
As added initially, statepoints required their call targets to be a
constant pointer null if ``numPatchBytes`` was non-zero. This turns out
to be a problem ergonomically, since there is no way to mark patchable
statepoints as calling a (readable) symbolic value.
This change remove the restriction of requiring ``null`` call targets
for patchable statepoints, and changes PlaceSafepoints to maintain the
symbolic call target through its transformation.
Reviewers: reames, swaroop.sridhar
Subscribers: llvm-commits
Differential Revision: http://reviews.llvm.org/D11550
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@243502 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'docs/Statepoints.rst')
-rw-r--r-- | docs/Statepoints.rst | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/docs/Statepoints.rst b/docs/Statepoints.rst index 0d91f1b16b0..2b01374a9ec 100644 --- a/docs/Statepoints.rst +++ b/docs/Statepoints.rst @@ -331,14 +331,16 @@ the user will patch over the 'num patch bytes' bytes of nops with a calling sequence specific to their runtime before executing the generated machine code. There are no guarantees with respect to the alignment of the nop sequence. Unlike :doc:`StackMaps` statepoints do -not have a concept of shadow bytes. +not have a concept of shadow bytes. Note that semantically the +statepoint still represents a call or invoke to 'target', and the nop +sequence after patching is expected to represent an operation +equivalent to a call or invoke to 'target'. The 'target' operand is the function actually being called. The target can be specified as either a symbolic LLVM function, or as an arbitrary Value of appropriate function type. Note that the function type must match the signature of the callee and the types of the 'call -parameters' arguments. If 'num patch bytes' is non-zero then 'target' -has to be the constant pointer null of the appropriate function type. +parameters' arguments. The '#call args' operand is the number of arguments to the actual call. It must exactly match the number of arguments passed in the |