ntdll: Print fixme message in case of nested exception.

Signed-off-by: Piotr Caban <piotr@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Piotr Caban 2016-08-17 12:48:17 +02:00 committed by Alexandre Julliard
parent b23de3cd4a
commit 10fa7c6e45
1 changed files with 19 additions and 0 deletions

View File

@ -2250,6 +2250,15 @@ static RUNTIME_FUNCTION *lookup_function_info( ULONG64 pc, ULONG64 *base, LDR_MO
return func; return func;
} }
static DWORD nested_exception_handler( EXCEPTION_RECORD *rec, EXCEPTION_REGISTRATION_RECORD *frame,
CONTEXT *context, EXCEPTION_REGISTRATION_RECORD **dispatcher )
{
if (rec->ExceptionFlags & (EH_UNWINDING | EH_EXIT_UNWIND)) return ExceptionContinueSearch;
/* FIXME */
return ExceptionNestedException;
}
/********************************************************************** /**********************************************************************
* call_handler * call_handler
* *
@ -2258,12 +2267,18 @@ static RUNTIME_FUNCTION *lookup_function_info( ULONG64 pc, ULONG64 *base, LDR_MO
*/ */
static DWORD call_handler( EXCEPTION_RECORD *rec, CONTEXT *context, DISPATCHER_CONTEXT *dispatch ) static DWORD call_handler( EXCEPTION_RECORD *rec, CONTEXT *context, DISPATCHER_CONTEXT *dispatch )
{ {
EXCEPTION_REGISTRATION_RECORD frame;
DWORD res; DWORD res;
frame.Handler = nested_exception_handler;
__wine_push_frame( &frame );
TRACE( "calling handler %p (rec=%p, frame=0x%lx context=%p, dispatch=%p)\n", TRACE( "calling handler %p (rec=%p, frame=0x%lx context=%p, dispatch=%p)\n",
dispatch->LanguageHandler, rec, dispatch->EstablisherFrame, dispatch->ContextRecord, dispatch ); dispatch->LanguageHandler, rec, dispatch->EstablisherFrame, dispatch->ContextRecord, dispatch );
res = dispatch->LanguageHandler( rec, dispatch->EstablisherFrame, context, dispatch ); res = dispatch->LanguageHandler( rec, dispatch->EstablisherFrame, context, dispatch );
TRACE( "handler at %p returned %u\n", dispatch->LanguageHandler, res ); TRACE( "handler at %p returned %u\n", dispatch->LanguageHandler, res );
__wine_pop_frame( &frame );
return res; return res;
} }
@ -2392,7 +2407,9 @@ static NTSTATUS call_stack_handlers( EXCEPTION_RECORD *rec, CONTEXT *orig_contex
*orig_context = *dispatch.ContextRecord; *orig_context = *dispatch.ContextRecord;
return STATUS_SUCCESS; return STATUS_SUCCESS;
case ExceptionContinueSearch: case ExceptionContinueSearch:
break;
case ExceptionNestedException: case ExceptionNestedException:
FIXME( "nested exception\n" );
break; break;
case ExceptionCollidedUnwind: { case ExceptionCollidedUnwind: {
ULONG64 frame; ULONG64 frame;
@ -2421,7 +2438,9 @@ static NTSTATUS call_stack_handlers( EXCEPTION_RECORD *rec, CONTEXT *orig_contex
*orig_context = *dispatch.ContextRecord; *orig_context = *dispatch.ContextRecord;
return STATUS_SUCCESS; return STATUS_SUCCESS;
case ExceptionContinueSearch: case ExceptionContinueSearch:
break;
case ExceptionNestedException: case ExceptionNestedException:
FIXME( "nested exception\n" );
break; break;
case ExceptionCollidedUnwind: { case ExceptionCollidedUnwind: {
ULONG64 frame; ULONG64 frame;