diff --git a/src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader.Contracts/Contracts/RuntimeTypeSystem_1.cs b/src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader.Contracts/Contracts/RuntimeTypeSystem_1.cs index 44229f7a8a3718..a265780c5c93c2 100644 --- a/src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader.Contracts/Contracts/RuntimeTypeSystem_1.cs +++ b/src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader.Contracts/Contracts/RuntimeTypeSystem_1.cs @@ -2511,40 +2511,43 @@ private TargetPointer GetFieldDescStaticOrThreadStaticAddress(TargetPointer fiel ILoader loader = _target.Contracts.Loader; ModuleHandle moduleHandle = loader.GetModuleHandleFromModulePtr(modulePtr); CorElementType type = ((IRuntimeTypeSystem)this).GetFieldDescType(fieldDescPointer); - TargetPointer @base; - if (type == CorElementType.Class || type == CorElementType.ValueType) - { - if (thread.HasValue) - { - @base = GetGCThreadStaticsBasePointer(ctx, thread.Value); - } - else - { - @base = GetGCStaticsBasePointer(ctx); - } - } - else + bool isRVA = ((IRuntimeTypeSystem)this).IsFieldDescRVA(fieldDescPointer); + + TargetPointer @base = TargetPointer.Null; + if (!isRVA) { - if (thread.HasValue) + if (type == CorElementType.Class || type == CorElementType.ValueType) { - @base = GetNonGCThreadStaticsBasePointer(ctx, thread.Value); + if (thread.HasValue) + { + @base = GetGCThreadStaticsBasePointer(ctx, thread.Value); + } + else + { + @base = GetGCStaticsBasePointer(ctx); + } } else { - @base = GetNonGCStaticsBasePointer(ctx); + if (thread.HasValue) + { + @base = GetNonGCThreadStaticsBasePointer(ctx, thread.Value); + } + else + { + @base = GetNonGCStaticsBasePointer(ctx); + } } - } - if (@base == TargetPointer.Null) - return TargetPointer.Null; + if (@base == TargetPointer.Null) + return TargetPointer.Null; + } MetadataReader mdReader = _target.Contracts.EcmaMetadata.GetMetadata(moduleHandle)!; uint token = ((IRuntimeTypeSystem)this).GetFieldDescMemberDef(fieldDescPointer); FieldDefinitionHandle fieldHandle = (FieldDefinitionHandle)MetadataTokens.Handle((int)token); FieldDefinition fieldDef = mdReader.GetFieldDefinition(fieldHandle); - uint offset = ((IRuntimeTypeSystem)this).GetFieldDescOffset(fieldDescPointer, fieldDef); - bool isRVA = ((IRuntimeTypeSystem)this).IsFieldDescRVA(fieldDescPointer); TargetPointer handleAddr = GetStaticAddressHandle(@base, offset, isRVA, fieldDescPointer, moduleHandle); if (unboxValueTypes && type == CorElementType.ValueType && !isRVA) {