Piotr Caban : ntdll: Print fixme message in case of nested exception.

Alexandre Julliard julliard at winehq.org
Thu Aug 18 10:23:24 CDT 2016


Module: wine
Branch: master
Commit: 10fa7c6e45da1921d941cf03782751e498a9a690
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=10fa7c6e45da1921d941cf03782751e498a9a690

Author: Piotr Caban <piotr at codeweavers.com>
Date:   Wed Aug 17 12:48:17 2016 +0200

ntdll: Print fixme message in case of nested exception.

Signed-off-by: Piotr Caban <piotr at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/ntdll/signal_x86_64.c | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)

diff --git a/dlls/ntdll/signal_x86_64.c b/dlls/ntdll/signal_x86_64.c
index 062a40c..5633e0b 100644
--- a/dlls/ntdll/signal_x86_64.c
+++ b/dlls/ntdll/signal_x86_64.c
@@ -2250,6 +2250,15 @@ static RUNTIME_FUNCTION *lookup_function_info( ULONG64 pc, ULONG64 *base, LDR_MO
     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
  *
@@ -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 )
 {
+    EXCEPTION_REGISTRATION_RECORD frame;
     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",
            dispatch->LanguageHandler, rec, dispatch->EstablisherFrame, dispatch->ContextRecord, dispatch );
     res = dispatch->LanguageHandler( rec, dispatch->EstablisherFrame, context, dispatch );
     TRACE( "handler at %p returned %u\n", dispatch->LanguageHandler, res );
+
+    __wine_pop_frame( &frame );
     return res;
 }
 
@@ -2392,7 +2407,9 @@ static NTSTATUS call_stack_handlers( EXCEPTION_RECORD *rec, CONTEXT *orig_contex
                 *orig_context = *dispatch.ContextRecord;
                 return STATUS_SUCCESS;
             case ExceptionContinueSearch:
+                break;
             case ExceptionNestedException:
+                FIXME( "nested exception\n" );
                 break;
             case ExceptionCollidedUnwind: {
                 ULONG64 frame;
@@ -2421,7 +2438,9 @@ static NTSTATUS call_stack_handlers( EXCEPTION_RECORD *rec, CONTEXT *orig_contex
                 *orig_context = *dispatch.ContextRecord;
                 return STATUS_SUCCESS;
             case ExceptionContinueSearch:
+                break;
             case ExceptionNestedException:
+                FIXME( "nested exception\n" );
                 break;
             case ExceptionCollidedUnwind: {
                 ULONG64 frame;




More information about the wine-cvs mailing list