summaryrefslogtreecommitdiff
path: root/src/vm/fieldmarshaler.cpp
diff options
context:
space:
mode:
authorRuben Ayrapetyan <ruben-ayrapetyan@users.noreply.github.com>2017-06-28 09:16:01 +0300
committerJan Kotas <jkotas@microsoft.com>2017-06-27 23:16:01 -0700
commit44f57065649af5f8bcbb7c71d827221a7bc1bf7a (patch)
treedaa511e0217853b725dec53e3ec676683ecd2224 /src/vm/fieldmarshaler.cpp
parent7cc721ec6ec56c998d66f1d57e7341cf7141a8a3 (diff)
downloadcoreclr-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.cpp19
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