61 void * (*handler)(
void);
63#define TYPE_FLAG_CONST 1
64#define TYPE_FLAG_VOLATILE 2
65#define TYPE_FLAG_REFERENCE 8
81 void * (*handler)(
void);
106} catch_func_nested_frame;
112 catch_func_nested_frame *nested_frame;
115typedef struct _SCOPETABLE
117 int previousTryLevel;
119 void * (*lpfnHandler)(
void);
120} SCOPETABLE, *PSCOPETABLE;
122typedef struct MSVCRT_EXCEPTION_FRAME
127 PSCOPETABLE scopetable;
131} MSVCRT_EXCEPTION_FRAME;
135 int gs_cookie_offset;
137 int eh_cookie_offset;
139 SCOPETABLE entries[1];
142#define TRYLEVEL_END (-1)
150extern void call_copy_ctor(
void *
func,
void *
this,
void *
src,
int has_vbase );
154 __ASM_CFI(
".cfi_adjust_cfa_offset 4\n\t")
156 "movl %esp, %ebp\n\t"
157 __ASM_CFI(
".cfi_def_cfa_register %ebp\n\t")
159 "movl 12(%ebp), %ecx\n\t"
171 "movl 4(%esp), %edx\n\t"
172 "movl 8(%esp), %eax\n\t"
173 "movl -4(%edx), %esp\n\t"
174 "leal 12(%edx), %ebp\n\t"
177extern void DECLSPEC_NORETURN call_finally_block(
void *code_block,
void *base_ptr );
180 "movl 8(%esp), %ebp\n\t"
188 "movl 20(%esp), %ebp\n\t"
194extern void *call_handler(
void * (*
func)(
void),
void *
ebp );
201 "movl 24(%esp), %ebp\n\t"
211 TRACE(
"flags %x type %p %s offsets %d,%d,%d size %d copy ctor %p\n",
213 type->offsets.this_offset,
type->offsets.vbase_descr,
type->offsets.vbase_offset,
221 TRACE(
"flags %x destr %p handler %p type info %p\n",
222 type->flags,
type->destructor,
type->custom_handler,
type->type_info_table );
223 for (
i = 0;
i <
type->type_info_table->count;
i++)
236 TRACE(
"unwind table: %p %d\n",
descr->unwind_table,
descr->unwind_count );
237 for (
i = 0;
i <
descr->unwind_count;
i++)
239 TRACE(
" %d: prev %d func %p\n",
i,
240 descr->unwind_table[
i].prev,
descr->unwind_table[
i].handler );
243 for (
i = 0;
i <
descr->tryblock_count;
i++)
245 TRACE(
" %d: start %d end %d catchlevel %d catch %p %d\n",
i,
246 descr->tryblock[
i].start_level,
descr->tryblock[
i].end_level,
247 descr->tryblock[
i].catch_level,
descr->tryblock[
i].catchblock,
248 descr->tryblock[
i].catchblock_count );
249 for (
j = 0;
j <
descr->tryblock[
i].catchblock_count;
j++)
252 TRACE(
" %d: flags %x offset %d handler %p type %p %s\n",
258 TRACE(
"expect list: %p\n",
descr->expect_list );
273 if (!catch_ti)
return type;
274 if (catch_ti !=
type->type_info)
296 if (!catchblock->
offset)
return;
297 dest_ptr = (
void **)((
char *)&frame->
ebp + catchblock->
offset);
322 void * (*handler)(
void);
325 while (trylevel != last_level)
327 if (trylevel < 0 || trylevel >=
descr->unwind_count)
329 ERR(
"invalid trylevel %d\n", trylevel );
335 TRACE(
"calling unwind handler %p trylevel %d last %d ebp %p\n",
339 trylevel =
descr->unwind_table[trylevel].prev;
348 catch_func_nested_frame *nested_frame = (catch_func_nested_frame *)frame;
356 TRACE(
"got nested exception in catch function\n" );
373 TRACE(
"re-propagate: obj: %lx, type: %lx\n",
379 TRACE(
"detect threw new exception in catch block\n");
383 return cxx_frame_handler( rec, nested_frame->cxx_frame,
context,
384 NULL, nested_frame->descr, nested_frame );
392 catch_func_nested_frame *catch_frame,
398 catch_func_nested_frame nested_frame;
403 data->processing_throw++;
404 for (
i = 0;
i <
descr->tryblock_count;
i++)
409 if (catch_frame && catch_frame->trylevel > tryblock->
start_level)
continue;
411 if (trylevel < tryblock->start_level)
continue;
412 if (trylevel > tryblock->
end_level)
continue;
424 TRACE(
"matched type %p in tryblock %d catchblock %d\n",
type,
i,
j );
427 copy_exception(
object, frame, catchblock,
type );
434 TRACE(
"found catch(...) block\n");
442 RtlUnwind( catch_frame ? &catch_frame->frame : &frame->
frame, 0, rec, 0 );
446 nested_frame.frame_info.rec =
data->exc_record;
447 nested_frame.frame_info.context =
data->ctx_record;
448 data->exc_record = rec;
450 data->processing_throw--;
453 TRACE(
"calling catch block %p addr %p ebp %p\n",
454 catchblock, catchblock->
handler, &frame->
ebp );
457 nested_frame.frame.Handler = catch_function_nested_handler;
458 nested_frame.cxx_frame = frame;
459 nested_frame.descr =
descr;
460 nested_frame.trylevel = tryblock->
end_level + 1;
466 ((
DWORD*)frame)[-1] = save_esp;
468 TRACE(
"done, continuing at %p\n",
addr );
470 continue_after_catch( frame,
addr );
473 data->processing_throw--;
535 se_translator_ctx *
ctx = (se_translator_ctx *)
c;
547 ctx->nested_frame, exc_type );
560 ERR(
"noexcept function propagating exception\n");
573 catch_func_nested_frame* nested_frame )
579 ERR(
"invalid frame magic %x\n",
descr->magic );
589 if (
descr->unwind_count && !nested_frame) cxx_local_unwind( frame,
descr, -1 );
592 if (!
descr->tryblock_count)
594 check_noexcept(rec,
descr, nested_frame !=
NULL);
606 TRACE(
"re-propagate: obj: %lx, type: %lx\n",
619 nested_frame ? nested_frame->trylevel : 0,
620 nested_frame ? &nested_frame->frame :
NULL, 0 );
625 TRACE(
"handling C++ exception rec %p frame %p trylevel %d descr %p nested_frame %p\n",
627 dump_exception_type( exc_type );
628 dump_function_descr(
descr );
636 TRACE(
"handling C exception code %x rec %p frame %p trylevel %d descr %p nested_frame %p\n",
639 if (
data->se_translator) {
641 se_translator_ctx
ctx;
645 ctx.nested_frame = nested_frame;
660 nested_frame, exc_type );
661 check_noexcept(rec,
descr, nested_frame !=
NULL);
673 __ASM_CFI(
".cfi_adjust_cfa_offset 4\n\t")
675 __ASM_CFI(
".cfi_adjust_cfa_offset 4\n\t")
677 __ASM_CFI(
".cfi_adjust_cfa_offset 4\n\t")
679 __ASM_CFI(
".cfi_adjust_cfa_offset 4\n\t")
681 __ASM_CFI(
".cfi_adjust_cfa_offset 4\n\t")
683 __ASM_CFI(
".cfi_adjust_cfa_offset 4\n\t")
685 __ASM_CFI(
".cfi_adjust_cfa_offset 4\n\t")
686 "call " __ASM_NAME(
"cxx_frame_handler")
"\n\t"
688 __ASM_CFI(
".cfi_adjust_cfa_offset -28\n\t")
702 TRACE(
"unwinding frame %p descr %p trylevel %ld\n", frame,
descr,
buf->TryLevel );
703 cxx_local_unwind( frame,
descr,
buf->TryLevel );
742unsigned int CDECL __CxxQueryExceptionSize(
void)
754 __ASM_CFI(
".cfi_adjust_cfa_offset 4\n\t")
756 __ASM_CFI(
".cfi_adjust_cfa_offset 4\n\t")
758 __ASM_CFI(
".cfi_adjust_cfa_offset 4\n\t")
760 __ASM_CFI(
".cfi_adjust_cfa_offset 4\n\t")
761 "movl %esp, %fs:0\n\t"
762 "movl 12(%esp), %eax\n\t"
763 "movl %ebp, 12(%esp)\n\t"
764 "leal 12(%esp), %ebp\n\t"
766 __ASM_CFI(
".cfi_adjust_cfa_offset 4\n\t")
785static void msvcrt_local_unwind2(MSVCRT_EXCEPTION_FRAME* frame,
int trylevel,
void *
ebp)
789 TRACE(
"(%p,%d,%d)\n",frame, frame->trylevel, trylevel);
792 reg.Handler = MSVCRT_nested_handler;
796 while (frame->trylevel != TRYLEVEL_END && frame->trylevel != trylevel)
798 int level = frame->trylevel;
799 frame->trylevel = frame->scopetable[
level].previousTryLevel;
800 if (!frame->scopetable[
level].lpfnFilter)
802 TRACE(
"__try block cleanup level %d handler %p ebp %p\n",
804 call_handler( frame->scopetable[
level].lpfnHandler,
ebp );
808 TRACE(
"unwound OK\n");
811static void msvcrt_local_unwind4(
ULONG *
cookie, MSVCRT_EXCEPTION_FRAME* frame,
int trylevel,
void *
ebp )
814 const SCOPETABLE_V4 *scopetable = get_scopetable_v4( frame, *
cookie );
816 TRACE(
"(%p,%d,%d)\n",frame, frame->trylevel, trylevel);
819 reg.Handler = MSVCRT_nested_handler;
823 while (frame->trylevel != -2 && frame->trylevel != trylevel)
825 int level = frame->trylevel;
826 frame->trylevel = scopetable->entries[
level].previousTryLevel;
827 if (!scopetable->entries[
level].lpfnFilter)
829 TRACE(
"__try block cleanup level %d handler %p ebp %p\n",
831 call_handler( scopetable->entries[
level].lpfnHandler,
ebp );
835 TRACE(
"unwound OK\n");
841void CDECL _local_unwind2(MSVCRT_EXCEPTION_FRAME* frame,
int trylevel)
843 msvcrt_local_unwind2( frame, trylevel, &frame->_ebp );
849void CDECL _local_unwind4(
ULONG *
cookie, MSVCRT_EXCEPTION_FRAME* frame,
int trylevel )
851 msvcrt_local_unwind4(
cookie, frame, trylevel, &frame->_ebp );
860 TRACE(
"(%p)\n",frame);
876 FIXME(
"exception %x flags=%x at %p handler=%p %p %p stub\n",
886 MSVCRT_EXCEPTION_FRAME* frame,
891 PSCOPETABLE pScopeTable;
893 TRACE(
"exception %x flags=%x at %p handler=%p %p %p semi-stub\n",
895 frame->handler,
context, dispatcher);
905 msvcrt_local_unwind2(frame, TRYLEVEL_END, &frame->_ebp);
906 TRACE(
"unwound current frame, returning ExceptionContinueSearch\n");
915 trylevel = frame->trylevel;
916 pScopeTable = frame->scopetable;
918 while (trylevel != TRYLEVEL_END)
920 TRACE(
"level %d prev %d filter %p\n", trylevel, pScopeTable[trylevel].previousTryLevel,
921 pScopeTable[trylevel].lpfnFilter );
922 if (pScopeTable[trylevel].lpfnFilter)
924 retval = call_filter( pScopeTable[trylevel].lpfnFilter, &exceptPtrs, &frame->_ebp );
928 "EXECUTE_HANDLER" :
"CONTINUE_SEARCH");
937 msvcrt_local_unwind2(frame, trylevel, &frame->_ebp);
942 frame->trylevel = pScopeTable[trylevel].previousTryLevel;
943 TRACE(
"__finally block %p\n",pScopeTable[trylevel].lpfnHandler);
944 call_finally_block(pScopeTable[trylevel].lpfnHandler, &frame->_ebp);
947 trylevel = pScopeTable[trylevel].previousTryLevel;
950 TRACE(
"reached TRYLEVEL_END, returning ExceptionContinueSearch\n");
957int CDECL _except_handler4_common(
ULONG *
cookie,
void (*check_cookie)(
void),
963 const SCOPETABLE_V4 *scope_table = get_scopetable_v4( frame, *
cookie );
965 TRACE(
"exception %x flags=%x at %p handler=%p %p %p cookie=%x scope table=%p cookies=%d/%x,%d/%x\n",
968 scope_table->gs_cookie_offset, scope_table->gs_cookie_xor,
969 scope_table->eh_cookie_offset, scope_table->eh_cookie_xor );
976 msvcrt_local_unwind4(
cookie, frame, -2, &frame->_ebp );
977 TRACE(
"unwound current frame, returning ExceptionContinueSearch\n");
986 trylevel = frame->trylevel;
988 while (trylevel != -2)
990 TRACE(
"level %d prev %d filter %p\n", trylevel,
991 scope_table->entries[trylevel].previousTryLevel,
992 scope_table->entries[trylevel].lpfnFilter );
993 if (scope_table->entries[trylevel].lpfnFilter)
995 retval = call_filter( scope_table->entries[trylevel].lpfnFilter, &exceptPtrs, &frame->_ebp );
999 "EXECUTE_HANDLER" :
"CONTINUE_SEARCH");
1010 msvcrt_local_unwind4(
cookie, frame, trylevel, &frame->_ebp );
1015 frame->trylevel = scope_table->entries[trylevel].previousTryLevel;
1016 TRACE(
"__finally block %p\n",scope_table->entries[trylevel].lpfnHandler);
1017 call_finally_block(scope_table->entries[trylevel].lpfnHandler, &frame->_ebp);
1020 trylevel = scope_table->entries[trylevel].previousTryLevel;
1023 TRACE(
"reached -2, returning ExceptionContinueSearch\n");
1032#define MSVCRT_JMP_MAGIC 0x56433230
1033typedef void (
__stdcall *MSVCRT_unwind_function)(
const _JUMP_BUFFER *);
1037#define DEFINE_SETJMP_ENTRYPOINT(name) \
1038 __ASM_GLOBAL_FUNC( name, \
1039 "movl 4(%esp),%ecx\n\t" \
1040 "movl %ebp,0(%ecx)\n\t" \
1041 "movl %ebx,4(%ecx)\n\t" \
1042 "movl %edi,8(%ecx)\n\t" \
1043 "movl %esi,12(%ecx)\n\t" \
1044 "movl %esp,16(%ecx)\n\t" \
1045 "movl 0(%esp),%eax\n\t" \
1046 "movl %eax,20(%ecx)\n\t"
\
1047 "jmp " __ASM_NAME("__regs_") # name )
1052DEFINE_SETJMP_ENTRYPOINT(MSVCRT__setjmp)
1056 if (jmp->Registration == ~0
UL)
1057 jmp->TryLevel = TRYLEVEL_END;
1059 jmp->TryLevel = ((MSVCRT_EXCEPTION_FRAME*)jmp->Registration)->trylevel;
1061 TRACE(
"buf=%p ebx=%08lx esi=%08lx edi=%08lx ebp=%08lx esp=%08lx eip=%08lx frame=%08lx\n",
1062 jmp, jmp->Ebx, jmp->Esi, jmp->Edi, jmp->Ebp, jmp->Esp, jmp->Eip, jmp->Registration );
1069DEFINE_SETJMP_ENTRYPOINT( MSVCRT__setjmp3 )
1072 jmp->Cookie = MSVCRT_JMP_MAGIC;
1073 jmp->UnwindFunc = 0;
1075 if (jmp->Registration == ~0
UL)
1077 jmp->TryLevel = TRYLEVEL_END;
1085 if (nb_args > 0) jmp->UnwindFunc =
va_arg(
args,
unsigned long );
1086 if (nb_args > 1) jmp->TryLevel =
va_arg(
args,
unsigned long );
1087 else jmp->TryLevel = ((MSVCRT_EXCEPTION_FRAME*)jmp->Registration)->trylevel;
1088 for (
i = 0;
i < 6 &&
i < nb_args - 2;
i++)
1089 jmp->UnwindData[
i] =
va_arg(
args,
unsigned long );
1093 TRACE(
"buf=%p ebx=%08lx esi=%08lx edi=%08lx ebp=%08lx esp=%08lx eip=%08lx frame=%08lx\n",
1094 jmp, jmp->Ebx, jmp->Esi, jmp->Edi, jmp->Ebp, jmp->Esp, jmp->Eip, jmp->Registration );
1101void CDECL MSVCRT_longjmp(_JUMP_BUFFER *jmp,
int retval)
1103 unsigned long cur_frame = 0;
1105 TRACE(
"buf=%p ebx=%08lx esi=%08lx edi=%08lx ebp=%08lx esp=%08lx eip=%08lx frame=%08lx retval=%08x\n",
1106 jmp, jmp->Ebx, jmp->Esi, jmp->Edi, jmp->Ebp, jmp->Esp, jmp->Eip, jmp->Registration,
retval );
1109 TRACE(
"cur_frame=%lx\n",cur_frame);
1111 if (cur_frame != jmp->Registration)
1114 if (jmp->Registration)
1116 if (
IsBadReadPtr(&jmp->Cookie,
sizeof(
long)) || jmp->Cookie != MSVCRT_JMP_MAGIC)
1118 msvcrt_local_unwind2((MSVCRT_EXCEPTION_FRAME*)jmp->Registration,
1119 jmp->TryLevel, (
void *)jmp->Ebp);
1121 else if(jmp->UnwindFunc)
1123 MSVCRT_unwind_function unwind_func;
1125 unwind_func=(MSVCRT_unwind_function)jmp->UnwindFunc;
1133 __wine_longjmp( (__wine_jmp_buf *)jmp,
retval );
1139void __stdcall _seh_longjmp_unwind(_JUMP_BUFFER *jmp)
1141 msvcrt_local_unwind2( (MSVCRT_EXCEPTION_FRAME *)jmp->Registration, jmp->TryLevel, (
void *)jmp->Ebp );
1147void __stdcall _seh_longjmp_unwind4(_JUMP_BUFFER *jmp)
1149 msvcrt_local_unwind4( (
ULONG *)&jmp->Cookie, (MSVCRT_EXCEPTION_FRAME *)jmp->Registration,
1150 jmp->TryLevel, (
void *)jmp->Ebp );
1176 memset(&rec, 0,
sizeof(rec));
1178 switch((
ctx->ControlWord >> 8) & 0x3) {
1202 if(*(
WORD*)
ctx->ErrorOffset == 0x35dc) {
int strcmp(const char *String1, const char *String2)
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
void dispatch(HANDLE hStopEvent)
INT copy(TCHAR source[MAX_PATH], TCHAR dest[MAX_PATH], INT append, DWORD lpdwFlags, BOOL bTouch)
_CRTIMP int __cdecl _fpieee_flt(unsigned long _ExceptionCode, struct _EXCEPTION_POINTERS *_PtExceptionPtr, int(__cdecl *_Handler)(_FPIEEE_RECORD *))
@ ExceptionContinueSearch
@ ExceptionCollidedUnwind
@ ExceptionContinueExecution
struct _EXCEPTION_RECORD * PEXCEPTION_RECORD
BOOL WINAPI IsBadReadPtr(IN LPCVOID lp, IN UINT_PTR ucb)
UINT(* handler)(MSIPACKAGE *)
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *
GLuint GLuint GLsizei GLenum type
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
GLenum GLuint GLenum GLsizei const GLchar * buf
GLenum const GLvoid * addr
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
int CDECL _XcptFilter(NTSTATUS, PEXCEPTION_POINTERS)
static const char * dbgstr_type_info(const type_info *info)
struct __tryblock_info tryblock_info
#define CLASS_IS_SIMPLE_TYPE
#define CXX_FRAME_MAGIC_VC7
struct __catchblock_info catchblock_info
#define CXX_FRAME_MAGIC_VC6
#define CLASS_HAS_VIRTUAL_BASE_CLASS
struct __cxx_exception_type cxx_exception_type
#define CXX_FRAME_MAGIC_VC8
#define FUNC_DESCR_SYNCHRONOUS
struct __cxx_exception_frame cxx_exception_frame
struct __unwind_info unwind_info
int CDECL __CppXcptFilter(NTSTATUS, PEXCEPTION_POINTERS)
struct __cxx_function_descr cxx_function_descr
#define TYPE_FLAG_VOLATILE
static void * get_this_pointer(const this_ptr_offsets *off, void *object)
#define TYPE_FLAG_REFERENCE
#define EXCEPTION_EXECUTE_HANDLER
#define EXCEPTION_CONTINUE_SEARCH
#define EXCEPTION_CONTINUE_EXECUTION
void MSVCRT() terminate()
#define memcpy(s1, s2, n)
#define memmove(s1, s2, n)
UINT WINAPI nested(MSIHANDLE hinst)
thread_data_t * msvcrt_get_thread_data(void)
#define __ASM_GLOBAL_FUNC(name, code)
NTSYSAPI VOID NTAPI RtlUnwind(_In_opt_ PVOID TargetFrame, _In_opt_ PVOID TargetIp, _In_opt_ PEXCEPTION_RECORD ExceptionRecord, _In_ PVOID ReturnValue)
#define DECLSPEC_NORETURN
#define STATUS_FLOAT_UNDERFLOW
#define STATUS_FLOAT_OVERFLOW
#define STATUS_FLOAT_DIVIDE_BY_ZERO
#define STATUS_FLOAT_INVALID_OPERATION
#define STATUS_FLOAT_INEXACT_RESULT
__asm__(".p2align 4, 0x90\n" ".seh_proc __seh2_global_filter_func\n" "__seh2_global_filter_func:\n" "\tsub %rbp, %rax\n" "\tpush %rbp\n" "\t.seh_pushreg %rbp\n" "\tsub $32, %rsp\n" "\t.seh_stackalloc 32\n" "\t.seh_endprologue\n" "\tsub %rax, %rdx\n" "\tmov %rdx, %rbp\n" "\tjmp *%r8\n" "__seh2_global_filter_func_exit:\n" "\t.p2align 4\n" "\tadd $32, %rsp\n" "\tpop %rbp\n" "\tret\n" "\t.seh_endproc")
static EXCEPTION_REGISTRATION_RECORD * __wine_push_frame(EXCEPTION_REGISTRATION_RECORD *frame)
#define __EXCEPT_CTX(func, ctx)
static EXCEPTION_REGISTRATION_RECORD * __wine_pop_frame(EXCEPTION_REGISTRATION_RECORD *frame)
void CDECL __DestructExceptionObject(EXCEPTION_RECORD *rec)
frame_info *CDECL _CreateFrameInfo(frame_info *fi, void *obj)
void CDECL __CxxUnregisterExceptionObject(cxx_frame_info *frame_info, BOOL in_use)
FLOATING_SAVE_AREA FloatSave
PEXCEPTION_RECORD ExceptionRecord
ULONG_PTR ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS]
PEXCEPTION_ROUTINE Handler
unsigned int InvalidOperation
_FPIEEE_EXCEPTION_FLAGS Status
_FPIEEE_EXCEPTION_FLAGS Cause
unsigned int RoundingMode
_FPIEEE_EXCEPTION_FLAGS Enable
union _FPIEEE_VALUE::@1897 Value
unsigned int OperandValid
const type_info * type_info
EXCEPTION_REGISTRATION_RECORD frame
cxx_exc_custom_handler custom_handler
const cxx_type_info_table * type_info_table
const tryblock_info * tryblock
const unwind_info * unwind_table
const cxx_type_info * info[3]
const catchblock_info * catchblock
ecx edi movl ebx edx edi decl ecx esi eax jecxz decl eax andl eax esi movl edx movl TEMP incl eax andl eax ecx incl ebx testl eax jnz xchgl ecx incl TEMP esp ecx subl ebx pushl ecx ecx edx ecx shrl ecx mm0 mm4 mm0 mm4 mm1 mm5 mm1 mm5 mm2 mm6 mm2 mm6 mm3 mm7 mm3 mm7 paddd mm0 paddd mm4 paddd mm0 paddd mm4 paddd mm0 paddd mm4 movq mm1 movq mm5 psrlq mm1 psrlq mm5 paddd mm0 paddd mm4 psrad mm0 psrad mm4 packssdw mm0 packssdw mm4 mm1 punpckldq mm0 pand mm1 pand mm0 por mm1 movq edi esi edx edi decl ecx jnz popl ecx andl ecx jecxz mm0 mm0 mm1 mm1 mm2 mm2 mm3 mm3 paddd mm0 paddd mm0 paddd mm0 movq mm1 psrlq mm1 paddd mm0 psrad mm0 packssdw mm0 movd eax movw edi esi edx esi movl ecx mm0 mm4 mm0 mm4 mm1 mm5 mm1 mm5 mm2 mm6 mm2 mm6 mm3 mm7 mm3 mm7 paddd mm0 paddd mm4 paddd mm0 paddd mm4 paddd mm0 paddd mm4 movq mm1 movq mm5 psrlq mm1 psrlq mm5 paddd mm1 paddd mm5 psrad mm1 psrad mm5 packssdw mm1 packssdw mm5 psubd mm0 psubd mm4 psubsw mm0 psubsw mm4 mm1 punpckldq mm0 pand mm1 pand mm0 por mm1 movq edi subl esi addl edx edi decl ecx jnz mm0 mm0 mm1 mm1 mm2 mm2 mm3 mm3 paddd mm0 paddd mm0 paddd mm0 movq mm1 psrlq mm1 paddd mm1 psrad mm1 packssdw mm1 psubd mm0 psubsw mm0 movd eax movw edi emms popl ebx popl esi popl edi mov ebp
#define FUNC_DESCR_NOEXCEPT
static void dump_type(type_t *t)
struct _EXCEPTION_POINTERS * PEXCEPTION_POINTERS