From 65129b16caa06c3563ff0c25c81731bb6f524874 Mon Sep 17 00:00:00 2001 From: Matthew Steeples Date: Sun, 18 Jan 2026 00:24:45 +0000 Subject: [PATCH 1/2] Render operating system name as well as architecture if present --- ILSpy/Languages/Language.cs | 38 +++++++++++++++++++++++++++++++------ 1 file changed, 32 insertions(+), 6 deletions(-) diff --git a/ILSpy/Languages/Language.cs b/ILSpy/Languages/Language.cs index 3aa09dff3c..ccb9cfe830 100644 --- a/ILSpy/Languages/Language.cs +++ b/ILSpy/Languages/Language.cs @@ -367,28 +367,54 @@ public virtual CodeMappingInfo GetCodeMappingInfo(MetadataFile module, EntityHan return new CodeMappingInfo(module, declaringType); } + static readonly IReadOnlyDictionary osMachineLookup = new Dictionary + { + { (Machine)0x4644, "MacOS" }, + { (Machine)0x7b79, "Linux" }, + { (Machine)0xadc4, "FreeBSD" }, + { (Machine)0x1993, "NetBSD" }, + { (Machine)0x1992, "Sun" }, + }; + public static string GetPlatformDisplayName(PEFile module) { var headers = module.Reader.PEHeaders; var architecture = headers.CoffHeader.Machine; var characteristics = headers.CoffHeader.Characteristics; var corflags = headers.CorHeader.Flags; + + var modifier = string.Empty; + + if (!Enum.IsDefined(architecture)) + { + foreach ((var osEnum, var osText) in osMachineLookup) + { + var candidate = architecture ^ osEnum; + if (Enum.IsDefined(candidate)) + { + modifier = osText + " "; + architecture = candidate; + break; + } + } + } + switch (architecture) { case Machine.I386: if ((corflags & CorFlags.Prefers32Bit) != 0) - return "AnyCPU (32-bit preferred)"; + return modifier + "AnyCPU (32-bit preferred)"; if ((corflags & CorFlags.Requires32Bit) != 0) - return "x86"; + return modifier + "x86"; // According to ECMA-335, II.25.3.3.1 CorFlags.Requires32Bit and Characteristics.Bit32Machine must be in sync // for assemblies containing managed code. However, this is not true for C++/CLI assemblies. if ((corflags & CorFlags.ILOnly) == 0 && (characteristics & Characteristics.Bit32Machine) != 0) - return "x86"; - return "AnyCPU (64-bit preferred)"; + return modifier + "x86"; + return modifier + "AnyCPU (64-bit preferred)"; case Machine.Amd64: - return "x64"; + return modifier + "x64"; case Machine.IA64: - return "Itanium"; + return modifier + "Itanium"; default: return architecture.ToString(); } From eb54e6619e07983eff6dc650326b57e652678b04 Mon Sep 17 00:00:00 2001 From: Siegfried Pammer Date: Sun, 25 Jan 2026 10:14:06 +0100 Subject: [PATCH 2/2] Update ILSpy/Languages/Language.cs --- ILSpy/Languages/Language.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ILSpy/Languages/Language.cs b/ILSpy/Languages/Language.cs index ccb9cfe830..9e2d772410 100644 --- a/ILSpy/Languages/Language.cs +++ b/ILSpy/Languages/Language.cs @@ -387,7 +387,7 @@ public static string GetPlatformDisplayName(PEFile module) if (!Enum.IsDefined(architecture)) { - foreach ((var osEnum, var osText) in osMachineLookup) + foreach (var (osEnum, osText) in osMachineLookup) { var candidate = architecture ^ osEnum; if (Enum.IsDefined(candidate))