From 72ccfc4545ced3f70d13d36d80adb9cc6100c3d7 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 9 Feb 2026 22:10:46 +0000 Subject: [PATCH 01/10] Initial plan From 44ba19f57a3fdc55afcfeef838b53cfd977e5bd1 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 9 Feb 2026 22:18:09 +0000 Subject: [PATCH 02/10] Remove INodeWithSize Size property and replace with IMAGE_REL_SYMBOL_SIZE reloc Co-authored-by: jkoritzinsky <1571408+jkoritzinsky@users.noreply.github.com> --- .../Compiler/DependencyAnalysis/ArrayMapNode.cs | 3 --- .../DependencyAnalysis/ArrayOfEmbeddedDataNode.cs | 3 --- .../DependencyAnalysis/ArrayOfFrozenObjectsNode.cs | 3 --- .../Compiler/DependencyAnalysis/ByRefTypeMapNode.cs | 3 --- .../DependencyAnalysis/ClassConstructorContextMap.cs | 3 --- .../Compiler/DependencyAnalysis/DehydratedDataNode.cs | 3 --- .../DependencyAnalysis/DelegateMarshallingStubMapNode.cs | 3 --- .../DependencyAnalysis/ExactMethodInstantiationsNode.cs | 3 --- .../DependencyAnalysis/ExternalReferencesTableNode.cs | 3 --- .../DependencyAnalysis/FunctionPointerMapNode.cs | 3 --- .../DependencyAnalysis/GenericMethodsHashtableNode.cs | 3 --- .../DependencyAnalysis/GenericMethodsTemplateMap.cs | 3 --- .../DependencyAnalysis/GenericTypesHashtableNode.cs | 3 --- .../DependencyAnalysis/GenericTypesTemplateMap.cs | 3 --- .../DependencyAnalysis/GenericVirtualMethodTableNode.cs | 3 --- .../InterfaceGenericVirtualMethodTableNode.cs | 3 --- .../Compiler/DependencyAnalysis/MetadataNode.cs | 5 ----- .../DependencyAnalysis/ModuleInitializerListNode.cs | 3 --- .../Compiler/DependencyAnalysis/NativeLayoutInfoNode.cs | 3 --- .../Compiler/DependencyAnalysis/PointerTypeMapNode.cs | 3 --- .../Compiler/DependencyAnalysis/ReadyToRunHeaderNode.cs | 9 ++++++--- .../DependencyAnalysis/ReflectionFieldMapNode.cs | 3 --- .../DependencyAnalysis/ReflectionInvokeMapNode.cs | 3 --- .../DependencyAnalysis/ReflectionVirtualInvokeMapNode.cs | 3 --- .../Compiler/DependencyAnalysis/ResourceDataNode.cs | 3 --- .../Compiler/DependencyAnalysis/ResourceIndexNode.cs | 3 --- .../DependencyAnalysis/StackTraceDocumentsNode.cs | 3 --- .../DependencyAnalysis/StackTraceLineNumbersNode.cs | 3 --- .../DependencyAnalysis/StackTraceMethodMappingNode.cs | 3 --- .../DependencyAnalysis/StaticsInfoHashtableNode.cs | 3 --- .../DependencyAnalysis/StructMarshallingStubMapNode.cs | 3 --- .../Compiler/DependencyAnalysis/TypeMetadataMapNode.cs | 3 --- 32 files changed, 6 insertions(+), 98 deletions(-) diff --git a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ArrayMapNode.cs b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ArrayMapNode.cs index 6ae20dfaff9083..25cbb5f3837a9e 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ArrayMapNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ArrayMapNode.cs @@ -15,14 +15,12 @@ namespace ILCompiler.DependencyAnalysis internal sealed class ArrayMapNode : ObjectNode, ISymbolDefinitionNode, INodeWithSize { 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) { @@ -66,7 +64,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..6c2b786cf7e468 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ArrayOfEmbeddedDataNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ArrayOfEmbeddedDataNode.cs @@ -13,12 +13,10 @@ namespace ILCompiler.DependencyAnalysis public class ArrayOfEmbeddedDataNode : EmbeddedDataContainerNode, INodeWithSize 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) { @@ -85,7 +83,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..2953c895a6f0e9 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ArrayOfFrozenObjectsNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ArrayOfFrozenObjectsNode.cs @@ -12,8 +12,6 @@ namespace ILCompiler.DependencyAnalysis { public class ArrayOfFrozenObjectsNode : DehydratableObjectNode, ISymbolDefinitionNode, INodeWithSize { - private int? _size; - int INodeWithSize.Size => _size.Value; public void AppendMangledName(NameMangler nameMangler, Utf8StringBuilder sb) => sb.Append(nameMangler.CompilationUnitPrefix).Append("__FrozenSegmentStart"u8); @@ -57,7 +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..eb3947a69b637f 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ByRefTypeMapNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ByRefTypeMapNode.cs @@ -13,7 +13,6 @@ namespace ILCompiler.DependencyAnalysis /// internal sealed class ByRefTypeMapNode : ObjectNode, ISymbolDefinitionNode, INodeWithSize { - private int? _size; private readonly ExternalReferencesTableNode _externalReferences; public ByRefTypeMapNode(ExternalReferencesTableNode externalReferences) @@ -21,7 +20,6 @@ public ByRefTypeMapNode(ExternalReferencesTableNode externalReferences) _externalReferences = externalReferences; } - int INodeWithSize.Size => _size.Value; public void AppendMangledName(NameMangler nameMangler, Utf8StringBuilder sb) { @@ -61,7 +59,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..7f4462eafa7580 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ClassConstructorContextMap.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ClassConstructorContextMap.cs @@ -13,7 +13,6 @@ namespace ILCompiler.DependencyAnalysis { internal sealed class ClassConstructorContextMap : ObjectNode, ISymbolDefinitionNode, INodeWithSize { - private int? _size; private ExternalReferencesTableNode _externalReferences; public ClassConstructorContextMap(ExternalReferencesTableNode externalReferences) @@ -21,7 +20,6 @@ public ClassConstructorContextMap(ExternalReferencesTableNode externalReferences _externalReferences = externalReferences; } - int INodeWithSize.Size => _size.Value; public void AppendMangledName(NameMangler nameMangler, Utf8StringBuilder sb) { @@ -73,7 +71,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..72c0aed9eafb8e 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/DehydratedDataNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/DehydratedDataNode.cs @@ -31,7 +31,6 @@ namespace ILCompiler.DependencyAnalysis /// internal sealed class DehydratedDataNode : ObjectNode, ISymbolDefinitionNode, INodeWithSize { - private int? _size; public override bool IsShareable => false; @@ -43,7 +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) { @@ -309,7 +307,6 @@ public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false) dehydratedSegmentPosition += o.Data.Length; } - _size = builder.CountBytes; // 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..016672f36f4b28 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/DelegateMarshallingStubMapNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/DelegateMarshallingStubMapNode.cs @@ -14,7 +14,6 @@ namespace ILCompiler.DependencyAnalysis /// internal sealed class DelegateMarshallingStubMapNode : ObjectNode, ISymbolDefinitionNode, INodeWithSize { - private int? _size; private readonly ExternalReferencesTableNode _externalReferences; private readonly InteropStateManager _interopStateManager; @@ -24,7 +23,6 @@ public DelegateMarshallingStubMapNode(ExternalReferencesTableNode externalRefere _interopStateManager = interopStateManager; } - int INodeWithSize.Size => _size.Value; public void AppendMangledName(NameMangler nameMangler, Utf8StringBuilder sb) { @@ -70,7 +68,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..5d1c906f0b6f86 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ExactMethodInstantiationsNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ExactMethodInstantiationsNode.cs @@ -16,7 +16,6 @@ namespace ILCompiler.DependencyAnalysis /// public sealed class ExactMethodInstantiationsNode : ObjectNode, ISymbolDefinitionNode, INodeWithSize { - 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); @@ -98,7 +96,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..fb9a9dd06ba2fc 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ExternalReferencesTableNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ExternalReferencesTableNode.cs @@ -15,7 +15,6 @@ namespace ILCompiler.DependencyAnalysis /// public sealed class ExternalReferencesTableNode : ObjectNode, ISymbolDefinitionNode, INodeWithSize { - private int? _size; private readonly string _blobName; private readonly NodeFactory _nodeFactory; @@ -28,7 +27,6 @@ public ExternalReferencesTableNode(string blobName, NodeFactory nodeFactory) _nodeFactory = nodeFactory; } - int INodeWithSize.Size => _size.Value; public void AppendMangledName(NameMangler nameMangler, Utf8StringBuilder sb) { @@ -102,7 +100,6 @@ public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false) } } - _size = builder.CountBytes; builder.AddSymbol(this); 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..015d0fabfc4487 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/FunctionPointerMapNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/FunctionPointerMapNode.cs @@ -14,7 +14,6 @@ namespace ILCompiler.DependencyAnalysis /// internal sealed class FunctionPointerMapNode : ObjectNode, ISymbolDefinitionNode, INodeWithSize { - private int? _size; private readonly ExternalReferencesTableNode _externalReferences; public FunctionPointerMapNode(ExternalReferencesTableNode externalReferences) @@ -22,7 +21,6 @@ public FunctionPointerMapNode(ExternalReferencesTableNode externalReferences) _externalReferences = externalReferences; } - int INodeWithSize.Size => _size.Value; public void AppendMangledName(NameMangler nameMangler, Utf8StringBuilder sb) { @@ -70,7 +68,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..09a4bd868608aa 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/GenericMethodsHashtableNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/GenericMethodsHashtableNode.cs @@ -16,7 +16,6 @@ namespace ILCompiler.DependencyAnalysis /// public sealed class GenericMethodsHashtableNode : ObjectNode, ISymbolDefinitionNode, INodeWithSize { - 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,7 +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..53b7aba11f6d88 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/GenericMethodsTemplateMap.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/GenericMethodsTemplateMap.cs @@ -15,7 +15,6 @@ namespace ILCompiler.DependencyAnalysis /// public sealed class GenericMethodsTemplateMap : ObjectNode, ISymbolDefinitionNode, INodeWithSize { - 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); @@ -72,7 +70,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..8681f2f17c6c14 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/GenericTypesHashtableNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/GenericTypesHashtableNode.cs @@ -14,7 +14,6 @@ namespace ILCompiler.DependencyAnalysis /// public sealed class GenericTypesHashtableNode : ObjectNode, ISymbolDefinitionNode, INodeWithSize { - 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,7 +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..56be4d11cd5f0d 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/GenericTypesTemplateMap.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/GenericTypesTemplateMap.cs @@ -15,7 +15,6 @@ namespace ILCompiler.DependencyAnalysis /// public sealed class GenericTypesTemplateMap : ObjectNode, ISymbolDefinitionNode, INodeWithSize { - 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,7 +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..6d54fa35b6643f 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/GenericVirtualMethodTableNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/GenericVirtualMethodTableNode.cs @@ -16,7 +16,6 @@ namespace ILCompiler.DependencyAnalysis /// public sealed class GenericVirtualMethodTableNode : ObjectNode, ISymbolDefinitionNode, INodeWithSize { - 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,7 +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..2dda2342dc2fa4 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/InterfaceGenericVirtualMethodTableNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/InterfaceGenericVirtualMethodTableNode.cs @@ -17,7 +17,6 @@ namespace ILCompiler.DependencyAnalysis /// public sealed class InterfaceGenericVirtualMethodTableNode : ObjectNode, ISymbolDefinitionNode, INodeWithSize { - 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,7 +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..05328f7083efd3 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/MetadataNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/MetadataNode.cs @@ -13,10 +13,6 @@ namespace ILCompiler.DependencyAnalysis /// public sealed class MetadataNode : ObjectNode, ISymbolDefinitionNode, INodeWithSize { - 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..351b7a0176ae02 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ModuleInitializerListNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ModuleInitializerListNode.cs @@ -13,9 +13,7 @@ namespace ILCompiler.DependencyAnalysis { internal sealed class ModuleInitializerListNode : ObjectNode, ISymbolDefinitionNode, INodeWithSize { - private int? _size; - int INodeWithSize.Size => _size.Value; public void AppendMangledName(NameMangler nameMangler, Utf8StringBuilder sb) { @@ -144,7 +142,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..4cc21b3ca00291 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/NativeLayoutInfoNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/NativeLayoutInfoNode.cs @@ -14,7 +14,6 @@ namespace ILCompiler.DependencyAnalysis /// public sealed class NativeLayoutInfoNode : ObjectNode, ISymbolDefinitionNode, INodeWithSize { - 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,7 +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..03925591d801c7 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/PointerTypeMapNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/PointerTypeMapNode.cs @@ -13,7 +13,6 @@ namespace ILCompiler.DependencyAnalysis /// internal sealed class PointerTypeMapNode : ObjectNode, ISymbolDefinitionNode, INodeWithSize { - private int? _size; private readonly ExternalReferencesTableNode _externalReferences; public PointerTypeMapNode(ExternalReferencesTableNode externalReferences) @@ -21,7 +20,6 @@ public PointerTypeMapNode(ExternalReferencesTableNode externalReferences) _externalReferences = externalReferences; } - int INodeWithSize.Size => _size.Value; public void AppendMangledName(NameMangler nameMangler, Utf8StringBuilder sb) { @@ -61,7 +59,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/ReadyToRunHeaderNode.cs b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ReadyToRunHeaderNode.cs index bb5f35f4f8fab9..41ca9f3cb1cab1 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ReadyToRunHeaderNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ReadyToRunHeaderNode.cs @@ -98,9 +98,9 @@ public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false) builder.EmitPointerReloc((ISymbolNode)item.Node); - if (!relocsOnly && item.Node is INodeWithSize nodeWithSize) + if (item.Node is INodeWithSize) { - builder.EmitPointerReloc((ISymbolNode)item.Node, nodeWithSize.Size); + builder.EmitReloc((ISymbolNode)item.Node, RelocType.IMAGE_REL_SYMBOL_SIZE); } else { @@ -118,8 +118,11 @@ public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false) public override int ClassCode => 0x7db08464; } + /// + /// Marker interface for nodes that should have their size emitted in the ReadyToRun header + /// using IMAGE_REL_SYMBOL_SIZE relocation. + /// 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..12956835409c65 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ReflectionFieldMapNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ReflectionFieldMapNode.cs @@ -16,7 +16,6 @@ namespace ILCompiler.DependencyAnalysis /// internal sealed class ReflectionFieldMapNode : ObjectNode, ISymbolDefinitionNode, INodeWithSize { - private int? _size; private ExternalReferencesTableNode _externalReferences; public ReflectionFieldMapNode(ExternalReferencesTableNode externalReferences) @@ -24,7 +23,6 @@ public ReflectionFieldMapNode(ExternalReferencesTableNode externalReferences) _externalReferences = externalReferences; } - int INodeWithSize.Size => _size.Value; public void AppendMangledName(NameMangler nameMangler, Utf8StringBuilder sb) { @@ -156,7 +154,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..0872c28cfdb893 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ReflectionInvokeMapNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ReflectionInvokeMapNode.cs @@ -17,7 +17,6 @@ namespace ILCompiler.DependencyAnalysis /// internal sealed class ReflectionInvokeMapNode : ObjectNode, ISymbolDefinitionNode, INodeWithSize { - private int? _size; private ExternalReferencesTableNode _externalReferences; public ReflectionInvokeMapNode(ExternalReferencesTableNode externalReferences) @@ -25,7 +24,6 @@ public ReflectionInvokeMapNode(ExternalReferencesTableNode externalReferences) _externalReferences = externalReferences; } - int INodeWithSize.Size => _size.Value; public void AppendMangledName(NameMangler nameMangler, Utf8StringBuilder sb) { @@ -220,7 +218,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..31ac2cf95ff392 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ReflectionVirtualInvokeMapNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ReflectionVirtualInvokeMapNode.cs @@ -19,7 +19,6 @@ namespace ILCompiler.DependencyAnalysis /// internal sealed class ReflectionVirtualInvokeMapNode : ObjectNode, ISymbolDefinitionNode, INodeWithSize { - 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,7 +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..6636c778ffab11 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ResourceDataNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ResourceDataNode.cs @@ -20,7 +20,6 @@ namespace ILCompiler.DependencyAnalysis /// internal sealed class ResourceDataNode : ObjectNode, ISymbolDefinitionNode, INodeWithSize { - private int? _size; /// /// Resource index information generated while extracting resources into the data blob @@ -28,7 +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; @@ -135,7 +133,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..fca7338b9ab60a 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ResourceIndexNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ResourceIndexNode.cs @@ -23,9 +23,7 @@ public ResourceIndexNode(ResourceDataNode resourceDataNode) _resourceDataNode = resourceDataNode; } - private int? _size; - int INodeWithSize.Size => _size.Value; public override bool IsShareable => false; @@ -104,7 +102,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..e3eeb849f34103 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/StackTraceDocumentsNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/StackTraceDocumentsNode.cs @@ -16,14 +16,12 @@ 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,7 +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..2ead81b2d643b8 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/StackTraceLineNumbersNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/StackTraceLineNumbersNode.cs @@ -18,7 +18,6 @@ namespace ILCompiler.DependencyAnalysis /// public sealed class StackTraceLineNumbersNode : ObjectNode, ISymbolDefinitionNode, INodeWithSize { - 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,7 +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..c6621436a30880 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/StackTraceMethodMappingNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/StackTraceMethodMappingNode.cs @@ -17,9 +17,7 @@ namespace ILCompiler.DependencyAnalysis /// public sealed class StackTraceMethodMappingNode : ObjectNode, ISymbolDefinitionNode, INodeWithSize { - private int? _size; - int INodeWithSize.Size => _size.Value; public override bool IsShareable => false; @@ -131,7 +129,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..abd89e134e2504 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/StaticsInfoHashtableNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/StaticsInfoHashtableNode.cs @@ -15,7 +15,6 @@ namespace ILCompiler.DependencyAnalysis /// internal sealed class StaticsInfoHashtableNode : ObjectNode, ISymbolDefinitionNode, INodeWithSize { - private int? _size; private ExternalReferencesTableNode _externalReferences; private ExternalReferencesTableNode _nativeStaticsReferences; @@ -25,7 +24,6 @@ public StaticsInfoHashtableNode(ExternalReferencesTableNode externalReferences, _nativeStaticsReferences = nativeStaticsReferences; } - int INodeWithSize.Size => _size.Value; public void AppendMangledName(NameMangler nameMangler, Utf8StringBuilder sb) { @@ -107,7 +105,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..4eadcd0a2ca373 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/StructMarshallingStubMapNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/StructMarshallingStubMapNode.cs @@ -16,7 +16,6 @@ namespace ILCompiler.DependencyAnalysis /// internal sealed class StructMarshallingStubMapNode : ObjectNode, ISymbolDefinitionNode, INodeWithSize { - private int? _size; private readonly ExternalReferencesTableNode _externalReferences; private readonly InteropStateManager _interopStateManager; @@ -26,7 +25,6 @@ public StructMarshallingStubMapNode(ExternalReferencesTableNode externalReferenc _interopStateManager = interopStateManager; } - int INodeWithSize.Size => _size.Value; public void AppendMangledName(NameMangler nameMangler, Utf8StringBuilder sb) { @@ -123,7 +121,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..6837ae9c784134 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/TypeMetadataMapNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/TypeMetadataMapNode.cs @@ -13,7 +13,6 @@ namespace ILCompiler.DependencyAnalysis /// public sealed class TypeMetadataMapNode : ObjectNode, ISymbolDefinitionNode, INodeWithSize { - private int? _size; private ExternalReferencesTableNode _externalReferences; public TypeMetadataMapNode(ExternalReferencesTableNode externalReferences) @@ -21,7 +20,6 @@ public TypeMetadataMapNode(ExternalReferencesTableNode externalReferences) _externalReferences = externalReferences; } - int INodeWithSize.Size => _size.Value; public void AppendMangledName(NameMangler nameMangler, Utf8StringBuilder sb) { @@ -69,7 +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 }); } From 5abdbe03e622ec0e827e3bafbcbe9bcd4984f0c7 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 9 Feb 2026 22:26:21 +0000 Subject: [PATCH 03/10] Enhanced INodeWithSize documentation and completed implementation Co-authored-by: jkoritzinsky <1571408+jkoritzinsky@users.noreply.github.com> --- .../Compiler/DependencyAnalysis/ReadyToRunHeaderNode.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) 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 41ca9f3cb1cab1..8b9144c1ccd9f8 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ReadyToRunHeaderNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ReadyToRunHeaderNode.cs @@ -120,7 +120,9 @@ public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false) /// /// Marker interface for nodes that should have their size emitted in the ReadyToRun header - /// using IMAGE_REL_SYMBOL_SIZE relocation. + /// using IMAGE_REL_SYMBOL_SIZE relocation. The object writer will resolve the symbol size + /// at link time. Only nodes that represent contiguous data regions with well-defined boundaries + /// should implement this interface. /// public interface INodeWithSize { From 68bf54c7141162113b737eb0665682e229833aa3 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 9 Feb 2026 22:55:12 +0000 Subject: [PATCH 04/10] Remove INodeWithSize interface and always emit IMAGE_REL_SYMBOL_SIZE Co-authored-by: jkoritzinsky <1571408+jkoritzinsky@users.noreply.github.com> --- .../DependencyAnalysis/ArrayMapNode.cs | 2 +- .../ArrayOfEmbeddedDataNode.cs | 2 +- .../ArrayOfFrozenObjectsNode.cs | 2 +- .../DependencyAnalysis/ByRefTypeMapNode.cs | 2 +- .../ClassConstructorContextMap.cs | 2 +- .../DependencyAnalysis/DehydratedDataNode.cs | 2 +- .../DelegateMarshallingStubMapNode.cs | 2 +- .../ExactMethodInstantiationsNode.cs | 2 +- .../ExternalReferencesTableNode.cs | 2 +- .../ExternalTypeMapObjectNode.cs | 2 +- .../FunctionPointerMapNode.cs | 2 +- .../GenericMethodsHashtableNode.cs | 2 +- .../GenericMethodsTemplateMap.cs | 2 +- .../GenericTypesHashtableNode.cs | 2 +- .../GenericTypesTemplateMap.cs | 2 +- .../GenericVirtualMethodTableNode.cs | 2 +- .../InterfaceGenericVirtualMethodTableNode.cs | 2 +- .../DependencyAnalysis/MetadataNode.cs | 2 +- .../ModuleInitializerListNode.cs | 2 +- .../NativeLayoutInfoNode.cs | 2 +- .../DependencyAnalysis/PointerTypeMapNode.cs | 2 +- .../ProxyTypeMapObjectNode.cs | 2 +- .../ReadyToRunHeaderNode.cs | 25 ++----------------- .../ReflectionFieldMapNode.cs | 2 +- .../ReflectionInvokeMapNode.cs | 2 +- .../ReflectionVirtualInvokeMapNode.cs | 2 +- .../DependencyAnalysis/ResourceDataNode.cs | 2 +- .../DependencyAnalysis/ResourceIndexNode.cs | 2 +- .../StackTraceDocumentsNode.cs | 2 +- .../StackTraceLineNumbersNode.cs | 2 +- .../StackTraceMethodMappingNode.cs | 2 +- .../StaticsInfoHashtableNode.cs | 2 +- .../StructMarshallingStubMapNode.cs | 2 +- .../DependencyAnalysis/TypeMetadataMapNode.cs | 2 +- 34 files changed, 35 insertions(+), 56 deletions(-) diff --git a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ArrayMapNode.cs b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ArrayMapNode.cs index 25cbb5f3837a9e..fe71d0d2b0fca8 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ArrayMapNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ArrayMapNode.cs @@ -12,7 +12,7 @@ namespace ILCompiler.DependencyAnalysis /// /// 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; 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 6c2b786cf7e468..9731c7d756d2c0 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ArrayOfEmbeddedDataNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ArrayOfEmbeddedDataNode.cs @@ -10,7 +10,7 @@ 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 HashSet _nestedNodes = new HashSet(); 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 2953c895a6f0e9..bae89e3a7c73df 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ArrayOfFrozenObjectsNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ArrayOfFrozenObjectsNode.cs @@ -10,7 +10,7 @@ namespace ILCompiler.DependencyAnalysis { - public class ArrayOfFrozenObjectsNode : DehydratableObjectNode, ISymbolDefinitionNode, INodeWithSize + public class ArrayOfFrozenObjectsNode : DehydratableObjectNode, ISymbolDefinitionNode { public void AppendMangledName(NameMangler nameMangler, Utf8StringBuilder sb) 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 eb3947a69b637f..bbf51fe829127a 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ByRefTypeMapNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ByRefTypeMapNode.cs @@ -11,7 +11,7 @@ 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 readonly ExternalReferencesTableNode _externalReferences; 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 7f4462eafa7580..bd0cc6aeb40ec3 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ClassConstructorContextMap.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ClassConstructorContextMap.cs @@ -11,7 +11,7 @@ namespace ILCompiler.DependencyAnalysis { - internal sealed class ClassConstructorContextMap : ObjectNode, ISymbolDefinitionNode, INodeWithSize + internal sealed class ClassConstructorContextMap : ObjectNode, ISymbolDefinitionNode { private ExternalReferencesTableNode _externalReferences; 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 72c0aed9eafb8e..176a7f58ab32b8 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/DehydratedDataNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/DehydratedDataNode.cs @@ -29,7 +29,7 @@ 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 { public override bool IsShareable => false; 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 016672f36f4b28..b4151016b3649d 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/DelegateMarshallingStubMapNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/DelegateMarshallingStubMapNode.cs @@ -12,7 +12,7 @@ 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 readonly ExternalReferencesTableNode _externalReferences; private readonly InteropStateManager _interopStateManager; 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 5d1c906f0b6f86..8cac6a7b40d0a6 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ExactMethodInstantiationsNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ExactMethodInstantiationsNode.cs @@ -14,7 +14,7 @@ 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 ExternalReferencesTableNode _externalReferences; 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 fb9a9dd06ba2fc..edf39f32b9c32d 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ExternalReferencesTableNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ExternalReferencesTableNode.cs @@ -13,7 +13,7 @@ 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 readonly string _blobName; private readonly NodeFactory _nodeFactory; 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..d5a536cab8171e 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) { 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 015d0fabfc4487..482755c7593f06 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/FunctionPointerMapNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/FunctionPointerMapNode.cs @@ -12,7 +12,7 @@ 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 readonly ExternalReferencesTableNode _externalReferences; 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 09a4bd868608aa..5d1ece4389a93a 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/GenericMethodsHashtableNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/GenericMethodsHashtableNode.cs @@ -14,7 +14,7 @@ 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 ExternalReferencesTableNode _externalReferences; 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 53b7aba11f6d88..ba126c75e90f74 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/GenericMethodsTemplateMap.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/GenericMethodsTemplateMap.cs @@ -13,7 +13,7 @@ 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 ExternalReferencesTableNode _externalReferences; 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 8681f2f17c6c14..dddd61b918004a 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/GenericTypesHashtableNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/GenericTypesHashtableNode.cs @@ -12,7 +12,7 @@ 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 ExternalReferencesTableNode _externalReferences; 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 56be4d11cd5f0d..436c5e30a92624 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/GenericTypesTemplateMap.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/GenericTypesTemplateMap.cs @@ -13,7 +13,7 @@ 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 ExternalReferencesTableNode _externalReferences; 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 6d54fa35b6643f..9f09f626d1db72 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/GenericVirtualMethodTableNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/GenericVirtualMethodTableNode.cs @@ -14,7 +14,7 @@ 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 ExternalReferencesTableNode _externalReferences; private Dictionary> _gvmImplementations; 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 2dda2342dc2fa4..d911088877a090 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/InterfaceGenericVirtualMethodTableNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/InterfaceGenericVirtualMethodTableNode.cs @@ -15,7 +15,7 @@ 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 ExternalReferencesTableNode _externalReferences; private Dictionary> _interfaceGvmSlots; 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 05328f7083efd3..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,7 +11,7 @@ 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 { public void AppendMangledName(NameMangler nameMangler, Utf8StringBuilder sb) { 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 351b7a0176ae02..3cd9466d9203f6 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ModuleInitializerListNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ModuleInitializerListNode.cs @@ -11,7 +11,7 @@ namespace ILCompiler.DependencyAnalysis { - internal sealed class ModuleInitializerListNode : ObjectNode, ISymbolDefinitionNode, INodeWithSize + internal sealed class ModuleInitializerListNode : ObjectNode, ISymbolDefinitionNode { 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 4cc21b3ca00291..a55b069171ea27 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/NativeLayoutInfoNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/NativeLayoutInfoNode.cs @@ -12,7 +12,7 @@ namespace ILCompiler.DependencyAnalysis /// /// Native layout info blob. /// - public sealed class NativeLayoutInfoNode : ObjectNode, ISymbolDefinitionNode, INodeWithSize + public sealed class NativeLayoutInfoNode : ObjectNode, ISymbolDefinitionNode { private ExternalReferencesTableNode _externalReferences; private ExternalReferencesTableNode _staticsReferences; 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 03925591d801c7..dad7f99dc0289d 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/PointerTypeMapNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/PointerTypeMapNode.cs @@ -11,7 +11,7 @@ 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 readonly ExternalReferencesTableNode _externalReferences; 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..0098f4ed43e9e9 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) { 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 8b9144c1ccd9f8..e3d764b7ded248 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ReadyToRunHeaderNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ReadyToRunHeaderNode.cs @@ -89,23 +89,12 @@ 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; - } + ModuleInfoFlags flags = ModuleInfoFlags.HasEndPointer; builder.EmitInt((int)flags); builder.EmitPointerReloc((ISymbolNode)item.Node); - if (item.Node is INodeWithSize) - { - builder.EmitReloc((ISymbolNode)item.Node, RelocType.IMAGE_REL_SYMBOL_SIZE); - } - else - { - builder.EmitZeroPointer(); - } + builder.EmitReloc((ISymbolNode)item.Node, RelocType.IMAGE_REL_SYMBOL_SIZE); count++; } @@ -117,14 +106,4 @@ public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false) protected internal override int Phase => (int)ObjectNodePhase.Late; public override int ClassCode => 0x7db08464; } - - /// - /// Marker interface for nodes that should have their size emitted in the ReadyToRun header - /// using IMAGE_REL_SYMBOL_SIZE relocation. The object writer will resolve the symbol size - /// at link time. Only nodes that represent contiguous data regions with well-defined boundaries - /// should implement this interface. - /// - public interface INodeWithSize - { - } } 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 12956835409c65..7f0ebba2d10110 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ReflectionFieldMapNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ReflectionFieldMapNode.cs @@ -14,7 +14,7 @@ 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 ExternalReferencesTableNode _externalReferences; 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 0872c28cfdb893..b1d90371f88d9b 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ReflectionInvokeMapNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ReflectionInvokeMapNode.cs @@ -15,7 +15,7 @@ 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 ExternalReferencesTableNode _externalReferences; 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 31ac2cf95ff392..afa19312153023 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ReflectionVirtualInvokeMapNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ReflectionVirtualInvokeMapNode.cs @@ -17,7 +17,7 @@ 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 ExternalReferencesTableNode _externalReferences; 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 6636c778ffab11..51be93d279ac11 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ResourceDataNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ResourceDataNode.cs @@ -18,7 +18,7 @@ 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 { /// 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 fca7338b9ab60a..c2e7c98e310a4f 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; 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 e3eeb849f34103..c578c0f10b48ec 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/StackTraceDocumentsNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/StackTraceDocumentsNode.cs @@ -12,7 +12,7 @@ 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(); 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 2ead81b2d643b8..d7a3959e68857a 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/StackTraceLineNumbersNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/StackTraceLineNumbersNode.cs @@ -16,7 +16,7 @@ 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 readonly ExternalReferencesTableNode _externalReferences; private readonly StackTraceDocumentsNode _documents; 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 c6621436a30880..e7d28eae748b7d 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/StackTraceMethodMappingNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/StackTraceMethodMappingNode.cs @@ -15,7 +15,7 @@ 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 { 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 abd89e134e2504..f8a2aee186d7da 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/StaticsInfoHashtableNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/StaticsInfoHashtableNode.cs @@ -13,7 +13,7 @@ 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 ExternalReferencesTableNode _externalReferences; private ExternalReferencesTableNode _nativeStaticsReferences; 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 4eadcd0a2ca373..8b1b03688c0e6e 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/StructMarshallingStubMapNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/StructMarshallingStubMapNode.cs @@ -14,7 +14,7 @@ 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 readonly ExternalReferencesTableNode _externalReferences; private readonly InteropStateManager _interopStateManager; 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 6837ae9c784134..ed2094b512e946 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/TypeMetadataMapNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/TypeMetadataMapNode.cs @@ -11,7 +11,7 @@ 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 ExternalReferencesTableNode _externalReferences; From 5b50167b5dbedfce9c2896ceeb35f072f282c269 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 10 Feb 2026 00:11:30 +0000 Subject: [PATCH 05/10] Remove HasEndPointer flag and change ModuleInfoRow to use Length field Co-authored-by: jkoritzinsky <1571408+jkoritzinsky@users.noreply.github.com> --- src/coreclr/nativeaot/Runtime/TypeManager.cpp | 14 +------------- src/coreclr/nativeaot/Runtime/TypeManager.h | 4 +--- src/coreclr/nativeaot/Runtime/inc/ModuleHeaders.h | 5 ----- .../tools/Common/Internal/Runtime/ModuleHeaders.cs | 6 ------ .../DependencyAnalysis/ReadyToRunHeaderNode.cs | 9 ++++----- 5 files changed, 6 insertions(+), 32 deletions(-) diff --git a/src/coreclr/nativeaot/Runtime/TypeManager.cpp b/src/coreclr/nativeaot/Runtime/TypeManager.cpp index edba0b2ed20771..fff1e34e098763 100644 --- a/src/coreclr/nativeaot/Runtime/TypeManager.cpp +++ b/src/coreclr/nativeaot/Runtime/TypeManager.cpp @@ -79,21 +79,9 @@ 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*); - } + return Length; } HANDLE TypeManager::GetOsModuleHandle() diff --git a/src/coreclr/nativeaot/Runtime/TypeManager.h b/src/coreclr/nativeaot/Runtime/TypeManager.h index 91a38ffbbacf98..41c69dd9573851 100644 --- a/src/coreclr/nativeaot/Runtime/TypeManager.h +++ b/src/coreclr/nativeaot/Runtime/TypeManager.h @@ -27,11 +27,9 @@ 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/Internal/Runtime/ModuleHeaders.cs b/src/coreclr/tools/Common/Internal/Runtime/ModuleHeaders.cs index 0e849fb950ae3e..230a9389ac4a2c 100644 --- a/src/coreclr/tools/Common/Internal/Runtime/ModuleHeaders.cs +++ b/src/coreclr/tools/Common/Internal/Runtime/ModuleHeaders.cs @@ -102,10 +102,4 @@ enum ReadyToRunSectionType ReadonlyBlobRegionStart = 300, ReadonlyBlobRegionEnd = 399, } - - [Flags] - internal enum ModuleInfoFlags : int - { - HasEndPointer = 0x1, - } } 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 e3d764b7ded248..f80334a5296e7b 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); @@ -87,15 +87,14 @@ public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false) if (!relocsOnly && item.Node.ShouldSkipEmittingObjectNode(factory)) continue; + builder.RequireInitialPointerAlignment(); + builder.EmitInt((int)item.Id); - ModuleInfoFlags flags = ModuleInfoFlags.HasEndPointer; - builder.EmitInt((int)flags); + builder.EmitReloc((ISymbolNode)item.Node, RelocType.IMAGE_REL_SYMBOL_SIZE); builder.EmitPointerReloc((ISymbolNode)item.Node); - builder.EmitReloc((ISymbolNode)item.Node, RelocType.IMAGE_REL_SYMBOL_SIZE); - count++; } builder.EmitShort(sectionCountReservation, checked((short)count)); From cc44d345457844d2324ef3afc6f81a38ed190355 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 10 Feb 2026 20:50:10 +0000 Subject: [PATCH 06/10] Remove GetLength method and Size properties as requested in code review Co-authored-by: jkoritzinsky <1571408+jkoritzinsky@users.noreply.github.com> --- src/coreclr/nativeaot/Runtime/TypeManager.cpp | 7 +------ src/coreclr/nativeaot/Runtime/TypeManager.h | 2 -- .../DependencyAnalysis/ExternalTypeMapObjectNode.cs | 3 --- .../Compiler/DependencyAnalysis/ProxyTypeMapObjectNode.cs | 3 --- 4 files changed, 1 insertion(+), 14 deletions(-) diff --git a/src/coreclr/nativeaot/Runtime/TypeManager.cpp b/src/coreclr/nativeaot/Runtime/TypeManager.cpp index fff1e34e098763..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,11 +79,6 @@ void * TypeManager::GetClasslibFunction(ClasslibFunctionId functionId) return m_pClasslibFunctions[id]; } -int TypeManager::ModuleInfoRow::GetLength() -{ - return Length; -} - HANDLE TypeManager::GetOsModuleHandle() { return m_osModule; diff --git a/src/coreclr/nativeaot/Runtime/TypeManager.h b/src/coreclr/nativeaot/Runtime/TypeManager.h index 41c69dd9573851..4429ee4e28cb48 100644 --- a/src/coreclr/nativeaot/Runtime/TypeManager.h +++ b/src/coreclr/nativeaot/Runtime/TypeManager.h @@ -29,8 +29,6 @@ class TypeManager int32_t SectionId; int32_t Length; void * Start; - - int GetLength(); }; }; 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 d5a536cab8171e..44c6bf0a1977e0 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ExternalTypeMapObjectNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ExternalTypeMapObjectNode.cs @@ -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/ProxyTypeMapObjectNode.cs b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ProxyTypeMapObjectNode.cs index 0098f4ed43e9e9..c5f55d565c1498 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ProxyTypeMapObjectNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ProxyTypeMapObjectNode.cs @@ -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); From 5d2d89606f390cc19393aed432f6391ad169a3c2 Mon Sep 17 00:00:00 2001 From: Jeremy Koritzinsky Date: Tue, 10 Feb 2026 14:12:46 -0800 Subject: [PATCH 07/10] Remove unneeded alignment change. Update ObjectWriter to write size for all symbols for NAOT as well as R2R. --- .../tools/Common/Compiler/ObjectWriter/ObjectWriter.cs | 6 ++---- .../Compiler/DependencyAnalysis/ReadyToRunHeaderNode.cs | 2 -- 2 files changed, 2 insertions(+), 6 deletions(-) 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 Date: Wed, 11 Feb 2026 06:59:52 +0000 Subject: [PATCH 08/10] Remove double blank lines left by mechanical INodeWithSize removal Co-authored-by: jkoritzinsky <1571408+jkoritzinsky@users.noreply.github.com> --- .../Compiler/DependencyAnalysis/ArrayMapNode.cs | 4 ---- .../Compiler/DependencyAnalysis/ArrayOfEmbeddedDataNode.cs | 4 ---- .../Compiler/DependencyAnalysis/ArrayOfFrozenObjectsNode.cs | 2 -- .../Compiler/DependencyAnalysis/ByRefTypeMapNode.cs | 4 ---- .../Compiler/DependencyAnalysis/ClassConstructorContextMap.cs | 4 ---- .../Compiler/DependencyAnalysis/DehydratedDataNode.cs | 4 ---- .../DependencyAnalysis/DelegateMarshallingStubMapNode.cs | 4 ---- .../DependencyAnalysis/ExactMethodInstantiationsNode.cs | 4 ---- .../DependencyAnalysis/ExternalReferencesTableNode.cs | 4 ---- .../Compiler/DependencyAnalysis/FunctionPointerMapNode.cs | 4 ---- .../DependencyAnalysis/GenericMethodsHashtableNode.cs | 2 -- .../Compiler/DependencyAnalysis/GenericMethodsTemplateMap.cs | 4 ---- .../Compiler/DependencyAnalysis/GenericTypesHashtableNode.cs | 2 -- .../Compiler/DependencyAnalysis/GenericTypesTemplateMap.cs | 2 -- .../DependencyAnalysis/GenericVirtualMethodTableNode.cs | 2 -- .../InterfaceGenericVirtualMethodTableNode.cs | 2 -- .../Compiler/DependencyAnalysis/ModuleInitializerListNode.cs | 4 ---- .../Compiler/DependencyAnalysis/NativeLayoutInfoNode.cs | 2 -- .../Compiler/DependencyAnalysis/PointerTypeMapNode.cs | 4 ---- .../Compiler/DependencyAnalysis/ReflectionFieldMapNode.cs | 4 ---- .../Compiler/DependencyAnalysis/ReflectionInvokeMapNode.cs | 4 ---- .../DependencyAnalysis/ReflectionVirtualInvokeMapNode.cs | 2 -- .../Compiler/DependencyAnalysis/ResourceDataNode.cs | 2 -- .../Compiler/DependencyAnalysis/ResourceIndexNode.cs | 2 -- .../Compiler/DependencyAnalysis/StackTraceDocumentsNode.cs | 2 -- .../Compiler/DependencyAnalysis/StackTraceLineNumbersNode.cs | 2 -- .../DependencyAnalysis/StackTraceMethodMappingNode.cs | 2 -- .../Compiler/DependencyAnalysis/StaticsInfoHashtableNode.cs | 4 ---- .../DependencyAnalysis/StructMarshallingStubMapNode.cs | 4 ---- .../Compiler/DependencyAnalysis/TypeMetadataMapNode.cs | 4 ---- 30 files changed, 94 deletions(-) diff --git a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ArrayMapNode.cs b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ArrayMapNode.cs index fe71d0d2b0fca8..426caa1c51bd09 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ArrayMapNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ArrayMapNode.cs @@ -20,8 +20,6 @@ public ArrayMapNode(ExternalReferencesTableNode externalReferences) { _externalReferences = externalReferences; } - - public void AppendMangledName(NameMangler nameMangler, Utf8StringBuilder sb) { sb.Append(nameMangler.CompilationUnitPrefix).Append("__array_type_map"u8); @@ -63,8 +61,6 @@ public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false) } byte[] hashTableBytes = writer.Save(); - - 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 9731c7d756d2c0..a7eb7a5214d0d3 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ArrayOfEmbeddedDataNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ArrayOfEmbeddedDataNode.cs @@ -16,8 +16,6 @@ public class ArrayOfEmbeddedDataNode : EmbeddedDataContainerNode private HashSet _nestedNodes = new HashSet(); private List _nestedNodesList = new List(); private IComparer _sorter; - - public ArrayOfEmbeddedDataNode(string mangledName, IComparer nodeSorter) : base(mangledName) { _sorter = nodeSorter; @@ -82,8 +80,6 @@ public override ObjectData GetData(NodeFactory factory, bool relocsOnly) builder.AddSymbol(this); GetElementDataForNodes(ref builder, factory, relocsOnly); - - 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 bae89e3a7c73df..6a7e4848eeb3a4 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ArrayOfFrozenObjectsNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ArrayOfFrozenObjectsNode.cs @@ -54,8 +54,6 @@ protected override ObjectData GetDehydratableData(NodeFactory factory, bool relo // Terminate with a null pointer as expected by the GC AlignNextObject(ref builder, factory); builder.EmitZeroPointer(); - - 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 bbf51fe829127a..2abe5c911930a6 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ByRefTypeMapNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ByRefTypeMapNode.cs @@ -19,8 +19,6 @@ public ByRefTypeMapNode(ExternalReferencesTableNode externalReferences) { _externalReferences = externalReferences; } - - public void AppendMangledName(NameMangler nameMangler, Utf8StringBuilder sb) { sb.Append(nameMangler.CompilationUnitPrefix).Append("__byref_type_map"u8); @@ -58,8 +56,6 @@ public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false) } byte[] hashTableBytes = writer.Save(); - - 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 bd0cc6aeb40ec3..7ecd492cbb7b07 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ClassConstructorContextMap.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ClassConstructorContextMap.cs @@ -19,8 +19,6 @@ public ClassConstructorContextMap(ExternalReferencesTableNode externalReferences { _externalReferences = externalReferences; } - - public void AppendMangledName(NameMangler nameMangler, Utf8StringBuilder sb) { sb.Append(nameMangler.CompilationUnitPrefix).Append("__type_to_cctorContext_map"u8); @@ -70,8 +68,6 @@ public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false) } byte[] hashTableBytes = writer.Save(); - - 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 176a7f58ab32b8..6c3c32d48372c4 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/DehydratedDataNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/DehydratedDataNode.cs @@ -41,8 +41,6 @@ internal sealed class DehydratedDataNode : ObjectNode, ISymbolDefinitionNode public override bool StaticDependenciesAreComputed => true; public int Offset => 0; - - public void AppendMangledName(NameMangler nameMangler, Utf8StringBuilder sb) { sb.Append(nameMangler.CompilationUnitPrefix).Append("__dehydrated_data"u8); @@ -306,8 +304,6 @@ public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false) Debug.Assert(sourcePosition == o.Data.Length); dehydratedSegmentPosition += o.Data.Length; } - - // Dehydrated data is followed by the reloc lookup table. for (int i = 0; i < relocSort.Length; i++) builder.EmitReloc(relocSort[i].Key, RelocType.IMAGE_REL_BASED_RELPTR32); 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 b4151016b3649d..a3a6d7184272af 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/DelegateMarshallingStubMapNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/DelegateMarshallingStubMapNode.cs @@ -22,8 +22,6 @@ public DelegateMarshallingStubMapNode(ExternalReferencesTableNode externalRefere _externalReferences = externalReferences; _interopStateManager = interopStateManager; } - - public void AppendMangledName(NameMangler nameMangler, Utf8StringBuilder sb) { sb.Append(nameMangler.CompilationUnitPrefix).Append("__delegate_marshalling_stub_map"u8); @@ -67,8 +65,6 @@ public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false) } byte[] hashTableBytes = writer.Save(); - - 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 8cac6a7b40d0a6..3eaea2faa1929a 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ExactMethodInstantiationsNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ExactMethodInstantiationsNode.cs @@ -47,8 +47,6 @@ public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false) VertexHashtable hashtable = new VertexHashtable(); Section nativeSection = nativeWriter.NewSection(); nativeSection.Place(hashtable); - - foreach (MethodDesc method in factory.MetadataManager.GetExactMethodHashtableEntries()) { // Get the method pointer vertex @@ -95,8 +93,6 @@ public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false) } byte[] streamBytes = nativeWriter.Save(); - - 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 edf39f32b9c32d..61309334487f93 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ExternalReferencesTableNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ExternalReferencesTableNode.cs @@ -26,8 +26,6 @@ public ExternalReferencesTableNode(string blobName, NodeFactory nodeFactory) _blobName = blobName; _nodeFactory = nodeFactory; } - - public void AppendMangledName(NameMangler nameMangler, Utf8StringBuilder sb) { sb.Append(nameMangler.CompilationUnitPrefix).Append("__external_" + _blobName + "_references"); @@ -99,8 +97,6 @@ public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false) builder.EmitPointerReloc(symbolAndDelta.Symbol, symbolAndDelta.Delta); } } - - builder.AddSymbol(this); return builder.ToObjectData(); 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 482755c7593f06..c45cc2c25ad203 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/FunctionPointerMapNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/FunctionPointerMapNode.cs @@ -20,8 +20,6 @@ public FunctionPointerMapNode(ExternalReferencesTableNode externalReferences) { _externalReferences = externalReferences; } - - public void AppendMangledName(NameMangler nameMangler, Utf8StringBuilder sb) { sb.Append(nameMangler.CompilationUnitPrefix).Append("__fnptr_type_map"u8); @@ -67,8 +65,6 @@ public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false) } byte[] hashTableBytes = writer.Save(); - - 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 5d1ece4389a93a..4ad7da13bec07e 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/GenericMethodsHashtableNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/GenericMethodsHashtableNode.cs @@ -87,8 +87,6 @@ public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false) } byte[] streamBytes = nativeWriter.Save(); - - 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 ba126c75e90f74..aafba0dac3c3fd 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/GenericMethodsTemplateMap.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/GenericMethodsTemplateMap.cs @@ -46,8 +46,6 @@ public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false) VertexHashtable hashtable = new VertexHashtable(); Section nativeSection = nativeWriter.NewSection(); nativeSection.Place(hashtable); - - foreach (var methodEntryNode in factory.MetadataManager.GetTemplateMethodEntries()) { // Method entry @@ -69,8 +67,6 @@ public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false) } byte[] streamBytes = nativeWriter.Save(); - - 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 dddd61b918004a..5d94c8057450fd 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/GenericTypesHashtableNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/GenericTypesHashtableNode.cs @@ -57,8 +57,6 @@ public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false) } byte[] streamBytes = nativeWriter.Save(); - - 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 436c5e30a92624..3f9bd735c9dd21 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/GenericTypesTemplateMap.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/GenericTypesTemplateMap.cs @@ -64,8 +64,6 @@ public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false) } byte[] streamBytes = nativeWriter.Save(); - - 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 9f09f626d1db72..a932e92edef806 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/GenericVirtualMethodTableNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/GenericVirtualMethodTableNode.cs @@ -130,8 +130,6 @@ public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false) _gvmImplementations = null; byte[] streamBytes = nativeFormatWriter.Save(); - - 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 d911088877a090..97457bc45773a6 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/InterfaceGenericVirtualMethodTableNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/InterfaceGenericVirtualMethodTableNode.cs @@ -221,8 +221,6 @@ public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false) _interfaceGvmSlots = null; byte[] streamBytes = nativeFormatWriter.Save(); - - return new ObjectData(streamBytes, Array.Empty(), 1, new ISymbolDefinitionNode[] { this }); } 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 3cd9466d9203f6..a1c0f7420f75fb 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ModuleInitializerListNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ModuleInitializerListNode.cs @@ -13,8 +13,6 @@ namespace ILCompiler.DependencyAnalysis { internal sealed class ModuleInitializerListNode : ObjectNode, ISymbolDefinitionNode { - - public void AppendMangledName(NameMangler nameMangler, Utf8StringBuilder sb) { sb.Append(nameMangler.CompilationUnitPrefix).Append("__module_initializers"u8); @@ -141,8 +139,6 @@ public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false) } var result = builder.ToObjectData(); - - 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 a55b069171ea27..da3bc5a1bfe2e3 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/NativeLayoutInfoNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/NativeLayoutInfoNode.cs @@ -80,8 +80,6 @@ public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false) return new ObjectData(Array.Empty(), Array.Empty(), 1, new ISymbolDefinitionNode[] { this }); SaveNativeLayoutInfoWriter(factory); - - 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 dad7f99dc0289d..d4fe7a36b9baa4 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/PointerTypeMapNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/PointerTypeMapNode.cs @@ -19,8 +19,6 @@ public PointerTypeMapNode(ExternalReferencesTableNode externalReferences) { _externalReferences = externalReferences; } - - public void AppendMangledName(NameMangler nameMangler, Utf8StringBuilder sb) { sb.Append(nameMangler.CompilationUnitPrefix).Append("__ptr_type_map"u8); @@ -58,8 +56,6 @@ public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false) } byte[] hashTableBytes = writer.Save(); - - return new ObjectData(hashTableBytes, Array.Empty(), 1, new ISymbolDefinitionNode[] { this }); } 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 7f0ebba2d10110..8ee3c7daa58ccc 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ReflectionFieldMapNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ReflectionFieldMapNode.cs @@ -22,8 +22,6 @@ public ReflectionFieldMapNode(ExternalReferencesTableNode externalReferences) { _externalReferences = externalReferences; } - - public void AppendMangledName(NameMangler nameMangler, Utf8StringBuilder sb) { sb.Append(nameMangler.CompilationUnitPrefix).Append("__field_to_offset_map"u8); @@ -153,8 +151,6 @@ public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false) } byte[] hashTableBytes = writer.Save(); - - 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 b1d90371f88d9b..618d742790742c 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ReflectionInvokeMapNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ReflectionInvokeMapNode.cs @@ -23,8 +23,6 @@ public ReflectionInvokeMapNode(ExternalReferencesTableNode externalReferences) { _externalReferences = externalReferences; } - - public void AppendMangledName(NameMangler nameMangler, Utf8StringBuilder sb) { sb.Append(nameMangler.CompilationUnitPrefix).Append("__method_to_entrypoint_map"u8); @@ -217,8 +215,6 @@ public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false) } byte[] hashTableBytes = writer.Save(); - - 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 afa19312153023..00fee3d42b7563 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ReflectionVirtualInvokeMapNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ReflectionVirtualInvokeMapNode.cs @@ -203,8 +203,6 @@ public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false) } byte[] hashTableBytes = writer.Save(); - - 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 51be93d279ac11..c1333ccb93cb67 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ResourceDataNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ResourceDataNode.cs @@ -26,8 +26,6 @@ internal sealed class ResourceDataNode : ObjectNode, ISymbolDefinitionNode /// private List _indexData; private int _totalLength; - - public override bool IsShareable => false; public override ObjectNodeSection GetSection(NodeFactory factory) => ObjectNodeSection.ReadOnlyDataSection; 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 c2e7c98e310a4f..75fb332864684f 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ResourceIndexNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ResourceIndexNode.cs @@ -23,8 +23,6 @@ public ResourceIndexNode(ResourceDataNode resourceDataNode) _resourceDataNode = resourceDataNode; } - - public override bool IsShareable => false; public override ObjectNodeSection GetSection(NodeFactory factory) => ObjectNodeSection.ReadOnlyDataSection; 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 c578c0f10b48ec..9d22629b583691 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/StackTraceDocumentsNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/StackTraceDocumentsNode.cs @@ -82,8 +82,6 @@ public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false) bw.Write(Encoding.UTF8.GetBytes(_documents[i])); bw.Write((byte)0); } - - 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 d7a3959e68857a..15cda3565e5725 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/StackTraceLineNumbersNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/StackTraceLineNumbersNode.cs @@ -134,8 +134,6 @@ static Vertex CreateLineNumbersBlob(NativeWriter writer, StackTraceDocumentsNode } byte[] streamBytes = nativeWriter.Save(); - - 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 e7d28eae748b7d..0e86f64c446436 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/StackTraceMethodMappingNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/StackTraceMethodMappingNode.cs @@ -17,8 +17,6 @@ namespace ILCompiler.DependencyAnalysis /// public sealed class StackTraceMethodMappingNode : ObjectNode, ISymbolDefinitionNode { - - public override bool IsShareable => false; public override ObjectNodeSection GetSection(NodeFactory factory) => ObjectNodeSection.ReadOnlyDataSection; 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 f8a2aee186d7da..af6df5a64fa774 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/StaticsInfoHashtableNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/StaticsInfoHashtableNode.cs @@ -23,8 +23,6 @@ public StaticsInfoHashtableNode(ExternalReferencesTableNode externalReferences, _externalReferences = externalReferences; _nativeStaticsReferences = nativeStaticsReferences; } - - public void AppendMangledName(NameMangler nameMangler, Utf8StringBuilder sb) { sb.Append(nameMangler.CompilationUnitPrefix).Append("_StaticsInfoHashtableNode"u8); @@ -104,8 +102,6 @@ public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false) } byte[] hashTableBytes = writer.Save(); - - 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 8b1b03688c0e6e..e0208f87a05c2d 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/StructMarshallingStubMapNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/StructMarshallingStubMapNode.cs @@ -24,8 +24,6 @@ public StructMarshallingStubMapNode(ExternalReferencesTableNode externalReferenc _externalReferences = externalReferences; _interopStateManager = interopStateManager; } - - public void AppendMangledName(NameMangler nameMangler, Utf8StringBuilder sb) { sb.Append(nameMangler.CompilationUnitPrefix).Append("__struct_marshalling_stub_map"u8); @@ -120,8 +118,6 @@ public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false) } byte[] hashTableBytes = writer.Save(); - - 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 ed2094b512e946..0a986b2d93c76f 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/TypeMetadataMapNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/TypeMetadataMapNode.cs @@ -19,8 +19,6 @@ public TypeMetadataMapNode(ExternalReferencesTableNode externalReferences) { _externalReferences = externalReferences; } - - public void AppendMangledName(NameMangler nameMangler, Utf8StringBuilder sb) { sb.Append(nameMangler.CompilationUnitPrefix).Append("__type_to_metadata_map"u8); @@ -66,8 +64,6 @@ public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false) } byte[] hashTableBytes = writer.Save(); - - return new ObjectData(hashTableBytes, Array.Empty(), 1, new ISymbolDefinitionNode[] { this }); } From 9b06c1e2fef509d99e4a1f3701aa24f18ca3b902 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 11 Feb 2026 22:45:02 +0000 Subject: [PATCH 09/10] Restore blank lines between methods and logical code sections Co-authored-by: MichalStrehovsky <13110571+MichalStrehovsky@users.noreply.github.com> --- .../Compiler/DependencyAnalysis/ArrayMapNode.cs | 2 ++ .../Compiler/DependencyAnalysis/ArrayOfEmbeddedDataNode.cs | 2 ++ .../Compiler/DependencyAnalysis/ArrayOfFrozenObjectsNode.cs | 1 + .../Compiler/DependencyAnalysis/ByRefTypeMapNode.cs | 2 ++ .../Compiler/DependencyAnalysis/ClassConstructorContextMap.cs | 2 ++ .../Compiler/DependencyAnalysis/DehydratedDataNode.cs | 2 ++ .../DependencyAnalysis/DelegateMarshallingStubMapNode.cs | 2 ++ .../DependencyAnalysis/ExactMethodInstantiationsNode.cs | 2 ++ .../Compiler/DependencyAnalysis/ExternalReferencesTableNode.cs | 2 ++ .../Compiler/DependencyAnalysis/FunctionPointerMapNode.cs | 2 ++ .../Compiler/DependencyAnalysis/GenericMethodsHashtableNode.cs | 1 + .../Compiler/DependencyAnalysis/GenericMethodsTemplateMap.cs | 2 ++ .../Compiler/DependencyAnalysis/GenericTypesHashtableNode.cs | 1 + .../Compiler/DependencyAnalysis/GenericTypesTemplateMap.cs | 1 + .../DependencyAnalysis/GenericVirtualMethodTableNode.cs | 1 + .../InterfaceGenericVirtualMethodTableNode.cs | 1 + .../Compiler/DependencyAnalysis/ModuleInitializerListNode.cs | 2 ++ .../Compiler/DependencyAnalysis/NativeLayoutInfoNode.cs | 1 + .../Compiler/DependencyAnalysis/PointerTypeMapNode.cs | 2 ++ .../Compiler/DependencyAnalysis/ReflectionFieldMapNode.cs | 2 ++ .../Compiler/DependencyAnalysis/ReflectionInvokeMapNode.cs | 2 ++ .../DependencyAnalysis/ReflectionVirtualInvokeMapNode.cs | 1 + .../Compiler/DependencyAnalysis/ResourceDataNode.cs | 1 + .../Compiler/DependencyAnalysis/StackTraceDocumentsNode.cs | 1 + .../Compiler/DependencyAnalysis/StackTraceLineNumbersNode.cs | 1 + .../Compiler/DependencyAnalysis/StackTraceMethodMappingNode.cs | 1 + .../Compiler/DependencyAnalysis/StaticsInfoHashtableNode.cs | 2 ++ .../Compiler/DependencyAnalysis/StructMarshallingStubMapNode.cs | 2 ++ .../Compiler/DependencyAnalysis/TypeMetadataMapNode.cs | 2 ++ 29 files changed, 46 insertions(+) diff --git a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ArrayMapNode.cs b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ArrayMapNode.cs index 426caa1c51bd09..d95cdc93a8b783 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ArrayMapNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ArrayMapNode.cs @@ -20,6 +20,7 @@ public ArrayMapNode(ExternalReferencesTableNode externalReferences) { _externalReferences = externalReferences; } + public void AppendMangledName(NameMangler nameMangler, Utf8StringBuilder sb) { sb.Append(nameMangler.CompilationUnitPrefix).Append("__array_type_map"u8); @@ -61,6 +62,7 @@ public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false) } byte[] hashTableBytes = writer.Save(); + 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 a7eb7a5214d0d3..f6e68343f9a798 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ArrayOfEmbeddedDataNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ArrayOfEmbeddedDataNode.cs @@ -16,6 +16,7 @@ public class ArrayOfEmbeddedDataNode : EmbeddedDataContainerNode private HashSet _nestedNodes = new HashSet(); private List _nestedNodesList = new List(); private IComparer _sorter; + public ArrayOfEmbeddedDataNode(string mangledName, IComparer nodeSorter) : base(mangledName) { _sorter = nodeSorter; @@ -80,6 +81,7 @@ public override ObjectData GetData(NodeFactory factory, bool relocsOnly) builder.AddSymbol(this); GetElementDataForNodes(ref builder, factory, relocsOnly); + 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 6a7e4848eeb3a4..7e1e06f1de4889 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ArrayOfFrozenObjectsNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ArrayOfFrozenObjectsNode.cs @@ -54,6 +54,7 @@ protected override ObjectData GetDehydratableData(NodeFactory factory, bool relo // Terminate with a null pointer as expected by the GC AlignNextObject(ref builder, factory); builder.EmitZeroPointer(); + 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 2abe5c911930a6..bd61b0a6ed50b8 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ByRefTypeMapNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ByRefTypeMapNode.cs @@ -19,6 +19,7 @@ public ByRefTypeMapNode(ExternalReferencesTableNode externalReferences) { _externalReferences = externalReferences; } + public void AppendMangledName(NameMangler nameMangler, Utf8StringBuilder sb) { sb.Append(nameMangler.CompilationUnitPrefix).Append("__byref_type_map"u8); @@ -56,6 +57,7 @@ public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false) } byte[] hashTableBytes = writer.Save(); + 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 7ecd492cbb7b07..3f80bd4909cf8a 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ClassConstructorContextMap.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ClassConstructorContextMap.cs @@ -19,6 +19,7 @@ public ClassConstructorContextMap(ExternalReferencesTableNode externalReferences { _externalReferences = externalReferences; } + public void AppendMangledName(NameMangler nameMangler, Utf8StringBuilder sb) { sb.Append(nameMangler.CompilationUnitPrefix).Append("__type_to_cctorContext_map"u8); @@ -68,6 +69,7 @@ public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false) } byte[] hashTableBytes = writer.Save(); + 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 6c3c32d48372c4..f1de3b4c7e1ac2 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/DehydratedDataNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/DehydratedDataNode.cs @@ -41,6 +41,7 @@ internal sealed class DehydratedDataNode : ObjectNode, ISymbolDefinitionNode public override bool StaticDependenciesAreComputed => true; public int Offset => 0; + public void AppendMangledName(NameMangler nameMangler, Utf8StringBuilder sb) { sb.Append(nameMangler.CompilationUnitPrefix).Append("__dehydrated_data"u8); @@ -304,6 +305,7 @@ public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false) Debug.Assert(sourcePosition == o.Data.Length); dehydratedSegmentPosition += o.Data.Length; } + // Dehydrated data is followed by the reloc lookup table. for (int i = 0; i < relocSort.Length; i++) builder.EmitReloc(relocSort[i].Key, RelocType.IMAGE_REL_BASED_RELPTR32); 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 a3a6d7184272af..942b0bcee3be77 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/DelegateMarshallingStubMapNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/DelegateMarshallingStubMapNode.cs @@ -22,6 +22,7 @@ public DelegateMarshallingStubMapNode(ExternalReferencesTableNode externalRefere _externalReferences = externalReferences; _interopStateManager = interopStateManager; } + public void AppendMangledName(NameMangler nameMangler, Utf8StringBuilder sb) { sb.Append(nameMangler.CompilationUnitPrefix).Append("__delegate_marshalling_stub_map"u8); @@ -65,6 +66,7 @@ public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false) } byte[] hashTableBytes = writer.Save(); + 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 3eaea2faa1929a..b0a94038ca5ff1 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ExactMethodInstantiationsNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ExactMethodInstantiationsNode.cs @@ -47,6 +47,7 @@ public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false) VertexHashtable hashtable = new VertexHashtable(); Section nativeSection = nativeWriter.NewSection(); nativeSection.Place(hashtable); + foreach (MethodDesc method in factory.MetadataManager.GetExactMethodHashtableEntries()) { // Get the method pointer vertex @@ -93,6 +94,7 @@ public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false) } byte[] streamBytes = nativeWriter.Save(); + 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 61309334487f93..0f045406c5500a 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ExternalReferencesTableNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ExternalReferencesTableNode.cs @@ -26,6 +26,7 @@ public ExternalReferencesTableNode(string blobName, NodeFactory nodeFactory) _blobName = blobName; _nodeFactory = nodeFactory; } + public void AppendMangledName(NameMangler nameMangler, Utf8StringBuilder sb) { sb.Append(nameMangler.CompilationUnitPrefix).Append("__external_" + _blobName + "_references"); @@ -97,6 +98,7 @@ public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false) builder.EmitPointerReloc(symbolAndDelta.Symbol, symbolAndDelta.Delta); } } + builder.AddSymbol(this); return builder.ToObjectData(); 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 c45cc2c25ad203..391e031d04fd57 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/FunctionPointerMapNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/FunctionPointerMapNode.cs @@ -20,6 +20,7 @@ public FunctionPointerMapNode(ExternalReferencesTableNode externalReferences) { _externalReferences = externalReferences; } + public void AppendMangledName(NameMangler nameMangler, Utf8StringBuilder sb) { sb.Append(nameMangler.CompilationUnitPrefix).Append("__fnptr_type_map"u8); @@ -65,6 +66,7 @@ public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false) } byte[] hashTableBytes = writer.Save(); + 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 4ad7da13bec07e..349254ee85d8c5 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/GenericMethodsHashtableNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/GenericMethodsHashtableNode.cs @@ -87,6 +87,7 @@ public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false) } byte[] streamBytes = nativeWriter.Save(); + 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 aafba0dac3c3fd..214f8e04ffcde8 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/GenericMethodsTemplateMap.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/GenericMethodsTemplateMap.cs @@ -46,6 +46,7 @@ public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false) VertexHashtable hashtable = new VertexHashtable(); Section nativeSection = nativeWriter.NewSection(); nativeSection.Place(hashtable); + foreach (var methodEntryNode in factory.MetadataManager.GetTemplateMethodEntries()) { // Method entry @@ -67,6 +68,7 @@ public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false) } byte[] streamBytes = nativeWriter.Save(); + 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 5d94c8057450fd..0d5f5c840fd341 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/GenericTypesHashtableNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/GenericTypesHashtableNode.cs @@ -57,6 +57,7 @@ public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false) } byte[] streamBytes = nativeWriter.Save(); + 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 3f9bd735c9dd21..e3c016025bf6fc 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/GenericTypesTemplateMap.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/GenericTypesTemplateMap.cs @@ -64,6 +64,7 @@ public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false) } byte[] streamBytes = nativeWriter.Save(); + 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 a932e92edef806..2b4ab88f6580a4 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/GenericVirtualMethodTableNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/GenericVirtualMethodTableNode.cs @@ -130,6 +130,7 @@ public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false) _gvmImplementations = null; byte[] streamBytes = nativeFormatWriter.Save(); + 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 97457bc45773a6..1c1049b2d47ce7 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/InterfaceGenericVirtualMethodTableNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/InterfaceGenericVirtualMethodTableNode.cs @@ -221,6 +221,7 @@ public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false) _interfaceGvmSlots = null; byte[] streamBytes = nativeFormatWriter.Save(); + return new ObjectData(streamBytes, Array.Empty(), 1, new ISymbolDefinitionNode[] { this }); } 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 a1c0f7420f75fb..a9d72a55d787b7 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ModuleInitializerListNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ModuleInitializerListNode.cs @@ -13,6 +13,7 @@ namespace ILCompiler.DependencyAnalysis { internal sealed class ModuleInitializerListNode : ObjectNode, ISymbolDefinitionNode { + public void AppendMangledName(NameMangler nameMangler, Utf8StringBuilder sb) { sb.Append(nameMangler.CompilationUnitPrefix).Append("__module_initializers"u8); @@ -139,6 +140,7 @@ public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false) } var result = builder.ToObjectData(); + 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 da3bc5a1bfe2e3..8ea88173bfeee9 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/NativeLayoutInfoNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/NativeLayoutInfoNode.cs @@ -80,6 +80,7 @@ public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false) return new ObjectData(Array.Empty(), Array.Empty(), 1, new ISymbolDefinitionNode[] { this }); SaveNativeLayoutInfoWriter(factory); + 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 d4fe7a36b9baa4..643d22920d17d5 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/PointerTypeMapNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/PointerTypeMapNode.cs @@ -19,6 +19,7 @@ public PointerTypeMapNode(ExternalReferencesTableNode externalReferences) { _externalReferences = externalReferences; } + public void AppendMangledName(NameMangler nameMangler, Utf8StringBuilder sb) { sb.Append(nameMangler.CompilationUnitPrefix).Append("__ptr_type_map"u8); @@ -56,6 +57,7 @@ public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false) } byte[] hashTableBytes = writer.Save(); + return new ObjectData(hashTableBytes, Array.Empty(), 1, new ISymbolDefinitionNode[] { this }); } 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 8ee3c7daa58ccc..edad70d6b045b6 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ReflectionFieldMapNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ReflectionFieldMapNode.cs @@ -22,6 +22,7 @@ public ReflectionFieldMapNode(ExternalReferencesTableNode externalReferences) { _externalReferences = externalReferences; } + public void AppendMangledName(NameMangler nameMangler, Utf8StringBuilder sb) { sb.Append(nameMangler.CompilationUnitPrefix).Append("__field_to_offset_map"u8); @@ -151,6 +152,7 @@ public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false) } byte[] hashTableBytes = writer.Save(); + 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 618d742790742c..7904d205ba0374 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ReflectionInvokeMapNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ReflectionInvokeMapNode.cs @@ -23,6 +23,7 @@ public ReflectionInvokeMapNode(ExternalReferencesTableNode externalReferences) { _externalReferences = externalReferences; } + public void AppendMangledName(NameMangler nameMangler, Utf8StringBuilder sb) { sb.Append(nameMangler.CompilationUnitPrefix).Append("__method_to_entrypoint_map"u8); @@ -215,6 +216,7 @@ public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false) } byte[] hashTableBytes = writer.Save(); + 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 00fee3d42b7563..b55ca1bdacaad4 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ReflectionVirtualInvokeMapNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ReflectionVirtualInvokeMapNode.cs @@ -203,6 +203,7 @@ public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false) } byte[] hashTableBytes = writer.Save(); + 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 c1333ccb93cb67..20aa8d372987dd 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ResourceDataNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ResourceDataNode.cs @@ -26,6 +26,7 @@ internal sealed class ResourceDataNode : ObjectNode, ISymbolDefinitionNode /// private List _indexData; private int _totalLength; + public override bool IsShareable => false; public override ObjectNodeSection GetSection(NodeFactory factory) => ObjectNodeSection.ReadOnlyDataSection; 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 9d22629b583691..d78fb125fd4480 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/StackTraceDocumentsNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/StackTraceDocumentsNode.cs @@ -82,6 +82,7 @@ public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false) bw.Write(Encoding.UTF8.GetBytes(_documents[i])); bw.Write((byte)0); } + 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 15cda3565e5725..aa8aa3d814b5b9 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/StackTraceLineNumbersNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/StackTraceLineNumbersNode.cs @@ -134,6 +134,7 @@ static Vertex CreateLineNumbersBlob(NativeWriter writer, StackTraceDocumentsNode } byte[] streamBytes = nativeWriter.Save(); + 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 0e86f64c446436..2e94b1cddcf8a8 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/StackTraceMethodMappingNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/StackTraceMethodMappingNode.cs @@ -17,6 +17,7 @@ namespace ILCompiler.DependencyAnalysis /// public sealed class StackTraceMethodMappingNode : ObjectNode, ISymbolDefinitionNode { + public override bool IsShareable => false; public override ObjectNodeSection GetSection(NodeFactory factory) => ObjectNodeSection.ReadOnlyDataSection; 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 af6df5a64fa774..5b7064d09d3b9d 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/StaticsInfoHashtableNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/StaticsInfoHashtableNode.cs @@ -23,6 +23,7 @@ public StaticsInfoHashtableNode(ExternalReferencesTableNode externalReferences, _externalReferences = externalReferences; _nativeStaticsReferences = nativeStaticsReferences; } + public void AppendMangledName(NameMangler nameMangler, Utf8StringBuilder sb) { sb.Append(nameMangler.CompilationUnitPrefix).Append("_StaticsInfoHashtableNode"u8); @@ -102,6 +103,7 @@ public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false) } byte[] hashTableBytes = writer.Save(); + 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 e0208f87a05c2d..d38d2d08581618 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/StructMarshallingStubMapNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/StructMarshallingStubMapNode.cs @@ -24,6 +24,7 @@ public StructMarshallingStubMapNode(ExternalReferencesTableNode externalReferenc _externalReferences = externalReferences; _interopStateManager = interopStateManager; } + public void AppendMangledName(NameMangler nameMangler, Utf8StringBuilder sb) { sb.Append(nameMangler.CompilationUnitPrefix).Append("__struct_marshalling_stub_map"u8); @@ -118,6 +119,7 @@ public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false) } byte[] hashTableBytes = writer.Save(); + 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 0a986b2d93c76f..5753c82fbe8980 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/TypeMetadataMapNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/TypeMetadataMapNode.cs @@ -19,6 +19,7 @@ public TypeMetadataMapNode(ExternalReferencesTableNode externalReferences) { _externalReferences = externalReferences; } + public void AppendMangledName(NameMangler nameMangler, Utf8StringBuilder sb) { sb.Append(nameMangler.CompilationUnitPrefix).Append("__type_to_metadata_map"u8); @@ -64,6 +65,7 @@ public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false) } byte[] hashTableBytes = writer.Save(); + return new ObjectData(hashTableBytes, Array.Empty(), 1, new ISymbolDefinitionNode[] { this }); } From df98fb9093c2b951a0ece5d15e5cee073cb7d0c3 Mon Sep 17 00:00:00 2001 From: Jeremy Koritzinsky Date: Sat, 14 Feb 2026 00:04:35 +0000 Subject: [PATCH 10/10] Encode the number of fixups into the dehydrated data to enable us to encode the size of the dehydrated data blob consistendly with other object nodes. --- .../Internal/Runtime/CompilerHelpers/StartupCodeHelpers.cs | 7 +++++-- .../Compiler/DependencyAnalysis/DehydratedDataNode.cs | 4 ++++ 2 files changed, 9 insertions(+), 2 deletions(-) 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/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/DehydratedDataNode.cs b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/DehydratedDataNode.cs index f1de3b4c7e1ac2..32879d415dd962 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/DehydratedDataNode.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/DehydratedDataNode.cs @@ -104,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; @@ -306,6 +308,8 @@ public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false) dehydratedSegmentPosition += o.Data.Length; } + builder.EmitInt(numRelocsReservation, relocSort.Length); + // Dehydrated data is followed by the reloc lookup table. for (int i = 0; i < relocSort.Length; i++) builder.EmitReloc(relocSort[i].Key, RelocType.IMAGE_REL_BASED_RELPTR32);