Author: fireball
Date: Wed Aug 8 00:46:24 2007
New Revision: 28223
URL:
http://svn.reactos.org/svn/reactos?rev=28223&view=rev
Log:
- Rename exception.c to except.c to avoid conflict with another exception.c in rtl
project.
- Fix WDK compatibility.
Added:
trunk/reactos/lib/rtl/i386/except.c
- copied unchanged from r28215, trunk/reactos/lib/rtl/i386/exception.c
Removed:
trunk/reactos/lib/rtl/i386/exception.c
Modified:
trunk/reactos/lib/rtl/rtl.h
trunk/reactos/lib/rtl/rtl.rbuild
Removed: trunk/reactos/lib/rtl/i386/exception.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/lib/rtl/i386/exception.c?r…
==============================================================================
--- trunk/reactos/lib/rtl/i386/exception.c (original)
+++ trunk/reactos/lib/rtl/i386/exception.c (removed)
@@ -1,336 +1,0 @@
-/*
- * COPYRIGHT: See COPYING in the top level directory
- * PROJECT: ReactOS Run-Time Library
- * PURPOSE: User-mode exception support for IA-32
- * FILE: lib/rtl/i386/exception.c
- * PROGRAMERS: Alex Ionescu (alex(a)relsoft.net)
- * Casper S. Hornstrup (chorns(a)users.sourceforge.net)
- */
-
-/* INCLUDES *****************************************************************/
-
-#include <rtl.h>
-#define NDEBUG
-#include <debug.h>
-
-/* PUBLIC FUNCTIONS **********************************************************/
-
-/*
- * @unimplemented
- */
-VOID
-NTAPI
-RtlGetCallersAddress(OUT PVOID *CallersAddress,
- OUT PVOID *CallersCaller)
-{
- UNIMPLEMENTED;
-}
-
-/*
- * @implemented
- */
-BOOLEAN
-NTAPI
-RtlDispatchException(IN PEXCEPTION_RECORD ExceptionRecord,
- IN PCONTEXT Context)
-{
- PEXCEPTION_REGISTRATION_RECORD RegistrationFrame, NestedFrame = NULL;
- DISPATCHER_CONTEXT DispatcherContext;
- EXCEPTION_RECORD ExceptionRecord2;
- EXCEPTION_DISPOSITION Disposition;
- ULONG_PTR StackLow, StackHigh;
- ULONG_PTR RegistrationFrameEnd;
-
- /* Get the current stack limits and registration frame */
- RtlpGetStackLimits(&StackLow, &StackHigh);
- RegistrationFrame = RtlpGetExceptionList();
-
- /* Now loop every frame */
- while (RegistrationFrame != EXCEPTION_CHAIN_END)
- {
- /* Find out where it ends */
- RegistrationFrameEnd = (ULONG_PTR)RegistrationFrame +
- sizeof(EXCEPTION_REGISTRATION_RECORD);
-
- /* Make sure the registration frame is located within the stack */
- if ((RegistrationFrameEnd > StackHigh) ||
- ((ULONG_PTR)RegistrationFrame < StackLow) ||
- ((ULONG_PTR)RegistrationFrame & 0x3))
- {
- /* Check if this happened in the DPC Stack */
- if (RtlpHandleDpcStackException(RegistrationFrame,
- RegistrationFrameEnd,
- &StackLow,
- &StackHigh))
- {
- /* Use DPC Stack Limits and restart */
- continue;
- }
-
- /* Set invalid stack and return false */
- ExceptionRecord->ExceptionFlags |= EXCEPTION_STACK_INVALID;
- return FALSE;
- }
-
- /* Check if logging is enabled */
- RtlpCheckLogException(ExceptionRecord,
- Context,
- RegistrationFrame,
- sizeof(*RegistrationFrame));
-
- /* Call the handler */
- Disposition = RtlpExecuteHandlerForException(ExceptionRecord,
- RegistrationFrame,
- Context,
- &DispatcherContext,
- RegistrationFrame->
- Handler);
-
- /* Check if this is a nested frame */
- if (RegistrationFrame == NestedFrame)
- {
- /* Mask out the flag and the nested frame */
- ExceptionRecord->ExceptionFlags &= ~EXCEPTION_NESTED_CALL;
- NestedFrame = NULL;
- }
-
- /* Handle the dispositions */
- switch (Disposition)
- {
- /* Continue searching */
- case ExceptionContinueExecution:
-
- /* Check if it was non-continuable */
- if (ExceptionRecord->ExceptionFlags & EXCEPTION_NONCONTINUABLE)
- {
- /* Set up the exception record */
- ExceptionRecord2.ExceptionRecord = ExceptionRecord;
- ExceptionRecord2.ExceptionCode =
- STATUS_NONCONTINUABLE_EXCEPTION;
- ExceptionRecord2.ExceptionFlags = EXCEPTION_NONCONTINUABLE;
- ExceptionRecord2.NumberParameters = 0;
-
- /* Raise the exception */
- RtlRaiseException(&ExceptionRecord2);
- }
- else
- {
- /* Return to caller */
- return TRUE;
- }
-
- /* Continue searching */
- case ExceptionContinueSearch:
- break;
-
- /* Nested exception */
- case ExceptionNestedException:
-
- /* Turn the nested flag on */
- ExceptionRecord->ExceptionFlags |= EXCEPTION_NESTED_CALL;
-
- /* Update the current nested frame */
- if (DispatcherContext.RegistrationPointer > NestedFrame)
- {
- /* Get the frame from the dispatcher context */
- NestedFrame = DispatcherContext.RegistrationPointer;
- }
- break;
-
- /* Anything else */
- default:
-
- /* Set up the exception record */
- ExceptionRecord2.ExceptionRecord = ExceptionRecord;
- ExceptionRecord2.ExceptionCode = STATUS_INVALID_DISPOSITION;
- ExceptionRecord2.ExceptionFlags = EXCEPTION_NONCONTINUABLE;
- ExceptionRecord2.NumberParameters = 0;
-
- /* Raise the exception */
- RtlRaiseException(&ExceptionRecord2);
- break;
- }
-
- /* Go to the next frame */
- RegistrationFrame = RegistrationFrame->Next;
- }
-
- /* Unhandled, return false */
- return FALSE;
-}
-
-/*
- * @implemented
- */
-VOID
-NTAPI
-RtlUnwind(IN PVOID TargetFrame OPTIONAL,
- IN PVOID TargetIp OPTIONAL,
- IN PEXCEPTION_RECORD ExceptionRecord OPTIONAL,
- IN PVOID ReturnValue)
-{
- PEXCEPTION_REGISTRATION_RECORD RegistrationFrame, OldFrame;
- DISPATCHER_CONTEXT DispatcherContext;
- EXCEPTION_RECORD ExceptionRecord2, ExceptionRecord3;
- EXCEPTION_DISPOSITION Disposition;
- ULONG_PTR StackLow, StackHigh;
- ULONG_PTR RegistrationFrameEnd;
- CONTEXT LocalContext;
- PCONTEXT Context;
-
- /* Get the current stack limits */
- RtlpGetStackLimits(&StackLow, &StackHigh);
-
- /* Check if we don't have an exception record */
- if (!ExceptionRecord)
- {
- /* Overwrite the argument */
- ExceptionRecord = &ExceptionRecord3;
-
- /* Setup a local one */
- ExceptionRecord3.ExceptionFlags = 0;
- ExceptionRecord3.ExceptionCode = STATUS_UNWIND;
- ExceptionRecord3.ExceptionRecord = NULL;
- ExceptionRecord3.ExceptionAddress = RtlpGetExceptionAddress();
- ExceptionRecord3.NumberParameters = 0;
- }
-
- /* Check if we have a frame */
- if (TargetFrame)
- {
- /* Set it as unwinding */
- ExceptionRecord->ExceptionFlags |= EXCEPTION_UNWINDING;
- }
- else
- {
- /* Set the Exit Unwind flag as well */
- ExceptionRecord->ExceptionFlags |= (EXCEPTION_UNWINDING |
- EXCEPTION_EXIT_UNWIND);
- }
-
- /* Now capture the context */
- Context = &LocalContext;
- LocalContext.ContextFlags = CONTEXT_INTEGER |
- CONTEXT_CONTROL |
- CONTEXT_SEGMENTS;
- RtlpCaptureContext(Context);
-
- /* Pop the current arguments off */
- Context->Esp += sizeof(TargetFrame) +
- sizeof(TargetIp) +
- sizeof(ExceptionRecord) +
- sizeof(ReturnValue);
-
- /* Set the new value for EAX */
- Context->Eax = (ULONG)ReturnValue;
-
- /* Get the current frame */
- RegistrationFrame = RtlpGetExceptionList();
-
- /* Now loop every frame */
- while (RegistrationFrame != EXCEPTION_CHAIN_END)
- {
- /* If this is the target */
- if (RegistrationFrame == TargetFrame) ZwContinue(Context, FALSE);
-
- /* Check if the frame is too low */
- if ((TargetFrame) &&
- ((ULONG_PTR)TargetFrame < (ULONG_PTR)RegistrationFrame))
- {
- /* Create an invalid unwind exception */
- ExceptionRecord2.ExceptionCode = STATUS_INVALID_UNWIND_TARGET;
- ExceptionRecord2.ExceptionFlags = EXCEPTION_NONCONTINUABLE;
- ExceptionRecord2.ExceptionRecord = ExceptionRecord;
- ExceptionRecord2.NumberParameters = 0;
-
- /* Raise the exception */
- RtlRaiseException(&ExceptionRecord2);
- }
-
- /* Find out where it ends */
- RegistrationFrameEnd = (ULONG_PTR)RegistrationFrame +
- sizeof(EXCEPTION_REGISTRATION_RECORD);
-
- /* Make sure the registration frame is located within the stack */
- if ((RegistrationFrameEnd > StackHigh) ||
- ((ULONG_PTR)RegistrationFrame < StackLow) ||
- ((ULONG_PTR)RegistrationFrame & 0x3))
- {
- /* Check if this happened in the DPC Stack */
- if (RtlpHandleDpcStackException(RegistrationFrame,
- RegistrationFrameEnd,
- &StackLow,
- &StackHigh))
- {
- /* Use DPC Stack Limits and restart */
- continue;
- }
-
- /* Create an invalid stack exception */
- ExceptionRecord2.ExceptionCode = STATUS_BAD_STACK;
- ExceptionRecord2.ExceptionFlags = EXCEPTION_NONCONTINUABLE;
- ExceptionRecord2.ExceptionRecord = ExceptionRecord;
- ExceptionRecord2.NumberParameters = 0;
-
- /* Raise the exception */
- RtlRaiseException(&ExceptionRecord2);
- }
- else
- {
- /* Call the handler */
- Disposition = RtlpExecuteHandlerForUnwind(ExceptionRecord,
- RegistrationFrame,
- Context,
- &DispatcherContext,
- RegistrationFrame->
- Handler);
- switch(Disposition)
- {
- /* Continue searching */
- case ExceptionContinueSearch:
- break;
-
- /* Collission */
- case ExceptionCollidedUnwind :
-
- /* Get the original frame */
- RegistrationFrame = DispatcherContext.RegistrationPointer;
- break;
-
- /* Anything else */
- default:
-
- /* Set up the exception record */
- ExceptionRecord2.ExceptionRecord = ExceptionRecord;
- ExceptionRecord2.ExceptionCode = STATUS_INVALID_DISPOSITION;
- ExceptionRecord2.ExceptionFlags = EXCEPTION_NONCONTINUABLE;
- ExceptionRecord2.NumberParameters = 0;
-
- /* Raise the exception */
- RtlRaiseException(&ExceptionRecord2);
- break;
- }
-
- /* Go to the next frame */
- OldFrame = RegistrationFrame;
- RegistrationFrame = RegistrationFrame->Next;
-
- /* Remove this handler */
- RtlpSetExceptionList(OldFrame);
- }
- }
-
- /* Check if we reached the end */
- if (TargetFrame == EXCEPTION_CHAIN_END)
- {
- /* Unwind completed, so we don't exit */
- ZwContinue(Context, FALSE);
- }
- else
- {
- /* This is an exit_unwind or the frame wasn't present in the list */
- ZwRaiseException(ExceptionRecord, Context, FALSE);
- }
-}
-
-/* EOF */
Modified: trunk/reactos/lib/rtl/rtl.h
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/lib/rtl/rtl.h?rev=28223&am…
==============================================================================
--- trunk/reactos/lib/rtl/rtl.h (original)
+++ trunk/reactos/lib/rtl/rtl.h Wed Aug 8 00:46:24 2007
@@ -24,11 +24,15 @@
#include <ndk/ntndk.h>
/* Internal RTL header */
-#include <reactos/helper.h>
#include "rtlp.h"
+/* PSEH Support */
+#include <reactos/helper.h>
#include <pseh/pseh.h>
+
+#ifndef _MSC_VER
#include <intrin.h>
+#endif
#endif /* RTL_H */
Modified: trunk/reactos/lib/rtl/rtl.rbuild
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/lib/rtl/rtl.rbuild?rev=282…
==============================================================================
--- trunk/reactos/lib/rtl/rtl.rbuild (original)
+++ trunk/reactos/lib/rtl/rtl.rbuild Wed Aug 8 00:46:24 2007
@@ -10,7 +10,7 @@
<directory name="i386">
<file>debug_asm.S</file>
<file>except_asm.s</file>
- <file>exception.c</file>
+ <file>except.c</file>
<file>random_asm.S</file>
<file>rtlswap.S</file>
<file>rtlmem.s</file>