diff options
author | Ruben Ayrapetyan <ruben-ayrapetyan@users.noreply.github.com> | 2017-06-28 09:16:01 +0300 |
---|---|---|
committer | Jan Kotas <jkotas@microsoft.com> | 2017-06-27 23:16:01 -0700 |
commit | 44f57065649af5f8bcbb7c71d827221a7bc1bf7a (patch) | |
tree | daa511e0217853b725dec53e3ec676683ecd2224 /src/vm/fieldmarshaler.cpp | |
parent | 7cc721ec6ec56c998d66f1d57e7341cf7141a8a3 (diff) | |
download | coreclr-44f57065649af5f8bcbb7c71d827221a7bc1bf7a.tar.gz coreclr-44f57065649af5f8bcbb7c71d827221a7bc1bf7a.tar.bz2 coreclr-44f57065649af5f8bcbb7c71d827221a7bc1bf7a.zip |
Partially remove relocations from Class section of NGEN-ed images (#11962)
* Remove relocations for ParamTypeDesc::m_TemplateMT.
* Remove relocations for LayoutEEClass::m_LayoutInfo.m_pFieldMarshalers.
* Prepare RelativeFixupPointer.
* Remove relocations for FieldMarshaler::m_pFD and FieldMarshaler_*::m_*.
Diffstat (limited to 'src/vm/fieldmarshaler.cpp')
-rw-r--r-- | src/vm/fieldmarshaler.cpp | 19 |
1 files changed, 13 insertions, 6 deletions
diff --git a/src/vm/fieldmarshaler.cpp b/src/vm/fieldmarshaler.cpp index 0de71b592c..9415b948b5 100644 --- a/src/vm/fieldmarshaler.cpp +++ b/src/vm/fieldmarshaler.cpp @@ -1318,7 +1318,7 @@ VOID EEClassLayoutInfo::CollectLayoutFieldMetadataThrowing( } pEEClassLayoutInfoOut->m_numCTMFields = fHasNonTrivialParent ? pParentMT->GetLayoutInfo()->m_numCTMFields : 0; - pEEClassLayoutInfoOut->m_pFieldMarshalers = NULL; + pEEClassLayoutInfoOut->SetFieldMarshalers(NULL); pEEClassLayoutInfoOut->SetIsBlittable(TRUE); if (fHasNonTrivialParent) pEEClassLayoutInfoOut->SetIsBlittable(pParentMT->IsBlittable()); @@ -1599,7 +1599,7 @@ VOID EEClassLayoutInfo::CollectLayoutFieldMetadataThrowing( if (pEEClassLayoutInfoOut->m_numCTMFields) { - pEEClassLayoutInfoOut->m_pFieldMarshalers = (FieldMarshaler*)(pamTracker->Track(pAllocator->GetLowFrequencyHeap()->AllocMem(S_SIZE_T(MAXFIELDMARSHALERSIZE) * S_SIZE_T(pEEClassLayoutInfoOut->m_numCTMFields)))); + pEEClassLayoutInfoOut->SetFieldMarshalers((FieldMarshaler*)(pamTracker->Track(pAllocator->GetLowFrequencyHeap()->AllocMem(S_SIZE_T(MAXFIELDMARSHALERSIZE) * S_SIZE_T(pEEClassLayoutInfoOut->m_numCTMFields))))); // Bring in the parent's fieldmarshalers if (fHasNonTrivialParent) @@ -1608,8 +1608,8 @@ VOID EEClassLayoutInfo::CollectLayoutFieldMetadataThrowing( PREFAST_ASSUME(pParentLayoutInfo != NULL); // See if (fParentHasLayout) branch above UINT numChildCTMFields = pEEClassLayoutInfoOut->m_numCTMFields - pParentLayoutInfo->m_numCTMFields; - memcpyNoGCRefs( ((BYTE*)pEEClassLayoutInfoOut->m_pFieldMarshalers) + MAXFIELDMARSHALERSIZE*numChildCTMFields, - pParentLayoutInfo->m_pFieldMarshalers, + memcpyNoGCRefs( ((BYTE*)pEEClassLayoutInfoOut->GetFieldMarshalers()) + MAXFIELDMARSHALERSIZE*numChildCTMFields, + pParentLayoutInfo->GetFieldMarshalers(), MAXFIELDMARSHALERSIZE * (pParentLayoutInfo->m_numCTMFields) ); } @@ -3726,7 +3726,7 @@ VOID FieldMarshaler_SafeArray::UpdateNativeImpl(OBJECTREF* pCLRValue, LPVOID pNa pSafeArray = (LPSAFEARRAY*)pNativeValue; VARTYPE vt = m_vt; - MethodTable* pMT = m_pMT.GetValue(); + MethodTable* pMT = m_pMT.GetValueMaybeNull(); GCPROTECT_BEGIN(pArray) { @@ -3771,7 +3771,7 @@ VOID FieldMarshaler_SafeArray::UpdateCLRImpl(const VOID *pNativeValue, OBJECTREF } VARTYPE vt = m_vt; - MethodTable* pMT = m_pMT.GetValue(); + MethodTable* pMT = m_pMT.GetValueMaybeNull(); // If we have an empty vartype, get it from the safearray vartype if (vt == VT_EMPTY) @@ -4868,3 +4868,10 @@ IMPLEMENT_FieldMarshaler_METHOD(void, Restore, (), , ()) + +#ifndef DACCESS_COMPILE +IMPLEMENT_FieldMarshaler_METHOD(VOID, CopyTo, + (VOID *pDest, SIZE_T destSize) const, + , + (pDest, destSize)) +#endif // !DACCESS_COMPILE |