Author: tkreuzer
Date: Tue Jan 25 09:33:37 2011
New Revision: 50483
URL:
http://svn.reactos.org/svn/reactos?rev=50483&view=rev
Log:
[CRT]
Implement __SEH_epilog
Modified:
branches/cmake-bringup/lib/sdk/crt/except/i386/seh_prolog.s
Modified: branches/cmake-bringup/lib/sdk/crt/except/i386/seh_prolog.s
URL:
http://svn.reactos.org/svn/reactos/branches/cmake-bringup/lib/sdk/crt/excep…
==============================================================================
--- branches/cmake-bringup/lib/sdk/crt/except/i386/seh_prolog.s [iso-8859-1] (original)
+++ branches/cmake-bringup/lib/sdk/crt/except/i386/seh_prolog.s [iso-8859-1] Tue Jan 25
09:33:37 2011
@@ -103,16 +103,16 @@
/* Safe SEH table, overwriting OLDFRAME.ReturnAddress */
mov [ebp - SEH_FRAME_OriginalEbp + SEH_FRAME_SEHTable], eax
+ /* Safe the disable value, overwriting OLDFRAME.SEHTable */
+ mov dword ptr [ebp - SEH_FRAME_OriginalEbp + SEH_FRAME_Disable], -1
+
+ /* Load the address of the new registration record */
+ lea eax, [ebp - SEH_FRAME_OriginalEbp + SEH_FRAME_PreviousRecord]
+
/* Save registers */
mov [esp + SAFE_AREA_Edi], edi
mov [esp + SAFE_AREA_Esi], esi
mov [esp + SAFE_AREA_Ebx], ebx
-
- /* Load the address of the new registration record */
- lea eax, [ebp - SEH_FRAME_OriginalEbp + SEH_FRAME_PreviousRecord]
-
- /* Safe the disable value, overwriting OLDFRAME.SEHTable */
- mov dword ptr [ebp - SEH_FRAME_OriginalEbp + SEH_FRAME_Disable], -1
/* Enqueue the new record */
mov fs:[0], eax
@@ -120,4 +120,33 @@
/* Return to the caller */
ret
+
+PUBLIC __SEH_epilog
+__SEH_epilog:
+
+ /* Restore the previous exception registration record */
+ mov ecx, [ebp - SEH_FRAME_OriginalEbp + SEH_FRAME_PreviousRecord]
+ mov fs:[0], ecx
+
+ /* Restore saved registers */
+ mov edi, [esp + 4 + SAFE_AREA_Edi]
+ mov esi, [esp + 4 + SAFE_AREA_Esi]
+ mov ebx, [esp + 4 + SAFE_AREA_Ebx]
+
+ /* Get the return address */
+ mov ecx, [esp]
+
+ /* Clean up stack */
+ mov esp, ebp
+
+ /* Get previous ebp */
+ mov ebp, [esp]
+
+ /* Save return address */
+ mov [esp], ecx
+
+ /* Return to the caller */
+ ret
+
+
END