Maarten Lankhorst : ntdll: Clear alignment flag in exception handlers.
Alexandre Julliard
julliard at winehq.org
Tue Apr 20 11:32:21 CDT 2010
Module: wine
Branch: master
Commit: 8734d5b9acb2ae85a8da2160f881ad27551edc4e
URL: http://source.winehq.org/git/wine.git/?a=commit;h=8734d5b9acb2ae85a8da2160f881ad27551edc4e
Author: Maarten Lankhorst <m.b.lankhorst at gmail.com>
Date: Mon Apr 19 22:36:22 2010 +0200
ntdll: Clear alignment flag in exception handlers.
---
dlls/ntdll/signal_i386.c | 11 +++++++++++
1 files changed, 11 insertions(+), 0 deletions(-)
diff --git a/dlls/ntdll/signal_i386.c b/dlls/ntdll/signal_i386.c
index 4998820..7a60c2a 100644
--- a/dlls/ntdll/signal_i386.c
+++ b/dlls/ntdll/signal_i386.c
@@ -873,6 +873,15 @@ static int solaris_sigaction( int sig, const struct sigaction *new, struct sigac
typedef void (WINAPI *raise_func)( EXCEPTION_RECORD *rec, CONTEXT *context );
+extern void clear_alignment_flag(void);
+__ASM_GLOBAL_FUNC( clear_alignment_flag,
+ "pushfl\n\t"
+ __ASM_CFI(".cfi_adjust_cfa_offset 4\n\t")
+ "andl $~0x40000,(%esp)\n\t"
+ "popfl\n\t"
+ __ASM_CFI(".cfi_adjust_cfa_offset -4\n\t")
+ "ret" )
+
/***********************************************************************
* init_handler
@@ -884,6 +893,8 @@ static inline void *init_handler( const SIGCONTEXT *sigcontext, WORD *fs, WORD *
{
TEB *teb = get_current_teb();
+ clear_alignment_flag();
+
/* get %fs and %gs at time of the fault */
#ifdef FS_sig
*fs = LOWORD(FS_sig(sigcontext));
More information about the wine-cvs
mailing list