diff options
Diffstat (limited to 'src/vm/arm64/cgencpu.h')
-rw-r--r-- | src/vm/arm64/cgencpu.h | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/src/vm/arm64/cgencpu.h b/src/vm/arm64/cgencpu.h index a168cdc162..7e3d62056a 100644 --- a/src/vm/arm64/cgencpu.h +++ b/src/vm/arm64/cgencpu.h @@ -24,6 +24,7 @@ EXTERN_C void setFPReturn(int fpSize, INT64 retVal); class ComCallMethodDesc; +extern PCODE GetPreStubEntryPoint(); #define COMMETHOD_PREPAD 24 // # extra bytes to allocate in addition to sizeof(ComCallMethodDesc) #ifdef FEATURE_COMINTEROP @@ -572,6 +573,19 @@ struct StubPrecode { return m_pTarget; } + void ResetTargetInterlocked() + { + CONTRACTL + { + THROWS; + GC_TRIGGERS; + } + CONTRACTL_END; + + EnsureWritableExecutablePages(&m_pTarget); + InterlockedExchange64((LONGLONG*)&m_pTarget, (TADDR)GetPreStubEntryPoint()); + } + BOOL SetTargetInterlocked(TADDR target, TADDR expected) { CONTRACTL @@ -685,6 +699,19 @@ struct FixupPrecode { return m_pTarget; } + void ResetTargetInterlocked() + { + CONTRACTL + { + THROWS; + GC_TRIGGERS; + } + CONTRACTL_END; + + EnsureWritableExecutablePages(&m_pTarget); + InterlockedExchange64((LONGLONG*)&m_pTarget, (TADDR)GetEEFuncEntryPoint(PrecodeFixupThunk)); + } + BOOL SetTargetInterlocked(TADDR target, TADDR expected) { CONTRACTL |