Alexandre Julliard : ntdll: Move the XSTATE definitions to the platform-specific files.

Alexandre Julliard julliard at winehq.org
Mon Jun 14 16:00:36 CDT 2021


Module: wine
Branch: master
Commit: 2849ca9db42d7c2dad57f987fd595c3cb2050eb1
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=2849ca9db42d7c2dad57f987fd595c3cb2050eb1

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Mon Jun 14 12:55:39 2021 +0200

ntdll: Move the XSTATE definitions to the platform-specific files.

Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/ntdll/unix/signal_i386.c   | 35 +++++++++++++++++++++++++++++++
 dlls/ntdll/unix/signal_x86_64.c | 34 ++++++++++++++++++++++++++++++
 dlls/ntdll/unix/unix_private.h  | 46 -----------------------------------------
 3 files changed, 69 insertions(+), 46 deletions(-)

diff --git a/dlls/ntdll/unix/signal_i386.c b/dlls/ntdll/unix/signal_i386.c
index 1ffaa543124..cb90eade4c6 100644
--- a/dlls/ntdll/unix/signal_i386.c
+++ b/dlls/ntdll/unix/signal_i386.c
@@ -580,6 +580,41 @@ static BOOL is_inside_syscall( ucontext_t *sigcontext )
             (char *)ESP_sig(sigcontext) <= (char *)x86_thread_data()->syscall_frame);
 }
 
+
+struct xcontext
+{
+    CONTEXT c;
+    CONTEXT_EX c_ex;
+    ULONG64 host_compaction_mask;
+};
+
+extern BOOL xstate_compaction_enabled DECLSPEC_HIDDEN;
+
+static inline XSTATE *xstate_from_context( const CONTEXT *context )
+{
+    CONTEXT_EX *xctx = (CONTEXT_EX *)(context + 1);
+
+    if ((context->ContextFlags & CONTEXT_XSTATE) != CONTEXT_XSTATE) return NULL;
+    return (XSTATE *)((char *)xctx + xctx->XState.Offset);
+}
+
+static inline void context_init_xstate( CONTEXT *context, void *xstate_buffer )
+{
+    CONTEXT_EX *xctx;
+
+    xctx = (CONTEXT_EX *)(context + 1);
+    xctx->Legacy.Length = sizeof(CONTEXT);
+    xctx->Legacy.Offset = -(LONG)sizeof(CONTEXT);
+
+    xctx->XState.Length = sizeof(XSTATE);
+    xctx->XState.Offset = (BYTE *)xstate_buffer - (BYTE *)xctx;
+
+    xctx->All.Length = sizeof(CONTEXT) + xctx->XState.Offset + xctx->XState.Length;
+    xctx->All.Offset = -(LONG)sizeof(CONTEXT);
+    context->ContextFlags |= CONTEXT_XSTATE;
+}
+
+
 #ifdef __sun
 
 /* We have to workaround two Solaris breakages:
diff --git a/dlls/ntdll/unix/signal_x86_64.c b/dlls/ntdll/unix/signal_x86_64.c
index 404006d22d1..46243ea00d4 100644
--- a/dlls/ntdll/unix/signal_x86_64.c
+++ b/dlls/ntdll/unix/signal_x86_64.c
@@ -329,6 +329,40 @@ static BOOL is_inside_syscall( ucontext_t *sigcontext )
 }
 
 
+struct xcontext
+{
+    CONTEXT c;
+    CONTEXT_EX c_ex;
+    ULONG64 host_compaction_mask;
+};
+
+extern BOOL xstate_compaction_enabled DECLSPEC_HIDDEN;
+
+static inline XSTATE *xstate_from_context( const CONTEXT *context )
+{
+    CONTEXT_EX *xctx = (CONTEXT_EX *)(context + 1);
+
+    if ((context->ContextFlags & CONTEXT_XSTATE) != CONTEXT_XSTATE) return NULL;
+    return (XSTATE *)((char *)xctx + xctx->XState.Offset);
+}
+
+static inline void context_init_xstate( CONTEXT *context, void *xstate_buffer )
+{
+    CONTEXT_EX *xctx;
+
+    xctx = (CONTEXT_EX *)(context + 1);
+    xctx->Legacy.Length = sizeof(CONTEXT);
+    xctx->Legacy.Offset = -(LONG)sizeof(CONTEXT);
+
+    xctx->XState.Length = sizeof(XSTATE);
+    xctx->XState.Offset = (BYTE *)xstate_buffer - (BYTE *)xctx;
+
+    xctx->All.Length = sizeof(CONTEXT) + xctx->XState.Offset + xctx->XState.Length;
+    xctx->All.Offset = -(LONG)sizeof(CONTEXT);
+    context->ContextFlags |= CONTEXT_XSTATE;
+}
+
+
 /***********************************************************************
  * Definitions for Dwarf unwind tables
  */
diff --git a/dlls/ntdll/unix/unix_private.h b/dlls/ntdll/unix/unix_private.h
index f6934ae9e91..28ba07ceac1 100644
--- a/dlls/ntdll/unix/unix_private.h
+++ b/dlls/ntdll/unix/unix_private.h
@@ -335,52 +335,6 @@ static inline TEB64 *NtCurrentTeb64(void) { return NULL; }
 static inline TEB64 *NtCurrentTeb64(void) { return (TEB64 *)NtCurrentTeb()->GdiBatchCount; }
 #endif
 
-struct xcontext
-{
-    CONTEXT c;
-    CONTEXT_EX c_ex;
-    ULONG64 host_compaction_mask;
-};
-
-#if defined(__i386__) || defined(__x86_64__)
-extern BOOL xstate_compaction_enabled DECLSPEC_HIDDEN;
-
-static inline XSTATE *xstate_from_context( const CONTEXT *context )
-{
-    CONTEXT_EX *xctx = (CONTEXT_EX *)(context + 1);
-
-    if ((context->ContextFlags & CONTEXT_XSTATE) != CONTEXT_XSTATE)
-        return NULL;
-
-    return (XSTATE *)((char *)(context + 1) + xctx->XState.Offset);
-}
-
-static inline void context_init_xstate( CONTEXT *context, void *xstate_buffer )
-{
-    CONTEXT_EX *xctx;
-
-    xctx = (CONTEXT_EX *)(context + 1);
-    xctx->Legacy.Length = sizeof(CONTEXT);
-    xctx->Legacy.Offset = -(LONG)sizeof(CONTEXT);
-
-    xctx->XState.Length = sizeof(XSTATE);
-    xctx->XState.Offset = (BYTE *)xstate_buffer - (BYTE *)xctx;
-
-    xctx->All.Length = sizeof(CONTEXT) + xctx->XState.Offset + xctx->XState.Length;
-    xctx->All.Offset = -(LONG)sizeof(CONTEXT);
-    context->ContextFlags |= 0x40;
-}
-
-#else
-static inline XSTATE *xstate_from_context( const CONTEXT *context )
-{
-    return NULL;
-}
-static inline void context_init_xstate( CONTEXT *context, void *xstate_buffer )
-{
-}
-#endif
-
 enum loadorder
 {
     LO_INVALID,




More information about the wine-cvs mailing list