Skip to content

Commit

Permalink
architecture fix restructure
Browse files Browse the repository at this point in the history
  • Loading branch information
goojal committed Feb 15, 2024
1 parent 4fbe5f4 commit 02eac38
Show file tree
Hide file tree
Showing 21 changed files with 109 additions and 74 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -438,19 +438,19 @@ public static string GetFormattedArchitecture(TargetArchitecture targetArchitect
{
switch (targetArchitecture)
{
case TargetArchitecture.I386Windows:
case TargetArchitecture.I386:
{
return "x86";
}
case TargetArchitecture.AMD64Windows:
case TargetArchitecture.AMD64:
{
return "x64";
}
case TargetArchitecture.IA64Windows:
case TargetArchitecture.IA64:
{
return "Itanium";
}
case TargetArchitecture.ARMv7Windows:
case TargetArchitecture.ARMv7:
{
return "ARM";
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ public static IFrameworkAssemblyLocator Instance()

protected override TargetArchitecture GetTargetArchitecture()
{
return TargetArchitecture.AMD64Windows;
return TargetArchitecture.AMD64;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ public static IFrameworkAssemblyLocator Instance()

protected override TargetArchitecture GetTargetArchitecture()
{
return TargetArchitecture.I386Windows;
return TargetArchitecture.I386;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ public static IFrameworkAssemblyLocator Instance()

protected override TargetArchitecture GetTargetArchitecture()
{
return TargetArchitecture.AMD64Windows;
return TargetArchitecture.AMD64;
}

protected override string GetProgramFilesFolder()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ public static IFrameworkAssemblyLocator Instance()

protected override TargetArchitecture GetTargetArchitecture()
{
return TargetArchitecture.I386Windows;
return TargetArchitecture.I386;
}

protected override string GetProgramFilesFolder()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ public class FrameworkAssembly4xLocatorFactory
{
public static IFrameworkAssemblyLocator Instance(TargetArchitecture targetArchitecture)
{
if (targetArchitecture == TargetArchitecture.AMD64Windows || targetArchitecture == TargetArchitecture.IA64Windows)
if (targetArchitecture == TargetArchitecture.AMD64 || targetArchitecture == TargetArchitecture.IA64)
{
return FrameworkAssemblyLocator4x64.Instance();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ public static IFrameworkAssemblyLocator Instance()

protected override TargetArchitecture GetTargetArchitecture()
{
return TargetArchitecture.AMD64Windows;
return TargetArchitecture.AMD64;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ public static IFrameworkAssemblyLocator Instance()

protected override TargetArchitecture GetTargetArchitecture()
{
return TargetArchitecture.I386Windows;
return TargetArchitecture.I386;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ protected string GetSpecificArchitectureFrameworkDirectory(double version)

TargetArchitecture targetArchitecture = GetTargetArchitecture();

if (targetArchitecture == TargetArchitecture.AMD64Windows || targetArchitecture == TargetArchitecture.IA64Windows)
if (targetArchitecture == TargetArchitecture.AMD64 || targetArchitecture == TargetArchitecture.IA64)
{
if (Directory.Exists(SystemInformation.CLR_Default_64))
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -632,9 +632,9 @@ private static bool IsPointerType(TypeDefinition type)
{
if(type.FullName == "System.UIntPtr" || type.FullName == "System.IntPtr")
{
if (type.Module.Architecture == TargetArchitecture.I386Windows || type.Module.Architecture == TargetArchitecture.ARMv7Windows)
if (type.Module.Architecture == TargetArchitecture.I386 || type.Module.Architecture == TargetArchitecture.ARMv7)
return 5;
else if (type.Module.Architecture == TargetArchitecture.IA64Windows || type.Module.Architecture == TargetArchitecture.AMD64Windows)
else if (type.Module.Architecture == TargetArchitecture.IA64 || type.Module.Architecture == TargetArchitecture.AMD64)
return 7;
else if (type.Module.Architecture == TargetArchitecture.AnyCPU)
return null;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,14 +15,14 @@ public class TargetPlatformResolver : ITargetPlatformResolver
private readonly Dictionary<AssemblyName, TargetPlatform> Mscorlibs = new Dictionary<AssemblyName, TargetPlatform>()
{
// .NET 4.0, 4.5, 4.5.1, 4.5.2
{ new AssemblyName("mscorlib", "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089", new Version("4.0.0.0"), new byte[] { 183, 122, 92, 86, 25, 52, 224, 137 }) { TargetArchitecture = TargetArchitecture.I386Windows }, TargetPlatform.CLR_4 },
{ new AssemblyName("mscorlib", "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089", new Version("4.0.0.0"), new byte[] { 183, 122, 92, 86, 25, 52, 224, 137 }) { TargetArchitecture = TargetArchitecture.AMD64Windows }, TargetPlatform.CLR_4 },
{ new AssemblyName("mscorlib", "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089", new Version("4.0.0.0"), new byte[] { 183, 122, 92, 86, 25, 52, 224, 137 }) { TargetArchitecture = TargetArchitecture.I386 }, TargetPlatform.CLR_4 },
{ new AssemblyName("mscorlib", "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089", new Version("4.0.0.0"), new byte[] { 183, 122, 92, 86, 25, 52, 224, 137 }) { TargetArchitecture = TargetArchitecture.AMD64 }, TargetPlatform.CLR_4 },
// .NET 2.0, 3.0, 3.5
{ new AssemblyName("mscorlib", "mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089", new Version("2.0.0.0"), new byte[] { 183, 122, 92, 86, 25, 52, 224, 137 }) { TargetArchitecture = TargetArchitecture.I386Windows }, TargetPlatform.CLR_2_3 },
{ new AssemblyName("mscorlib", "mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089", new Version("2.0.0.0"), new byte[] { 183, 122, 92, 86, 25, 52, 224, 137 }) { TargetArchitecture = TargetArchitecture.AMD64Windows }, TargetPlatform.CLR_2_3 },
{ new AssemblyName("mscorlib", "mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089", new Version("2.0.0.0"), new byte[] { 183, 122, 92, 86, 25, 52, 224, 137 }) { TargetArchitecture = TargetArchitecture.I386 }, TargetPlatform.CLR_2_3 },
{ new AssemblyName("mscorlib", "mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089", new Version("2.0.0.0"), new byte[] { 183, 122, 92, 86, 25, 52, 224, 137 }) { TargetArchitecture = TargetArchitecture.AMD64 }, TargetPlatform.CLR_2_3 },
// Silverlight
{ new AssemblyName("mscorlib", "mscorlib, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", new Version("2.0.5.0"), new byte[] { 124, 236, 133, 215, 190, 167, 121, 142 }) { TargetArchitecture = TargetArchitecture.I386Windows }, TargetPlatform.Silverlight },
{ new AssemblyName("mscorlib", "mscorlib, Version=5.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", new Version("5.0.5.0"), new byte[] { 124, 236, 133, 215, 190, 167, 121, 142 }) { TargetArchitecture = TargetArchitecture.I386Windows }, TargetPlatform.Silverlight },
{ new AssemblyName("mscorlib", "mscorlib, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", new Version("2.0.5.0"), new byte[] { 124, 236, 133, 215, 190, 167, 121, 142 }) { TargetArchitecture = TargetArchitecture.I386 }, TargetPlatform.Silverlight },
{ new AssemblyName("mscorlib", "mscorlib, Version=5.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", new Version("5.0.5.0"), new byte[] { 124, 236, 133, 215, 190, 167, 121, 142 }) { TargetArchitecture = TargetArchitecture.I386 }, TargetPlatform.Silverlight },
// Windows Phone
{ new AssemblyName("mscorlib", "mscorlib, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", new Version("2.0.5.0"), new byte[] { 124, 236, 133, 215, 190, 167, 121, 142 }) { TargetArchitecture = TargetArchitecture.AnyCPU }, TargetPlatform.WindowsPhone },
{ new AssemblyName("mscorlib", "mscorlib, Version=5.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e", new Version("5.0.5.0"), new byte[] { 124, 236, 133, 215, 190, 167, 121, 142 }) { TargetArchitecture = TargetArchitecture.AnyCPU }, TargetPlatform.WindowsPhone },
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,13 @@ public static string GetFriendlyModuleArchitecture(this TargetArchitecture targe
{
switch (targetArchitecture)
{
case TargetArchitecture.I386Windows:
case TargetArchitecture.I386:
return "x86";

case TargetArchitecture.AMD64Windows:
case TargetArchitecture.AMD64:
return "x64";

case TargetArchitecture.IA64Windows:
case TargetArchitecture.IA64:
return "Itanium";

case TargetArchitecture.AnyCPU:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ public static TargetArchitecture GetModuleArchitecture(this ModuleDefinition mod
}

bool is32Bit = (module.Attributes & ModuleAttributes.Required32Bit) == ModuleAttributes.Required32Bit;
if (module.Architecture == TargetArchitecture.I386Windows && !is32Bit)
if (module.Architecture == TargetArchitecture.I386 && !is32Bit)
{
return TargetArchitecture.AnyCPU;
}
Expand Down
37 changes: 35 additions & 2 deletions engine/Mono.Cecil.Shared/Mono.Cecil.PE/ImageReader.cs
Original file line number Diff line number Diff line change
Expand Up @@ -93,10 +93,43 @@ void ReadImage ()
image.Characteristics = (ModuleCharacteristics) dll_characteristics;
}

TargetArchitecture ReadArchitecture ()

TargetArchitecture GetTargetArchitectureByPlatformSpecificTargetArchitecture(PlatformSpecificTargetArchitecture p)
{
switch (p)
{
case PlatformSpecificTargetArchitecture.I386Windows:
case PlatformSpecificTargetArchitecture.I386Linux:
case PlatformSpecificTargetArchitecture.I386Apple:
return TargetArchitecture.I386;
case PlatformSpecificTargetArchitecture.AMD64Windows:
case PlatformSpecificTargetArchitecture.AMD64Linux:
case PlatformSpecificTargetArchitecture.AMD64Apple:
return TargetArchitecture.AMD64;
case PlatformSpecificTargetArchitecture.IA64Windows:
case PlatformSpecificTargetArchitecture.IA64Linux:
case PlatformSpecificTargetArchitecture.IA64Apple:
return TargetArchitecture.IA64;
case PlatformSpecificTargetArchitecture.ARMWindows:
case PlatformSpecificTargetArchitecture.ARMLinux:
case PlatformSpecificTargetArchitecture.ARMApple:
return TargetArchitecture.ARM;
case PlatformSpecificTargetArchitecture.ARMv7Windows:
case PlatformSpecificTargetArchitecture.ARMv7Linux:
case PlatformSpecificTargetArchitecture.ARMv7Apple:
return TargetArchitecture.ARMv7;
case PlatformSpecificTargetArchitecture.ARM64Windows:
case PlatformSpecificTargetArchitecture.ARM64Linux:
case PlatformSpecificTargetArchitecture.ARM64Apple:
return TargetArchitecture.ARM64;
default:
throw new Exception($"Unexpected PlatformSpecificTargetArchitecture {p}");
}
}
TargetArchitecture ReadArchitecture ()
{
// Applying bb40c2108ecf303691d0536c4f9d3b9035790c5c from jbevain/cecil
return (TargetArchitecture)ReadUInt16 ();
return GetTargetArchitectureByPlatformSpecificTargetArchitecture((PlatformSpecificTargetArchitecture)ReadUInt16());
}

static ModuleKind GetModuleKind (ushort characteristics, ushort subsystem)
Expand Down
22 changes: 11 additions & 11 deletions engine/Mono.Cecil.Shared/Mono.Cecil.PE/ImageWriter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -54,8 +54,8 @@ sealed class ImageWriter : BinaryStreamWriter {
{
this.module = module;
this.metadata = metadata;
this.pe64 = module.Architecture == TargetArchitecture.AMD64Windows || module.Architecture == TargetArchitecture.IA64Windows;
this.has_reloc = module.Architecture == TargetArchitecture.I386Windows;
this.pe64 = module.Architecture == TargetArchitecture.AMD64 || module.Architecture == TargetArchitecture.IA64;
this.has_reloc = module.Architecture == TargetArchitecture.I386;
this.GetDebugHeader ();
this.GetWin32Resources ();
this.text_map = BuildTextMap ();
Expand Down Expand Up @@ -196,13 +196,13 @@ void WritePEFileHeader ()
ushort GetMachine ()
{
switch (module.Architecture) {
case TargetArchitecture.I386Windows:
case TargetArchitecture.I386:
return 0x014c;
case TargetArchitecture.AMD64Windows:
case TargetArchitecture.AMD64:
return 0x8664;
case TargetArchitecture.IA64Windows:
case TargetArchitecture.IA64:
return 0x0200;
case TargetArchitecture.ARMv7Windows:
case TargetArchitecture.ARMv7:
return 0x01c4;
}

Expand Down Expand Up @@ -617,7 +617,7 @@ byte [] GetRuntimeMain ()
void WriteStartupStub ()
{
switch (module.Architecture) {
case TargetArchitecture.I386Windows:
case TargetArchitecture.I386:
WriteUInt16 (0x25ff);
WriteUInt32 ((uint) image_base + text_map.GetRVA (TextSegment.ImportAddressTable));
return;
Expand All @@ -637,14 +637,14 @@ void WriteReloc ()
PrepareSection (reloc);

var reloc_rva = text_map.GetRVA (TextSegment.StartupStub);
reloc_rva += module.Architecture == TargetArchitecture.IA64Windows ? 0x20u : 2;
reloc_rva += module.Architecture == TargetArchitecture.IA64 ? 0x20u : 2;
var page_rva = reloc_rva & ~0xfffu;

WriteUInt32 (page_rva); // PageRVA
WriteUInt32 (0x000c); // Block Size

switch (module.Architecture) {
case TargetArchitecture.I386Windows:
case TargetArchitecture.I386:
WriteUInt32 (0x3000 + reloc_rva - page_rva);
break;
default:
Expand Down Expand Up @@ -707,7 +707,7 @@ TextMap BuildTextMap ()
uint import_dir_len = (import_hnt_rva - import_dir_rva) + 27u;

RVA startup_stub_rva = import_dir_rva + import_dir_len;
startup_stub_rva = module.Architecture == TargetArchitecture.IA64Windows
startup_stub_rva = module.Architecture == TargetArchitecture.IA64
? (startup_stub_rva + 15u) & ~15u
: 2 + ((startup_stub_rva + 3u) & ~3u);

Expand All @@ -721,7 +721,7 @@ TextMap BuildTextMap ()
uint GetStartupStubLength ()
{
switch (module.Architecture) {
case TargetArchitecture.I386Windows:
case TargetArchitecture.I386:
return 6;
default:
throw new NotSupportedException ();
Expand Down
2 changes: 1 addition & 1 deletion engine/Mono.Cecil.Shared/Mono.Cecil/AssemblyWriter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -792,7 +792,7 @@ public MetadataBuilder(ModuleDefinition module, string fq_name, ISymbolWriterPro
TextMap CreateTextMap ()
{
var map = new TextMap ();
map.AddMap (TextSegment.ImportAddressTable, module.Architecture == TargetArchitecture.I386Windows ? 8 : 0);
map.AddMap (TextSegment.ImportAddressTable, module.Architecture == TargetArchitecture.I386 ? 8 : 0);
map.AddMap (TextSegment.CLIHeader, 0x48, 8);
return map;
}
Expand Down
6 changes: 3 additions & 3 deletions engine/Mono.Cecil.Shared/Mono.Cecil/BaseAssemblyResolver.cs
Original file line number Diff line number Diff line change
Expand Up @@ -765,11 +765,11 @@ private TargetArchitecture GetArchitectureFromStrongName(string strongName)
switch (architectureString)
{
case "amd64":
return TargetArchitecture.AMD64Windows;
return TargetArchitecture.AMD64;
case "ia64":
return TargetArchitecture.IA64Windows;
return TargetArchitecture.IA64;
default:
return TargetArchitecture.I386Windows;
return TargetArchitecture.I386;
}
}

Expand Down
2 changes: 1 addition & 1 deletion engine/Mono.Cecil.Shared/Mono.Cecil/ModuleDefinition.cs
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,7 @@ public ModuleParameters ()
{
this.kind = ModuleKind.Dll;
this.Runtime = GetCurrentRuntime ();
this.architecture = TargetArchitecture.I386Windows;
this.architecture = TargetArchitecture.I386;
}

static TargetRuntime GetCurrentRuntime ()
Expand Down
52 changes: 27 additions & 25 deletions engine/Mono.Cecil.Shared/Mono.Cecil/ModuleKind.cs
Original file line number Diff line number Diff line change
Expand Up @@ -25,42 +25,44 @@ public enum NativeOSOverrideCode
Windows = 0,
Linux = 0x7B79,
Apple = 0x4644
// TODO add more platforms https://github.com/dotnet/runtime/blob/61c658183231100a5836e833c86446ff51a4654b/src/coreclr/src/inc/pedecoder.h#L90-L104
}
public enum PlatformSpecificTargetArchitecture
{
I386Windows = TargetArchitecture.I386 ^ NativeOSOverrideCode.Windows,
AMD64Windows = TargetArchitecture.AMD64 ^ NativeOSOverrideCode.Windows,
IA64Windows = TargetArchitecture.IA64 ^ NativeOSOverrideCode.Windows,
ARMWindows = TargetArchitecture.ARM ^ NativeOSOverrideCode.Windows,
ARMv7Windows = TargetArchitecture.ARMv7 ^ NativeOSOverrideCode.Windows,
ARM64Windows = TargetArchitecture.ARM64 ^ NativeOSOverrideCode.Windows,

public enum BaseTargetArchitecture
I386Linux = TargetArchitecture.I386 ^ NativeOSOverrideCode.Linux,
AMD64Linux = TargetArchitecture.AMD64 ^ NativeOSOverrideCode.Linux,
IA64Linux = TargetArchitecture.IA64 ^ NativeOSOverrideCode.Linux,
ARMLinux = TargetArchitecture.ARM ^ NativeOSOverrideCode.Linux,
ARMv7Linux = TargetArchitecture.ARMv7 ^ NativeOSOverrideCode.Linux,
ARM64Linux = TargetArchitecture.ARM64 ^ NativeOSOverrideCode.Linux,

I386Apple = TargetArchitecture.I386 ^ NativeOSOverrideCode.Apple,
AMD64Apple = TargetArchitecture.AMD64 ^ NativeOSOverrideCode.Apple,
IA64Apple = TargetArchitecture.IA64 ^ NativeOSOverrideCode.Apple,
ARMApple = TargetArchitecture.ARM ^ NativeOSOverrideCode.Apple,
ARMv7Apple = TargetArchitecture.ARMv7 ^ NativeOSOverrideCode.Apple,
ARM64Apple = TargetArchitecture.ARM64 ^ NativeOSOverrideCode.Apple
}

public enum TargetArchitecture
{
// Applying bb40c2108ecf303691d0536c4f9d3b9035790c5c from jbevain/cecil
I386 = 0x014c,
AMD64 = 0x8664,
IA64 = 0x0200,
AnyCPU, /*Telerik Authorship*/
ARM = 0x01c0,
ARMv7 = 0x01c4,
ARM64 = 0xaa64
}

public enum TargetArchitecture {
// Applying bb40c2108ecf303691d0536c4f9d3b9035790c5c from jbevain/cecil
I386Windows = BaseTargetArchitecture.I386 ^ NativeOSOverrideCode.Windows,
AMD64Windows = BaseTargetArchitecture.AMD64 ^ NativeOSOverrideCode.Windows,
IA64Windows = BaseTargetArchitecture.IA64 ^ NativeOSOverrideCode.Windows,
AnyCPU, /*Telerik Authorship*/
ARMWindows = BaseTargetArchitecture.ARM ^ NativeOSOverrideCode.Windows,
ARMv7Windows = BaseTargetArchitecture.ARMv7 ^ NativeOSOverrideCode.Windows,
ARM64Windows = BaseTargetArchitecture.ARM64 ^ NativeOSOverrideCode.Windows,

I386Linux = BaseTargetArchitecture.I386 ^ NativeOSOverrideCode.Linux,
AMD64Linux = BaseTargetArchitecture.AMD64 ^ NativeOSOverrideCode.Linux,
IA64Linux = BaseTargetArchitecture.IA64 ^ NativeOSOverrideCode.Linux,
ARMLinux = BaseTargetArchitecture.ARM ^ NativeOSOverrideCode.Linux,
ARMv7Linux = BaseTargetArchitecture.ARMv7 ^ NativeOSOverrideCode.Linux,
ARM64Linux = BaseTargetArchitecture.ARM64 ^ NativeOSOverrideCode.Linux,

I386Apple = BaseTargetArchitecture.I386 ^ NativeOSOverrideCode.Apple,
AMD64Apple = BaseTargetArchitecture.AMD64 ^ NativeOSOverrideCode.Apple,
IA64Apple = BaseTargetArchitecture.IA64 ^ NativeOSOverrideCode.Apple,
ARMApple = BaseTargetArchitecture.ARM ^ NativeOSOverrideCode.Apple,
ARMv7Apple = BaseTargetArchitecture.ARMv7 ^ NativeOSOverrideCode.Apple,
ARM64Apple = BaseTargetArchitecture.ARM64 ^ NativeOSOverrideCode.Apple
}
/* End AGPL */

[Flags]
Expand Down
Loading

0 comments on commit 02eac38

Please sign in to comment.