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