add_definitions(-DFEATURE_PREJIT)
if(WIN32)
add_definitions(-DFEATURE_RANDOMIZED_STRING_HASHING)
- add_definitions(-DFEATURE_READYTORUN)
endif(WIN32)
+add_definitions(-DFEATURE_READYTORUN)
add_definitions(-DFEATURE_STANDALONE_SN)
add_definitions(-DFEATURE_STRONGNAME_DELAY_SIGNING_ALLOWED)
add_definitions(-DFEATURE_STRONGNAME_MIGRATION)
ASMCONSTANTS_C_ASSERT(CallDescrData__pTarget == offsetof(CallDescrData, pTarget))
ASMCONSTANTS_C_ASSERT(CallDescrData__returnValue == offsetof(CallDescrData, returnValue))
+#ifdef UNIX_AMD64_ABI
+#define OFFSETOF__TransitionBlock__m_argumentRegisters 0x00
+ASMCONSTANTS_C_ASSERT(OFFSETOF__TransitionBlock__m_argumentRegisters == offsetof(TransitionBlock, m_argumentRegisters))
+#endif // UNIX_AMD64_ABI
+
#undef ASMCONSTANTS_RUNTIME_ASSERT
#undef ASMCONSTANTS_C_ASSERT
#undef DBG_FRE
NESTED_END ExternalMethodFixupStub, _TEXT
+#ifdef FEATURE_READYTORUN
+
+NESTED_ENTRY DelayLoad_MethodCall, _TEXT, NoHandler
+
+ PROLOG_WITH_TRANSITION_BLOCK 0, 10h, rdx, rcx, 0
+
+ lea rdi, [rsp + __PWTB_TransitionBlock] // pTransitionBlock
+ mov rsi, rax // pIndirection
+
+ call C_FUNC(ExternalMethodFixupWorker)
+
+ EPILOG_WITH_TRANSITION_BLOCK_TAILCALL
+
+ // Share the patch label
+ jmp C_FUNC(ExternalMethodFixupPatchLabel)
+
+NESTED_END DelayLoad_MethodCall, _TEXT
+
+//============================================================================================
+
+.macro DYNAMICHELPER frameFlags, suffix
+
+NESTED_ENTRY DelayLoad_Helper\suffix, _TEXT, NoHandler
+
+ PROLOG_WITH_TRANSITION_BLOCK 0, 10h, rdx, rcx, 0
+
+ mov r8, \frameFlags
+ lea rdi, [rsp + __PWTB_TransitionBlock] // pTransitionBlock
+ mov rsi, rax // pIndirection
+
+ call C_FUNC(DynamicHelperWorker)
+
+ test rax,rax
+ jnz LOCAL_LABEL(TailCallDelayLoad_Helper\suffix)
+
+ // The result is stored in the argument area of the transition block
+ mov rax, [rsp + __PWTB_TransitionBlock + OFFSETOF__TransitionBlock__m_argumentRegisters]
+
+ EPILOG_WITH_TRANSITION_BLOCK_RETURN
+
+LOCAL_LABEL(TailCallDelayLoad_Helper\suffix):
+ EPILOG_WITH_TRANSITION_BLOCK_TAILCALL
+ TAILJMP_RAX
+
+NESTED_END DelayLoad_Helper\suffix, _TEXT
+
+ .endm
+
+DYNAMICHELPER DynamicHelperFrameFlags_Default
+DYNAMICHELPER DynamicHelperFrameFlags_ObjectArg, _Obj
+DYNAMICHELPER (DynamicHelperFrameFlags_ObjectArg | DynamicHelperFrameFlags_ObjectArg2), _ObjObj
+
+#endif // FEATURE_READYTORUN
//============================================================================================
// EXTERN_C VOID __stdcall VirtualMethodFixupStub()