/*
 * Win32 exception assembly functions
 *
 * Copyright (c) 1996 Onno Hovers, (onno@stack.urc.tue.nl)
 *
 */
#include "../include/config.h"

#ifdef NEED_UNDERSCORE_PREFIX

     .globl _EXC_CallUnhandledExceptionFilter
 _EXC_CallUnhandledExceptionFilter:

#else

     .globl EXC_CallUnhandledExceptionFilter
 EXC_CallUnhandledExceptionFilter:

#endif  /* NEED_UNDERSCORE_PREFIX */
     leal   4(%esp),%eax
     pushl  %eax
#ifdef NEED_UNDERSCORE_PREFIX
     call   *_pTopExcHandler
#else
     call   *pTopExcHandler
#endif  /* NEED_UNDERSCORE_PREFIX */
     movl   %ebp,%esp
     ret



/*******************************************************************
 *
 *        RaiseException           (KERNEL32. 418 )
 *        RtlUnwind                (KERNEL32. 443 )
 *
 * we need to save our context before a call to
 *
 * -RaiseException
 * -RtlUnwind
 *
 * after these functions we need to restore that context structure as
 * the actual context so changes made to the context structure in an
 * exception-handler will be reflected in the context after these
 * functions return. Fortunately both functions have 4 DWORD params.
 * we pass the function to be called as a fifth parameter to ContextCall
 *
 */
#define CONTEXT_SegSs        -4
#define CONTEXT_Esp          -8
#define CONTEXT_EFlags       -12
#define CONTEXT_SegCs        -16
#define CONTEXT_Eip          -20
#define CONTEXT_Ebp          -24
#define CONTEXT_Eax          -28
#define CONTEXT_Ecx          -32
#define CONTEXT_Edx          -36
#define CONTEXT_Ebx          -40
#define CONTEXT_Esi          -44
#define CONTEXT_Edi          -48
#define CONTEXT_SegDs        -52
#define CONTEXT_SegEs        -56
#define CONTEXT_SegFs        -60
#define CONTEXT_SegGs        -64
#define FLOAT_Cr0NpxState    -68
#define FLOAT_RegisterArea   -148
#define FLOAT_DataSelector   -152
#define FLOAT_DataOffset     -156
#define FLOAT_ErrorSelector  -160
#define FLOAT_ErrorOffset    -164
#define FLOAT_TagWord        -168
#define FLOAT_StatusWord     -172
#define FLOAT_ControlWord    -176
#define CONTEXT_FloatSave    -176
#define CONTEXT_Dr7          -180
#define CONTEXT_Dr6          -184
#define CONTEXT_Dr3          -188
#define CONTEXT_Dr2          -192
#define CONTEXT_Dr1          -196
#define CONTEXT_Dr0          -200
#define CONTEXT_ContextFlags -204
#define CONTEXT              -204
#define CONTEXTSIZE           204
#define CONTEXTFLAGS          0x10007

#define ORIG_ESP              16         /** cdecl !!! **/
#define PARM_ARG4             28
#define PARM_ARG3             24
#define PARM_ARG2             20
#define PARM_ARG1             16
#define PARM_RETURN           12
#define PARM_CALLFUNC         8
#define PARM_EBP              4
#define PARM_EFLAGS           0

#ifdef NEED_UNDERSCORE_PREFIX
	.globl _RaiseException

 _RaiseException:
       push   $_EXC_RaiseException
       jmp    ContextCall

       .globl _RtlUnwind

 _RtlUnwind:
       push   $_EXC_RtlUnwind

#else  /* NEED_UNDERSCORE_PREFIX */
       .globl RaiseException

 RaiseException:
       push   $EXC_RaiseException
       jmp    ContextCall

       .globl RtlUnwind

 RtlUnwind:
       push   $EXC_RtlUnwind
#endif  /* NEED_UNDERSCORE_PREFIX */

 ContextCall:
       pushl  %ebp
       pushfl
       movl   %esp, %ebp
       subl   $CONTEXTSIZE,      %esp
       movl   %eax, CONTEXT_Eax(%ebp)
       leal   ORIG_ESP(%ebp), %eax
       movl   %eax, CONTEXT_Esp(%ebp)
       movl   PARM_EFLAGS(%ebp), %eax
       movl   %eax, CONTEXT_EFlags(%ebp)
       movl   PARM_EBP(%ebp), %eax
       movl   %eax, CONTEXT_Ebp(%ebp)
       movl   PARM_RETURN(%ebp), %eax
       movl   %eax, CONTEXT_Eip(%ebp)
       movl   %edi, CONTEXT_Edi(%ebp)
       movl   %esi, CONTEXT_Esi(%ebp)
       movl   %ebx, CONTEXT_Ebx(%ebp)
       movl   %edx, CONTEXT_Edx(%ebp)
       movl   %ecx, CONTEXT_Ecx(%ebp)
       xorl   %eax, %eax
       movw   %ss, %ax
       movl   %eax, CONTEXT_SegSs(%ebp)
       movw   %cs, %ax
       movl   %eax, CONTEXT_SegCs(%ebp)
       movw   %gs, %ax
       movl   %eax, CONTEXT_SegGs(%ebp)
       movw   %fs, %ax
       movl   %eax, CONTEXT_SegFs(%ebp)
       movw   %es, %ax
       movl   %eax, CONTEXT_SegEs(%ebp)
       movw   %ds, %ax
       movl   %eax, CONTEXT_SegDs(%ebp)
       fsave  CONTEXT_FloatSave(%ebp)
       movl   $CONTEXTFLAGS, %eax
       movl   %eax, CONTEXT_ContextFlags(%ebp)
       pushl  %ebp
       leal   CONTEXT(%ebp), %eax
       pushl  %eax
       pushl  PARM_ARG4(%ebp)
       pushl  PARM_ARG3(%ebp)
       pushl  PARM_ARG2(%ebp)
       pushl  PARM_ARG1(%ebp)
       call   *PARM_CALLFUNC(%ebp)
       addl   $20,%esp
       popl   %ebp
       lds    CONTEXT_Esp(%ebp),%edi
       movl   CONTEXT_Eip(%ebp),%eax
       movl   %eax,-4(%edi)
       movl   CONTEXT_EFlags(%ebp),%eax
       movl   %eax,-8(%edi)
       movl   CONTEXT_Edi(%ebp),%eax
       movl   %eax,-12(%edi)
       movl   CONTEXT_SegDs(%ebp),%eax
       movw   %ax,%ds
       movl   CONTEXT_SegEs(%ebp),%eax
       movw   %ax,%es
       movl   CONTEXT_SegFs(%ebp),%eax
       movw   %ax,%fs
       movl   CONTEXT_SegGs(%ebp),%eax
       movw   %ax,%gs
       frstor CONTEXT_FloatSave(%ebp)
       movl   CONTEXT_Ecx(%ebp),%ecx
       movl   CONTEXT_Edx(%ebp),%edx
       movl   CONTEXT_Ebx(%ebp),%ebx
       movl   CONTEXT_Esi(%ebp),%esi
       movl   CONTEXT_Eax(%ebp),%eax
       movl   CONTEXT_Ebp(%ebp),%ebp
       lea    -12(%edi),%esp
       popl   %edi
       popfl
       ret
