summaryrefslogtreecommitdiff
path: root/src/vm/amd64/cgenamd64.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/vm/amd64/cgenamd64.cpp')
-rw-r--r--src/vm/amd64/cgenamd64.cpp27
1 files changed, 27 insertions, 0 deletions
diff --git a/src/vm/amd64/cgenamd64.cpp b/src/vm/amd64/cgenamd64.cpp
index 814f04dd9f..2ea4971148 100644
--- a/src/vm/amd64/cgenamd64.cpp
+++ b/src/vm/amd64/cgenamd64.cpp
@@ -26,6 +26,8 @@
#include "clrtocomcall.h"
#endif // FEATURE_COMINTEROP
+extern "C" int dprintf(int fd, const char *format, ...);
+
void UpdateRegDisplayFromCalleeSavedRegisters(REGDISPLAY * pRD, CalleeSavedRegisters * pRegs)
{
LIMITED_METHOD_CONTRACT;
@@ -553,8 +555,26 @@ void emitJump(LPBYTE pBuffer, LPVOID target)
_ASSERTE(DbgIsExecutable(pBuffer, 12));
}
+
+
+extern "C" LPVOID ASanCreateWraper2(LPVOID target, void (*push_addr)(LPVOID addr), LPVOID (*pop_addr)());
+extern "C" void my_push_addr_j2n(LPVOID addr);
+extern "C" LPVOID my_pop_addr_j2n();
+
+void change_my_target(void *old_target, void *new_target)
+{
+ dprintf(1, "#### change_my_target!!: old_target=%p new_target=%p\n", old_target, new_target);
+}
+
+
void UMEntryThunkCode::Encode(BYTE* pTargetCode, void* pvSecretParam)
{
+ dprintf(1, "#### UMEntryThunkCode::Encode: entry_pointer=%p pTargetCode=%p pvSecretParam=%p\n", &m_movR10, pTargetCode, pvSecretParam);
+
+ dprintf(1, "#### UMEntryThunkCode::Encode: target: TheUMEntryPrestub: %d UMThunkStub: %d\n",
+ pTargetCode == (BYTE *)TheUMEntryPrestub,
+ pTargetCode == (BYTE *)UMThunkStub
+ );
CONTRACTL
{
NOTHROW;
@@ -563,6 +583,13 @@ void UMEntryThunkCode::Encode(BYTE* pTargetCode, void* pvSecretParam)
}
CONTRACTL_END;
+ {
+ BYTE *old = pTargetCode;
+ pTargetCode = (BYTE *)ASanCreateWraper2((LPVOID)pTargetCode, my_push_addr_j2n, my_pop_addr_j2n);
+ dprintf(1, "#### UMEntryThunkCode::Encode: CHANGE!!! new_pTargetCode=%p\n", pTargetCode);
+ change_my_target(old, pTargetCode);
+ }
+
// padding // CC CC CC CC
// mov r10, pUMEntryThunk // 49 ba xx xx xx xx xx xx xx xx // METHODDESC_REGISTER
// mov rax, pJmpDest // 48 b8 xx xx xx xx xx xx xx xx // need to ensure this imm64 is qword aligned