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