diff options
author | JUNG DONG-HEON <dheon.jung@samsung.com> | 2020-06-08 10:20:14 +0900 |
---|---|---|
committer | 이형주/Common Platform Lab(SR)/Staff Engineer/삼성전자 <leee.lee@samsung.com> | 2020-06-18 07:38:46 +0900 |
commit | 7d6fa13ce85654174b882c9e934c000dfd2222fe (patch) | |
tree | 46c473fdedd5747c2ad281170c0416407b74a503 /src/ToolBox | |
parent | 488be5d790020489f7f4dd7d43680f43b101dbd4 (diff) | |
download | coreclr-7d6fa13ce85654174b882c9e934c000dfd2222fe.tar.gz coreclr-7d6fa13ce85654174b882c9e934c000dfd2222fe.tar.bz2 coreclr-7d6fa13ce85654174b882c9e934c000dfd2222fe.zip |
Implement instantiating and unboxing through portable stublinker code… (#106)
* Implement instantiating and unboxing through portable stublinker code
- Handle only the cases with register to register moves
- Shares abi processing logic with delegate shuffle thunk creation
- Architecture specific logic is relatively simple
- Do not permit use of HELPERREG in computed instantiating stubs
- Fix GetArgLoc such that it works on all architectures and OS combinations
Add a JIT stress test case for testing all of the various combinations
- Use the same calling convention test architecture that was used as part of tail call work
Rename secure delegates to wrapper delegates
- Secure delegates are no longer a feature of the runtime
- But the wrapper delegate lives on as a workaround for a weird detail of the ARM32 abi
Diffstat (limited to 'src/ToolBox')
-rw-r--r-- | src/ToolBox/superpmi/superpmi-shared/methodcontext.cpp | 14 | ||||
-rw-r--r-- | src/ToolBox/superpmi/superpmi-shared/methodcontext.h | 4 |
2 files changed, 9 insertions, 9 deletions
diff --git a/src/ToolBox/superpmi/superpmi-shared/methodcontext.cpp b/src/ToolBox/superpmi/superpmi-shared/methodcontext.cpp index 00b9d1a2ca..d6e4c14891 100644 --- a/src/ToolBox/superpmi/superpmi-shared/methodcontext.cpp +++ b/src/ToolBox/superpmi/superpmi-shared/methodcontext.cpp @@ -1363,7 +1363,7 @@ void MethodContext::recGetCallInfo(CORINFO_RESOLVED_TOKEN* pResolvedToken, value.instParamLookup.accessType = (DWORD)pResult->instParamLookup.accessType; value.instParamLookup.handle = (DWORDLONG)pResult->instParamLookup.handle; - value.secureDelegateInvoke = (DWORD)pResult->secureDelegateInvoke; + value.wrapperDelegateInvoke = (DWORD)pResult->wrapperDelegateInvoke; } else ZeroMemory(&value, sizeof(Agnostic_CORINFO_CALL_INFO)); @@ -1388,7 +1388,7 @@ void MethodContext::dmpGetCallInfo(const Agnostic_GetCallInfo& key, const Agnost value.hMethod, value.methodFlags, value.classFlags, SpmiDumpHelper::DumpAgnostic_CORINFO_SIG_INFO(value.sig).c_str(), SpmiDumpHelper::DumpAgnostic_CORINFO_SIG_INFO(value.verSig).c_str(), value.instParamLookup.accessType, - value.instParamLookup.handle, value.secureDelegateInvoke, value.exceptionCode, + value.instParamLookup.handle, value.wrapperDelegateInvoke, value.exceptionCode, SpmiDumpHelper::DumpAgnostic_CORINFO_LOOKUP(value.stubLookup).c_str()); } void MethodContext::repGetCallInfo(CORINFO_RESOLVED_TOKEN* pResolvedToken, @@ -1471,7 +1471,7 @@ void MethodContext::repGetCallInfo(CORINFO_RESOLVED_TOKEN* pResolvedToken, } pResult->instParamLookup.accessType = (InfoAccessType)value.instParamLookup.accessType; pResult->instParamLookup.handle = (CORINFO_GENERIC_HANDLE)value.instParamLookup.handle; - pResult->secureDelegateInvoke = (BOOL)value.secureDelegateInvoke; + pResult->wrapperDelegateInvoke = (BOOL)value.wrapperDelegateInvoke; *exceptionCode = (DWORD)value.exceptionCode; DEBUG_REP(dmpGetCallInfo(key, value)); @@ -3888,7 +3888,7 @@ void MethodContext::recGetEEInfo(CORINFO_EE_INFO* pEEInfoOut) value.offsetOfGCState = (DWORD)pEEInfoOut->offsetOfGCState; value.offsetOfDelegateInstance = (DWORD)pEEInfoOut->offsetOfDelegateInstance; value.offsetOfDelegateFirstTarget = (DWORD)pEEInfoOut->offsetOfDelegateFirstTarget; - value.offsetOfSecureDelegateIndirectCell = (DWORD)pEEInfoOut->offsetOfSecureDelegateIndirectCell; + value.offsetOfWrapperDelegateIndirectCell = (DWORD)pEEInfoOut->offsetOfWrapperDelegateIndirectCell; value.offsetOfTransparentProxyRP = (DWORD)pEEInfoOut->offsetOfTransparentProxyRP; value.offsetOfRealProxyServer = (DWORD)pEEInfoOut->offsetOfRealProxyServer; value.offsetOfObjArrayData = (DWORD)pEEInfoOut->offsetOfObjArrayData; @@ -3914,7 +3914,7 @@ void MethodContext::dmpGetEEInfo(DWORD key, const Agnostic_CORINFO_EE_INFO& valu value.inlinedCallFrameInfo.offsetOfCallSiteSP, value.inlinedCallFrameInfo.offsetOfCalleeSavedFP, value.inlinedCallFrameInfo.offsetOfCallTarget, value.inlinedCallFrameInfo.offsetOfReturnAddress, value.offsetOfThreadFrame, value.offsetOfGCState, value.offsetOfDelegateInstance, - value.offsetOfDelegateFirstTarget, value.offsetOfSecureDelegateIndirectCell, + value.offsetOfDelegateFirstTarget, value.offsetOfWrapperDelegateIndirectCell, value.offsetOfTransparentProxyRP, value.offsetOfRealProxyServer, value.offsetOfObjArrayData, value.sizeOfReversePInvokeFrame, value.osPageSize, value.maxUncheckedOffsetForNullObject, value.targetAbi, value.osType, value.osMajor, value.osMinor, value.osBuild); @@ -3943,7 +3943,7 @@ void MethodContext::repGetEEInfo(CORINFO_EE_INFO* pEEInfoOut) pEEInfoOut->offsetOfGCState = (unsigned)value.offsetOfGCState; pEEInfoOut->offsetOfDelegateInstance = (unsigned)value.offsetOfDelegateInstance; pEEInfoOut->offsetOfDelegateFirstTarget = (unsigned)value.offsetOfDelegateFirstTarget; - pEEInfoOut->offsetOfSecureDelegateIndirectCell = (unsigned)value.offsetOfSecureDelegateIndirectCell; + pEEInfoOut->offsetOfWrapperDelegateIndirectCell = (unsigned)value.offsetOfWrapperDelegateIndirectCell; pEEInfoOut->offsetOfTransparentProxyRP = (unsigned)value.offsetOfTransparentProxyRP; pEEInfoOut->offsetOfRealProxyServer = (unsigned)value.offsetOfRealProxyServer; pEEInfoOut->offsetOfObjArrayData = (unsigned)value.offsetOfObjArrayData; @@ -3971,7 +3971,7 @@ void MethodContext::repGetEEInfo(CORINFO_EE_INFO* pEEInfoOut) pEEInfoOut->offsetOfGCState = (unsigned)0xc; pEEInfoOut->offsetOfDelegateInstance = (unsigned)0x8; pEEInfoOut->offsetOfDelegateFirstTarget = (unsigned)0x18; - pEEInfoOut->offsetOfSecureDelegateIndirectCell = (unsigned)0x40; + pEEInfoOut->offsetOfWrapperDelegateIndirectCell = (unsigned)0x40; pEEInfoOut->offsetOfTransparentProxyRP = (unsigned)0x8; pEEInfoOut->offsetOfRealProxyServer = (unsigned)0x18; pEEInfoOut->offsetOfObjArrayData = (unsigned)0x18; diff --git a/src/ToolBox/superpmi/superpmi-shared/methodcontext.h b/src/ToolBox/superpmi/superpmi-shared/methodcontext.h index c28a3f7233..05c3234ec0 100644 --- a/src/ToolBox/superpmi/superpmi-shared/methodcontext.h +++ b/src/ToolBox/superpmi/superpmi-shared/methodcontext.h @@ -169,7 +169,7 @@ public: DWORD offsetOfGCState; DWORD offsetOfDelegateInstance; DWORD offsetOfDelegateFirstTarget; - DWORD offsetOfSecureDelegateIndirectCell; + DWORD offsetOfWrapperDelegateIndirectCell; DWORD offsetOfTransparentProxyRP; DWORD offsetOfRealProxyServer; DWORD offsetOfObjArrayData; @@ -306,7 +306,7 @@ public: DWORD exactContextNeedsRuntimeLookup; Agnostic_CORINFO_LOOKUP stubLookup; // first view of union. others are matching or subordinate Agnostic_CORINFO_CONST_LOOKUP instParamLookup; - DWORD secureDelegateInvoke; + DWORD wrapperDelegateInvoke; DWORD exceptionCode; }; struct Agnostic_GetMethodInfo |