ntdll: Pass a nonnull handler_data when continuing after a collided unwind on arm64.
This fixes crashes when handling GNU/mingw style SEH based C++ exceptions on arm64; in these cases unwind_full_data ended up where it tries to write handler_rva + 1 to *handler_data. Signed-off-by: Martin Storsjo <martin@martin.st> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
93082b3d52
commit
93ecc54ae5
|
@ -1843,7 +1843,8 @@ void WINAPI RtlUnwindEx( PVOID end_frame, PVOID target_ip, EXCEPTION_RECORD *rec
|
|||
dispatch.ContextRecord = context;
|
||||
RtlVirtualUnwind( UNW_FLAG_NHANDLER, dispatch.ImageBase,
|
||||
dispatch.ControlPc, dispatch.FunctionEntry,
|
||||
&new_context, NULL, &frame, NULL );
|
||||
&new_context, &dispatch.HandlerData, &frame,
|
||||
NULL );
|
||||
rec->ExceptionFlags |= EH_COLLIDED_UNWIND;
|
||||
goto unwind_done;
|
||||
}
|
||||
|
@ -1866,7 +1867,8 @@ void WINAPI RtlUnwindEx( PVOID end_frame, PVOID target_ip, EXCEPTION_RECORD *rec
|
|||
dispatch.ContextRecord = context;
|
||||
RtlVirtualUnwind( UNW_FLAG_NHANDLER, dispatch.ImageBase,
|
||||
dispatch.ControlPc, dispatch.FunctionEntry,
|
||||
&new_context, NULL, &frame, NULL );
|
||||
&new_context, &dispatch.HandlerData,
|
||||
&frame, NULL );
|
||||
rec->ExceptionFlags |= EH_COLLIDED_UNWIND;
|
||||
goto unwind_done;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue