Browse Source

Fix #1467: Update WholeProjectDecompiler.GetPlatformName to match Language.GetPlatformDisplayName

pull/1471/head
Siegfried Pammer 6 years ago
parent
commit
6c8a55a0af
  1. 16
      ICSharpCode.Decompiler/CSharp/WholeProjectDecompiler.cs
  2. 7
      ILSpy/Languages/Language.cs

16
ICSharpCode.Decompiler/CSharp/WholeProjectDecompiler.cs

@ -474,20 +474,26 @@ namespace ICSharpCode.Decompiler.CSharp @@ -474,20 +474,26 @@ namespace ICSharpCode.Decompiler.CSharp
public static string GetPlatformName(Metadata.PEFile module)
{
var headers = module.Reader.PEHeaders;
switch (headers.CoffHeader.Machine) {
var architecture = headers.CoffHeader.Machine;
var characteristics = headers.CoffHeader.Characteristics;
var corflags = headers.CorHeader.Flags;
switch (architecture) {
case Machine.I386:
if ((headers.CorHeader.Flags & CorFlags.Prefers32Bit) != 0)
if ((corflags & CorFlags.Prefers32Bit) != 0)
return "AnyCPU";
else if ((headers.CorHeader.Flags & CorFlags.Requires32Bit) != 0)
if ((corflags & CorFlags.Requires32Bit) != 0)
return "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";
else
return "AnyCPU";
case Machine.Amd64:
return "x64";
case Machine.IA64:
return "Itanium";
default:
return headers.CoffHeader.Machine.ToString();
return architecture.ToString();
}
}
}

7
ILSpy/Languages/Language.cs

@ -498,9 +498,10 @@ namespace ICSharpCode.ILSpy @@ -498,9 +498,10 @@ namespace ICSharpCode.ILSpy
public static string GetPlatformDisplayName(PEFile module)
{
var architecture = module.Reader.PEHeaders.CoffHeader.Machine;
var characteristics = module.Reader.PEHeaders.CoffHeader.Characteristics;
var corflags = module.Reader.PEHeaders.CorHeader.Flags;
var headers = module.Reader.PEHeaders;
var architecture = headers.CoffHeader.Machine;
var characteristics = headers.CoffHeader.Characteristics;
var corflags = headers.CorHeader.Flags;
switch (architecture) {
case Machine.I386:
if ((corflags & CorFlags.Prefers32Bit) != 0)

Loading…
Cancel
Save