I am not sure of this one. I am in fact asking for some comment on this code. I don't understand the frame handler. On Mac OS X/PowerPC commenting out this code helps a lots. At every exceptions I get an errror:
err:seh:EXC_DefaultHandling Exception frame is not in stack limits => unable to dispatch exception
But why do we need to have a Exception frame stack limit? Is that a processor stack we are speaking about?
By the way why is there a lot of pointers check with? I think it is system dependent:
(int)frame & 3
At least the patch seems to work fine on Mac OS X, exception are now caught normally.
Thanks,
Pierre
ChangeLog:
- Don't bother about stack limits on PowerPC
Index: dlls/ntdll/exception.c =================================================================== RCS file: /home/wine/wine/dlls/ntdll/exception.c,v retrieving revision 1.55 diff -u -r1.55 exception.c --- dlls/ntdll/exception.c 15 Jul 2003 20:53:40 -0000 1.55 +++ dlls/ntdll/exception.c 21 Jul 2003 12:10:11 -0000 @@ -200,6 +200,7 @@ nested_frame = NULL; while (frame != (PEXCEPTION_FRAME)0xFFFFFFFF) { +#ifndef __powerpc__ /* Check frame address */ if (((void*)frame < NtCurrentTeb()->stack_low) || ((void*)(frame+1) > NtCurrentTeb()->stack_top) || @@ -208,6 +209,7 @@ rec->ExceptionFlags |= EH_STACK_INVALID; break; } +#endif /* __powerpc__ */ /* Call handler */ res = EXC_CallHandler( rec, frame, context, &dispatch, frame->Handler, EXC_RaiseHandler );