msvcrt: Use exception base to create copy constructor pointer.
The exception base (exc_base) from the ExceptionRecord is used in find_caught_type to find the type info for the exception. All related type information is relative to this base, including the offset for the copy constructor. Signed-off-by: Daniel Lehman <dlehman@esri.com> Signed-off-by: Piotr Caban <piotr@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
78ab8aa46a
commit
3ea70fa1e2
|
@ -248,7 +248,7 @@ static const cxx_type_info *find_caught_type(cxx_exception_type *exc_type, ULONG
|
|||
static inline void copy_exception(void *object, ULONG64 frame,
|
||||
DISPATCHER_CONTEXT *dispatch,
|
||||
const catchblock_info *catchblock,
|
||||
const cxx_type_info *type)
|
||||
const cxx_type_info *type, ULONG64 exc_base)
|
||||
{
|
||||
const type_info *catch_ti = rva_to_ptr(catchblock->type_info, dispatch->ImageBase);
|
||||
void **dest = rva_to_ptr(catchblock->offset, frame);
|
||||
|
@ -273,13 +273,13 @@ static inline void copy_exception(void *object, ULONG64 frame,
|
|||
if (type->flags & CLASS_HAS_VIRTUAL_BASE_CLASS)
|
||||
{
|
||||
void (__cdecl *copy_ctor)(void*, void*, int) =
|
||||
rva_to_ptr(type->copy_ctor, dispatch->ImageBase);
|
||||
rva_to_ptr(type->copy_ctor, exc_base);
|
||||
copy_ctor(dest, get_this_pointer(&type->offsets, object), 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
void (__cdecl *copy_ctor)(void*, void*) =
|
||||
rva_to_ptr(type->copy_ctor, dispatch->ImageBase);
|
||||
rva_to_ptr(type->copy_ctor, exc_base);
|
||||
copy_ctor(dest, get_this_pointer(&type->offsets, object));
|
||||
}
|
||||
}
|
||||
|
@ -462,7 +462,7 @@ static inline void find_catch_block(EXCEPTION_RECORD *rec, EXCEPTION_RECORD *unt
|
|||
|
||||
/* copy the exception to its destination on the stack */
|
||||
copy_exception((void*)rec->ExceptionInformation[1],
|
||||
orig_frame, dispatch, catchblock, type);
|
||||
orig_frame, dispatch, catchblock, type, exc_base);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue