From d77a0eb0e00305b15a8981b873d57b0630a6ef7e Mon Sep 17 00:00:00 2001 From: Toni Solarin-Sodara Date: Sun, 4 Oct 2020 18:25:46 +0100 Subject: [PATCH] Allocate memory for non gc statics (#5011) --- .../Runtime/Interpreter/ILInterpreter.cs | 8 ++++---- .../Internal/Runtime/TypeLoader/EETypeCreator.cs | 16 ++++++++-------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/System.Private.Interpreter/src/Internal/Runtime/Interpreter/ILInterpreter.cs b/src/System.Private.Interpreter/src/Internal/Runtime/Interpreter/ILInterpreter.cs index f7c32b8cb6a..36fecfc18ef 100644 --- a/src/System.Private.Interpreter/src/Internal/Runtime/Interpreter/ILInterpreter.cs +++ b/src/System.Private.Interpreter/src/Internal/Runtime/Interpreter/ILInterpreter.cs @@ -2840,9 +2840,9 @@ private void InterpretLoadStaticField(FieldDesc field) var fieldOffset = field.Offset.AsInt; var staticsBase = field switch { - { HasGCStaticBase: false, IsThreadStatic: false } => TypeLoaderEnvironment.Instance.TryGetNonGcStaticFieldData(field.OwningType.GetRuntimeTypeHandle()), + { HasGCStaticBase: false, IsThreadStatic: false } => TypeLoaderEnvironment.Instance.TryGetNonGcStaticFieldDataDirect(field.OwningType.GetRuntimeTypeHandle()), { HasGCStaticBase: false, IsThreadStatic: true } => IntPtr.Zero, - { HasGCStaticBase: true, IsThreadStatic: false } => TypeLoaderEnvironment.Instance.TryGetGcStaticFieldData(field.OwningType.GetRuntimeTypeHandle()), + { HasGCStaticBase: true, IsThreadStatic: false } => TypeLoaderEnvironment.Instance.TryGetGcStaticFieldDataDirect(field.OwningType.GetRuntimeTypeHandle()), { HasGCStaticBase: true, IsThreadStatic: true } => IntPtr.Zero, }; @@ -3015,9 +3015,9 @@ private void InterpretStoreStaticField(FieldDesc field) var fieldOffset = field.Offset.AsInt; var staticsBase = field switch { - { HasGCStaticBase: false, IsThreadStatic: false } => TypeLoaderEnvironment.Instance.TryGetNonGcStaticFieldData(field.OwningType.GetRuntimeTypeHandle()), + { HasGCStaticBase: false, IsThreadStatic: false } => TypeLoaderEnvironment.Instance.TryGetNonGcStaticFieldDataDirect(field.OwningType.GetRuntimeTypeHandle()), { HasGCStaticBase: false, IsThreadStatic: true } => IntPtr.Zero, - { HasGCStaticBase: true, IsThreadStatic: false } => TypeLoaderEnvironment.Instance.TryGetGcStaticFieldData(field.OwningType.GetRuntimeTypeHandle()), + { HasGCStaticBase: true, IsThreadStatic: false } => TypeLoaderEnvironment.Instance.TryGetNonGcStaticFieldDataDirect(field.OwningType.GetRuntimeTypeHandle()), { HasGCStaticBase: true, IsThreadStatic: true } => IntPtr.Zero, }; diff --git a/src/System.Private.TypeLoader/src/Internal/Runtime/TypeLoader/EETypeCreator.cs b/src/System.Private.TypeLoader/src/Internal/Runtime/TypeLoader/EETypeCreator.cs index 4bb9b03cbdc..84522e98a89 100644 --- a/src/System.Private.TypeLoader/src/Internal/Runtime/TypeLoader/EETypeCreator.cs +++ b/src/System.Private.TypeLoader/src/Internal/Runtime/TypeLoader/EETypeCreator.cs @@ -668,15 +668,15 @@ private static void CreateEETypeWorker(EEType* pTemplateEEType, UInt32 hashCodeO if (isGeneric) { genericComposition = MemoryHelpers.AllocateMemory(EEType.GetGenericCompositionSize(arity, pEEType->HasGenericVariance)); - pEEType->SetGenericComposition(genericComposition); + pEEType->SetGenericComposition(genericComposition); + } - if (state.NonGcDataSize > 0) - { - nonGcStaticData = MemoryHelpers.AllocateMemory(state.NonGcDataSize); - MemoryHelpers.Memset(nonGcStaticData, state.NonGcDataSize, 0); - Debug.Assert(nonGCStaticDataOffset <= state.NonGcDataSize); - pEEType->DynamicNonGcStaticsData = (IntPtr)((byte*)nonGcStaticData + nonGCStaticDataOffset); - } + if (state.NonGcDataSize > 0) + { + nonGcStaticData = MemoryHelpers.AllocateMemory(state.NonGcDataSize); + MemoryHelpers.Memset(nonGcStaticData, state.NonGcDataSize, 0); + Debug.Assert(nonGCStaticDataOffset <= state.NonGcDataSize); + pEEType->DynamicNonGcStaticsData = (IntPtr)((byte*)nonGcStaticData + nonGCStaticDataOffset); } if (!isGenericEETypeDef && state.ThreadDataSize != 0)