From b4786838985ca249cca04a7d0676ae57ee61ca2b Mon Sep 17 00:00:00 2001 From: Gleb Balykov Date: Wed, 21 Jun 2017 19:48:49 +0300 Subject: Remove relocations from SECTION_Readonly for fields not accessed from jit code on ARM --- src/vm/ceeload.h | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) (limited to 'src/vm/ceeload.h') diff --git a/src/vm/ceeload.h b/src/vm/ceeload.h index 0896c9b8ab..15d7959433 100644 --- a/src/vm/ceeload.h +++ b/src/vm/ceeload.h @@ -618,7 +618,7 @@ struct ModuleCtorInfo DWORD numElements; DWORD numLastAllocated; DWORD numElementsHot; - DPTR(PTR_MethodTable) ppMT; // size is numElements + DPTR(RelativePointer) ppMT; // size is numElements PTR_ClassCtorInfoEntry cctorInfoHot; // size is numElementsHot PTR_ClassCtorInfoEntry cctorInfoCold; // size is numElements-numElementsHot @@ -627,8 +627,8 @@ struct ModuleCtorInfo DWORD numHotHashes; DWORD numColdHashes; - ArrayDPTR(FixupPointer) ppHotGCStaticsMTs; // hot table - ArrayDPTR(FixupPointer) ppColdGCStaticsMTs; // cold table + ArrayDPTR(RelativeFixupPointer) ppHotGCStaticsMTs; // hot table + ArrayDPTR(RelativeFixupPointer) ppColdGCStaticsMTs; // cold table DWORD numHotGCStaticsMTs; DWORD numColdGCStaticsMTs; @@ -664,7 +664,13 @@ struct ModuleCtorInfo return hashVal; }; - ArrayDPTR(FixupPointer) GetGCStaticMTs(DWORD index); + ArrayDPTR(RelativeFixupPointer) GetGCStaticMTs(DWORD index); + + PTR_MethodTable GetMT(DWORD i) + { + LIMITED_METHOD_DAC_CONTRACT; + return ppMT[i].GetValue(dac_cast(ppMT) + i * sizeof(RelativePointer)); + } #ifdef FEATURE_PREJIT @@ -675,11 +681,11 @@ struct ModuleCtorInfo class ClassCtorInfoEntryArraySort : public CQuickSort { private: - PTR_MethodTable *m_pBase1; + DPTR(RelativePointer) m_pBase1; public: //Constructor - ClassCtorInfoEntryArraySort(DWORD *base, PTR_MethodTable *base1, int count) + ClassCtorInfoEntryArraySort(DWORD *base, DPTR(RelativePointer) base1, int count) : CQuickSort(base, count) { WRAPPER_NO_CONTRACT; @@ -700,6 +706,7 @@ struct ModuleCtorInfo return 1; } +#ifndef DACCESS_COMPILE // Swap is overwriten so that we can sort both the MethodTable pointer // array and the ClassCtorInfoEntry array in parrallel. FORCEINLINE void Swap(SSIZE_T iFirst, SSIZE_T iSecond) @@ -715,10 +722,11 @@ struct ModuleCtorInfo m_pBase[iFirst] = m_pBase[iSecond]; m_pBase[iSecond] = sTemp; - sTemp1 = m_pBase1[iFirst]; - m_pBase1[iFirst] = m_pBase1[iSecond]; - m_pBase1[iSecond] = sTemp1; + sTemp1 = m_pBase1[iFirst].GetValueMaybeNull(); + m_pBase1[iFirst].SetValueMaybeNull(m_pBase1[iSecond].GetValueMaybeNull()); + m_pBase1[iSecond].SetValueMaybeNull(sTemp1); } +#endif // !DACCESS_COMPILE }; #endif // FEATURE_PREJIT }; -- cgit v1.2.3 From cf1fb9e17fc8b6ee849edab5a696d0ec5c6eadd2 Mon Sep 17 00:00:00 2001 From: Gleb Balykov Date: Fri, 23 Jun 2017 14:57:25 +0300 Subject: Remove relocations for MethodTable::m_pParentMethodTable for Linux ARM --- src/vm/ceeload.h | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'src/vm/ceeload.h') diff --git a/src/vm/ceeload.h b/src/vm/ceeload.h index 15d7959433..4533597fba 100644 --- a/src/vm/ceeload.h +++ b/src/vm/ceeload.h @@ -2911,6 +2911,10 @@ public: ClassLoadLevel level = CLASS_LOADED); static void RestoreFieldDescPointer(RelativeFixupPointer * ppFD); + static void RestoreMethodTablePointer(PlainPointer * ppMT, + Module *pContainingModule = NULL, + ClassLoadLevel level = CLASS_LOADED); + static void RestoreModulePointer(RelativeFixupPointer * ppModule, Module *pContainingModule); static PTR_Module RestoreModulePointerIfLoaded(DPTR(RelativeFixupPointer) ppModule, Module *pContainingModule); -- cgit v1.2.3