#include <fpieee.h>
#include "cxx.h"
Go to the source code of this file.
|
| DECLSPEC_NORETURN void WINAPI | _CxxThrowException (void *, const cxx_exception_type *) |
| |
| static BOOL | is_cxx_exception (EXCEPTION_RECORD *rec) |
| |
| void | throw_exception (const char *) |
| |
| void | exception_ptr_from_record (exception_ptr *, EXCEPTION_RECORD *) |
| |
| void __cdecl | __ExceptionPtrCreate (exception_ptr *) |
| |
| void __cdecl | __ExceptionPtrDestroy (exception_ptr *) |
| |
| void __cdecl | __ExceptionPtrRethrow (const exception_ptr *) |
| |
| BOOL __cdecl | __uncaught_exception (void) |
| |
| static const char * | dbgstr_type_info (const type_info *info) |
| |
| static void * | get_this_pointer (const this_ptr_offsets *off, void *object) |
| |
| static void | call_copy_ctor (void *func, void *this, void *src, int has_vbase) |
| |
| static void | call_dtor (void *func, void *this) |
| |
| static const cxx_type_info * | find_caught_type (cxx_exception_type *exc_type, uintptr_t base, const type_info *catch_ti, UINT catch_flags) |
| |
| static void | copy_exception (void *object, void **dest, UINT catch_flags, const cxx_type_info *type, uintptr_t base) |
| |
| void | dump_function_descr (const cxx_function_descr *descr, uintptr_t base) |
| |
| void * | find_catch_handler (void *object, uintptr_t frame, uintptr_t exc_base, const tryblock_info *tryblock, cxx_exception_type *exc_type, uintptr_t image_base) |
| |
| int | handle_fpieee_flt (__msvcrt_ulong exception_code, EXCEPTION_POINTERS *ep, int(__cdecl *handler)(_FPIEEE_RECORD *)) |
| |
| void * | call_catch_handler (EXCEPTION_RECORD *rec) |
| |
| void * | call_unwind_handler (void *func, uintptr_t frame, DISPATCHER_CONTEXT *dispatch) |
| |
| ULONG_PTR | get_exception_pc (DISPATCHER_CONTEXT *dispatch) |
| |
◆ CLASS_HAS_VIRTUAL_BASE_CLASS
| #define CLASS_HAS_VIRTUAL_BASE_CLASS 4 |
◆ CLASS_IS_SIMPLE_TYPE
| #define CLASS_IS_SIMPLE_TYPE 1 |
◆ CREATE_EXCEPTION_OBJECT
| #define CREATE_EXCEPTION_OBJECT |
( |
|
exception_name | ) |
|
◆ CXX_EXCEPTION
| #define CXX_EXCEPTION 0xe06d7363 |
◆ CXX_EXCEPTION_PARAMS
| #define CXX_EXCEPTION_PARAMS 4 |
◆ CXX_FRAME_MAGIC_VC6
| #define CXX_FRAME_MAGIC_VC6 0x19930520 |
◆ CXX_FRAME_MAGIC_VC7
| #define CXX_FRAME_MAGIC_VC7 0x19930521 |
◆ CXX_FRAME_MAGIC_VC8
| #define CXX_FRAME_MAGIC_VC8 0x19930522 |
◆ EXCEPTION_MANGLED_NAME
| #define EXCEPTION_MANGLED_NAME ".?AVexception@@" |
◆ FUNC_DESCR_NOEXCEPT
| #define FUNC_DESCR_NOEXCEPT 4 /* noexcept function */ |
◆ FUNC_DESCR_SYNCHRONOUS
| #define FUNC_DESCR_SYNCHRONOUS 1 /* synchronous exceptions only (built with /EHs and /EHsc) */ |
◆ TRACE_EXCEPTION_TYPE
Value: do { \
TRACE( "flags %x destr %p handler %p type info %p\n", \
{ \
TRACE( " %d: flags %x type %p %s offsets %d,%d,%d size %d copy ctor %p\n", \
type->offsets.this_offset,
type->offsets.vbase_descr,
type->offsets.vbase_offset, \
} \
} while(0)
static const char * dbgstr_type_info(const type_info *info)
static void * rtti_rva(unsigned int rva, uintptr_t base)
GLuint GLuint GLsizei GLenum type
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
Definition at line 265 of file cppexcept.h.
◆ TYPE_FLAG_CONST
◆ TYPE_FLAG_REFERENCE
◆ TYPE_FLAG_VOLATILE
◆ __ExceptionPtrCreate()
◆ __ExceptionPtrDestroy()
◆ __ExceptionPtrRethrow()
Definition at line 1245 of file cpp.c.
1246{
1247 TRACE(
"(%p)\n", ep);
1248
1250 {
1251 static const char *exception_msg = "bad exception";
1253
1256 return;
1257 }
1258
1261}
VOID WINAPI RaiseException(_In_ DWORD dwExceptionCode, _In_ DWORD dwExceptionFlags, _In_ DWORD nNumberOfArguments, _In_opt_ const ULONG_PTR *lpArguments)
void WINAPI _CxxThrowException(void *object, const cxx_exception_type *type)
exception __thiscall exception_ctor(exception *_this, const char **name)
ULONG_PTR ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS]
◆ __uncaught_exception()
Definition at line 821 of file except.c.
822{
824}
thread_data_t *CDECL msvcrt_get_thread_data(void)
◆ _CxxThrowException()
Definition at line 890 of file cpp.c.
891{
893
899}
#define CXX_FRAME_MAGIC_VC6
#define CXX_EXCEPTION_PARAMS
static uintptr_t rtti_rva_base(const void *ptr)
#define EXCEPTION_NONCONTINUABLE
◆ call_catch_handler()
◆ call_copy_ctor()
◆ call_dtor()
◆ call_unwind_handler()
◆ copy_exception()
Definition at line 241 of file cppexcept.h.
243{
245 {
247 }
249 {
251
253 }
254 else
255 {
260 else
262 }
263}
#define CLASS_IS_SIMPLE_TYPE
#define CLASS_HAS_VIRTUAL_BASE_CLASS
static void call_copy_ctor(void *func, void *this, void *src, int has_vbase)
static void * get_this_pointer(const this_ptr_offsets *off, void *object)
#define TYPE_FLAG_REFERENCE
#define memmove(s1, s2, n)
Referenced by __CxxExceptionFilter(), and find_catch_handler().
◆ dbgstr_type_info()
◆ dump_function_descr()
Definition at line 50 of file except.c.
51{
56
58 TRACE(
"unwind table: %p %d\n", unwind_table,
descr->unwind_count );
59 for (
i = 0;
i <
descr->unwind_count;
i++)
60 {
61 TRACE(
" %d: prev %d func %p\n",
i, unwind_table[
i].prev,
63 }
64 TRACE(
"try table: %p %d\n", tryblock,
descr->tryblock_count );
65 for (
i = 0;
i <
descr->tryblock_count;
i++)
66 {
68
69 TRACE(
" %d: start %d end %d catchlevel %d catch %p %d\n",
i,
70 tryblock[
i].start_level, tryblock[
i].end_level,
71 tryblock[
i].catch_level, catchblock, tryblock[
i].catchblock_count);
73 {
75 TRACE(
" %d: flags %x offset %d handler %p",
78#ifdef _WIN64
79 TRACE(
" frame %x", catchblock[
j].frame );
80#endif
82 }
83 }
84 TRACE(
"ipmap: %p %d\n", ipmap,
descr->ipmap_count );
85 for (
i = 0;
i <
descr->ipmap_count;
i++)
87#ifdef RTTI_USE_RVA
88 TRACE(
"unwind_help %+d\n",
descr->unwind_help );
89#endif
94}
UINT(* handler)(MSIPACKAGE *)
#define CXX_FRAME_MAGIC_VC7
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
Referenced by cxx_frame_handler().
◆ exception_ptr_from_record()
◆ find_catch_handler()
Definition at line 96 of file except.c.
99{
104
106 {
107 if (exc_type)
108 {
112
113 TRACE(
"matched type %p in catchblock %d\n",
type,
i );
114
115 if (catch_ti && catch_ti->
mangled[0] && catchblock[
i].offset)
116 {
117
118 void **
dest = (
void **)(frame + catchblock[
i].
offset);
120 }
121 }
122 else
123 {
124
126 TRACE(
"found catch(...) block\n" );
127 }
129 }
131}
static const cxx_type_info * find_caught_type(cxx_exception_type *exc_type, uintptr_t base, const type_info *catch_ti, UINT catch_flags)
static void copy_exception(void *object, void **dest, UINT catch_flags, const cxx_type_info *type, uintptr_t base)
static void * image_base(void)
Referenced by find_catch_block().
◆ find_caught_type()
Definition at line 214 of file cppexcept.h.
216{
219
220 for (
i = 0;
i < type_info_table->
count;
i++)
221 {
224
225 if (!catch_ti)
return type;
226 if (catch_ti != ti)
227 {
229 }
230
236 }
238}
#define TYPE_FLAG_VOLATILE
_ACRTIMP int __cdecl strcmp(const char *, const char *)
unsigned int type_info_table
Referenced by __CxxExceptionFilter(), and find_catch_handler().
◆ get_exception_pc()
◆ get_this_pointer()
Definition at line 177 of file cppexcept.h.
178{
179 if (!
object)
return NULL;
180
182 {
183 int *offset_ptr;
184
185
187
188 offset_ptr = (
int *)(*(
char **)
object + off->
vbase_offset);
189 object = (char *)object + *offset_ptr;
190 }
191
193 return object;
194}
Referenced by __RTDynamicCast(), and copy_exception().
◆ handle_fpieee_flt()
◆ is_cxx_exception()
◆ throw_exception()
Definition at line 606 of file cpp.c.
607{
609 __exception_ctor(&
e,
msg, &exception_vtable);
611}