mirror of
git://source.winehq.org/git/wine.git
synced 2024-09-15 04:04:47 +00:00
include: Add some CHPE definitions.
This commit is contained in:
parent
f19555c866
commit
6e348640c5
|
@ -2499,7 +2499,6 @@ typedef struct _IMAGE_VXD_HEADER {
|
|||
/* These are the settings of the Machine field. */
|
||||
#define IMAGE_FILE_MACHINE_UNKNOWN 0
|
||||
#define IMAGE_FILE_MACHINE_TARGET_HOST 0x0001
|
||||
#define IMAGE_FILE_MACHINE_I860 0x014d
|
||||
#define IMAGE_FILE_MACHINE_I386 0x014c
|
||||
#define IMAGE_FILE_MACHINE_R3000 0x0162
|
||||
#define IMAGE_FILE_MACHINE_R4000 0x0166
|
||||
|
@ -2514,21 +2513,24 @@ typedef struct _IMAGE_VXD_HEADER {
|
|||
#define IMAGE_FILE_MACHINE_ARM 0x01c0
|
||||
#define IMAGE_FILE_MACHINE_THUMB 0x01c2
|
||||
#define IMAGE_FILE_MACHINE_ARMNT 0x01c4
|
||||
#define IMAGE_FILE_MACHINE_ARM64 0xaa64
|
||||
#define IMAGE_FILE_MACHINE_AM33 0x01d3
|
||||
#define IMAGE_FILE_MACHINE_POWERPC 0x01f0
|
||||
#define IMAGE_FILE_MACHINE_POWERPCFP 0x01f1
|
||||
#define IMAGE_FILE_MACHINE_IA64 0x0200
|
||||
#define IMAGE_FILE_MACHINE_MIPS16 0x0266
|
||||
#define IMAGE_FILE_MACHINE_ALPHA64 0x0284
|
||||
#define IMAGE_FILE_MACHINE_AXP64 IMAGE_FILE_MACHINE_ALPHA64
|
||||
#define IMAGE_FILE_MACHINE_MIPSFPU 0x0366
|
||||
#define IMAGE_FILE_MACHINE_MIPSFPU16 0x0466
|
||||
#define IMAGE_FILE_MACHINE_AXP64 IMAGE_FILE_MACHINE_ALPHA64
|
||||
#define IMAGE_FILE_MACHINE_TRICORE 0x0520
|
||||
#define IMAGE_FILE_MACHINE_CEF 0x0cef
|
||||
#define IMAGE_FILE_MACHINE_EBC 0x0ebc
|
||||
#define IMAGE_FILE_MACHINE_CHPE_X86 0x3a64
|
||||
#define IMAGE_FILE_MACHINE_AMD64 0x8664
|
||||
#define IMAGE_FILE_MACHINE_M32R 0x9041
|
||||
#define IMAGE_FILE_MACHINE_ARM64EC 0xa641
|
||||
#define IMAGE_FILE_MACHINE_ARM64X 0xa64e
|
||||
#define IMAGE_FILE_MACHINE_ARM64 0xaa64
|
||||
#define IMAGE_FILE_MACHINE_CEE 0xc0ee
|
||||
|
||||
#define IMAGE_SIZEOF_FILE_HEADER 20
|
||||
|
@ -3788,6 +3790,97 @@ typedef PIMAGE_DYNAMIC_RELOCATION32_V2 PIMAGE_DYNAMIC_RELOCATION_V2;
|
|||
#define IMAGE_DYNAMIC_RELOCATION_GUARD_SWITCHTABLE_BRANCH 5
|
||||
#define IMAGE_DYNAMIC_RELOCATION_ARM64X 6
|
||||
|
||||
typedef struct _IMAGE_CHPE_METADATA_X86
|
||||
{
|
||||
ULONG Version;
|
||||
ULONG CHPECodeAddressRangeOffset;
|
||||
ULONG CHPECodeAddressRangeCount;
|
||||
ULONG WowA64ExceptionHandlerFunctionPointer;
|
||||
ULONG WowA64DispatchCallFunctionPointer;
|
||||
ULONG WowA64DispatchIndirectCallFunctionPointer;
|
||||
ULONG WowA64DispatchIndirectCallCfgFunctionPointer;
|
||||
ULONG WowA64DispatchRetFunctionPointer;
|
||||
ULONG WowA64DispatchRetLeafFunctionPointer;
|
||||
ULONG WowA64DispatchJumpFunctionPointer;
|
||||
ULONG CompilerIATPointer;
|
||||
ULONG WowA64RdtscFunctionPointer;
|
||||
ULONG unknown[4];
|
||||
} IMAGE_CHPE_METADATA_X86, *PIMAGE_CHPE_METADATA_X86;
|
||||
|
||||
typedef struct _IMAGE_CHPE_RANGE_ENTRY
|
||||
{
|
||||
union
|
||||
{
|
||||
ULONG StartOffset;
|
||||
struct
|
||||
{
|
||||
ULONG NativeCode : 1;
|
||||
ULONG AddressBits : 31;
|
||||
} DUMMYSTRUCTNAME;
|
||||
} DUMMYUNIONNAME;
|
||||
ULONG Length;
|
||||
} IMAGE_CHPE_RANGE_ENTRY, *PIMAGE_CHPE_RANGE_ENTRY;
|
||||
|
||||
typedef struct _IMAGE_ARM64EC_METADATA
|
||||
{
|
||||
ULONG Version;
|
||||
ULONG CodeMap;
|
||||
ULONG CodeMapCount;
|
||||
ULONG CodeRangesToEntryPoints;
|
||||
ULONG RedirectionMetadata;
|
||||
ULONG __os_arm64x_dispatch_call_no_redirect;
|
||||
ULONG __os_arm64x_dispatch_ret;
|
||||
ULONG __os_arm64x_dispatch_call;
|
||||
ULONG __os_arm64x_dispatch_icall;
|
||||
ULONG __os_arm64x_dispatch_icall_cfg;
|
||||
ULONG AlternateEntryPoint;
|
||||
ULONG AuxiliaryIAT;
|
||||
ULONG CodeRangesToEntryPointsCount;
|
||||
ULONG RedirectionMetadataCount;
|
||||
ULONG GetX64InformationFunctionPointer;
|
||||
ULONG SetX64InformationFunctionPointer;
|
||||
ULONG ExtraRFETable;
|
||||
ULONG ExtraRFETableSize;
|
||||
ULONG __os_arm64x_dispatch_fptr;
|
||||
ULONG AuxiliaryIATCopy;
|
||||
} IMAGE_ARM64EC_METADATA;
|
||||
|
||||
typedef struct _IMAGE_ARM64EC_REDIRECTION_ENTRY
|
||||
{
|
||||
ULONG Source;
|
||||
ULONG Destination;
|
||||
} IMAGE_ARM64EC_REDIRECTION_ENTRY;
|
||||
|
||||
typedef struct _IMAGE_ARM64EC_CODE_RANGE_ENTRY_POINT
|
||||
{
|
||||
ULONG StartRva;
|
||||
ULONG EndRva;
|
||||
ULONG EntryPoint;
|
||||
} IMAGE_ARM64EC_CODE_RANGE_ENTRY_POINT;
|
||||
|
||||
#define IMAGE_DVRT_ARM64X_FIXUP_TYPE_ZEROFILL 0
|
||||
#define IMAGE_DVRT_ARM64X_FIXUP_TYPE_VALUE 1
|
||||
#define IMAGE_DVRT_ARM64X_FIXUP_TYPE_DELTA 2
|
||||
|
||||
#define IMAGE_DVRT_ARM64X_FIXUP_SIZE_2BYTES 1
|
||||
#define IMAGE_DVRT_ARM64X_FIXUP_SIZE_4BYTES 2
|
||||
#define IMAGE_DVRT_ARM64X_FIXUP_SIZE_8BYTES 3
|
||||
|
||||
typedef struct _IMAGE_DVRT_ARM64X_FIXUP_RECORD
|
||||
{
|
||||
USHORT Offset : 12;
|
||||
USHORT Type : 2;
|
||||
USHORT Size : 2;
|
||||
} IMAGE_DVRT_ARM64X_FIXUP_RECORD, *PIMAGE_DVRT_ARM64X_FIXUP_RECORD;
|
||||
|
||||
typedef struct _IMAGE_DVRT_ARM64X_DELTA_FIXUP_RECORD
|
||||
{
|
||||
USHORT Offset : 12;
|
||||
USHORT Type : 2;
|
||||
USHORT Sign : 1;
|
||||
USHORT Scale : 1;
|
||||
} IMAGE_DVRT_ARM64X_DELTA_FIXUP_RECORD, *PIMAGE_DVRT_ARM64X_DELTA_FIXUP_RECORD;
|
||||
|
||||
typedef struct _IMAGE_FUNCTION_ENTRY {
|
||||
DWORD StartingAddress;
|
||||
DWORD EndingAddress;
|
||||
|
|
|
@ -43,7 +43,6 @@ const char *get_machine_str(int mach)
|
|||
switch (mach)
|
||||
{
|
||||
case IMAGE_FILE_MACHINE_UNKNOWN: return "Unknown";
|
||||
case IMAGE_FILE_MACHINE_I860: return "i860";
|
||||
case IMAGE_FILE_MACHINE_I386: return "i386";
|
||||
case IMAGE_FILE_MACHINE_R3000: return "R3000";
|
||||
case IMAGE_FILE_MACHINE_R4000: return "R4000";
|
||||
|
@ -56,6 +55,10 @@ const char *get_machine_str(int mach)
|
|||
case IMAGE_FILE_MACHINE_ARM: return "ARM";
|
||||
case IMAGE_FILE_MACHINE_ARMNT: return "ARMNT";
|
||||
case IMAGE_FILE_MACHINE_THUMB: return "ARM Thumb";
|
||||
case IMAGE_FILE_MACHINE_ALPHA64: return "Alpha64";
|
||||
case IMAGE_FILE_MACHINE_CHPE_X86: return "CHPE-x86";
|
||||
case IMAGE_FILE_MACHINE_ARM64EC: return "ARM64EC";
|
||||
case IMAGE_FILE_MACHINE_ARM64X: return "ARM64X";
|
||||
}
|
||||
return "???";
|
||||
}
|
||||
|
@ -2196,16 +2199,16 @@ static void dump_dynamic_relocs_arm64x( const IMAGE_BASE_RELOCATION *base_reloc,
|
|||
rel++;
|
||||
switch (type)
|
||||
{
|
||||
case 0: /* zero-fill */
|
||||
case IMAGE_DVRT_ARM64X_FIXUP_TYPE_ZEROFILL:
|
||||
printf( " off %04x zero-fill %u bytes\n", offset, 1 << arg );
|
||||
break;
|
||||
case 1: /* set value */
|
||||
case IMAGE_DVRT_ARM64X_FIXUP_TYPE_VALUE:
|
||||
printf( " off %04x set %u bytes value ", offset, 1 << arg );
|
||||
for (i = (1 << arg ) / sizeof(USHORT); i > 0; i--) printf( "%04x", rel[i - 1] );
|
||||
rel += (1 << arg) / sizeof(USHORT);
|
||||
printf( "\n" );
|
||||
break;
|
||||
case 2: /* add value */
|
||||
case IMAGE_DVRT_ARM64X_FIXUP_TYPE_DELTA:
|
||||
printf( " off %04x add offset ", offset );
|
||||
if (arg & 1) printf( "-" );
|
||||
printf( "%08x\n", (UINT)*rel++ * ((arg & 2) ? 8 : 4) );
|
||||
|
@ -2408,14 +2411,14 @@ static BOOL get_alt_header( void )
|
|||
rel++;
|
||||
switch (type)
|
||||
{
|
||||
case 0: /* zero-fill */
|
||||
case IMAGE_DVRT_ARM64X_FIXUP_TYPE_ZEROFILL:
|
||||
memset( page + offset, 0, 1 << arg );
|
||||
break;
|
||||
case 1: /* set value */
|
||||
case IMAGE_DVRT_ARM64X_FIXUP_TYPE_VALUE:
|
||||
memcpy( page + offset, rel, 1 << arg );
|
||||
rel += (1 << arg) / sizeof(USHORT);
|
||||
break;
|
||||
case 2: /* add value */
|
||||
case IMAGE_DVRT_ARM64X_FIXUP_TYPE_DELTA:
|
||||
val = (unsigned int)*rel++ * ((arg & 2) ? 8 : 4);
|
||||
if (arg & 1) val = -val;
|
||||
*(int *)(page + offset) += val;
|
||||
|
|
Loading…
Reference in a new issue