summaryrefslogtreecommitdiff
path: root/src/vm/amd64
diff options
context:
space:
mode:
authorKonstantin Baladurin <k.baladurin@partner.samsung.com>2018-01-10 18:26:01 +0300
committerJan Kotas <jkotas@microsoft.com>2018-01-12 12:40:37 -0800
commit28839fc0b2dcaf89b7217741291c8c3f578f38a0 (patch)
treebbe2e02062a711975fec9c5a0e12dd8d35d4f344 /src/vm/amd64
parentf2ef496c87c7ba66f54390d9b5cc08f863183b2f (diff)
downloadcoreclr-28839fc0b2dcaf89b7217741291c8c3f578f38a0.tar.gz
coreclr-28839fc0b2dcaf89b7217741291c8c3f578f38a0.tar.bz2
coreclr-28839fc0b2dcaf89b7217741291c8c3f578f38a0.zip
Improve UMEntryThunkCode::Poison method.
Improve UMEntryThunkCode::Poison to produce diagnostic message when collected delegate was called.
Diffstat (limited to 'src/vm/amd64')
-rw-r--r--src/vm/amd64/cgenamd64.cpp13
1 files changed, 12 insertions, 1 deletions
diff --git a/src/vm/amd64/cgenamd64.cpp b/src/vm/amd64/cgenamd64.cpp
index 4e1f38ad12..6075134943 100644
--- a/src/vm/amd64/cgenamd64.cpp
+++ b/src/vm/amd64/cgenamd64.cpp
@@ -680,7 +680,18 @@ void UMEntryThunkCode::Poison()
}
CONTRACTL_END;
- m_movR10[0] = X86_INSTR_INT3;
+ m_execstub = (BYTE *)UMEntryThunk::ReportViolation;
+
+ m_movR10[0] = REX_PREFIX_BASE | REX_OPERAND_SIZE_64BIT;
+#ifdef _WIN32
+ // mov rcx, pUMEntryThunk // 48 b9 xx xx xx xx xx xx xx xx
+ m_movR10[1] = 0xB9;
+#else
+ // mov rdi, pUMEntryThunk // 48 bf xx xx xx xx xx xx xx xx
+ m_movR10[1] = 0xBF;
+#endif
+
+ ClrFlushInstructionCache(&m_movR10[0], &m_jmpRAX[3]-&m_movR10[0]);
}
UMEntryThunk* UMEntryThunk::Decode(LPVOID pCallback)