Skip to content

Commit 65129b1

Browse files
Render operating system name as well as architecture if present
1 parent 4a29de5 commit 65129b1

1 file changed

Lines changed: 32 additions & 6 deletions

File tree

ILSpy/Languages/Language.cs

Lines changed: 32 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -367,28 +367,54 @@ public virtual CodeMappingInfo GetCodeMappingInfo(MetadataFile module, EntityHan
367367
return new CodeMappingInfo(module, declaringType);
368368
}
369369

370+
static readonly IReadOnlyDictionary<Machine, string> osMachineLookup = new Dictionary<Machine, string>
371+
{
372+
{ (Machine)0x4644, "MacOS" },
373+
{ (Machine)0x7b79, "Linux" },
374+
{ (Machine)0xadc4, "FreeBSD" },
375+
{ (Machine)0x1993, "NetBSD" },
376+
{ (Machine)0x1992, "Sun" },
377+
};
378+
370379
public static string GetPlatformDisplayName(PEFile module)
371380
{
372381
var headers = module.Reader.PEHeaders;
373382
var architecture = headers.CoffHeader.Machine;
374383
var characteristics = headers.CoffHeader.Characteristics;
375384
var corflags = headers.CorHeader.Flags;
385+
386+
var modifier = string.Empty;
387+
388+
if (!Enum.IsDefined(architecture))
389+
{
390+
foreach ((var osEnum, var osText) in osMachineLookup)
391+
{
392+
var candidate = architecture ^ osEnum;
393+
if (Enum.IsDefined(candidate))
394+
{
395+
modifier = osText + " ";
396+
architecture = candidate;
397+
break;
398+
}
399+
}
400+
}
401+
376402
switch (architecture)
377403
{
378404
case Machine.I386:
379405
if ((corflags & CorFlags.Prefers32Bit) != 0)
380-
return "AnyCPU (32-bit preferred)";
406+
return modifier + "AnyCPU (32-bit preferred)";
381407
if ((corflags & CorFlags.Requires32Bit) != 0)
382-
return "x86";
408+
return modifier + "x86";
383409
// According to ECMA-335, II.25.3.3.1 CorFlags.Requires32Bit and Characteristics.Bit32Machine must be in sync
384410
// for assemblies containing managed code. However, this is not true for C++/CLI assemblies.
385411
if ((corflags & CorFlags.ILOnly) == 0 && (characteristics & Characteristics.Bit32Machine) != 0)
386-
return "x86";
387-
return "AnyCPU (64-bit preferred)";
412+
return modifier + "x86";
413+
return modifier + "AnyCPU (64-bit preferred)";
388414
case Machine.Amd64:
389-
return "x64";
415+
return modifier + "x64";
390416
case Machine.IA64:
391-
return "Itanium";
417+
return modifier + "Itanium";
392418
default:
393419
return architecture.ToString();
394420
}

0 commit comments

Comments
 (0)