using System;
using System.Collections.Generic;
using System.Diagnostics;
+using System.Reflection.PortableExecutable;
using System.Runtime.InteropServices;
using System.IO;
public uint ReadStackPop()
{
- Debug.Assert(_reader.Architecture == Architecture.X86);
+ Debug.Assert(_reader.Machine == Machine.I386);
int x = GetTwoBit();
List<GCRefMapEntry> entries = new List<GCRefMapEntry>();
uint stackPop = GCRefMap.InvalidStackPop;
- if (_reader.Architecture == Architecture.X86)
+ if (_reader.Machine == Machine.I386)
{
stackPop = ReadStackPop();
}
// Header
private OperatingSystem _operatingSystem;
private Machine _machine;
- private Architecture _architecture;
private int _pointerSize;
private bool _composite;
private ulong _imageBase;
}
/// <summary>
- /// Targeting processor architecture of the R2R executable
- /// </summary>
- public Architecture Architecture
- {
- get
- {
- EnsureHeader();
- return _architecture;
- }
- }
-
- /// <summary>
/// Size of a pointer on the architecture
/// </summary>
public int TargetPointerSize
switch (_machine)
{
case Machine.I386:
- _architecture = Architecture.X86;
- _pointerSize = 4;
- break;
-
- case Machine.Amd64:
- _architecture = Architecture.X64;
- _pointerSize = 8;
- break;
-
case Machine.Arm:
case Machine.Thumb:
case Machine.ArmThumb2:
- _architecture = Architecture.Arm;
_pointerSize = 4;
break;
+ case Machine.Amd64:
case Machine.Arm64:
- _architecture = Architecture.Arm64;
- _pointerSize = 8;
- break;
-
- case (Machine)0x6264: /* LoongArch64 */
- _architecture = (Architecture)6; /* LoongArch64 */
+ case Machine.LoongArch64:
_pointerSize = 8;
break;
throw new NotImplementedException(Machine.ToString());
}
-
_imageBase = CompositeReader.PEHeaders.PEHeader.ImageBase;
// Initialize R2RHeader
public static TransitionBlock FromReader(ReadyToRunReader reader)
{
- switch (reader.Architecture)
+ switch (reader.Machine)
{
- case Architecture.X86:
+ case Machine.I386:
return X86TransitionBlock.Instance;
- case Architecture.X64:
+ case Machine.Amd64:
return reader.OperatingSystem == OperatingSystem.Windows ? X64WindowsTransitionBlock.Instance : X64UnixTransitionBlock.Instance;
- case Architecture.Arm:
+ case Machine.Arm:
+ case Machine.Thumb:
+ case Machine.ArmThumb2:
return ArmTransitionBlock.Instance;
- case Architecture.Arm64:
+ case Machine.Arm64:
return Arm64TransitionBlock.Instance;
default: