// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.Reflection; using System.Text; using Internal.Text; using Internal.TypeSystem; namespace ILCompiler.DependencyAnalysis.ReadyToRun { internal class CompilerIdentifierNode : HeaderTableNode { public override ObjectNodeSection GetSection(NodeFactory factory) => ObjectNodeSection.ReadOnlyDataSection; public override int ClassCode => 230053202; public CompilerIdentifierNode(TargetDetails target) { } public override void AppendMangledName(NameMangler nameMangler, Utf8StringBuilder sb) { sb.Append("__ReadyToRunHeader_CompilerIdentifier"u8); } private string GetCompilerVersion() { return Assembly .GetExecutingAssembly() .GetCustomAttribute<AssemblyFileVersionAttribute>() .Version; } public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false) { ObjectDataBuilder builder = new ObjectDataBuilder(factory, relocsOnly); string compilerIdentifier = $"Crossgen2 {GetCompilerVersion()}"; builder.RequireInitialPointerAlignment(); builder.AddSymbol(this); builder.EmitBytes(Encoding.ASCII.GetBytes(compilerIdentifier)); return builder.ToObjectData(); } } } |