Module: wine Branch: master Commit: 8734d5b9acb2ae85a8da2160f881ad27551edc4e URL: http://source.winehq.org/git/wine.git/?a=commit;h=8734d5b9acb2ae85a8da2160f8...
Author: Maarten Lankhorst m.b.lankhorst@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));