/*
 * Win32 exception assembly functions
 *
 * Copyright (c) 1996 Onno Hovers, (onno@stack.urc.tue.nl)
 *
 */
#if defined(__svr4__) || defined(_SCO_DS)
#define __ELF__ 1
#endif

#ifndef __ELF__

     .globl _EXC_CallUnhandledExceptionFilter
 _EXC_CallUnhandledExceptionFilter:

#else  /* __ELF__ */

     .globl EXC_CallUnhandledExceptionFilter
 EXC_CallUnhandledExceptionFilter:

#endif  /* __ELF__ */
     leal   4(%esp),%eax
     pushl  %eax
#ifndef __ELF__
     call   *_pTopExcHandler
#else  /* __ELF__ */
     call   *pTopExcHandler
#endif  /* __ELF__ */
     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

#ifndef __ELF__
	.globl _RaiseException

 _RaiseException:
       push   $_EXC_RaiseException
       jmp    ContextCall

       .globl _RtlUnwind

 _RtlUnwind:
       push   $_EXC_RtlUnwind

#else  /* __ELF__ */
       .globl RaiseException

 RaiseException:
       push   $EXC_RaiseException
       jmp    ContextCall

       .globl RtlUnwind

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

 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
