mirror of
git://repo.or.cz/tinycc.git
synced 2026-06-19 11:24:19 +08:00
winnt.h: fix ARM64 CONTEXT struct layout mismatch
The fallback CONTEXT struct for ARM64 had multiple structural issues: - ContextFlags was DWORD64 (8 bytes) instead of ULONG (4 bytes) - Missing Cpsr field entirely - Missing DECLSPEC_ALIGN(16) attribute - X registers as simple array X[29] instead of union with named struct X[31] These mismatches caused incorrect struct size and field offsets, leading to register corruption when used with Windows APIs like GetThreadContext or RtlRestoreContext. The fallback struct now matches the official ARM64_NT_CONTEXT layout exactly, ensuring binary compatibility with Windows ARM64 system calls.
This commit is contained in:
parent
d2c06612a5
commit
5f641e2a25
@ -2072,11 +2072,45 @@ typedef DWORD LCID;
|
||||
|
||||
#if defined(__aarch64__) && !defined(_ARM64_CONTEXT_DECLARED)
|
||||
#define _ARM64_CONTEXT_DECLARED
|
||||
typedef struct _CONTEXT {
|
||||
DWORD64 ContextFlags;
|
||||
DWORD64 X[29];
|
||||
DWORD64 Fp;
|
||||
DWORD64 Lr;
|
||||
typedef struct DECLSPEC_ALIGN(16) _CONTEXT {
|
||||
ULONG ContextFlags;
|
||||
ULONG Cpsr;
|
||||
union {
|
||||
struct {
|
||||
DWORD64 X0;
|
||||
DWORD64 X1;
|
||||
DWORD64 X2;
|
||||
DWORD64 X3;
|
||||
DWORD64 X4;
|
||||
DWORD64 X5;
|
||||
DWORD64 X6;
|
||||
DWORD64 X7;
|
||||
DWORD64 X8;
|
||||
DWORD64 X9;
|
||||
DWORD64 X10;
|
||||
DWORD64 X11;
|
||||
DWORD64 X12;
|
||||
DWORD64 X13;
|
||||
DWORD64 X14;
|
||||
DWORD64 X15;
|
||||
DWORD64 X16;
|
||||
DWORD64 X17;
|
||||
DWORD64 X18;
|
||||
DWORD64 X19;
|
||||
DWORD64 X20;
|
||||
DWORD64 X21;
|
||||
DWORD64 X22;
|
||||
DWORD64 X23;
|
||||
DWORD64 X24;
|
||||
DWORD64 X25;
|
||||
DWORD64 X26;
|
||||
DWORD64 X27;
|
||||
DWORD64 X28;
|
||||
DWORD64 Fp;
|
||||
DWORD64 Lr;
|
||||
} DUMMYSTRUCTNAME;
|
||||
DWORD64 X[31];
|
||||
} DUMMYUNIONNAME;
|
||||
DWORD64 Sp;
|
||||
DWORD64 Pc;
|
||||
ARM64_NT_NEON128 V[32];
|
||||
|
||||
Loading…
Reference in New Issue
Block a user