62 void * (*handler)(
void);
64#define TYPE_FLAG_CONST 1
65#define TYPE_FLAG_VOLATILE 2
66#define TYPE_FLAG_REFERENCE 8
82 void * (*handler)(
void);
107} catch_func_nested_frame;
113 catch_func_nested_frame *nested_frame;
116typedef struct _SCOPETABLE
118 int previousTryLevel;
120 void * (*lpfnHandler)(
void);
121} SCOPETABLE, *PSCOPETABLE;
123typedef struct _MSVCRT_EXCEPTION_FRAME
128 PSCOPETABLE scopetable;
132} MSVCRT_EXCEPTION_FRAME;
136 int gs_cookie_offset;
138 int eh_cookie_offset;
140 SCOPETABLE entries[1];
143#define TRYLEVEL_END (-1)
151extern void call_copy_ctor(
void *
func,
void *
this,
void *
src,
int has_vbase );
155 __ASM_CFI(
".cfi_adjust_cfa_offset 4\n\t")
157 "movl %esp, %ebp\n\t"
158 __ASM_CFI(
".cfi_def_cfa_register %ebp\n\t")
160 "movl 12(%ebp), %ecx\n\t"
172 "movl 4(%esp), %edx\n\t"
173 "movl 8(%esp), %eax\n\t"
174 "movl -4(%edx), %esp\n\t"
175 "leal 12(%edx), %ebp\n\t"
178extern void DECLSPEC_NORETURN call_finally_block(
void *code_block,
void *base_ptr );
181 "movl 8(%esp), %ebp\n\t"
189 "movl 20(%esp), %ebp\n\t"
195extern void *call_handler(
void * (*
func)(
void),
void *
ebp );
202 "movl 24(%esp), %ebp\n\t"
212 TRACE(
"flags %x type %p %s offsets %d,%d,%d size %d copy ctor %p\n",
214 type->offsets.this_offset,
type->offsets.vbase_descr,
type->offsets.vbase_offset,
222 TRACE(
"flags %x destr %p handler %p type info %p\n",
223 type->flags,
type->destructor,
type->custom_handler,
type->type_info_table );
224 for (
i = 0;
i <
type->type_info_table->count;
i++)
237 TRACE(
"unwind table: %p %d\n",
descr->unwind_table,
descr->unwind_count );
238 for (
i = 0;
i <
descr->unwind_count;
i++)
240 TRACE(
" %d: prev %d func %p\n",
i,
241 descr->unwind_table[
i].prev,
descr->unwind_table[
i].handler );
244 for (
i = 0;
i <
descr->tryblock_count;
i++)
246 TRACE(
" %d: start %d end %d catchlevel %d catch %p %d\n",
i,
247 descr->tryblock[
i].start_level,
descr->tryblock[
i].end_level,
248 descr->tryblock[
i].catch_level,
descr->tryblock[
i].catchblock,
249 descr->tryblock[
i].catchblock_count );
250 for (
j = 0;
j <
descr->tryblock[
i].catchblock_count;
j++)
253 TRACE(
" %d: flags %x offset %d handler %p type %p %s\n",
259 TRACE(
"expect list: %p\n",
descr->expect_list );
274 if (!catch_ti)
return type;
275 if (catch_ti !=
type->type_info)
297 if (!catchblock->
offset)
return;
298 dest_ptr = (
void **)((
char *)&frame->
ebp + catchblock->
offset);
323 void * (*handler)(
void);
326 while (trylevel != last_level)
328 if (trylevel < 0 || trylevel >=
descr->unwind_count)
330 ERR(
"invalid trylevel %d\n", trylevel );
336 TRACE(
"calling unwind handler %p trylevel %d last %d ebp %p\n",
340 trylevel =
descr->unwind_table[trylevel].prev;
349 catch_func_nested_frame *nested_frame = (catch_func_nested_frame *)frame;
357 TRACE(
"got nested exception in catch function\n" );
374 TRACE(
"re-propagate: obj: %lx, type: %lx\n",
380 TRACE(
"detect threw new exception in catch block\n");
384 return cxx_frame_handler( rec, nested_frame->cxx_frame,
context,
385 NULL, nested_frame->descr, nested_frame );
393 catch_func_nested_frame *catch_frame,
399 catch_func_nested_frame nested_frame;
404 data->processing_throw++;
405 for (
i = 0;
i <
descr->tryblock_count;
i++)
410 if (catch_frame && catch_frame->trylevel > tryblock->
start_level)
continue;
412 if (trylevel < tryblock->start_level)
continue;
413 if (trylevel > tryblock->
end_level)
continue;
425 TRACE(
"matched type %p in tryblock %d catchblock %d\n",
type,
i,
j );
428 copy_exception(
object, frame, catchblock,
type );
435 TRACE(
"found catch(...) block\n");
443 RtlUnwind( catch_frame ? &catch_frame->frame : &frame->
frame, 0, rec, 0 );
447 nested_frame.frame_info.rec =
data->exc_record;
448 nested_frame.frame_info.context =
data->ctx_record;
449 data->exc_record = rec;
451 data->processing_throw--;
454 TRACE(
"calling catch block %p addr %p ebp %p\n",
455 catchblock, catchblock->
handler, &frame->
ebp );
458 nested_frame.frame.Handler = catch_function_nested_handler;
459 nested_frame.cxx_frame = frame;
460 nested_frame.descr =
descr;
461 nested_frame.trylevel = tryblock->
end_level + 1;
467 ((
DWORD*)frame)[-1] = save_esp;
469 TRACE(
"done, continuing at %p\n",
addr );
471 continue_after_catch( frame,
addr );
474 data->processing_throw--;
536 se_translator_ctx *
ctx = (se_translator_ctx *)
c;
548 ctx->nested_frame, exc_type );
562 catch_func_nested_frame* nested_frame )
568 ERR(
"invalid frame magic %x\n",
descr->magic );
578 if (
descr->unwind_count && !nested_frame) cxx_local_unwind( frame,
descr, -1 );
591 TRACE(
"re-propagate: obj: %lx, type: %lx\n",
604 nested_frame ? nested_frame->trylevel : 0,
605 nested_frame ? &nested_frame->frame :
NULL, 0 );
610 TRACE(
"handling C++ exception rec %p frame %p trylevel %d descr %p nested_frame %p\n",
612 dump_exception_type( exc_type );
613 dump_function_descr(
descr );
621 TRACE(
"handling C exception code %x rec %p frame %p trylevel %d descr %p nested_frame %p\n",
624 if (
data->se_translator) {
626 se_translator_ctx
ctx;
630 ctx.nested_frame = nested_frame;
645 nested_frame, exc_type );
657 __ASM_CFI(
".cfi_adjust_cfa_offset 4\n\t")
659 __ASM_CFI(
".cfi_adjust_cfa_offset 4\n\t")
661 __ASM_CFI(
".cfi_adjust_cfa_offset 4\n\t")
663 __ASM_CFI(
".cfi_adjust_cfa_offset 4\n\t")
665 __ASM_CFI(
".cfi_adjust_cfa_offset 4\n\t")
667 __ASM_CFI(
".cfi_adjust_cfa_offset 4\n\t")
669 __ASM_CFI(
".cfi_adjust_cfa_offset 4\n\t")
670 "call " __ASM_NAME(
"cxx_frame_handler")
"\n\t"
672 __ASM_CFI(
".cfi_adjust_cfa_offset -28\n\t")
686 TRACE(
"unwinding frame %p descr %p trylevel %ld\n", frame,
descr,
buf->TryLevel );
687 cxx_local_unwind( frame,
descr,
buf->TryLevel );
726unsigned int CDECL __CxxQueryExceptionSize(
void)
738 __ASM_CFI(
".cfi_adjust_cfa_offset 4\n\t")
740 __ASM_CFI(
".cfi_adjust_cfa_offset 4\n\t")
742 __ASM_CFI(
".cfi_adjust_cfa_offset 4\n\t")
744 __ASM_CFI(
".cfi_adjust_cfa_offset 4\n\t")
745 "movl %esp, %fs:0\n\t"
746 "movl 12(%esp), %eax\n\t"
747 "movl %ebp, 12(%esp)\n\t"
748 "leal 12(%esp), %ebp\n\t"
750 __ASM_CFI(
".cfi_adjust_cfa_offset 4\n\t")
769static void msvcrt_local_unwind2(MSVCRT_EXCEPTION_FRAME* frame,
int trylevel,
void *
ebp)
773 TRACE(
"(%p,%d,%d)\n",frame, frame->trylevel, trylevel);
776 reg.Handler = MSVCRT_nested_handler;
780 while (frame->trylevel != TRYLEVEL_END && frame->trylevel != trylevel)
782 int level = frame->trylevel;
783 frame->trylevel = frame->scopetable[
level].previousTryLevel;
784 if (!frame->scopetable[
level].lpfnFilter)
786 TRACE(
"__try block cleanup level %d handler %p ebp %p\n",
788 call_handler( frame->scopetable[
level].lpfnHandler,
ebp );
792 TRACE(
"unwound OK\n");
795static void msvcrt_local_unwind4(
ULONG *
cookie, MSVCRT_EXCEPTION_FRAME* frame,
int trylevel,
void *
ebp )
798 const SCOPETABLE_V4 *scopetable = get_scopetable_v4( frame, *
cookie );
800 TRACE(
"(%p,%d,%d)\n",frame, frame->trylevel, trylevel);
803 reg.Handler = MSVCRT_nested_handler;
807 while (frame->trylevel != -2 && frame->trylevel != trylevel)
809 int level = frame->trylevel;
810 frame->trylevel = scopetable->entries[
level].previousTryLevel;
811 if (!scopetable->entries[
level].lpfnFilter)
813 TRACE(
"__try block cleanup level %d handler %p ebp %p\n",
815 call_handler( scopetable->entries[
level].lpfnHandler,
ebp );
819 TRACE(
"unwound OK\n");
825void CDECL _local_unwind2(MSVCRT_EXCEPTION_FRAME* frame,
int trylevel)
827 msvcrt_local_unwind2( frame, trylevel, &frame->_ebp );
833void CDECL _local_unwind4(
ULONG *
cookie, MSVCRT_EXCEPTION_FRAME* frame,
int trylevel )
835 msvcrt_local_unwind4(
cookie, frame, trylevel, &frame->_ebp );
844 TRACE(
"(%p)\n",frame);
860 FIXME(
"exception %x flags=%x at %p handler=%p %p %p stub\n",
870 MSVCRT_EXCEPTION_FRAME* frame,
873 int retval, trylevel;
875 PSCOPETABLE pScopeTable;
877 TRACE(
"exception %x flags=%x at %p handler=%p %p %p semi-stub\n",
879 frame->handler,
context, dispatcher);
889 msvcrt_local_unwind2(frame, TRYLEVEL_END, &frame->_ebp);
890 TRACE(
"unwound current frame, returning ExceptionContinueSearch\n");
899 trylevel = frame->trylevel;
900 pScopeTable = frame->scopetable;
902 while (trylevel != TRYLEVEL_END)
904 TRACE(
"level %d prev %d filter %p\n", trylevel, pScopeTable[trylevel].previousTryLevel,
905 pScopeTable[trylevel].lpfnFilter );
906 if (pScopeTable[trylevel].lpfnFilter)
908 retval = call_filter( pScopeTable[trylevel].lpfnFilter, &exceptPtrs, &frame->_ebp );
912 "EXECUTE_HANDLER" :
"CONTINUE_SEARCH");
921 msvcrt_local_unwind2(frame, trylevel, &frame->_ebp);
926 frame->trylevel = pScopeTable[trylevel].previousTryLevel;
927 TRACE(
"__finally block %p\n",pScopeTable[trylevel].lpfnHandler);
928 call_finally_block(pScopeTable[trylevel].lpfnHandler, &frame->_ebp);
931 trylevel = pScopeTable[trylevel].previousTryLevel;
934 TRACE(
"reached TRYLEVEL_END, returning ExceptionContinueSearch\n");
941int CDECL _except_handler4_common(
ULONG *
cookie,
void (*check_cookie)(
void),
945 int retval, trylevel;
947 const SCOPETABLE_V4 *scope_table = get_scopetable_v4( frame, *
cookie );
949 TRACE(
"exception %x flags=%x at %p handler=%p %p %p cookie=%x scope table=%p cookies=%d/%x,%d/%x\n",
952 scope_table->gs_cookie_offset, scope_table->gs_cookie_xor,
953 scope_table->eh_cookie_offset, scope_table->eh_cookie_xor );
960 msvcrt_local_unwind4(
cookie, frame, -2, &frame->_ebp );
961 TRACE(
"unwound current frame, returning ExceptionContinueSearch\n");
970 trylevel = frame->trylevel;
972 while (trylevel != -2)
974 TRACE(
"level %d prev %d filter %p\n", trylevel,
975 scope_table->entries[trylevel].previousTryLevel,
976 scope_table->entries[trylevel].lpfnFilter );
977 if (scope_table->entries[trylevel].lpfnFilter)
979 retval = call_filter( scope_table->entries[trylevel].lpfnFilter, &exceptPtrs, &frame->_ebp );
983 "EXECUTE_HANDLER" :
"CONTINUE_SEARCH");
994 msvcrt_local_unwind4(
cookie, frame, trylevel, &frame->_ebp );
999 frame->trylevel = scope_table->entries[trylevel].previousTryLevel;
1000 TRACE(
"__finally block %p\n",scope_table->entries[trylevel].lpfnHandler);
1001 call_finally_block(scope_table->entries[trylevel].lpfnHandler, &frame->_ebp);
1004 trylevel = scope_table->entries[trylevel].previousTryLevel;
1007 TRACE(
"reached -2, returning ExceptionContinueSearch\n");
1016#define MSVCRT_JMP_MAGIC 0x56433230
1017typedef void (
__stdcall *MSVCRT_unwind_function)(
const struct MSVCRT___JUMP_BUFFER *);
1021#define DEFINE_SETJMP_ENTRYPOINT(name) \
1022 __ASM_GLOBAL_FUNC( name, \
1023 "movl 4(%esp),%ecx\n\t" \
1024 "movl %ebp,0(%ecx)\n\t" \
1025 "movl %ebx,4(%ecx)\n\t" \
1026 "movl %edi,8(%ecx)\n\t" \
1027 "movl %esi,12(%ecx)\n\t" \
1028 "movl %esp,16(%ecx)\n\t" \
1029 "movl 0(%esp),%eax\n\t" \
1030 "movl %eax,20(%ecx)\n\t"
\
1031 "jmp " __ASM_NAME("__regs_") # name )
1036DEFINE_SETJMP_ENTRYPOINT(MSVCRT__setjmp)
1040 if (jmp->Registration == ~0
UL)
1041 jmp->TryLevel = TRYLEVEL_END;
1043 jmp->TryLevel = ((MSVCRT_EXCEPTION_FRAME*)jmp->Registration)->trylevel;
1045 TRACE(
"buf=%p ebx=%08lx esi=%08lx edi=%08lx ebp=%08lx esp=%08lx eip=%08lx frame=%08lx\n",
1046 jmp, jmp->Ebx, jmp->Esi, jmp->Edi, jmp->Ebp, jmp->Esp, jmp->Eip, jmp->Registration );
1053DEFINE_SETJMP_ENTRYPOINT( MSVCRT__setjmp3 )
1056 jmp->Cookie = MSVCRT_JMP_MAGIC;
1057 jmp->UnwindFunc = 0;
1059 if (jmp->Registration == ~0
UL)
1061 jmp->TryLevel = TRYLEVEL_END;
1069 if (nb_args > 0) jmp->UnwindFunc =
va_arg(
args,
unsigned long );
1070 if (nb_args > 1) jmp->TryLevel =
va_arg(
args,
unsigned long );
1071 else jmp->TryLevel = ((MSVCRT_EXCEPTION_FRAME*)jmp->Registration)->trylevel;
1072 for (
i = 0;
i < 6 &&
i < nb_args - 2;
i++)
1073 jmp->UnwindData[
i] =
va_arg(
args,
unsigned long );
1077 TRACE(
"buf=%p ebx=%08lx esi=%08lx edi=%08lx ebp=%08lx esp=%08lx eip=%08lx frame=%08lx\n",
1078 jmp, jmp->Ebx, jmp->Esi, jmp->Edi, jmp->Ebp, jmp->Esp, jmp->Eip, jmp->Registration );
1085void CDECL MSVCRT_longjmp(
struct MSVCRT___JUMP_BUFFER *jmp,
int retval)
1087 unsigned long cur_frame = 0;
1089 TRACE(
"buf=%p ebx=%08lx esi=%08lx edi=%08lx ebp=%08lx esp=%08lx eip=%08lx frame=%08lx retval=%08x\n",
1090 jmp, jmp->Ebx, jmp->Esi, jmp->Edi, jmp->Ebp, jmp->Esp, jmp->Eip, jmp->Registration, retval );
1093 TRACE(
"cur_frame=%lx\n",cur_frame);
1095 if (cur_frame != jmp->Registration)
1098 if (jmp->Registration)
1100 if (
IsBadReadPtr(&jmp->Cookie,
sizeof(
long)) || jmp->Cookie != MSVCRT_JMP_MAGIC)
1102 msvcrt_local_unwind2((MSVCRT_EXCEPTION_FRAME*)jmp->Registration,
1103 jmp->TryLevel, (
void *)jmp->Ebp);
1105 else if(jmp->UnwindFunc)
1107 MSVCRT_unwind_function unwind_func;
1109 unwind_func=(MSVCRT_unwind_function)jmp->UnwindFunc;
1117 __wine_longjmp( (__wine_jmp_buf *)jmp, retval );
1123void __stdcall _seh_longjmp_unwind(
struct MSVCRT___JUMP_BUFFER *jmp)
1125 msvcrt_local_unwind2( (MSVCRT_EXCEPTION_FRAME *)jmp->Registration, jmp->TryLevel, (
void *)jmp->Ebp );
1131void __stdcall _seh_longjmp_unwind4(
struct MSVCRT___JUMP_BUFFER *jmp)
1133 msvcrt_local_unwind4( (
ULONG *)&jmp->Cookie, (MSVCRT_EXCEPTION_FRAME *)jmp->Registration,
1134 jmp->TryLevel, (
void *)jmp->Ebp );
1149 switch(exception_code) {
1160 memset(&rec, 0,
sizeof(rec));
1162 switch((
ctx->ControlWord >> 8) & 0x3) {
1186 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)
@ 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 *
_CRTIMP int __cdecl _fpieee_flt(unsigned long _ExceptionCode, struct _EXCEPTION_POINTERS *_PtExceptionPtr, int(__cdecl *_Handler)(_FPIEEE_RECORD *))
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
#define EXCEPTION_EXECUTE_HANDLER
#define EXCEPTION_CONTINUE_SEARCH
#define EXCEPTION_CONTINUE_EXECUTION
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 memcpy(s1, s2, n)
#define memmove(s1, s2, n)
void __cdecl MSVCRT_terminate(void)
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::@1889 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
static void dump_type(type_t *t)
struct _EXCEPTION_POINTERS * PEXCEPTION_POINTERS