diff --git a/src/coreclr/nativeaot/Common/src/Internal/Runtime/CompilerHelpers/StartupCodeHelpers.cs b/src/coreclr/nativeaot/Common/src/Internal/Runtime/CompilerHelpers/StartupCodeHelpers.cs index 039b586c01eccc..b9d4d5dc2b6775 100644 --- a/src/coreclr/nativeaot/Common/src/Internal/Runtime/CompilerHelpers/StartupCodeHelpers.cs +++ b/src/coreclr/nativeaot/Common/src/Internal/Runtime/CompilerHelpers/StartupCodeHelpers.cs @@ -249,9 +249,12 @@ private static unsafe void RehydrateData(IntPtr dehydratedData, int length) // Destination for the hydrated data is in the first 32-bit relative pointer byte* pDest = (byte*)ReadRelPtr32((void*)dehydratedData); + // Next is the number of fixups at the end of the stream + int numFixups = *(int*)(dehydratedData + sizeof(int)); + // The dehydrated data follows - byte* pCurrent = (byte*)dehydratedData + sizeof(int); - byte* pEnd = (byte*)dehydratedData + length; + byte* pCurrent = (byte*)dehydratedData + sizeof(int) * 2; + byte* pEnd = (byte*)dehydratedData + length - (sizeof(int) * numFixups); // Fixup table immediately follows the command stream int* pFixups = (int*)pEnd; diff --git a/src/coreclr/nativeaot/Runtime/TypeManager.cpp b/src/coreclr/nativeaot/Runtime/TypeManager.cpp index edba0b2ed20771..8586781cfc6c94 100644 --- a/src/coreclr/nativeaot/Runtime/TypeManager.cpp +++ b/src/coreclr/nativeaot/Runtime/TypeManager.cpp @@ -60,7 +60,7 @@ void * TypeManager::GetModuleSection(ReadyToRunSectionType sectionId, int * leng ModuleInfoRow * pCurrent = pModuleInfoRows + i; if ((int32_t)sectionId == pCurrent->SectionId) { - *length = pCurrent->GetLength(); + *length = pCurrent->Length; return pCurrent->Start; } } @@ -79,23 +79,6 @@ void * TypeManager::GetClasslibFunction(ClasslibFunctionId functionId) return m_pClasslibFunctions[id]; } -bool TypeManager::ModuleInfoRow::HasEndPointer() -{ - return Flags & (int32_t)ModuleInfoFlags::HasEndPointer; -} - -int TypeManager::ModuleInfoRow::GetLength() -{ - if (HasEndPointer()) - { - return (int)((uint8_t*)End - (uint8_t*)Start); - } - else - { - return sizeof(void*); - } -} - HANDLE TypeManager::GetOsModuleHandle() { return m_osModule; diff --git a/src/coreclr/nativeaot/Runtime/TypeManager.h b/src/coreclr/nativeaot/Runtime/TypeManager.h index 91a38ffbbacf98..4429ee4e28cb48 100644 --- a/src/coreclr/nativeaot/Runtime/TypeManager.h +++ b/src/coreclr/nativeaot/Runtime/TypeManager.h @@ -27,12 +27,8 @@ class TypeManager struct ModuleInfoRow { int32_t SectionId; - int32_t Flags; + int32_t Length; void * Start; - void * End; - - bool HasEndPointer(); - int GetLength(); }; }; diff --git a/src/coreclr/nativeaot/Runtime/inc/ModuleHeaders.h b/src/coreclr/nativeaot/Runtime/inc/ModuleHeaders.h index 13eeb69f898ec5..a999d27bf7d476 100644 --- a/src/coreclr/nativeaot/Runtime/inc/ModuleHeaders.h +++ b/src/coreclr/nativeaot/Runtime/inc/ModuleHeaders.h @@ -58,8 +58,3 @@ enum class ReadyToRunSectionType ReadonlyBlobRegionStart = 300, ReadonlyBlobRegionEnd = 399, }; - -enum class ModuleInfoFlags -{ - HasEndPointer = 0x1, -}; diff --git a/src/coreclr/tools/Common/Compiler/ObjectWriter/ObjectWriter.cs b/src/coreclr/tools/Common/Compiler/ObjectWriter/ObjectWriter.cs index a82fe2cf094886..9fe0dc6e7605c3 100644 --- a/src/coreclr/tools/Common/Compiler/ObjectWriter/ObjectWriter.cs +++ b/src/coreclr/tools/Common/Compiler/ObjectWriter/ObjectWriter.cs @@ -435,10 +435,8 @@ public virtual void EmitObject(Stream outputFileStream, IReadOnlyCollection /// Represents a hash table of array types generated into the image. /// - internal sealed class ArrayMapNode : ObjectNode, ISymbolDefinitionNode, INodeWithSize + internal sealed class ArrayMapNode : ObjectNode, ISymbolDefinitionNode { private readonly ExternalReferencesTableNode _externalReferences; - private int? _size; public ArrayMapNode(ExternalReferencesTableNode externalReferences) { _externalReferences = externalReferences; } - int INodeWithSize.Size => _size.Value; - public void AppendMangledName(NameMangler nameMangler, Utf8StringBuilder sb) { sb.Append(nameMangler.CompilationUnitPrefix).Append("__array_type_map"u8); @@ -66,8 +63,6 @@ public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false) byte[] hashTableBytes = writer.Save(); - _size = hashTableBytes.Length; - return new ObjectData(hashTableBytes, Array.Empty(), 1, new ISymbolDefinitionNode[] { this }); } diff --git a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ArrayOfEmbeddedDataNode.cs b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ArrayOfEmbeddedDataNode.cs index f63dab431e7190..f6e68343f9a798 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ArrayOfEmbeddedDataNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ArrayOfEmbeddedDataNode.cs @@ -10,16 +10,13 @@ namespace ILCompiler.DependencyAnalysis /// by placing a starting symbol, followed by contents of nodes (optionally /// sorted using provided comparer), followed by ending symbol. /// - public class ArrayOfEmbeddedDataNode : EmbeddedDataContainerNode, INodeWithSize + public class ArrayOfEmbeddedDataNode : EmbeddedDataContainerNode where TEmbedded : EmbeddedObjectNode { - private int? _size; private HashSet _nestedNodes = new HashSet(); private List _nestedNodesList = new List(); private IComparer _sorter; - int INodeWithSize.Size => _size.Value; - public ArrayOfEmbeddedDataNode(string mangledName, IComparer nodeSorter) : base(mangledName) { _sorter = nodeSorter; @@ -85,8 +82,6 @@ public override ObjectData GetData(NodeFactory factory, bool relocsOnly) GetElementDataForNodes(ref builder, factory, relocsOnly); - _size = builder.CountBytes; - ObjectData objData = builder.ToObjectData(); return objData; } diff --git a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ArrayOfFrozenObjectsNode.cs b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ArrayOfFrozenObjectsNode.cs index cecf9bd572f17e..7e1e06f1de4889 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ArrayOfFrozenObjectsNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ArrayOfFrozenObjectsNode.cs @@ -10,10 +10,8 @@ namespace ILCompiler.DependencyAnalysis { - public class ArrayOfFrozenObjectsNode : DehydratableObjectNode, ISymbolDefinitionNode, INodeWithSize + public class ArrayOfFrozenObjectsNode : DehydratableObjectNode, ISymbolDefinitionNode { - private int? _size; - int INodeWithSize.Size => _size.Value; public void AppendMangledName(NameMangler nameMangler, Utf8StringBuilder sb) => sb.Append(nameMangler.CompilationUnitPrefix).Append("__FrozenSegmentStart"u8); @@ -57,8 +55,6 @@ protected override ObjectData GetDehydratableData(NodeFactory factory, bool relo AlignNextObject(ref builder, factory); builder.EmitZeroPointer(); - _size = builder.CountBytes; - return builder.ToObjectData(); } diff --git a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ByRefTypeMapNode.cs b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ByRefTypeMapNode.cs index 9f23b8a85cc360..bd61b0a6ed50b8 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ByRefTypeMapNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ByRefTypeMapNode.cs @@ -11,9 +11,8 @@ namespace ILCompiler.DependencyAnalysis /// /// Represents a hash table of ByRef types generated into the image. /// - internal sealed class ByRefTypeMapNode : ObjectNode, ISymbolDefinitionNode, INodeWithSize + internal sealed class ByRefTypeMapNode : ObjectNode, ISymbolDefinitionNode { - private int? _size; private readonly ExternalReferencesTableNode _externalReferences; public ByRefTypeMapNode(ExternalReferencesTableNode externalReferences) @@ -21,8 +20,6 @@ public ByRefTypeMapNode(ExternalReferencesTableNode externalReferences) _externalReferences = externalReferences; } - int INodeWithSize.Size => _size.Value; - public void AppendMangledName(NameMangler nameMangler, Utf8StringBuilder sb) { sb.Append(nameMangler.CompilationUnitPrefix).Append("__byref_type_map"u8); @@ -61,8 +58,6 @@ public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false) byte[] hashTableBytes = writer.Save(); - _size = hashTableBytes.Length; - return new ObjectData(hashTableBytes, Array.Empty(), 1, new ISymbolDefinitionNode[] { this }); } diff --git a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ClassConstructorContextMap.cs b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ClassConstructorContextMap.cs index a12e604b44cd01..3f80bd4909cf8a 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ClassConstructorContextMap.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ClassConstructorContextMap.cs @@ -11,9 +11,8 @@ namespace ILCompiler.DependencyAnalysis { - internal sealed class ClassConstructorContextMap : ObjectNode, ISymbolDefinitionNode, INodeWithSize + internal sealed class ClassConstructorContextMap : ObjectNode, ISymbolDefinitionNode { - private int? _size; private ExternalReferencesTableNode _externalReferences; public ClassConstructorContextMap(ExternalReferencesTableNode externalReferences) @@ -21,8 +20,6 @@ public ClassConstructorContextMap(ExternalReferencesTableNode externalReferences _externalReferences = externalReferences; } - int INodeWithSize.Size => _size.Value; - public void AppendMangledName(NameMangler nameMangler, Utf8StringBuilder sb) { sb.Append(nameMangler.CompilationUnitPrefix).Append("__type_to_cctorContext_map"u8); @@ -73,8 +70,6 @@ public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false) byte[] hashTableBytes = writer.Save(); - _size = hashTableBytes.Length; - return new ObjectData(hashTableBytes, Array.Empty(), 1, new ISymbolDefinitionNode[] { this }); } diff --git a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/DehydratedDataNode.cs b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/DehydratedDataNode.cs index 793eb0c289a2c2..32879d415dd962 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/DehydratedDataNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/DehydratedDataNode.cs @@ -29,9 +29,8 @@ namespace ILCompiler.DependencyAnalysis /// * Generate N bytes of zeros. /// * Generate a relocation to Nth entry in the lookup table that supplements the dehydrated stream. /// - internal sealed class DehydratedDataNode : ObjectNode, ISymbolDefinitionNode, INodeWithSize + internal sealed class DehydratedDataNode : ObjectNode, ISymbolDefinitionNode { - private int? _size; public override bool IsShareable => false; @@ -43,8 +42,6 @@ internal sealed class DehydratedDataNode : ObjectNode, ISymbolDefinitionNode, IN public int Offset => 0; - int INodeWithSize.Size => _size.Value; - public void AppendMangledName(NameMangler nameMangler, Utf8StringBuilder sb) { sb.Append(nameMangler.CompilationUnitPrefix).Append("__dehydrated_data"u8); @@ -107,6 +104,8 @@ public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false) Array.Resize(ref relocSort, lastProfitableReloc); var relocs = new Dictionary(relocSort); + ObjectDataBuilder.Reservation numRelocsReservation = builder.ReserveInt(); + // Walk all the ObjectDatas and generate the dehydrated instruction stream. byte[] buff = new byte[4]; int dehydratedSegmentPosition = 0; @@ -309,7 +308,7 @@ public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false) dehydratedSegmentPosition += o.Data.Length; } - _size = builder.CountBytes; + builder.EmitInt(numRelocsReservation, relocSort.Length); // Dehydrated data is followed by the reloc lookup table. for (int i = 0; i < relocSort.Length; i++) diff --git a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/DelegateMarshallingStubMapNode.cs b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/DelegateMarshallingStubMapNode.cs index 7ea248989915bb..942b0bcee3be77 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/DelegateMarshallingStubMapNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/DelegateMarshallingStubMapNode.cs @@ -12,9 +12,8 @@ namespace ILCompiler.DependencyAnalysis /// /// Represents a hash table of delegate marshalling stub types generated into the image. /// - internal sealed class DelegateMarshallingStubMapNode : ObjectNode, ISymbolDefinitionNode, INodeWithSize + internal sealed class DelegateMarshallingStubMapNode : ObjectNode, ISymbolDefinitionNode { - private int? _size; private readonly ExternalReferencesTableNode _externalReferences; private readonly InteropStateManager _interopStateManager; @@ -24,8 +23,6 @@ public DelegateMarshallingStubMapNode(ExternalReferencesTableNode externalRefere _interopStateManager = interopStateManager; } - int INodeWithSize.Size => _size.Value; - public void AppendMangledName(NameMangler nameMangler, Utf8StringBuilder sb) { sb.Append(nameMangler.CompilationUnitPrefix).Append("__delegate_marshalling_stub_map"u8); @@ -70,8 +67,6 @@ public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false) byte[] hashTableBytes = writer.Save(); - _size = hashTableBytes.Length; - return new ObjectData(hashTableBytes, Array.Empty(), 1, new ISymbolDefinitionNode[] { this }); } diff --git a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ExactMethodInstantiationsNode.cs b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ExactMethodInstantiationsNode.cs index 3f7a5dc84e5758..b0a94038ca5ff1 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ExactMethodInstantiationsNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ExactMethodInstantiationsNode.cs @@ -14,9 +14,8 @@ namespace ILCompiler.DependencyAnalysis /// /// Hashtable of all exact (non-canonical) generic method instantiations compiled in the module. /// - public sealed class ExactMethodInstantiationsNode : ObjectNode, ISymbolDefinitionNode, INodeWithSize + public sealed class ExactMethodInstantiationsNode : ObjectNode, ISymbolDefinitionNode { - private int? _size; private ExternalReferencesTableNode _externalReferences; public ExactMethodInstantiationsNode(ExternalReferencesTableNode externalReferences) @@ -29,7 +28,6 @@ public void AppendMangledName(NameMangler nameMangler, Utf8StringBuilder sb) sb.Append(nameMangler.CompilationUnitPrefix).Append("__exact_method_instantiations"u8); } - int INodeWithSize.Size => _size.Value; public int Offset => 0; public override bool IsShareable => false; public override ObjectNodeSection GetSection(NodeFactory factory) => _externalReferences.GetSection(factory); @@ -50,7 +48,6 @@ public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false) Section nativeSection = nativeWriter.NewSection(); nativeSection.Place(hashtable); - foreach (MethodDesc method in factory.MetadataManager.GetExactMethodHashtableEntries()) { // Get the method pointer vertex @@ -98,8 +95,6 @@ public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false) byte[] streamBytes = nativeWriter.Save(); - _size = streamBytes.Length; - return new ObjectData(streamBytes, Array.Empty(), 1, new ISymbolDefinitionNode[] { this }); } diff --git a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ExternalReferencesTableNode.cs b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ExternalReferencesTableNode.cs index 86e2d14a0f3c29..0f045406c5500a 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ExternalReferencesTableNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ExternalReferencesTableNode.cs @@ -13,9 +13,8 @@ namespace ILCompiler.DependencyAnalysis /// /// Represents a node that points to various symbols and can be sequentially addressed. /// - public sealed class ExternalReferencesTableNode : ObjectNode, ISymbolDefinitionNode, INodeWithSize + public sealed class ExternalReferencesTableNode : ObjectNode, ISymbolDefinitionNode { - private int? _size; private readonly string _blobName; private readonly NodeFactory _nodeFactory; @@ -28,8 +27,6 @@ public ExternalReferencesTableNode(string blobName, NodeFactory nodeFactory) _nodeFactory = nodeFactory; } - int INodeWithSize.Size => _size.Value; - public void AppendMangledName(NameMangler nameMangler, Utf8StringBuilder sb) { sb.Append(nameMangler.CompilationUnitPrefix).Append("__external_" + _blobName + "_references"); @@ -102,8 +99,6 @@ public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false) } } - _size = builder.CountBytes; - builder.AddSymbol(this); return builder.ToObjectData(); diff --git a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ExternalTypeMapObjectNode.cs b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ExternalTypeMapObjectNode.cs index 8f72dee452374f..44c6bf0a1977e0 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ExternalTypeMapObjectNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ExternalTypeMapObjectNode.cs @@ -12,7 +12,7 @@ namespace ILCompiler.DependencyAnalysis { - internal sealed class ExternalTypeMapObjectNode(ExternalReferencesTableNode externalReferences) : ObjectNode, ISymbolDefinitionNode, INodeWithSize + internal sealed class ExternalTypeMapObjectNode(ExternalReferencesTableNode externalReferences) : ObjectNode, ISymbolDefinitionNode { public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false) { @@ -33,8 +33,6 @@ public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false) byte[] hashTableBytes = writer.Save(); - Size = hashTableBytes.Length; - return new ObjectData(hashTableBytes, Array.Empty(), 1, [this]); } public void AppendMangledName(NameMangler nameMangler, Utf8StringBuilder sb) @@ -42,7 +40,6 @@ public void AppendMangledName(NameMangler nameMangler, Utf8StringBuilder sb) sb.Append(nameMangler.CompilationUnitPrefix).Append("__external_type_map__"u8); } - public int Size { get; private set; } public int Offset => 0; public override bool IsShareable => false; public override ObjectNodeSection GetSection(NodeFactory factory) => externalReferences.GetSection(factory); diff --git a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/FunctionPointerMapNode.cs b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/FunctionPointerMapNode.cs index 5273c447780af1..391e031d04fd57 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/FunctionPointerMapNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/FunctionPointerMapNode.cs @@ -12,9 +12,8 @@ namespace ILCompiler.DependencyAnalysis /// /// Represents a hash table of function pointer types generated into the image. /// - internal sealed class FunctionPointerMapNode : ObjectNode, ISymbolDefinitionNode, INodeWithSize + internal sealed class FunctionPointerMapNode : ObjectNode, ISymbolDefinitionNode { - private int? _size; private readonly ExternalReferencesTableNode _externalReferences; public FunctionPointerMapNode(ExternalReferencesTableNode externalReferences) @@ -22,8 +21,6 @@ public FunctionPointerMapNode(ExternalReferencesTableNode externalReferences) _externalReferences = externalReferences; } - int INodeWithSize.Size => _size.Value; - public void AppendMangledName(NameMangler nameMangler, Utf8StringBuilder sb) { sb.Append(nameMangler.CompilationUnitPrefix).Append("__fnptr_type_map"u8); @@ -70,8 +67,6 @@ public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false) byte[] hashTableBytes = writer.Save(); - _size = hashTableBytes.Length; - return new ObjectData(hashTableBytes, Array.Empty(), 1, new ISymbolDefinitionNode[] { this }); } diff --git a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/GenericMethodsHashtableNode.cs b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/GenericMethodsHashtableNode.cs index d07f976401455f..349254ee85d8c5 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/GenericMethodsHashtableNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/GenericMethodsHashtableNode.cs @@ -14,9 +14,8 @@ namespace ILCompiler.DependencyAnalysis /// /// Represents a hashtable of all compiled generic method instantiations /// - public sealed class GenericMethodsHashtableNode : ObjectNode, ISymbolDefinitionNode, INodeWithSize + public sealed class GenericMethodsHashtableNode : ObjectNode, ISymbolDefinitionNode { - private int? _size; private ExternalReferencesTableNode _externalReferences; public GenericMethodsHashtableNode(ExternalReferencesTableNode externalReferences) @@ -29,7 +28,6 @@ public void AppendMangledName(NameMangler nameMangler, Utf8StringBuilder sb) sb.Append(nameMangler.CompilationUnitPrefix).Append("__generic_methods_hashtable"u8); } - int INodeWithSize.Size => _size.Value; public int Offset => 0; public override bool IsShareable => false; public override ObjectNodeSection GetSection(NodeFactory factory) => _externalReferences.GetSection(factory); @@ -90,8 +88,6 @@ public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false) byte[] streamBytes = nativeWriter.Save(); - _size = streamBytes.Length; - return new ObjectData(streamBytes, Array.Empty(), 1, new ISymbolDefinitionNode[] { this }); } diff --git a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/GenericMethodsTemplateMap.cs b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/GenericMethodsTemplateMap.cs index 857106fa3d4fed..214f8e04ffcde8 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/GenericMethodsTemplateMap.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/GenericMethodsTemplateMap.cs @@ -13,9 +13,8 @@ namespace ILCompiler.DependencyAnalysis /// /// Hashtable of all generic method templates used by the TypeLoader at runtime /// - public sealed class GenericMethodsTemplateMap : ObjectNode, ISymbolDefinitionNode, INodeWithSize + public sealed class GenericMethodsTemplateMap : ObjectNode, ISymbolDefinitionNode { - private int? _size; private ExternalReferencesTableNode _externalReferences; public GenericMethodsTemplateMap(ExternalReferencesTableNode externalReferences) @@ -28,7 +27,6 @@ public void AppendMangledName(NameMangler nameMangler, Utf8StringBuilder sb) sb.Append(nameMangler.CompilationUnitPrefix).Append("__GenericMethodsTemplateMap"u8); } - int INodeWithSize.Size => _size.Value; public int Offset => 0; public override bool IsShareable => false; public override ObjectNodeSection GetSection(NodeFactory factory) => _externalReferences.GetSection(factory); @@ -49,7 +47,6 @@ public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false) Section nativeSection = nativeWriter.NewSection(); nativeSection.Place(hashtable); - foreach (var methodEntryNode in factory.MetadataManager.GetTemplateMethodEntries()) { // Method entry @@ -72,8 +69,6 @@ public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false) byte[] streamBytes = nativeWriter.Save(); - _size = streamBytes.Length; - return new ObjectData(streamBytes, Array.Empty(), 1, new ISymbolDefinitionNode[] { this }); } diff --git a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/GenericTypesHashtableNode.cs b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/GenericTypesHashtableNode.cs index 69df3a1a4eeff1..0d5f5c840fd341 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/GenericTypesHashtableNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/GenericTypesHashtableNode.cs @@ -12,9 +12,8 @@ namespace ILCompiler.DependencyAnalysis /// /// Represents a hashtable of all compiled generic type instantiations /// - public sealed class GenericTypesHashtableNode : ObjectNode, ISymbolDefinitionNode, INodeWithSize + public sealed class GenericTypesHashtableNode : ObjectNode, ISymbolDefinitionNode { - private int? _size; private ExternalReferencesTableNode _externalReferences; public GenericTypesHashtableNode(ExternalReferencesTableNode externalReferences) @@ -27,7 +26,6 @@ public void AppendMangledName(NameMangler nameMangler, Utf8StringBuilder sb) sb.Append(nameMangler.CompilationUnitPrefix).Append("__generic_types_hashtable"u8); } - int INodeWithSize.Size => _size.Value; public int Offset => 0; public override bool IsShareable => false; public override ObjectNodeSection GetSection(NodeFactory factory) => _externalReferences.GetSection(factory); @@ -60,8 +58,6 @@ public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false) byte[] streamBytes = nativeWriter.Save(); - _size = streamBytes.Length; - return new ObjectData(streamBytes, Array.Empty(), 1, new ISymbolDefinitionNode[] { this }); } diff --git a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/GenericTypesTemplateMap.cs b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/GenericTypesTemplateMap.cs index 1e2495ccacb9b4..e3c016025bf6fc 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/GenericTypesTemplateMap.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/GenericTypesTemplateMap.cs @@ -13,9 +13,8 @@ namespace ILCompiler.DependencyAnalysis /// /// Hashtable of all generic type templates used by the TypeLoader at runtime /// - public sealed class GenericTypesTemplateMap : ObjectNode, ISymbolDefinitionNode, INodeWithSize + public sealed class GenericTypesTemplateMap : ObjectNode, ISymbolDefinitionNode { - private int? _size; private ExternalReferencesTableNode _externalReferences; public GenericTypesTemplateMap(ExternalReferencesTableNode externalReferences) @@ -28,7 +27,6 @@ public void AppendMangledName(NameMangler nameMangler, Utf8StringBuilder sb) sb.Append(nameMangler.CompilationUnitPrefix).Append("__GenericTypesTemplateMap"u8); } - int INodeWithSize.Size => _size.Value; public int Offset => 0; public override bool IsShareable => false; public override ObjectNodeSection GetSection(NodeFactory factory) => _externalReferences.GetSection(factory); @@ -67,8 +65,6 @@ public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false) byte[] streamBytes = nativeWriter.Save(); - _size = streamBytes.Length; - return new ObjectData(streamBytes, Array.Empty(), 1, new ISymbolDefinitionNode[] { this }); } diff --git a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/GenericVirtualMethodTableNode.cs b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/GenericVirtualMethodTableNode.cs index 3df07d1581bca5..2b4ab88f6580a4 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/GenericVirtualMethodTableNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/GenericVirtualMethodTableNode.cs @@ -14,9 +14,8 @@ namespace ILCompiler.DependencyAnalysis /// /// Represents a map of generic virtual method implementations. /// - public sealed class GenericVirtualMethodTableNode : ObjectNode, ISymbolDefinitionNode, INodeWithSize + public sealed class GenericVirtualMethodTableNode : ObjectNode, ISymbolDefinitionNode { - private int? _size; private ExternalReferencesTableNode _externalReferences; private Dictionary> _gvmImplementations; @@ -31,7 +30,6 @@ public void AppendMangledName(NameMangler nameMangler, Utf8StringBuilder sb) sb.Append(nameMangler.CompilationUnitPrefix).Append("__gvm_table"u8); } - int INodeWithSize.Size => _size.Value; public int Offset => 0; public override bool IsShareable => false; public override ObjectNodeSection GetSection(NodeFactory factory) => _externalReferences.GetSection(factory); @@ -133,8 +131,6 @@ public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false) byte[] streamBytes = nativeFormatWriter.Save(); - _size = streamBytes.Length; - return new ObjectData(streamBytes, Array.Empty(), 1, new ISymbolDefinitionNode[] { this }); } diff --git a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/InterfaceGenericVirtualMethodTableNode.cs b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/InterfaceGenericVirtualMethodTableNode.cs index e1f432af8ff3c6..1c1049b2d47ce7 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/InterfaceGenericVirtualMethodTableNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/InterfaceGenericVirtualMethodTableNode.cs @@ -15,9 +15,8 @@ namespace ILCompiler.DependencyAnalysis /// /// Represents a map between reflection metadata and generated method bodies. /// - public sealed class InterfaceGenericVirtualMethodTableNode : ObjectNode, ISymbolDefinitionNode, INodeWithSize + public sealed class InterfaceGenericVirtualMethodTableNode : ObjectNode, ISymbolDefinitionNode { - private int? _size; private ExternalReferencesTableNode _externalReferences; private Dictionary> _interfaceGvmSlots; private Dictionary>> _interfaceImpls; @@ -33,7 +32,6 @@ public void AppendMangledName(NameMangler nameMangler, Utf8StringBuilder sb) { sb.Append(nameMangler.CompilationUnitPrefix).Append("__interface_gvm_table"u8); } - int INodeWithSize.Size => _size.Value; public int Offset => 0; public override bool IsShareable => false; public override ObjectNodeSection GetSection(NodeFactory factory) => _externalReferences.GetSection(factory); @@ -224,8 +222,6 @@ public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false) byte[] streamBytes = nativeFormatWriter.Save(); - _size = streamBytes.Length; - return new ObjectData(streamBytes, Array.Empty(), 1, new ISymbolDefinitionNode[] { this }); } diff --git a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/MetadataNode.cs b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/MetadataNode.cs index a6c7507fc3f531..bf553285dd08df 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/MetadataNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/MetadataNode.cs @@ -11,12 +11,8 @@ namespace ILCompiler.DependencyAnalysis /// Represents a blob of native metadata describing assemblies, the types in them, and their members. /// The data is used at runtime to e.g. support reflection. /// - public sealed class MetadataNode : ObjectNode, ISymbolDefinitionNode, INodeWithSize + public sealed class MetadataNode : ObjectNode, ISymbolDefinitionNode { - private int? _size; - - int INodeWithSize.Size => _size.Value; - public void AppendMangledName(NameMangler nameMangler, Utf8StringBuilder sb) { sb.Append(nameMangler.CompilationUnitPrefix).Append("__embedded_metadata"u8); @@ -37,7 +33,6 @@ public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false) return new ObjectData(Array.Empty(), Array.Empty(), 1, new ISymbolDefinitionNode[] { this }); byte[] blob = factory.MetadataManager.GetMetadataBlob(factory); - _size = blob.Length; return new ObjectData( blob, diff --git a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ModuleInitializerListNode.cs b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ModuleInitializerListNode.cs index 6ba102b11ee0d3..a9d72a55d787b7 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ModuleInitializerListNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ModuleInitializerListNode.cs @@ -11,11 +11,8 @@ namespace ILCompiler.DependencyAnalysis { - internal sealed class ModuleInitializerListNode : ObjectNode, ISymbolDefinitionNode, INodeWithSize + internal sealed class ModuleInitializerListNode : ObjectNode, ISymbolDefinitionNode { - private int? _size; - - int INodeWithSize.Size => _size.Value; public void AppendMangledName(NameMangler nameMangler, Utf8StringBuilder sb) { @@ -144,8 +141,6 @@ public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false) var result = builder.ToObjectData(); - _size = result.Data.Length; - return result; } diff --git a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/NativeLayoutInfoNode.cs b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/NativeLayoutInfoNode.cs index 3e2b17b3617ecb..8ea88173bfeee9 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/NativeLayoutInfoNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/NativeLayoutInfoNode.cs @@ -12,9 +12,8 @@ namespace ILCompiler.DependencyAnalysis /// /// Native layout info blob. /// - public sealed class NativeLayoutInfoNode : ObjectNode, ISymbolDefinitionNode, INodeWithSize + public sealed class NativeLayoutInfoNode : ObjectNode, ISymbolDefinitionNode { - private int? _size; private ExternalReferencesTableNode _externalReferences; private ExternalReferencesTableNode _staticsReferences; @@ -42,7 +41,6 @@ public void AppendMangledName(NameMangler nameMangler, Utf8StringBuilder sb) { sb.Append(nameMangler.CompilationUnitPrefix).Append("__nativelayoutinfo"u8); } - int INodeWithSize.Size => _size.Value; public int Offset => 0; public override bool IsShareable => false; public override ObjectNodeSection GetSection(NodeFactory factory) => _externalReferences.GetSection(factory); @@ -83,8 +81,6 @@ public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false) SaveNativeLayoutInfoWriter(factory); - _size = _writerSavedBytes.Length; - return new ObjectData(_writerSavedBytes, Array.Empty(), 1, new ISymbolDefinitionNode[] { this }); } diff --git a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/PointerTypeMapNode.cs b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/PointerTypeMapNode.cs index bd54793580f72d..643d22920d17d5 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/PointerTypeMapNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/PointerTypeMapNode.cs @@ -11,9 +11,8 @@ namespace ILCompiler.DependencyAnalysis /// /// Represents a hash table of pointer types generated into the image. /// - internal sealed class PointerTypeMapNode : ObjectNode, ISymbolDefinitionNode, INodeWithSize + internal sealed class PointerTypeMapNode : ObjectNode, ISymbolDefinitionNode { - private int? _size; private readonly ExternalReferencesTableNode _externalReferences; public PointerTypeMapNode(ExternalReferencesTableNode externalReferences) @@ -21,8 +20,6 @@ public PointerTypeMapNode(ExternalReferencesTableNode externalReferences) _externalReferences = externalReferences; } - int INodeWithSize.Size => _size.Value; - public void AppendMangledName(NameMangler nameMangler, Utf8StringBuilder sb) { sb.Append(nameMangler.CompilationUnitPrefix).Append("__ptr_type_map"u8); @@ -61,8 +58,6 @@ public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false) byte[] hashTableBytes = writer.Save(); - _size = hashTableBytes.Length; - return new ObjectData(hashTableBytes, Array.Empty(), 1, new ISymbolDefinitionNode[] { this }); } diff --git a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ProxyTypeMapObjectNode.cs b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ProxyTypeMapObjectNode.cs index cdca8804ba5a80..c5f55d565c1498 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ProxyTypeMapObjectNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ProxyTypeMapObjectNode.cs @@ -13,7 +13,7 @@ namespace ILCompiler.DependencyAnalysis { - internal sealed class ProxyTypeMapObjectNode(ExternalReferencesTableNode externalReferences) : ObjectNode, ISymbolDefinitionNode, INodeWithSize + internal sealed class ProxyTypeMapObjectNode(ExternalReferencesTableNode externalReferences) : ObjectNode, ISymbolDefinitionNode { public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false) { @@ -35,8 +35,6 @@ public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false) byte[] hashTableBytes = writer.Save(); - Size = hashTableBytes.Length; - return new ObjectData(hashTableBytes, Array.Empty(), 1, [this]); } public void AppendMangledName(NameMangler nameMangler, Utf8StringBuilder sb) @@ -44,7 +42,6 @@ public void AppendMangledName(NameMangler nameMangler, Utf8StringBuilder sb) sb.Append(nameMangler.CompilationUnitPrefix).Append("__proxy_type_map__"u8); } - public int Size { get; private set; } public int Offset => 0; public override bool IsShareable => false; public override ObjectNodeSection GetSection(NodeFactory factory) => externalReferences.GetSection(factory); diff --git a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ReadyToRunHeaderNode.cs b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ReadyToRunHeaderNode.cs index bb5f35f4f8fab9..7daf20effa1a22 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ReadyToRunHeaderNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ReadyToRunHeaderNode.cs @@ -75,7 +75,7 @@ public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false) var sectionCountReservation = builder.ReserveShort(); // ReadyToRunHeader.EntrySize - builder.EmitByte((byte)(8 + 2 * factory.Target.PointerSize)); + builder.EmitByte((byte)(8 + factory.Target.PointerSize)); // ReadyToRunHeader.EntryType builder.EmitByte(1); @@ -89,24 +89,10 @@ public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false) builder.EmitInt((int)item.Id); - ModuleInfoFlags flags = 0; - if (item.Node is INodeWithSize) - { - flags |= ModuleInfoFlags.HasEndPointer; - } - builder.EmitInt((int)flags); + builder.EmitReloc((ISymbolNode)item.Node, RelocType.IMAGE_REL_SYMBOL_SIZE); builder.EmitPointerReloc((ISymbolNode)item.Node); - if (!relocsOnly && item.Node is INodeWithSize nodeWithSize) - { - builder.EmitPointerReloc((ISymbolNode)item.Node, nodeWithSize.Size); - } - else - { - builder.EmitZeroPointer(); - } - count++; } builder.EmitShort(sectionCountReservation, checked((short)count)); @@ -117,9 +103,4 @@ public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false) protected internal override int Phase => (int)ObjectNodePhase.Late; public override int ClassCode => 0x7db08464; } - - public interface INodeWithSize - { - public int Size { get; } - } } diff --git a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ReflectionFieldMapNode.cs b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ReflectionFieldMapNode.cs index d8001f0f248250..edad70d6b045b6 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ReflectionFieldMapNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ReflectionFieldMapNode.cs @@ -14,9 +14,8 @@ namespace ILCompiler.DependencyAnalysis /// /// Represents a map between reflection metadata and native field offsets. /// - internal sealed class ReflectionFieldMapNode : ObjectNode, ISymbolDefinitionNode, INodeWithSize + internal sealed class ReflectionFieldMapNode : ObjectNode, ISymbolDefinitionNode { - private int? _size; private ExternalReferencesTableNode _externalReferences; public ReflectionFieldMapNode(ExternalReferencesTableNode externalReferences) @@ -24,8 +23,6 @@ public ReflectionFieldMapNode(ExternalReferencesTableNode externalReferences) _externalReferences = externalReferences; } - int INodeWithSize.Size => _size.Value; - public void AppendMangledName(NameMangler nameMangler, Utf8StringBuilder sb) { sb.Append(nameMangler.CompilationUnitPrefix).Append("__field_to_offset_map"u8); @@ -156,8 +153,6 @@ public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false) byte[] hashTableBytes = writer.Save(); - _size = hashTableBytes.Length; - return new ObjectData(hashTableBytes, Array.Empty(), 1, new ISymbolDefinitionNode[] { this }); } diff --git a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ReflectionInvokeMapNode.cs b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ReflectionInvokeMapNode.cs index 310da2dd794634..7904d205ba0374 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ReflectionInvokeMapNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ReflectionInvokeMapNode.cs @@ -15,9 +15,8 @@ namespace ILCompiler.DependencyAnalysis /// /// Represents a map between reflection metadata and generated method bodies. /// - internal sealed class ReflectionInvokeMapNode : ObjectNode, ISymbolDefinitionNode, INodeWithSize + internal sealed class ReflectionInvokeMapNode : ObjectNode, ISymbolDefinitionNode { - private int? _size; private ExternalReferencesTableNode _externalReferences; public ReflectionInvokeMapNode(ExternalReferencesTableNode externalReferences) @@ -25,8 +24,6 @@ public ReflectionInvokeMapNode(ExternalReferencesTableNode externalReferences) _externalReferences = externalReferences; } - int INodeWithSize.Size => _size.Value; - public void AppendMangledName(NameMangler nameMangler, Utf8StringBuilder sb) { sb.Append(nameMangler.CompilationUnitPrefix).Append("__method_to_entrypoint_map"u8); @@ -220,8 +217,6 @@ public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false) byte[] hashTableBytes = writer.Save(); - _size = hashTableBytes.Length; - return new ObjectData(hashTableBytes, Array.Empty(), 1, new ISymbolDefinitionNode[] { this }); } diff --git a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ReflectionVirtualInvokeMapNode.cs b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ReflectionVirtualInvokeMapNode.cs index 13385c60ff6a25..b55ca1bdacaad4 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ReflectionVirtualInvokeMapNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ReflectionVirtualInvokeMapNode.cs @@ -17,9 +17,8 @@ namespace ILCompiler.DependencyAnalysis /// Represents a map containing the necessary information needed to resolve /// a virtual method target called through reflection. /// - internal sealed class ReflectionVirtualInvokeMapNode : ObjectNode, ISymbolDefinitionNode, INodeWithSize + internal sealed class ReflectionVirtualInvokeMapNode : ObjectNode, ISymbolDefinitionNode { - private int? _size; private ExternalReferencesTableNode _externalReferences; public ReflectionVirtualInvokeMapNode(ExternalReferencesTableNode externalReferences) @@ -32,7 +31,6 @@ public void AppendMangledName(NameMangler nameMangler, Utf8StringBuilder sb) sb.Append(nameMangler.CompilationUnitPrefix).Append("__VirtualInvokeMap"u8); } - int INodeWithSize.Size => _size.Value; public int Offset => 0; public override bool IsShareable => false; public override ObjectNodeSection GetSection(NodeFactory factory) => _externalReferences.GetSection(factory); @@ -206,8 +204,6 @@ public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false) byte[] hashTableBytes = writer.Save(); - _size = hashTableBytes.Length; - return new ObjectData(hashTableBytes, Array.Empty(), 1, new ISymbolDefinitionNode[] { this }); } diff --git a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ResourceDataNode.cs b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ResourceDataNode.cs index 3193d1f8368a72..20aa8d372987dd 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ResourceDataNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ResourceDataNode.cs @@ -18,9 +18,8 @@ namespace ILCompiler.DependencyAnalysis /// Resources are simply copied from the inputs and concatenated into this blob. /// All format information is provided by /// - internal sealed class ResourceDataNode : ObjectNode, ISymbolDefinitionNode, INodeWithSize + internal sealed class ResourceDataNode : ObjectNode, ISymbolDefinitionNode { - private int? _size; /// /// Resource index information generated while extracting resources into the data blob @@ -28,8 +27,6 @@ internal sealed class ResourceDataNode : ObjectNode, ISymbolDefinitionNode, INod private List _indexData; private int _totalLength; - int INodeWithSize.Size => _size.Value; - public override bool IsShareable => false; public override ObjectNodeSection GetSection(NodeFactory factory) => ObjectNodeSection.ReadOnlyDataSection; @@ -135,7 +132,6 @@ private byte[] GenerateResourceBlob(NodeFactory factory) currentPos += resourceData.Length; } - _size = resourceBlob.Length; return resourceBlob; } diff --git a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ResourceIndexNode.cs b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ResourceIndexNode.cs index 5909fe3f20bfa2..75fb332864684f 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ResourceIndexNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ResourceIndexNode.cs @@ -14,7 +14,7 @@ namespace ILCompiler.DependencyAnalysis /// /// Represents a hash table of resources within the resource blob in the image. /// - internal sealed class ResourceIndexNode : ObjectNode, ISymbolDefinitionNode, INodeWithSize + internal sealed class ResourceIndexNode : ObjectNode, ISymbolDefinitionNode { private ResourceDataNode _resourceDataNode; @@ -23,10 +23,6 @@ public ResourceIndexNode(ResourceDataNode resourceDataNode) _resourceDataNode = resourceDataNode; } - private int? _size; - - int INodeWithSize.Size => _size.Value; - public override bool IsShareable => false; public override ObjectNodeSection GetSection(NodeFactory factory) => ObjectNodeSection.ReadOnlyDataSection; @@ -104,7 +100,6 @@ private byte[] GenerateIndexBlob(NodeFactory factory) } byte[] blob = nativeWriter.Save(); - _size = blob.Length; return blob; } diff --git a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/StackTraceDocumentsNode.cs b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/StackTraceDocumentsNode.cs index a307c1f0811a02..d78fb125fd4480 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/StackTraceDocumentsNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/StackTraceDocumentsNode.cs @@ -12,18 +12,16 @@ namespace ILCompiler.DependencyAnalysis /// /// Contains information about source files in this compilation. /// - public sealed class StackTraceDocumentsNode : ObjectNode, ISymbolDefinitionNode, INodeWithSize + public sealed class StackTraceDocumentsNode : ObjectNode, ISymbolDefinitionNode { private Dictionary _documentToIndex = new Dictionary(StringComparer.Ordinal); private List _documents = new List(); - private int? _size; public void AppendMangledName(NameMangler nameMangler, Utf8StringBuilder sb) { sb.Append(nameMangler.CompilationUnitPrefix).Append("__stacktrace_documents"u8); } - int INodeWithSize.Size => _size.Value; public int Offset => 0; public override bool IsShareable => false; @@ -85,8 +83,6 @@ public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false) bw.Write((byte)0); } - _size = checked((int)ms.Length); - return new ObjectData(ms.ToArray(), Array.Empty(), 1, new ISymbolDefinitionNode[] { this }); } diff --git a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/StackTraceLineNumbersNode.cs b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/StackTraceLineNumbersNode.cs index 2d4ca78b1f40fd..aa8aa3d814b5b9 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/StackTraceLineNumbersNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/StackTraceLineNumbersNode.cs @@ -16,9 +16,8 @@ namespace ILCompiler.DependencyAnalysis /// /// Contains information about mapping native code offsets to line numbers. /// - public sealed class StackTraceLineNumbersNode : ObjectNode, ISymbolDefinitionNode, INodeWithSize + public sealed class StackTraceLineNumbersNode : ObjectNode, ISymbolDefinitionNode { - private int? _size; private readonly ExternalReferencesTableNode _externalReferences; private readonly StackTraceDocumentsNode _documents; @@ -33,7 +32,6 @@ public void AppendMangledName(NameMangler nameMangler, Utf8StringBuilder sb) sb.Append(nameMangler.CompilationUnitPrefix).Append("__stacktrace_line_numbers"u8); } - int INodeWithSize.Size => _size.Value; public int Offset => 0; public override bool IsShareable => false; public override ObjectNodeSection GetSection(NodeFactory factory) => _externalReferences.GetSection(factory); @@ -137,8 +135,6 @@ static Vertex CreateLineNumbersBlob(NativeWriter writer, StackTraceDocumentsNode byte[] streamBytes = nativeWriter.Save(); - _size = streamBytes.Length; - return new ObjectData(streamBytes, Array.Empty(), 1, new ISymbolDefinitionNode[] { this }); } diff --git a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/StackTraceMethodMappingNode.cs b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/StackTraceMethodMappingNode.cs index f576cdd1917db0..2e94b1cddcf8a8 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/StackTraceMethodMappingNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/StackTraceMethodMappingNode.cs @@ -15,11 +15,8 @@ namespace ILCompiler.DependencyAnalysis /// /// BlobIdStackTraceMethodRvaToTokenMapping - list of 8-byte pairs (method RVA-method token) /// - public sealed class StackTraceMethodMappingNode : ObjectNode, ISymbolDefinitionNode, INodeWithSize + public sealed class StackTraceMethodMappingNode : ObjectNode, ISymbolDefinitionNode { - private int? _size; - - int INodeWithSize.Size => _size.Value; public override bool IsShareable => false; @@ -131,7 +128,6 @@ public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false) objData.EmitReloc(factory.MethodEntrypoint(entry.Method), RelocType.IMAGE_REL_BASED_RELPTR32); } - _size = objData.CountBytes; return objData.ToObjectData(); } } diff --git a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/StaticsInfoHashtableNode.cs b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/StaticsInfoHashtableNode.cs index befd99b90945ad..5b7064d09d3b9d 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/StaticsInfoHashtableNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/StaticsInfoHashtableNode.cs @@ -13,9 +13,8 @@ namespace ILCompiler.DependencyAnalysis /// /// Represents a hashtable with information about all statics regions for all compiled generic types. /// - internal sealed class StaticsInfoHashtableNode : ObjectNode, ISymbolDefinitionNode, INodeWithSize + internal sealed class StaticsInfoHashtableNode : ObjectNode, ISymbolDefinitionNode { - private int? _size; private ExternalReferencesTableNode _externalReferences; private ExternalReferencesTableNode _nativeStaticsReferences; @@ -25,8 +24,6 @@ public StaticsInfoHashtableNode(ExternalReferencesTableNode externalReferences, _nativeStaticsReferences = nativeStaticsReferences; } - int INodeWithSize.Size => _size.Value; - public void AppendMangledName(NameMangler nameMangler, Utf8StringBuilder sb) { sb.Append(nameMangler.CompilationUnitPrefix).Append("_StaticsInfoHashtableNode"u8); @@ -107,8 +104,6 @@ public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false) byte[] hashTableBytes = writer.Save(); - _size = hashTableBytes.Length; - return new ObjectData(hashTableBytes, Array.Empty(), 1, new ISymbolDefinitionNode[] { this }); } diff --git a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/StructMarshallingStubMapNode.cs b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/StructMarshallingStubMapNode.cs index 96d692240de402..d38d2d08581618 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/StructMarshallingStubMapNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/StructMarshallingStubMapNode.cs @@ -14,9 +14,8 @@ namespace ILCompiler.DependencyAnalysis /// /// Represents a hash table of struct marshalling stub types generated into the image. /// - internal sealed class StructMarshallingStubMapNode : ObjectNode, ISymbolDefinitionNode, INodeWithSize + internal sealed class StructMarshallingStubMapNode : ObjectNode, ISymbolDefinitionNode { - private int? _size; private readonly ExternalReferencesTableNode _externalReferences; private readonly InteropStateManager _interopStateManager; @@ -26,8 +25,6 @@ public StructMarshallingStubMapNode(ExternalReferencesTableNode externalReferenc _interopStateManager = interopStateManager; } - int INodeWithSize.Size => _size.Value; - public void AppendMangledName(NameMangler nameMangler, Utf8StringBuilder sb) { sb.Append(nameMangler.CompilationUnitPrefix).Append("__struct_marshalling_stub_map"u8); @@ -123,8 +120,6 @@ public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false) byte[] hashTableBytes = writer.Save(); - _size = hashTableBytes.Length; - return new ObjectData(hashTableBytes, Array.Empty(), 1, new ISymbolDefinitionNode[] { this }); } diff --git a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/TypeMetadataMapNode.cs b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/TypeMetadataMapNode.cs index adc76085ea897c..5753c82fbe8980 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/TypeMetadataMapNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/TypeMetadataMapNode.cs @@ -11,9 +11,8 @@ namespace ILCompiler.DependencyAnalysis /// /// Represents a map between EETypes and metadata records within the . /// - public sealed class TypeMetadataMapNode : ObjectNode, ISymbolDefinitionNode, INodeWithSize + public sealed class TypeMetadataMapNode : ObjectNode, ISymbolDefinitionNode { - private int? _size; private ExternalReferencesTableNode _externalReferences; public TypeMetadataMapNode(ExternalReferencesTableNode externalReferences) @@ -21,8 +20,6 @@ public TypeMetadataMapNode(ExternalReferencesTableNode externalReferences) _externalReferences = externalReferences; } - int INodeWithSize.Size => _size.Value; - public void AppendMangledName(NameMangler nameMangler, Utf8StringBuilder sb) { sb.Append(nameMangler.CompilationUnitPrefix).Append("__type_to_metadata_map"u8); @@ -69,8 +66,6 @@ public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false) byte[] hashTableBytes = writer.Save(); - _size = hashTableBytes.Length; - return new ObjectData(hashTableBytes, Array.Empty(), 1, new ISymbolDefinitionNode[] { this }); }