forked from Mirrors/wine-wine
vcruntime140_1: Use return address from catch block routine if not provided by catch block info.
Signed-off-by: Daniel Lehman <dlehman25@gmail.com> Signed-off-by: Piotr Caban <piotr@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>feature/deterministic
parent
cfa4282119
commit
2f5ea32377
|
@ -603,7 +603,8 @@ static inline void find_catch_block4(EXCEPTION_RECORD *rec, CONTEXT *context,
|
||||||
(ULONG_PTR)rva_to_ptr(ci.handler, dispatch->ImageBase);
|
(ULONG_PTR)rva_to_ptr(ci.handler, dispatch->ImageBase);
|
||||||
catch_record.ExceptionInformation[6] = (ULONG_PTR)untrans_rec;
|
catch_record.ExceptionInformation[6] = (ULONG_PTR)untrans_rec;
|
||||||
catch_record.ExceptionInformation[7] = (ULONG_PTR)context;
|
catch_record.ExceptionInformation[7] = (ULONG_PTR)context;
|
||||||
catch_record.ExceptionInformation[8] = (ULONG_PTR)rva_to_ptr(
|
if (ci.ret_addr)
|
||||||
|
catch_record.ExceptionInformation[8] = (ULONG_PTR)rva_to_ptr(
|
||||||
ci.ret_addr + dispatch->FunctionEntry->BeginAddress, dispatch->ImageBase);
|
ci.ret_addr + dispatch->FunctionEntry->BeginAddress, dispatch->ImageBase);
|
||||||
RtlUnwindEx((void*)frame, (void*)dispatch->ControlPc, &catch_record, NULL, &ctx, NULL);
|
RtlUnwindEx((void*)frame, (void*)dispatch->ControlPc, &catch_record, NULL, &ctx, NULL);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue