This is necessary to accommodate ARM64EC, under which CONTEXT refers to the
X86_64 context structure but the regular ARM64 context structure is still
exposed as ARM64_NT_CONTEXT.

Based on patch by Billy Laws.

Signed-off-by: Jacek Caban <ja...@codeweavers.com>
---
 mingw-w64-headers/include/winnt.h | 91 ++++++++++++++++++++++---------
 1 file changed, 64 insertions(+), 27 deletions(-)

diff --git a/mingw-w64-headers/include/winnt.h b/mingw-w64-headers/include/winnt.h
index b4fab0174..241be645e 100644
--- a/mingw-w64-headers/include/winnt.h
+++ b/mingw-w64-headers/include/winnt.h
@@ -2213,24 +2213,41 @@ extern "C" {
 #define EXCEPTION_READ_FAULT    0
 #define EXCEPTION_WRITE_FAULT   1
 #define EXCEPTION_EXECUTE_FAULT 8
+#endif /* defined(_ARM64_) || defined(_ARM64EC_) */
 
 #if !defined(RC_INVOKED)
 
-#define CONTEXT_ARM64           0x400000
-#define CONTEXT_CONTROL         (CONTEXT_ARM64 | 0x00000001)
-#define CONTEXT_INTEGER         (CONTEXT_ARM64 | 0x00000002)
-#define CONTEXT_FLOATING_POINT  (CONTEXT_ARM64 | 0x00000004)
-#define CONTEXT_DEBUG_REGISTERS (CONTEXT_ARM64 | 0x00000008)
+#define CONTEXT_ARM64                 0x400000
+#define CONTEXT_ARM64_CONTROL         (CONTEXT_ARM64 | 0x00000001)
+#define CONTEXT_ARM64_INTEGER         (CONTEXT_ARM64 | 0x00000002)
+#define CONTEXT_ARM64_FLOATING_POINT  (CONTEXT_ARM64 | 0x00000004)
+#define CONTEXT_ARM64_DEBUG_REGISTERS (CONTEXT_ARM64 | 0x00000008)
 
-#define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER)
-#define CONTEXT_ALL  (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS)
+#define CONTEXT_ARM64_FULL (CONTEXT_ARM64_CONTROL | CONTEXT_ARM64_INTEGER)
+#define CONTEXT_ARM64_ALL  (CONTEXT_ARM64_CONTROL | CONTEXT_ARM64_INTEGER | CONTEXT_ARM64_FLOATING_POINT | CONTEXT_ARM64_DEBUG_REGISTERS)
 
-#define ARM64_MAX_BREAKPOINTS   8
-#define ARM64_MAX_WATCHPOINTS   2
+#ifdef _ARM64_
+
+#define CONTEXT_CONTROL         CONTEXT_ARM64_CONTROL
+#define CONTEXT_INTEGER         CONTEXT_ARM64_INTEGER
+#define CONTEXT_FLOATING_POINT  CONTEXT_ARM64_FLOATING_POINT
+#define CONTEXT_DEBUG_REGISTERS CONTEXT_ARM64_DEBUG_REGISTERS
+#define CONTEXT_FULL            CONTEXT_ARM64_FULL
+#define CONTEXT_ALL             CONTEXT_ARM64_ALL
+
+#define CONTEXT_EXCEPTION_ACTIVE    0x08000000
+#define CONTEXT_SERVICE_ACTIVE      0x10000000
+#define CONTEXT_EXCEPTION_REQUEST   0x40000000
+#define CONTEXT_EXCEPTION_REPORTING 0x80000000
+
+#endif /* _ARM64_ */
 
 #endif /* !defined(RC_INVOKED) */
 
-  typedef union _NEON128 {
+#define ARM64_MAX_BREAKPOINTS   8
+#define ARM64_MAX_WATCHPOINTS   2
+
+  typedef union _ARM64_NT_NEON128 {
     struct
     {
         ULONGLONG Low;
@@ -2240,9 +2257,19 @@ extern "C" {
     float S[4];
     WORD  H[8];
     BYTE  B[16];
-  } NEON128, *PNEON128;
+  } ARM64_NT_NEON128, *PARM64_NT_NEON128;
 
-  typedef struct DECLSPEC_ALIGN(16) _CONTEXT {
+#ifdef _ARM64_
+  typedef ARM64_NT_NEON128 NEON128, *PNEON128;
+#endif
+
+  typedef struct DECLSPEC_ALIGN(16)
+#ifdef _ARM64_
+  _CONTEXT
+#else
+  _ARM64_NT_CONTEXT
+#endif
+  {
     ULONG ContextFlags;                 /* 000 */
     /* CONTEXT_INTEGER */
     ULONG Cpsr;                         /* 004 */
@@ -2288,7 +2315,7 @@ extern "C" {
     DWORD64 Sp;                         /* 100 */
     DWORD64 Pc;                         /* 108 */
     /* CONTEXT_FLOATING_POINT */
-    NEON128 V[32];                      /* 110 */
+    ARM64_NT_NEON128 V[32];             /* 110 */
     DWORD Fpcr;                         /* 310 */
     DWORD Fpsr;                         /* 314 */
     /* CONTEXT_DEBUG_REGISTERS */
@@ -2296,35 +2323,44 @@ extern "C" {
     DWORD64 Bvr[ARM64_MAX_BREAKPOINTS]; /* 338 */
     DWORD Wcr[ARM64_MAX_WATCHPOINTS];   /* 378 */
     DWORD64 Wvr[ARM64_MAX_WATCHPOINTS]; /* 380 */
-  } CONTEXT, *PCONTEXT;
+  } ARM64_NT_CONTEXT, *PARM64_NT_CONTEXT;
 
+#ifdef _ARM64_
+  typedef ARM64_NT_CONTEXT CONTEXT, *PCONTEXT;
+#endif
+
+
+  typedef struct _IMAGE_ARM64_RUNTIME_FUNCTION_ENTRY ARM64_RUNTIME_FUNCTION, *PARM64_RUNTIME_FUNCTION;
+
+#ifdef _ARM64_
   typedef struct _IMAGE_ARM64_RUNTIME_FUNCTION_ENTRY RUNTIME_FUNCTION, *PRUNTIME_FUNCTION;
   typedef PRUNTIME_FUNCTION (*PGET_RUNTIME_FUNCTION_CALLBACK)(DWORD64 ControlPc,PVOID Context);
+#endif
 
 #define UNW_FLAG_NHANDLER   0x0
 #define UNW_FLAG_EHANDLER   0x1
 #define UNW_FLAG_UHANDLER   0x2
 
-  struct _DISPATCHER_CONTEXT;
-  typedef struct _DISPATCHER_CONTEXT DISPATCHER_CONTEXT;
-  typedef struct _DISPATCHER_CONTEXT *PDISPATCHER_CONTEXT;
-
-  struct _DISPATCHER_CONTEXT {
+  typedef struct _DISPATCHER_CONTEXT_ARM64 {
     ULONG_PTR ControlPc;
     ULONG_PTR ImageBase;
-    PRUNTIME_FUNCTION FunctionEntry;
+    PARM64_RUNTIME_FUNCTION FunctionEntry;
     ULONG_PTR EstablisherFrame;
     ULONG_PTR TargetPc;
-    PCONTEXT ContextRecord;
+    PARM64_NT_CONTEXT ContextRecord;
     PEXCEPTION_ROUTINE LanguageHandler;
     PVOID HandlerData;
     struct _UNWIND_HISTORY_TABLE *HistoryTable;
     ULONG ScopeIndex;
     BOOLEAN ControlPcIsUnwound;
     PBYTE NonVolatileRegisters;
-  };
+  } DISPATCHER_CONTEXT_ARM64, *PDISPATCHER_CONTEXT_ARM64;
 
-  typedef struct _KNONVOLATILE_CONTEXT_POINTERS {
+#if defined(_ARM64_)
+  typedef DISPATCHER_CONTEXT_ARM64 DISPATCHER_CONTEXT, *PDISPATCHER_CONTEXT;
+#endif
+
+  typedef struct _KNONVOLATILE_CONTEXT_POINTERS_ARM64 {
     PDWORD64 X19;
     PDWORD64 X20;
     PDWORD64 X21;
@@ -2346,12 +2382,13 @@ extern "C" {
     PDWORD64 D13;
     PDWORD64 D14;
     PDWORD64 D15;
-  } KNONVOLATILE_CONTEXT_POINTERS, *PKNONVOLATILE_CONTEXT_POINTERS;
+  } KNONVOLATILE_CONTEXT_POINTERS_ARM64, *PKNONVOLATILE_CONTEXT_POINTERS_ARM64;
 
-#define OUT_OF_PROCESS_FUNCTION_TABLE_CALLBACK_EXPORT_NAME "OutOfProcessFunctionTableCallback"
-
-#endif /* _ARM64_ */
+#ifdef _ARM64_
+  typedef KNONVOLATILE_CONTEXT_POINTERS_ARM64 KNONVOLATILE_CONTEXT_POINTERS, *PKNONVOLATILE_CONTEXT_POINTERS;
+#endif
 
+#define OUT_OF_PROCESS_FUNCTION_TABLE_CALLBACK_EXPORT_NAME "OutOfProcessFunctionTableCallback"
 
 #ifdef _X86_
 

_______________________________________________
Mingw-w64-public mailing list
Mingw-w64-public@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public

Reply via email to