29 #include "wine/port.h" 43 #include "cppexcept.h" 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);
106 typedef struct _SCOPETABLE
108 int previousTryLevel;
110 void * (*lpfnHandler)(
void);
111 } SCOPETABLE, *PSCOPETABLE;
113 typedef struct _MSVCRT_EXCEPTION_FRAME
118 PSCOPETABLE scopetable;
122 } MSVCRT_EXCEPTION_FRAME;
126 int gs_cookie_offset;
128 int eh_cookie_offset;
130 SCOPETABLE entries[1];
133 #define TRYLEVEL_END (-1) 141 extern void call_copy_ctor(
void *
func,
void *
this,
void *
src,
int has_vbase );
145 __ASM_CFI(
".cfi_adjust_cfa_offset 4\n\t")
147 "movl %esp, %ebp\n\t" 148 __ASM_CFI(
".cfi_def_cfa_register %ebp\n\t")
150 "movl 12(%ebp), %ecx\n\t" 162 "movl 4(%esp), %edx\n\t" 163 "movl 8(%esp), %eax\n\t" 164 "movl -4(%edx), %esp\n\t" 165 "leal 12(%edx), %ebp\n\t" 168 extern void DECLSPEC_NORETURN call_finally_block(
void *code_block,
void *base_ptr );
171 "movl 8(%esp), %ebp\n\t" 179 "movl 20(%esp), %ebp\n\t" 185 extern void *call_handler(
void * (*
func)(
void),
void *
ebp );
192 "movl 24(%esp), %ebp\n\t" 202 TRACE(
"flags %x type %p %s offsets %d,%d,%d size %d copy ctor %p\n",
204 type->offsets.this_offset,
type->offsets.vbase_descr,
type->offsets.vbase_offset,
212 TRACE(
"flags %x destr %p handler %p type info %p\n",
213 type->flags,
type->destructor,
type->custom_handler,
type->type_info_table );
214 for (
i = 0;
i <
type->type_info_table->count;
i++)
227 TRACE(
"unwind table: %p %d\n",
descr->unwind_table,
descr->unwind_count );
228 for (
i = 0;
i <
descr->unwind_count;
i++)
230 TRACE(
" %d: prev %d func %p\n",
i,
231 descr->unwind_table[
i].prev,
descr->unwind_table[
i].handler );
234 for (
i = 0;
i <
descr->tryblock_count;
i++)
236 TRACE(
" %d: start %d end %d catchlevel %d catch %p %d\n",
i,
237 descr->tryblock[
i].start_level,
descr->tryblock[
i].end_level,
238 descr->tryblock[
i].catch_level,
descr->tryblock[
i].catchblock,
239 descr->tryblock[
i].catchblock_count );
240 for (
j = 0;
j <
descr->tryblock[
i].catchblock_count;
j++)
243 TRACE(
" %d: flags %x offset %d handler %p type %p %s\n",
249 TRACE(
"expect list: %p\n",
descr->expect_list );
264 if (!catch_ti)
return type;
265 if (catch_ti !=
type->type_info)
287 if (!catchblock->
offset)
return;
288 dest_ptr = (
void **)((
char *)&frame->
ebp + catchblock->
offset);
313 void * (*handler)(
void);
316 while (trylevel != last_level)
318 if (trylevel < 0 || trylevel >=
descr->unwind_count)
320 ERR(
"invalid trylevel %d\n", trylevel );
326 TRACE(
"calling unwind handler %p trylevel %d last %d ebp %p\n",
330 trylevel =
descr->unwind_table[trylevel].prev;
336 struct catch_func_nested_frame
349 struct catch_func_nested_frame *nested_frame = (
struct 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->frame,
386 nested_frame->trylevel );
400 struct catch_func_nested_frame nested_frame;
405 data->processing_throw++;
406 for (
i = 0;
i <
descr->tryblock_count;
i++)
411 if (catch_frame && nested_trylevel > tryblock->
start_level)
continue;
413 if (trylevel < tryblock->start_level)
continue;
414 if (trylevel > tryblock->
end_level)
continue;
426 TRACE(
"matched type %p in tryblock %d catchblock %d\n",
type,
i,
j );
429 copy_exception(
object, frame, catchblock,
type );
436 TRACE(
"found catch(...) block\n");
444 RtlUnwind( catch_frame ? catch_frame : &frame->
frame, 0, rec, 0 );
448 nested_frame.frame_info.rec =
data->exc_record;
449 nested_frame.frame_info.context =
data->ctx_record;
450 data->exc_record = rec;
452 data->processing_throw--;
455 TRACE(
"calling catch block %p addr %p ebp %p\n",
456 catchblock, catchblock->
handler, &frame->
ebp );
459 nested_frame.frame.Handler = catch_function_nested_handler;
460 nested_frame.cxx_frame = frame;
461 nested_frame.descr =
descr;
462 nested_frame.trylevel = nested_trylevel + 1;
468 ((
DWORD*)frame)[-1] = save_esp;
470 TRACE(
"done, continuing at %p\n",
addr );
472 continue_after_catch( frame,
addr );
475 data->processing_throw--;
537 se_translator_ctx *
ctx = (se_translator_ctx *)
c;
549 ctx->frame->trylevel,
ctx->nested_frame, exc_type );
564 int nested_trylevel )
570 ERR(
"invalid frame magic %x\n",
descr->magic );
580 if (
descr->unwind_count && !nested_trylevel) cxx_local_unwind( frame,
descr, -1 );
593 TRACE(
"re-propagate: obj: %lx, type: %lx\n",
606 descr, nested_trylevel, nested_frame, 0 );
611 TRACE(
"handling C++ exception rec %p frame %p trylevel %d descr %p nested_frame %p\n",
613 dump_exception_type( exc_type );
614 dump_function_descr(
descr );
622 TRACE(
"handling C exception code %x rec %p frame %p trylevel %d descr %p nested_frame %p\n",
625 if (
data->se_translator) {
627 se_translator_ctx
ctx;
631 ctx.nested_frame = nested_frame;
646 frame->
trylevel, nested_frame, exc_type );
669 call cxx_frame_handler
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")
687 __ASM_CFI(
".cfi_adjust_cfa_offset 4\n\t")
689 __ASM_CFI(
".cfi_adjust_cfa_offset 4\n\t")
690 "call " __ASM_NAME(
"cxx_frame_handler")
"\n\t" 692 __ASM_CFI(
".cfi_adjust_cfa_offset -28\n\t")
702 void __stdcall __CxxLongjmpUnwind(
const struct MSVCRT___JUMP_BUFFER *
buf )
707 TRACE(
"unwinding frame %p descr %p trylevel %ld\n", frame,
descr,
buf->TryLevel );
708 cxx_local_unwind( frame,
descr,
buf->TryLevel );
747 unsigned int CDECL __CxxQueryExceptionSize(
void)
759 __ASM_CFI(
".cfi_adjust_cfa_offset 4\n\t")
761 __ASM_CFI(
".cfi_adjust_cfa_offset 4\n\t")
763 __ASM_CFI(
".cfi_adjust_cfa_offset 4\n\t")
765 __ASM_CFI(
".cfi_adjust_cfa_offset 4\n\t")
766 "movl %esp, %fs:0\n\t" 767 "movl 12(%esp), %eax\n\t" 768 "movl %ebp, 12(%esp)\n\t" 769 "leal 12(%esp), %ebp\n\t" 771 __ASM_CFI(
".cfi_adjust_cfa_offset 4\n\t")
774 static
const SCOPETABLE_V4 *get_scopetable_v4( MSVCRT_EXCEPTION_FRAME *frame,
ULONG_PTR cookie )
790 static void msvcrt_local_unwind2(MSVCRT_EXCEPTION_FRAME* frame,
int trylevel,
void *
ebp)
794 TRACE(
"(%p,%d,%d)\n",frame, frame->trylevel, trylevel);
797 reg.Handler = MSVCRT_nested_handler;
801 while (frame->trylevel != TRYLEVEL_END && frame->trylevel != trylevel)
803 int level = frame->trylevel;
804 frame->trylevel = frame->scopetable[
level].previousTryLevel;
805 if (!frame->scopetable[
level].lpfnFilter)
807 TRACE(
"__try block cleanup level %d handler %p ebp %p\n",
809 call_handler( frame->scopetable[
level].lpfnHandler,
ebp );
813 TRACE(
"unwound OK\n");
816 static void msvcrt_local_unwind4(
ULONG *
cookie, MSVCRT_EXCEPTION_FRAME* frame,
int trylevel,
void *
ebp )
819 const SCOPETABLE_V4 *scopetable = get_scopetable_v4( frame, *
cookie );
821 TRACE(
"(%p,%d,%d)\n",frame, frame->trylevel, trylevel);
824 reg.Handler = MSVCRT_nested_handler;
828 while (frame->trylevel != -2 && frame->trylevel != trylevel)
830 int level = frame->trylevel;
831 frame->trylevel = scopetable->entries[
level].previousTryLevel;
832 if (!scopetable->entries[
level].lpfnFilter)
834 TRACE(
"__try block cleanup level %d handler %p ebp %p\n",
836 call_handler( scopetable->entries[
level].lpfnHandler,
ebp );
840 TRACE(
"unwound OK\n");
846 void CDECL _local_unwind2(MSVCRT_EXCEPTION_FRAME* frame,
int trylevel)
848 msvcrt_local_unwind2( frame, trylevel, &frame->_ebp );
854 void CDECL _local_unwind4(
ULONG *
cookie, MSVCRT_EXCEPTION_FRAME* frame,
int trylevel )
856 msvcrt_local_unwind4(
cookie, frame, trylevel, &frame->_ebp );
865 TRACE(
"(%p)\n",frame);
881 FIXME(
"exception %x flags=%x at %p handler=%p %p %p stub\n",
891 MSVCRT_EXCEPTION_FRAME* frame,
894 int retval, trylevel;
896 PSCOPETABLE pScopeTable;
898 TRACE(
"exception %x flags=%x at %p handler=%p %p %p semi-stub\n",
900 frame->handler,
context, dispatcher);
910 msvcrt_local_unwind2(frame, TRYLEVEL_END, &frame->_ebp);
911 TRACE(
"unwound current frame, returning ExceptionContinueSearch\n");
920 trylevel = frame->trylevel;
921 pScopeTable = frame->scopetable;
923 while (trylevel != TRYLEVEL_END)
925 TRACE(
"level %d prev %d filter %p\n", trylevel, pScopeTable[trylevel].previousTryLevel,
926 pScopeTable[trylevel].lpfnFilter );
927 if (pScopeTable[trylevel].lpfnFilter)
929 retval = call_filter( pScopeTable[trylevel].lpfnFilter, &exceptPtrs, &frame->_ebp );
933 "EXECUTE_HANDLER" :
"CONTINUE_SEARCH");
942 msvcrt_local_unwind2(frame, trylevel, &frame->_ebp);
947 frame->trylevel = pScopeTable[trylevel].previousTryLevel;
948 TRACE(
"__finally block %p\n",pScopeTable[trylevel].lpfnHandler);
949 call_finally_block(pScopeTable[trylevel].lpfnHandler, &frame->_ebp);
952 trylevel = pScopeTable[trylevel].previousTryLevel;
955 TRACE(
"reached TRYLEVEL_END, returning ExceptionContinueSearch\n");
962 int CDECL _except_handler4_common(
ULONG *
cookie,
void (*check_cookie)(
void),
966 int retval, trylevel;
968 const SCOPETABLE_V4 *scope_table = get_scopetable_v4( frame, *
cookie );
970 TRACE(
"exception %x flags=%x at %p handler=%p %p %p cookie=%x scope table=%p cookies=%d/%x,%d/%x\n",
973 scope_table->gs_cookie_offset, scope_table->gs_cookie_xor,
974 scope_table->eh_cookie_offset, scope_table->eh_cookie_xor );
981 msvcrt_local_unwind4(
cookie, frame, -2, &frame->_ebp );
982 TRACE(
"unwound current frame, returning ExceptionContinueSearch\n");
991 trylevel = frame->trylevel;
993 while (trylevel != -2)
995 TRACE(
"level %d prev %d filter %p\n", trylevel,
996 scope_table->entries[trylevel].previousTryLevel,
997 scope_table->entries[trylevel].lpfnFilter );
998 if (scope_table->entries[trylevel].lpfnFilter)
1000 retval = call_filter( scope_table->entries[trylevel].lpfnFilter, &exceptPtrs, &frame->_ebp );
1004 "EXECUTE_HANDLER" :
"CONTINUE_SEARCH");
1015 msvcrt_local_unwind4(
cookie, frame, trylevel, &frame->_ebp );
1020 frame->trylevel = scope_table->entries[trylevel].previousTryLevel;
1021 TRACE(
"__finally block %p\n",scope_table->entries[trylevel].lpfnHandler);
1022 call_finally_block(scope_table->entries[trylevel].lpfnHandler, &frame->_ebp);
1025 trylevel = scope_table->entries[trylevel].previousTryLevel;
1028 TRACE(
"reached -2, returning ExceptionContinueSearch\n");
1037 #define MSVCRT_JMP_MAGIC 0x56433230 1038 typedef void (
__stdcall *MSVCRT_unwind_function)(
const struct MSVCRT___JUMP_BUFFER *);
1042 #define DEFINE_SETJMP_ENTRYPOINT(name) \ 1043 __ASM_GLOBAL_FUNC( name, \ 1044 "movl 4(%esp),%ecx\n\t" \ 1045 "movl %ebp,0(%ecx)\n\t" \ 1046 "movl %ebx,4(%ecx)\n\t" \ 1047 "movl %edi,8(%ecx)\n\t" \ 1048 "movl %esi,12(%ecx)\n\t" \ 1049 "movl %esp,16(%ecx)\n\t" \ 1050 "movl 0(%esp),%eax\n\t" \ 1051 "movl %eax,20(%ecx)\n\t" \ 1052 "jmp " __ASM_NAME("__regs_") # name ) 1057 DEFINE_SETJMP_ENTRYPOINT(MSVCRT__setjmp)
1061 if (jmp->Registration == ~0
UL)
1062 jmp->TryLevel = TRYLEVEL_END;
1064 jmp->TryLevel = ((MSVCRT_EXCEPTION_FRAME*)jmp->Registration)->trylevel;
1066 TRACE(
"buf=%p ebx=%08lx esi=%08lx edi=%08lx ebp=%08lx esp=%08lx eip=%08lx frame=%08lx\n",
1067 jmp, jmp->Ebx, jmp->Esi, jmp->Edi, jmp->Ebp, jmp->Esp, jmp->Eip, jmp->Registration );
1074 DEFINE_SETJMP_ENTRYPOINT( MSVCRT__setjmp3 )
1077 jmp->Cookie = MSVCRT_JMP_MAGIC;
1078 jmp->UnwindFunc = 0;
1080 if (jmp->Registration == ~0
UL)
1082 jmp->TryLevel = TRYLEVEL_END;
1090 if (nb_args > 0) jmp->UnwindFunc =
va_arg(
args,
unsigned long );
1091 if (nb_args > 1) jmp->TryLevel =
va_arg(
args,
unsigned long );
1092 else jmp->TryLevel = ((MSVCRT_EXCEPTION_FRAME*)jmp->Registration)->trylevel;
1093 for (
i = 0;
i < 6 &&
i < nb_args - 2;
i++)
1094 jmp->UnwindData[
i] =
va_arg(
args,
unsigned long );
1098 TRACE(
"buf=%p ebx=%08lx esi=%08lx edi=%08lx ebp=%08lx esp=%08lx eip=%08lx frame=%08lx\n",
1099 jmp, jmp->Ebx, jmp->Esi, jmp->Edi, jmp->Ebp, jmp->Esp, jmp->Eip, jmp->Registration );
1106 void CDECL MSVCRT_longjmp(
struct MSVCRT___JUMP_BUFFER *jmp,
int retval)
1108 unsigned long cur_frame = 0;
1110 TRACE(
"buf=%p ebx=%08lx esi=%08lx edi=%08lx ebp=%08lx esp=%08lx eip=%08lx frame=%08lx retval=%08x\n",
1111 jmp, jmp->Ebx, jmp->Esi, jmp->Edi, jmp->Ebp, jmp->Esp, jmp->Eip, jmp->Registration, retval );
1114 TRACE(
"cur_frame=%lx\n",cur_frame);
1116 if (cur_frame != jmp->Registration)
1119 if (jmp->Registration)
1121 if (
IsBadReadPtr(&jmp->Cookie,
sizeof(
long)) || jmp->Cookie != MSVCRT_JMP_MAGIC)
1123 msvcrt_local_unwind2((MSVCRT_EXCEPTION_FRAME*)jmp->Registration,
1124 jmp->TryLevel, (
void *)jmp->Ebp);
1126 else if(jmp->UnwindFunc)
1128 MSVCRT_unwind_function unwind_func;
1130 unwind_func=(MSVCRT_unwind_function)jmp->UnwindFunc;
1138 __wine_longjmp( (__wine_jmp_buf *)jmp, retval );
1144 void __stdcall _seh_longjmp_unwind(
struct MSVCRT___JUMP_BUFFER *jmp)
1146 msvcrt_local_unwind2( (MSVCRT_EXCEPTION_FRAME *)jmp->Registration, jmp->TryLevel, (
void *)jmp->Ebp );
1152 void __stdcall _seh_longjmp_unwind4(
struct MSVCRT___JUMP_BUFFER *jmp)
1154 msvcrt_local_unwind4( (
ULONG *)&jmp->Cookie, (MSVCRT_EXCEPTION_FRAME *)jmp->Registration,
1155 jmp->TryLevel, (
void *)jmp->Ebp );
1170 switch(exception_code) {
1181 memset(&rec, 0,
sizeof(rec));
1183 switch((
ctx->ControlWord >> 8) & 0x3) {
1207 if(*(
WORD*)
ctx->ErrorOffset == 0x35dc) {
struct _EXCEPTION_RECORD * PEXCEPTION_RECORD
#define memmove(s1, s2, n)
_CRTIMP int __cdecl _fpieee_flt(unsigned long _ExceptionCode, struct _EXCEPTION_POINTERS *_PtExceptionPtr, int(__cdecl *_Handler)(_FPIEEE_RECORD *))
struct png_info_def **typedef void(__cdecl typeof(png_destroy_read_struct))(struct png_struct_def **
#define CXX_FRAME_MAGIC_VC6
ecx edi ebx edx edi decl ecx esi eax jecxz decl eax andl eax esi movl edx movl TEMP incl eax andl eax ecx incl ebx eax jnz xchgl ecx incl TEMP esp ecx subl ebx pushl ecx ecx edx ecx 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 mm1 mm5 paddd mm0 paddd mm4 mm0 mm4 packssdw mm0 packssdw mm4 mm1 punpckldq mm0 pand mm1 pand mm0 por mm1 movq edi esi edx edi decl ecx jnz popl ecx ecx jecxz mm0 mm0 mm1 mm1 mm2 mm2 mm3 mm3 paddd mm0 paddd mm0 paddd mm0 movq mm1 mm1 paddd mm0 mm0 packssdw mm0 movd eax movw edi esi edx esi 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 mm1 mm5 paddd mm1 paddd mm5 mm1 mm5 packssdw mm1 packssdw mm5 psubd mm0 psubd mm4 psubsw mm0 psubsw mm4 mm1 punpckldq mm0 pand mm1 pand mm0 por mm1 movq edi esi edx edi decl ecx jnz mm0 mm0 mm1 mm1 mm2 mm2 mm3 mm3 paddd mm0 paddd mm0 paddd mm0 movq mm1 mm1 paddd mm1 mm1 packssdw mm1 psubd mm0 psubsw mm0 movd eax movw edi emms popl ebx popl esi popl edi mov ebp
FLOATING_SAVE_AREA FloatSave
#define TYPE_FLAG_VOLATILE
struct __cxx_function_descr cxx_function_descr
#define TYPE_FLAG_REFERENCE
unsigned int OperandValid
const unwind_info * unwind_table
NTSYSAPI VOID NTAPI RtlUnwind(_In_opt_ PVOID TargetFrame, _In_opt_ PVOID TargetIp, _In_opt_ PEXCEPTION_RECORD ExceptionRecord, _In_ PVOID ReturnValue)
_FPIEEE_EXCEPTION_FLAGS Cause
#define __EXCEPT_CTX(func, ctx)
__asm__("\n\t \
NewInt3Handler:\n\t \
pushl $" STR(REASON_INT3) "\n\t \
// call debugger loop\n\t \
jmp NewInt31Handler\n\t \
")
#define STATUS_FLOAT_DIVIDE_BY_ZERO
#define STATUS_FLOAT_INEXACT_RESULT
const catchblock_info * catchblock
#define DECLSPEC_NORETURN
PEXCEPTION_ROUTINE Handler
#define EXCEPTION_CONTINUE_EXECUTION
#define STATUS_FLOAT_UNDERFLOW
#define __ASM_GLOBAL_FUNC(name, code)
struct _EXCEPTION_POINTERS * PEXCEPTION_POINTERS
GLenum GLuint GLenum GLsizei const GLchar * buf
#define CXX_FRAME_MAGIC_VC8
struct __tryblock_info tryblock_info
void CDECL __DestructExceptionObject(EXCEPTION_RECORD *rec)
#define CLASS_IS_SIMPLE_TYPE
#define STATUS_FLOAT_OVERFLOW
static void * get_this_pointer(const this_ptr_offsets *off, void *object)
_FPIEEE_EXCEPTION_FLAGS Status
unsigned int InvalidOperation
struct _frame_info frame_info
static EXCEPTION_REGISTRATION_RECORD * __wine_push_frame(EXCEPTION_REGISTRATION_RECORD *frame)
cxx_exc_custom_handler custom_handler
frame_info *CDECL _CreateFrameInfo(frame_info *fi, void *obj)
int CDECL __CppXcptFilter(NTSTATUS, PEXCEPTION_POINTERS)
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
union _FPIEEE_VALUE::@1837 Value
EXCEPTION_REGISTRATION_RECORD frame
ULONG_PTR ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS]
#define FUNC_DESCR_SYNCHRONOUS
ecx edi ebx edx edi decl ecx esi eax jecxz decl eax andl eax esi movl eax
struct __catchblock_info catchblock_info
#define EXCEPTION_EXECUTE_HANDLER
#define CXX_FRAME_MAGIC_VC7
const type_info * type_info
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
_In_opt_ PVOID _In_ ULONG _In_ PVOID context
struct __cxx_exception_frame cxx_exception_frame
GLenum const GLvoid * addr
#define memcpy(s1, s2, n)
struct __unwind_info unwind_info
thread_data_t * msvcrt_get_thread_data(void)
void dispatch(HANDLE hStopEvent)
struct __cxx_exception_type cxx_exception_type
static const char * dbgstr_type_info(const type_info *info)
FORCEINLINE struct _TEB * NtCurrentTeb(VOID)
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
#define EXCEPTION_CONTINUE_SEARCH
const cxx_type_info_table * type_info_table
#define CLASS_HAS_VIRTUAL_BASE_CLASS
BOOL WINAPI IsBadReadPtr(IN LPCVOID lp, IN UINT_PTR ucb)
INT copy(TCHAR source[MAX_PATH], TCHAR dest[MAX_PATH], INT append, DWORD lpdwFlags, BOOL bTouch)
unsigned int RoundingMode
static void dump_type(type_t *t)
int strcmp(const char *String1, const char *String2)
PEXCEPTION_RECORD ExceptionRecord
GLuint GLuint GLsizei GLenum type
UINT(* handler)(MSIPACKAGE *)
#define STATUS_FLOAT_INVALID_OPERATION
static void push(calc_node_t *op)
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
void CDECL __CxxUnregisterExceptionObject(cxx_frame_info *frame_info, BOOL in_use)
void __cdecl MSVCRT_terminate(void)
static EXCEPTION_REGISTRATION_RECORD * __wine_pop_frame(EXCEPTION_REGISTRATION_RECORD *frame)
int CDECL _XcptFilter(NTSTATUS, PEXCEPTION_POINTERS)
const tryblock_info * tryblock
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *
_FPIEEE_EXCEPTION_FLAGS Enable
const cxx_type_info * info[3]