提交 7ec3cabd 编写于 作者: L Levi Bard

Merge pull request #37 from Unity-Technologies/mono-bisect

VectoredExceptions and bug fixes
......@@ -22,17 +22,7 @@ while (defined(my $file = readdir(DIR))) {
}
closedir(DIR);
#both the ppc and i386 runtime builds output their runtime in monodistribution/bin/osx/mono. as we collect both, we want
#to merge them into one file using the lipo tool.
system("lipo -create incomingbuilds/osx-i386/monodistribution/bin/mono incomingbuilds/osx-ppc/monodistribution/bin/mono -output collectedbuilds/monodistribution/bin/mono") && die("failed running lipo on osx runtimes");
system("chmod +x collectedbuilds/monodistribution/bin/mono") eq 0 or die("Failed chmodding");
system("lipo -create incomingbuilds/osx-i386/embedruntimes/osx/MonoBundleBinary incomingbuilds/osx-ppc/embedruntimes/osx/MonoBundleBinary -output collectedbuilds/embedruntimes/osx/MonoBundleBinary") && die("failed running lipo on osx MonoBundleBinary");
system("lipo -create incomingbuilds/osx-i386/embedruntimes/osx/libmono.0.dylib incomingbuilds/osx-ppc/embedruntimes/osx/libmono.0.dylib -output collectedbuilds/embedruntimes/osx/libmono.0.dylib") && die("failed running lipo on libmono.0.dylib");
system("lipo -create incomingbuilds/osx-i386/embedruntimes/osx/libmono.a incomingbuilds/osx-ppc/embedruntimes/osx/libmono.a -output collectedbuilds/embedruntimes/osx/libmono.a") && die("failed running lipo on libmono.a");
InstallNameTool("collectedbuilds/embedruntimes/osx/libmono.0.dylib", "\@executable_path/../Frameworks/MonoEmbedRuntime/osx/libmono.0.dylib");
chdir("collectedbuilds");
rmove('versions-aggregated.txt', 'versions.txt');
......
......@@ -170,3 +170,14 @@ g_log (const gchar *log_domain, GLogLevelFlags log_level, const gchar *format, .
va_end (args);
}
void
g_assertion_message (const gchar *format, ...)
{
va_list args;
va_start (args, format);
g_logv (G_LOG_DOMAIN, G_LOG_LEVEL_ERROR, format, args);
va_end (args);
abort ();
}
......@@ -21,7 +21,7 @@ g_convert_error_quark ()
return error_quark;
}
gunichar*
static gunichar*
utf8_case_conv (const gchar *str, gssize len, gboolean upper)
{
glong i, u16len, u32len;
......@@ -55,98 +55,6 @@ g_utf8_strdown (const gchar *str, gssize len)
return (gchar*)utf8_case_conv (str, len, FALSE);
}
gunichar2*
g_utf8_to_utf16 (const gchar *str, glong len, glong *items_read, glong *items_written, GError **error)
{
/* The conversion logic is almost identical to UTF8Encoding.GetChars(),
but error check is always done at utf8_to_utf16_len() so that
the conversion core below simply resets erroreous bits */
glong utf16_len;
gunichar2 *ret;
guchar ch, mb_size, mb_remain;
guint32 codepoint;
glong in_pos, out_pos;
utf16_len = 0;
mb_size = 0;
mb_remain = 0;
in_pos = 0;
out_pos = 0;
if (error)
*error = NULL;
if (items_written)
*items_written = 0;
utf16_len = utf8_to_utf16_len (str, len, items_read, error);
if (error)
if (*error)
return NULL;
if (utf16_len < 0)
return NULL;
ret = g_malloc ((1 + utf16_len) * sizeof (gunichar2));
for (in_pos = 0; len < 0 ? str [in_pos] : in_pos < len; in_pos++) {
ch = (guchar) str [in_pos];
if (mb_size == 0) {
if (ch < 0x80)
ret [out_pos++] = ch;
else if ((ch & 0xE0) == 0xC0) {
codepoint = ch & 0x1F;
mb_size = 2;
} else if ((ch & 0xF0) == 0xE0) {
codepoint = ch & 0x0F;
mb_size = 3;
} else if ((ch & 0xF8) == 0xF0) {
codepoint = ch & 7;
mb_size = 4;
} else if ((ch & 0xFC) == 0xF8) {
codepoint = ch & 3;
mb_size = 5;
} else if ((ch & 0xFE) == 0xFC) {
codepoint = ch & 3;
mb_size = 6;
} else {
/* invalid utf-8 sequence */
codepoint = 0;
mb_remain = mb_size = 0;
}
if (mb_size > 1)
mb_remain = mb_size - 1;
} else {
if ((ch & 0xC0) == 0x80) {
codepoint = (codepoint << 6) | (ch & 0x3F);
if (--mb_remain == 0) {
/* multi byte character is fully consumed now. */
if (codepoint < 0x10000) {
ret [out_pos++] = (gunichar2)(codepoint % 0x10000);
} else if (codepoint < 0x110000) {
/* surrogate pair */
codepoint -= 0x10000;
ret [out_pos++] = (gunichar2)((codepoint >> 10) + 0xD800);
ret [out_pos++] = (gunichar2)((codepoint & 0x3FF) + 0xDC00);
} else {
/* invalid utf-8 sequence (excess) */
codepoint = 0;
mb_remain = 0;
}
mb_size = 0;
}
} else {
/* invalid utf-8 sequence */
codepoint = 0;
mb_remain = mb_size = 0;
}
}
}
ret [out_pos] = 0;
if (items_written)
*items_written = out_pos;
return ret;
}
static glong
utf8_to_utf16_len (const gchar *str, glong len, glong *items_read, GError **error)
{
......@@ -156,13 +64,27 @@ utf8_to_utf16_len (const gchar *str, glong len, glong *items_read, GError **erro
guint32 codepoint;
glong in_pos, ret;
if (len < 0)
len = (glong) strlen (str);
in_pos = 0;
ret = 0;
/* Common case */
for (in_pos = 0; in_pos < len && (guchar) str [in_pos] < 0x80; in_pos++)
ret ++;
if (in_pos == len) {
if (items_read)
*items_read = in_pos;
return ret;
}
mb_size = 0;
mb_remain = 0;
overlong = 0;
in_pos = 0;
ret = 0;
for (in_pos = 0; len < 0 ? str [in_pos] : in_pos < len; in_pos++) {
for (; in_pos < len; in_pos++) {
ch = str [in_pos];
if (mb_size == 0) {
if (ch < 0x80)
......@@ -271,6 +193,112 @@ utf8_to_utf16_len (const gchar *str, glong len, glong *items_read, GError **erro
return ret;
}
gunichar2*
g_utf8_to_utf16 (const gchar *str, glong len, glong *items_read, glong *items_written, GError **error)
{
/* The conversion logic is almost identical to UTF8Encoding.GetChars(),
but error check is always done at utf8_to_utf16_len() so that
the conversion core below simply resets erroreous bits */
glong utf16_len;
gunichar2 *ret;
guchar ch, mb_size, mb_remain;
guint32 codepoint;
glong in_pos, out_pos;
utf16_len = 0;
mb_size = 0;
mb_remain = 0;
in_pos = 0;
out_pos = 0;
if (error)
*error = NULL;
if (len < 0)
len = (glong) strlen (str);
if (items_read)
*items_read = 0;
if (items_written)
*items_written = 0;
utf16_len = utf8_to_utf16_len (str, len, items_read, error);
if (error)
if (*error)
return NULL;
if (utf16_len < 0)
return NULL;
ret = g_malloc ((1 + utf16_len) * sizeof (gunichar2));
/* Common case */
for (in_pos = 0; in_pos < len; in_pos++) {
ch = (guchar) str [in_pos];
if (ch >= 0x80)
break;
ret [out_pos++] = ch;
}
for (; in_pos < len; in_pos++) {
ch = (guchar) str [in_pos];
if (mb_size == 0) {
if (ch < 0x80)
ret [out_pos++] = ch;
else if ((ch & 0xE0) == 0xC0) {
codepoint = ch & 0x1F;
mb_size = 2;
} else if ((ch & 0xF0) == 0xE0) {
codepoint = ch & 0x0F;
mb_size = 3;
} else if ((ch & 0xF8) == 0xF0) {
codepoint = ch & 7;
mb_size = 4;
} else if ((ch & 0xFC) == 0xF8) {
codepoint = ch & 3;
mb_size = 5;
} else if ((ch & 0xFE) == 0xFC) {
codepoint = ch & 3;
mb_size = 6;
} else {
/* invalid utf-8 sequence */
codepoint = 0;
mb_remain = mb_size = 0;
}
if (mb_size > 1)
mb_remain = mb_size - 1;
} else {
if ((ch & 0xC0) == 0x80) {
codepoint = (codepoint << 6) | (ch & 0x3F);
if (--mb_remain == 0) {
/* multi byte character is fully consumed now. */
if (codepoint < 0x10000) {
ret [out_pos++] = (gunichar2)(codepoint % 0x10000);
} else if (codepoint < 0x110000) {
/* surrogate pair */
codepoint -= 0x10000;
ret [out_pos++] = (gunichar2)((codepoint >> 10) + 0xD800);
ret [out_pos++] = (gunichar2)((codepoint & 0x3FF) + 0xDC00);
} else {
/* invalid utf-8 sequence (excess) */
codepoint = 0;
mb_remain = 0;
}
mb_size = 0;
}
} else {
/* invalid utf-8 sequence */
codepoint = 0;
mb_remain = mb_size = 0;
}
}
}
ret [out_pos] = 0;
if (items_written)
*items_written = out_pos;
return ret;
}
gchar*
g_utf16_to_utf8 (const gunichar2 *str, glong len, glong *items_read, glong *items_written, GError **error)
{
......@@ -288,6 +316,8 @@ g_utf16_to_utf8 (const gunichar2 *str, glong len, glong *items_read, glong *item
out_pos = 0;
surrogate = FALSE;
if (items_read)
*items_read = 0;
if (items_written)
*items_written = 0;
utf8_len = utf16_to_utf8_len (str, len, items_read, error);
......@@ -308,6 +338,7 @@ g_utf16_to_utf8 (const gunichar2 *str, glong len, glong *items_read, glong *item
} else {
surrogate = 0;
/* invalid surrogate pair */
++in_pos;
continue;
}
} else {
......@@ -324,6 +355,7 @@ g_utf16_to_utf8 (const gunichar2 *str, glong len, glong *items_read, glong *item
else if (ch >= 0xD800 && ch <= 0xDBFF)
surrogate = ch;
else if (ch >= 0xDC00 && ch <= 0xDFFF) {
++in_pos;
/* invalid surrogate pair */
continue;
}
......
......@@ -40,7 +40,7 @@ static const CodePointRange unicode_category_ranges [] = {
{0x02F800, 0x02FA40},
{0x0E0000, 0x0E0200},
{0, 0}};
const GUnicodeType unicode_category_table0 [] = {
static const GUnicodeType unicode_category_table0 [] = {
/* ==== 0-3400 ==== */
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
......@@ -875,14 +875,14 @@ const GUnicodeType unicode_category_table0 [] = {
26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,
26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,
0};
const GUnicodeType unicode_category_table1 [] = {
static const GUnicodeType unicode_category_table1 [] = {
/* ==== 4DC0-4E00 ==== */
26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,
26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,
26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,
26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,
0};
const GUnicodeType unicode_category_table2 [] = {
static const GUnicodeType unicode_category_table2 [] = {
/* ==== A000-AA80 ==== */
7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
7,7,7,7,7,6,7,7,7,7,7,7,7,7,7,7,
......@@ -1051,7 +1051,7 @@ const GUnicodeType unicode_category_table2 [] = {
7,7,7,12,7,7,7,7,7,7,7,7,12,10,0,0,
13,13,13,13,13,13,13,13,13,13,0,0,21,21,21,21,
0};
const GUnicodeType unicode_category_table3 [] = {
static const GUnicodeType unicode_category_table3 [] = {
/* ==== F900-10000 ==== */
7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
......@@ -1165,7 +1165,7 @@ const GUnicodeType unicode_category_table3 [] = {
0,0,7,7,7,7,7,7,0,0,7,7,7,0,0,0,
23,23,25,24,26,23,23,0,26,25,25,25,25,26,26,0,
0,0,0,0,0,0,0,0,0,1,1,1,26,26,0};
const GUnicodeType unicode_category_table4 [] = {
static const GUnicodeType unicode_category_table4 [] = {
/* ==== 10000-104C0 ==== */
7,7,7,7,7,7,7,7,7,7,7,7,0,7,7,7,
7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
......@@ -1242,7 +1242,7 @@ const GUnicodeType unicode_category_table4 [] = {
7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
7,7,7,7,7,7,7,7,7,7,7,7,7,7,0,0,
13,13,13,13,13,13,13,13,13,13,0};
const GUnicodeType unicode_category_table5 [] = {
static const GUnicodeType unicode_category_table5 [] = {
/* ==== 10800-10A80 ==== */
7,7,7,7,7,7,0,0,7,0,7,7,7,7,7,7,
7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
......@@ -1282,7 +1282,7 @@ const GUnicodeType unicode_category_table5 [] = {
7,7,7,7,0,0,0,0,12,12,12,0,0,0,0,12,
15,15,15,15,15,15,15,15,0,0,0,0,0,0,0,0,
21,21,21,21,21,21,21,21,21,0};
const GUnicodeType unicode_category_table6 [] = {
static const GUnicodeType unicode_category_table6 [] = {
/* ==== 12000-12480 ==== */
7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
......@@ -1356,7 +1356,7 @@ const GUnicodeType unicode_category_table6 [] = {
14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,
14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,
21,21,21,21,0};
const GUnicodeType unicode_category_table7 [] = {
static const GUnicodeType unicode_category_table7 [] = {
/* ==== 1D000-1D800 ==== */
26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,
26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,
......@@ -1487,7 +1487,7 @@ const GUnicodeType unicode_category_table7 [] = {
13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
0};
const GUnicodeType unicode_category_table8 [] = {
static const GUnicodeType unicode_category_table8 [] = {
/* ==== 1F000-1F0C0 ==== */
26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,
26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,
......@@ -1499,7 +1499,7 @@ const GUnicodeType unicode_category_table8 [] = {
26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,
26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,
26,26,26,26,0};
const GUnicodeType unicode_category_table9 [] = {
static const GUnicodeType unicode_category_table9 [] = {
/* ==== 2F800-2FA40 ==== */
7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
......@@ -1535,7 +1535,7 @@ const GUnicodeType unicode_category_table9 [] = {
7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
7,7,7,7,7,7,7,7,7,7,7,7,7,7,0};
const GUnicodeType unicode_category_table10 [] = {
static const GUnicodeType unicode_category_table10 [] = {
/* ==== E0000-E0200 ==== */
0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
......
......@@ -425,12 +425,14 @@
|| defined(_WIN32) && !defined(__CYGWIN32__) && !defined(__CYGWIN__)
# define LARGE_CONFIG 1
# if defined(__LP64__) || defined(_WIN64)
# define X86_64
# define X86_64
# else
# define I386
# endif
# define MSWIN32 /* or Win64 */
# define mach_type_known
# define USE_MMAP
# define USE_MUNMAP
# endif
# if defined(_MSC_VER) && defined(_M_IA64)
# define IA64
......
......@@ -1387,6 +1387,12 @@ buffer_add_string (Buffer *buf, const char *str)
}
}
static inline void
buffer_replace_byte (Buffer *buf, int offset, guint8 val)
{
buf->buf [offset] = val;
}
static inline void
buffer_free (Buffer *buf)
{
......@@ -3025,6 +3031,7 @@ process_event (EventKind event, gpointer arg, gint32 il_offset, MonoContext *ctx
suspend_vm ();
}
buffer_replace_byte (&buf, 0, suspend_policy);
send_success = send_packet (CMD_SET_EVENT, CMD_COMPOSITE, &buf);
g_slist_free (events);
......
......@@ -39,24 +39,40 @@ static MonoW32ExceptionHandler ill_handler;
static MonoW32ExceptionHandler segv_handler;
LPTOP_LEVEL_EXCEPTION_FILTER old_win32_toplevel_exception_filter;
guint64 win32_chained_exception_filter_result;
gboolean win32_chained_exception_filter_didrun;
gpointer win32_vectored_exception_handle;
extern gboolean win32_chained_exception_needs_run;
extern int (*gUnhandledExceptionHandler)(EXCEPTION_POINTERS*);
#define W32_SEH_HANDLE_EX(_ex) \
if (_ex##_handler) _ex##_handler(0, ep, sctx)
LONG CALLBACK seh_unhandled_exception_filter(EXCEPTION_POINTERS* ep)
{
#ifndef MONO_CROSS_COMPILE
if (old_win32_toplevel_exception_filter) {
return (*old_win32_toplevel_exception_filter)(ep);
}
if (gUnhandledExceptionHandler) {
return (*gUnhandledExceptionHandler)(ep);
}
#endif
mono_handle_native_sigsegv (SIGSEGV, NULL);
return EXCEPTION_CONTINUE_SEARCH;
}
/*
* Unhandled Exception Filter
* Top-level per-process exception handler.
*/
LONG CALLBACK seh_handler(EXCEPTION_POINTERS* ep)
LONG CALLBACK seh_vectored_exception_handler(EXCEPTION_POINTERS* ep)
{
EXCEPTION_RECORD* er;
CONTEXT* ctx;
MonoContext* sctx;
LONG res;
win32_chained_exception_filter_didrun = FALSE;
win32_chained_exception_needs_run = FALSE;
res = EXCEPTION_CONTINUE_EXECUTION;
er = ep->ExceptionRecord;
......@@ -97,40 +113,55 @@ LONG CALLBACK seh_handler(EXCEPTION_POINTERS* ep)
break;
}
/* Copy context back */
/* Nonvolatile */
ctx->Rsp = sctx->rsp;
ctx->Rdi = sctx->rdi;
ctx->Rsi = sctx->rsi;
ctx->Rbx = sctx->rbx;
ctx->Rbp = sctx->rbp;
ctx->R12 = sctx->r12;
ctx->R13 = sctx->r13;
ctx->R14 = sctx->r14;
ctx->R15 = sctx->r15;
ctx->Rip = sctx->rip;
/* Volatile But should not matter?*/
ctx->Rax = sctx->rax;
ctx->Rcx = sctx->rcx;
ctx->Rdx = sctx->rdx;
g_free (sctx);
if (win32_chained_exception_filter_didrun)
res = win32_chained_exception_filter_result;
if (win32_chained_exception_needs_run) {
/* Don't copy context back if we chained exception
* as the handler may have modfied the EXCEPTION_POINTERS
* directly. We don't pass sigcontext to chained handlers.
* Return continue search so the UnhandledExceptionFilter
* can correctly chain the exception.
*/
res = EXCEPTION_CONTINUE_SEARCH;
} else {
/* Copy context back */
/* Nonvolatile */
ctx->Rsp = sctx->rsp;
ctx->Rdi = sctx->rdi;
ctx->Rsi = sctx->rsi;
ctx->Rbx = sctx->rbx;
ctx->Rbp = sctx->rbp;
ctx->R12 = sctx->r12;
ctx->R13 = sctx->r13;
ctx->R14 = sctx->r14;
ctx->R15 = sctx->r15;
ctx->Rip = sctx->rip;
/* Volatile But should not matter?*/
ctx->Rax = sctx->rax;
ctx->Rcx = sctx->rcx;
ctx->Rdx = sctx->rdx;
}
/* TODO: Find right place to free this in stack overflow case */
if (er->ExceptionCode != EXCEPTION_STACK_OVERFLOW)
g_free (sctx);
return res;
}
void win32_seh_init()
{
old_win32_toplevel_exception_filter = SetUnhandledExceptionFilter(seh_handler);
old_win32_toplevel_exception_filter = SetUnhandledExceptionFilter(seh_unhandled_exception_filter);
win32_vectored_exception_handle = AddVectoredExceptionHandler (1, seh_vectored_exception_handler);
}
void win32_seh_cleanup()
{
if (old_win32_toplevel_exception_filter) SetUnhandledExceptionFilter(old_win32_toplevel_exception_filter);
guint32 ret = 0;
if (old_win32_toplevel_exception_filter)
SetUnhandledExceptionFilter(old_win32_toplevel_exception_filter);
ret = RemoveVectoredExceptionHandler (win32_vectored_exception_handle);
g_assert (ret);
}
void win32_seh_set_handler(int type, MonoW32ExceptionHandler handler)
......
......@@ -43,8 +43,9 @@ static MonoW32ExceptionHandler ill_handler;
static MonoW32ExceptionHandler segv_handler;
LPTOP_LEVEL_EXCEPTION_FILTER old_win32_toplevel_exception_filter;
guint64 win32_chained_exception_filter_result;
gboolean win32_chained_exception_filter_didrun;
gpointer win32_vectored_exception_handle;
extern gboolean win32_chained_exception_needs_run;
extern int (*gUnhandledExceptionHandler)(EXCEPTION_POINTERS*);
#ifndef PROCESS_CALLBACK_FILTER_ENABLED
# define PROCESS_CALLBACK_FILTER_ENABLED 1
......@@ -179,18 +180,33 @@ win32_handle_stack_overflow (EXCEPTION_POINTERS* ep, struct sigcontext *sctx)
restore_stack (sctx);
}
LONG CALLBACK seh_unhandled_exception_filter(EXCEPTION_POINTERS* ep)
{
#ifndef MONO_CROSS_COMPILE
if (old_win32_toplevel_exception_filter) {
return (*old_win32_toplevel_exception_filter)(ep);
}
if (gUnhandledExceptionHandler) {
return (*gUnhandledExceptionHandler)(ep);
}
#endif
mono_handle_native_sigsegv (SIGSEGV, NULL);
return EXCEPTION_CONTINUE_SEARCH;
}
/*
* Unhandled Exception Filter
* Top-level per-process exception handler.
*/
LONG CALLBACK seh_handler(EXCEPTION_POINTERS* ep)
LONG CALLBACK seh_vectored_exception_handler(EXCEPTION_POINTERS* ep)
{
EXCEPTION_RECORD* er;
CONTEXT* ctx;
struct sigcontext* sctx;
LONG res;
win32_chained_exception_filter_didrun = FALSE;
win32_chained_exception_needs_run = FALSE;
res = EXCEPTION_CONTINUE_EXECUTION;
er = ep->ExceptionRecord;
......@@ -231,11 +247,14 @@ LONG CALLBACK seh_handler(EXCEPTION_POINTERS* ep)
break;
}
if (win32_chained_exception_filter_didrun) {
if (win32_chained_exception_needs_run) {
/* Don't copy context back if we chained exception
* as the handler may have modfied the EXCEPTION_POINTERS
* directly. We don't pass sigcontext to chained handlers. */
res = win32_chained_exception_filter_result;
* directly. We don't pass sigcontext to chained handlers.
* Return continue search so the UnhandledExceptionFilter
* can correctly chain the exception.
*/
res = EXCEPTION_CONTINUE_SEARCH;
} else {
/* Copy context back */
ctx->Eax = sctx->eax;
......@@ -263,15 +282,18 @@ void win32_seh_init()
if (!restore_stack)
restore_stack = mono_win32_get_handle_stackoverflow ();
old_win32_toplevel_exception_filter = SetUnhandledExceptionFilter(seh_handler);
/* use the following instead of SetUnhandledExceptionFilter to debug SEH in Visual Studio
* AddVectoredExceptionHandler (1, seh_handler);
*/
old_win32_toplevel_exception_filter = SetUnhandledExceptionFilter(seh_unhandled_exception_filter);
win32_vectored_exception_handle = AddVectoredExceptionHandler (1, seh_vectored_exception_handler);
}
void win32_seh_cleanup()
{
if (old_win32_toplevel_exception_filter) SetUnhandledExceptionFilter(old_win32_toplevel_exception_filter);
guint32 ret = 0;
if (old_win32_toplevel_exception_filter)
SetUnhandledExceptionFilter(old_win32_toplevel_exception_filter);
ret = RemoveVectoredExceptionHandler (win32_vectored_exception_handle);
g_assert (ret);
}
void win32_seh_set_handler(int type, MonoW32ExceptionHandler handler)
......
......@@ -811,7 +811,8 @@ ves_icall_get_frame_info (gint32 skip, MonoBoolean need_file_info,
ji->method->wrapper_type == MONO_WRAPPER_XDOMAIN_DISPATCH ||
ji->method->wrapper_type == MONO_WRAPPER_REMOTING_INVOKE_WITH_CHECK ||
ji->method->wrapper_type == MONO_WRAPPER_REMOTING_INVOKE ||
ji->method->wrapper_type == MONO_WRAPPER_NATIVE_TO_MANAGED)
ji->method->wrapper_type == MONO_WRAPPER_NATIVE_TO_MANAGED ||
ji->method->wrapper_type == MONO_WRAPPER_DELEGATE_INVOKE)
continue;
if (ji->method->wrapper_type == MONO_WRAPPER_MANAGED_TO_NATIVE && ji->method == last_method) {
......
......@@ -50,10 +50,7 @@
#include "jit-icalls.h"
extern LPTOP_LEVEL_EXCEPTION_FILTER old_win32_toplevel_exception_filter;
extern guint64 win32_chained_exception_filter_result;
extern gboolean win32_chained_exception_filter_didrun;
extern int (*gUnhandledExceptionHandler)(EXCEPTION_POINTERS*);
gboolean win32_chained_exception_needs_run;
void
mono_runtime_install_handlers (void)
......@@ -86,24 +83,8 @@ mono_runtime_cleanup_handlers (void)
gboolean
SIG_HANDLER_SIGNATURE (mono_chain_signal)
{
#ifndef MONO_CROSS_COMPILE
int signal = _dummy;
GET_CONTEXT;
if (old_win32_toplevel_exception_filter) {
win32_chained_exception_filter_didrun = TRUE;
win32_chained_exception_filter_result = (*old_win32_toplevel_exception_filter)(info);
return TRUE;
}
if (gUnhandledExceptionHandler)
{
win32_chained_exception_filter_didrun = TRUE;
win32_chained_exception_filter_result = (*gUnhandledExceptionHandler)(info);
return TRUE;
}
#endif
return FALSE;
win32_chained_exception_needs_run = TRUE;
return TRUE;
}
static HANDLE win32_main_thread;
......
......@@ -45,7 +45,7 @@
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="..\libgc\include"
PreprocessorDefinitions="_DEBUG;__i386__;TARGET_X86;i386;WIN32;_WIN32;__WIN32__;_WINDOWS;WINDOWS;PLATFORM_WIN32;TARGET_WIN32;_CRT_SECURE_NO_DEPRECATE;__STDC__;PACKAGE_NAME=\&quot;libgc-mono\&quot;;PACKAGE_TARNAME=\&quot;libgc-mono\&quot;;PACKAGE_VERSION=\&quot;6.6\&quot;;&quot;PACKAGE_STRING=\&quot;libgc-mono 6.6\&quot;&quot;;PACKAGE_BUGREPORT=\&quot;Hans_Boehm@hp.com\&quot;;GC_WIN32_THREADS=1;NO_GETENV=1;GC_INSIDE_DLL=1;GC_NOT_DLL=1;STDC_HEADERS=1;HAVE_SYS_TYPES_H=1;HAVE_SYS_STAT_H=1;HAVE_STDLIB_H=1;HAVE_STRING_H=1;HAVE_MEMORY_H=1;HAVE_STRINGS_H=1;HAVE_INTTYPES_H=1;HAVE_STDINT_H=1;HAVE_UNISTD_H=1;SILENT=1;NO_SIGNALS=1;NO_EXECUTE_PERMISSION=1;JAVA_FINALIZATION=1;GC_GCJ_SUPPORT=1;ATOMIC_UNCOLLECTABLE=1;_IN_LIBGC=1;WINVER=0x0500;_WIN32_WINNT=0x0500;_WIN32_IE=0x0501;WIN32_THREADS;FD_SETSIZE=1024;USE_MUNMAP;USE_MMAP"
PreprocessorDefinitions="_DEBUG;__i386__;TARGET_X86;i386;WIN32;_WIN32;__WIN32__;_WINDOWS;WINDOWS;PLATFORM_WIN32;TARGET_WIN32;_CRT_SECURE_NO_DEPRECATE;__STDC__;PACKAGE_NAME=\&quot;libgc-mono\&quot;;PACKAGE_TARNAME=\&quot;libgc-mono\&quot;;PACKAGE_VERSION=\&quot;6.6\&quot;;&quot;PACKAGE_STRING=\&quot;libgc-mono 6.6\&quot;&quot;;PACKAGE_BUGREPORT=\&quot;Hans_Boehm@hp.com\&quot;;GC_WIN32_THREADS=1;NO_GETENV=1;GC_INSIDE_DLL=1;GC_NOT_DLL=1;STDC_HEADERS=1;HAVE_SYS_TYPES_H=1;HAVE_SYS_STAT_H=1;HAVE_STDLIB_H=1;HAVE_STRING_H=1;HAVE_MEMORY_H=1;HAVE_STRINGS_H=1;HAVE_INTTYPES_H=1;HAVE_STDINT_H=1;HAVE_UNISTD_H=1;SILENT=1;NO_SIGNALS=1;NO_EXECUTE_PERMISSION=1;JAVA_FINALIZATION=1;GC_GCJ_SUPPORT=1;ATOMIC_UNCOLLECTABLE=1;_IN_LIBGC=1;WINVER=0x0500;_WIN32_WINNT=0x0500;_WIN32_IE=0x0501;WIN32_THREADS;FD_SETSIZE=1024"
MinimalRebuild="true"
BasicRuntimeChecks="3"
RuntimeLibrary="1"
......@@ -112,7 +112,7 @@
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="..\libgc\include"
PreprocessorDefinitions="_DEBUG;__x86_64__;WIN64;_WIN64;WIN32;_WIN32;__WIN32__;_WINDOWS;WINDOWS;PLATFORM_WIN32;TARGET_WIN32;_CRT_SECURE_NO_DEPRECATE;__STDC__;PACKAGE_NAME=\&quot;libgc-mono\&quot;;PACKAGE_TARNAME=\&quot;libgc-mono\&quot;;PACKAGE_VERSION=\&quot;6.6\&quot;;&quot;PACKAGE_STRING=\&quot;libgc-mono 6.6\&quot;&quot;;PACKAGE_BUGREPORT=\&quot;Hans_Boehm@hp.com\&quot;;GC_WIN32_THREADS=1;NO_GETENV=1;GC_INSIDE_DLL=1;GC_NOT_DLL=1;STDC_HEADERS=1;HAVE_SYS_TYPES_H=1;HAVE_SYS_STAT_H=1;HAVE_STDLIB_H=1;HAVE_STRING_H=1;HAVE_MEMORY_H=1;HAVE_STRINGS_H=1;HAVE_INTTYPES_H=1;HAVE_STDINT_H=1;HAVE_UNISTD_H=1;SILENT=1;NO_SIGNALS=1;NO_EXECUTE_PERMISSION=1;JAVA_FINALIZATION=1;GC_GCJ_SUPPORT=1;ATOMIC_UNCOLLECTABLE=1;_IN_LIBGC=1;WINVER=0x0500;_WIN32_WINNT=0x0500;_WIN32_IE=0x0501;WIN32_THREADS;FD_SETSIZE=1024;USE_MUNMAP;USE_MMAP"
PreprocessorDefinitions="_DEBUG;__x86_64__;WIN64;_WIN64;WIN32;_WIN32;__WIN32__;_WINDOWS;WINDOWS;PLATFORM_WIN32;TARGET_WIN32;_CRT_SECURE_NO_DEPRECATE;__STDC__;PACKAGE_NAME=\&quot;libgc-mono\&quot;;PACKAGE_TARNAME=\&quot;libgc-mono\&quot;;PACKAGE_VERSION=\&quot;6.6\&quot;;&quot;PACKAGE_STRING=\&quot;libgc-mono 6.6\&quot;&quot;;PACKAGE_BUGREPORT=\&quot;Hans_Boehm@hp.com\&quot;;GC_WIN32_THREADS=1;NO_GETENV=1;GC_INSIDE_DLL=1;GC_NOT_DLL=1;STDC_HEADERS=1;HAVE_SYS_TYPES_H=1;HAVE_SYS_STAT_H=1;HAVE_STDLIB_H=1;HAVE_STRING_H=1;HAVE_MEMORY_H=1;HAVE_STRINGS_H=1;HAVE_INTTYPES_H=1;HAVE_STDINT_H=1;HAVE_UNISTD_H=1;SILENT=1;NO_SIGNALS=1;NO_EXECUTE_PERMISSION=1;JAVA_FINALIZATION=1;GC_GCJ_SUPPORT=1;ATOMIC_UNCOLLECTABLE=1;_IN_LIBGC=1;WINVER=0x0500;_WIN32_WINNT=0x0500;_WIN32_IE=0x0501;WIN32_THREADS;FD_SETSIZE=1024"
MinimalRebuild="true"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
......@@ -178,7 +178,7 @@
Name="VCCLCompilerTool"
Optimization="1"
AdditionalIncludeDirectories="..\libgc\include"
PreprocessorDefinitions="NDEBUG;__i386__;TARGET_X86;i386;WIN32;_WIN32;__WIN32__;_WINDOWS;WINDOWS;PLATFORM_WIN32;TARGET_WIN32;_CRT_SECURE_NO_DEPRECATE;__STDC__;PACKAGE_NAME=\&quot;libgc-mono\&quot;;PACKAGE_TARNAME=\&quot;libgc-mono\&quot;;PACKAGE_VERSION=\&quot;6.6\&quot;;&quot;PACKAGE_STRING=\&quot;libgc-mono 6.6\&quot;&quot;;PACKAGE_BUGREPORT=\&quot;Hans_Boehm@hp.com\&quot;;GC_WIN32_THREADS=1;NO_GETENV=1;GC_INSIDE_DLL=1;GC_NOT_DLL=1;STDC_HEADERS=1;HAVE_SYS_TYPES_H=1;HAVE_SYS_STAT_H=1;HAVE_STDLIB_H=1;HAVE_STRING_H=1;HAVE_MEMORY_H=1;HAVE_STRINGS_H=1;HAVE_INTTYPES_H=1;HAVE_STDINT_H=1;HAVE_UNISTD_H=1;SILENT=1;NO_SIGNALS=1;NO_EXECUTE_PERMISSION=1;JAVA_FINALIZATION=1;GC_GCJ_SUPPORT=1;ATOMIC_UNCOLLECTABLE=1;_IN_LIBGC=1;WINVER=0x0500;_WIN32_WINNT=0x0500;_WIN32_IE=0x0501;WIN32_THREADS;FD_SETSIZE=1024;USE_MUNMAP;USE_MMAP"
PreprocessorDefinitions="NDEBUG;__i386__;TARGET_X86;i386;WIN32;_WIN32;__WIN32__;_WINDOWS;WINDOWS;PLATFORM_WIN32;TARGET_WIN32;_CRT_SECURE_NO_DEPRECATE;__STDC__;PACKAGE_NAME=\&quot;libgc-mono\&quot;;PACKAGE_TARNAME=\&quot;libgc-mono\&quot;;PACKAGE_VERSION=\&quot;6.6\&quot;;&quot;PACKAGE_STRING=\&quot;libgc-mono 6.6\&quot;&quot;;PACKAGE_BUGREPORT=\&quot;Hans_Boehm@hp.com\&quot;;GC_WIN32_THREADS=1;NO_GETENV=1;GC_INSIDE_DLL=1;GC_NOT_DLL=1;STDC_HEADERS=1;HAVE_SYS_TYPES_H=1;HAVE_SYS_STAT_H=1;HAVE_STDLIB_H=1;HAVE_STRING_H=1;HAVE_MEMORY_H=1;HAVE_STRINGS_H=1;HAVE_INTTYPES_H=1;HAVE_STDINT_H=1;HAVE_UNISTD_H=1;SILENT=1;NO_SIGNALS=1;NO_EXECUTE_PERMISSION=1;JAVA_FINALIZATION=1;GC_GCJ_SUPPORT=1;ATOMIC_UNCOLLECTABLE=1;_IN_LIBGC=1;WINVER=0x0500;_WIN32_WINNT=0x0500;_WIN32_IE=0x0501;WIN32_THREADS;FD_SETSIZE=1024"
RuntimeLibrary="0"
BufferSecurityCheck="true"
UsePrecompiledHeader="0"
......@@ -242,7 +242,7 @@
Name="VCCLCompilerTool"
Optimization="1"
AdditionalIncludeDirectories="..\libgc\include"
PreprocessorDefinitions="NDEBUG;__x86_64__;WIN64;_WIN64;WIN32;_WIN32;__WIN32__;_WINDOWS;WINDOWS;PLATFORM_WIN32;TARGET_WIN32;_CRT_SECURE_NO_DEPRECATE;__STDC__;PACKAGE_NAME=\&quot;libgc-mono\&quot;;PACKAGE_TARNAME=\&quot;libgc-mono\&quot;;PACKAGE_VERSION=\&quot;6.6\&quot;;&quot;PACKAGE_STRING=\&quot;libgc-mono 6.6\&quot;&quot;;PACKAGE_BUGREPORT=\&quot;Hans_Boehm@hp.com\&quot;;GC_WIN32_THREADS=1;NO_GETENV=1;GC_INSIDE_DLL=1;GC_NOT_DLL=1;STDC_HEADERS=1;HAVE_SYS_TYPES_H=1;HAVE_SYS_STAT_H=1;HAVE_STDLIB_H=1;HAVE_STRING_H=1;HAVE_MEMORY_H=1;HAVE_STRINGS_H=1;HAVE_INTTYPES_H=1;HAVE_STDINT_H=1;HAVE_UNISTD_H=1;SILENT=1;NO_SIGNALS=1;NO_EXECUTE_PERMISSION=1;JAVA_FINALIZATION=1;GC_GCJ_SUPPORT=1;ATOMIC_UNCOLLECTABLE=1;_IN_LIBGC=1;WINVER=0x0500;_WIN32_WINNT=0x0500;_WIN32_IE=0x0501;WIN32_THREADS;FD_SETSIZE=1024;USE_MUNMAP;USE_MMAP"
PreprocessorDefinitions="NDEBUG;__x86_64__;WIN64;_WIN64;WIN32;_WIN32;__WIN32__;_WINDOWS;WINDOWS;PLATFORM_WIN32;TARGET_WIN32;_CRT_SECURE_NO_DEPRECATE;__STDC__;PACKAGE_NAME=\&quot;libgc-mono\&quot;;PACKAGE_TARNAME=\&quot;libgc-mono\&quot;;PACKAGE_VERSION=\&quot;6.6\&quot;;&quot;PACKAGE_STRING=\&quot;libgc-mono 6.6\&quot;&quot;;PACKAGE_BUGREPORT=\&quot;Hans_Boehm@hp.com\&quot;;GC_WIN32_THREADS=1;NO_GETENV=1;GC_INSIDE_DLL=1;GC_NOT_DLL=1;STDC_HEADERS=1;HAVE_SYS_TYPES_H=1;HAVE_SYS_STAT_H=1;HAVE_STDLIB_H=1;HAVE_STRING_H=1;HAVE_MEMORY_H=1;HAVE_STRINGS_H=1;HAVE_INTTYPES_H=1;HAVE_STDINT_H=1;HAVE_UNISTD_H=1;SILENT=1;NO_SIGNALS=1;NO_EXECUTE_PERMISSION=1;JAVA_FINALIZATION=1;GC_GCJ_SUPPORT=1;ATOMIC_UNCOLLECTABLE=1;_IN_LIBGC=1;WINVER=0x0500;_WIN32_WINNT=0x0500;_WIN32_IE=0x0501;WIN32_THREADS;FD_SETSIZE=1024"
RuntimeLibrary="2"
BufferSecurityCheck="true"
UsePrecompiledHeader="0"
......@@ -305,7 +305,7 @@
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="..\libgc\include"
PreprocessorDefinitions="_DEBUG;__i386__;TARGET_X86;i386;WIN32;_WIN32;__WIN32__;_WINDOWS;WINDOWS;PLATFORM_WIN32;TARGET_WIN32;_CRT_SECURE_NO_DEPRECATE;__STDC__;PACKAGE_NAME=\&quot;libgc-mono\&quot;;PACKAGE_TARNAME=\&quot;libgc-mono\&quot;;PACKAGE_VERSION=\&quot;6.6\&quot;;&quot;PACKAGE_STRING=\&quot;libgc-mono 6.6\&quot;&quot;;PACKAGE_BUGREPORT=\&quot;Hans_Boehm@hp.com\&quot;;GC_WIN32_THREADS=1;NO_GETENV=1;GC_INSIDE_DLL=1;GC_NOT_DLL=1;STDC_HEADERS=1;HAVE_SYS_TYPES_H=1;HAVE_SYS_STAT_H=1;HAVE_STDLIB_H=1;HAVE_STRING_H=1;HAVE_MEMORY_H=1;HAVE_STRINGS_H=1;HAVE_INTTYPES_H=1;HAVE_STDINT_H=1;HAVE_UNISTD_H=1;SILENT=1;NO_SIGNALS=1;NO_EXECUTE_PERMISSION=1;JAVA_FINALIZATION=1;GC_GCJ_SUPPORT=1;ATOMIC_UNCOLLECTABLE=1;_IN_LIBGC=1;WINVER=0x0500;_WIN32_WINNT=0x0500;_WIN32_IE=0x0501;WIN32_THREADS;FD_SETSIZE=1024;USE_MUNMAP;USE_MMAP"
PreprocessorDefinitions="_DEBUG;__i386__;TARGET_X86;i386;WIN32;_WIN32;__WIN32__;_WINDOWS;WINDOWS;PLATFORM_WIN32;TARGET_WIN32;_CRT_SECURE_NO_DEPRECATE;__STDC__;PACKAGE_NAME=\&quot;libgc-mono\&quot;;PACKAGE_TARNAME=\&quot;libgc-mono\&quot;;PACKAGE_VERSION=\&quot;6.6\&quot;;&quot;PACKAGE_STRING=\&quot;libgc-mono 6.6\&quot;&quot;;PACKAGE_BUGREPORT=\&quot;Hans_Boehm@hp.com\&quot;;GC_WIN32_THREADS=1;NO_GETENV=1;GC_INSIDE_DLL=1;GC_NOT_DLL=1;STDC_HEADERS=1;HAVE_SYS_TYPES_H=1;HAVE_SYS_STAT_H=1;HAVE_STDLIB_H=1;HAVE_STRING_H=1;HAVE_MEMORY_H=1;HAVE_STRINGS_H=1;HAVE_INTTYPES_H=1;HAVE_STDINT_H=1;HAVE_UNISTD_H=1;SILENT=1;NO_SIGNALS=1;NO_EXECUTE_PERMISSION=1;JAVA_FINALIZATION=1;GC_GCJ_SUPPORT=1;ATOMIC_UNCOLLECTABLE=1;_IN_LIBGC=1;WINVER=0x0500;_WIN32_WINNT=0x0500;_WIN32_IE=0x0501;WIN32_THREADS;FD_SETSIZE=1024"
MinimalRebuild="true"
BasicRuntimeChecks="3"
RuntimeLibrary="1"
......@@ -372,7 +372,7 @@
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="..\libgc\include"
PreprocessorDefinitions="_DEBUG;__x86_64__;TARGET_AMD64;WIN64;_WIN64;WIN32;_WIN32;__WIN32__;_WINDOWS;WINDOWS;PLATFORM_WIN32;TARGET_WIN32;_CRT_SECURE_NO_DEPRECATE;__STDC__;PACKAGE_NAME=\&quot;libgc-mono\&quot;;PACKAGE_TARNAME=\&quot;libgc-mono\&quot;;PACKAGE_VERSION=\&quot;6.6\&quot;;&quot;PACKAGE_STRING=\&quot;libgc-mono 6.6\&quot;&quot;;PACKAGE_BUGREPORT=\&quot;Hans_Boehm@hp.com\&quot;;GC_WIN32_THREADS=1;NO_GETENV=1;GC_INSIDE_DLL=1;GC_NOT_DLL=1;STDC_HEADERS=1;HAVE_SYS_TYPES_H=1;HAVE_SYS_STAT_H=1;HAVE_STDLIB_H=1;HAVE_STRING_H=1;HAVE_MEMORY_H=1;HAVE_STRINGS_H=1;HAVE_INTTYPES_H=1;HAVE_STDINT_H=1;HAVE_UNISTD_H=1;SILENT=1;NO_SIGNALS=1;NO_EXECUTE_PERMISSION=1;JAVA_FINALIZATION=1;GC_GCJ_SUPPORT=1;ATOMIC_UNCOLLECTABLE=1;_IN_LIBGC=1;WINVER=0x0500;_WIN32_WINNT=0x0500;_WIN32_IE=0x0501;WIN32_THREADS;FD_SETSIZE=1024;USE_MUNMAP;USE_MMAP;$(NOINHERIT)"
PreprocessorDefinitions="_DEBUG;__x86_64__;TARGET_AMD64;WIN64;_WIN64;WIN32;_WIN32;__WIN32__;_WINDOWS;WINDOWS;PLATFORM_WIN32;TARGET_WIN32;_CRT_SECURE_NO_DEPRECATE;__STDC__;PACKAGE_NAME=\&quot;libgc-mono\&quot;;PACKAGE_TARNAME=\&quot;libgc-mono\&quot;;PACKAGE_VERSION=\&quot;6.6\&quot;;&quot;PACKAGE_STRING=\&quot;libgc-mono 6.6\&quot;&quot;;PACKAGE_BUGREPORT=\&quot;Hans_Boehm@hp.com\&quot;;GC_WIN32_THREADS=1;NO_GETENV=1;GC_INSIDE_DLL=1;GC_NOT_DLL=1;STDC_HEADERS=1;HAVE_SYS_TYPES_H=1;HAVE_SYS_STAT_H=1;HAVE_STDLIB_H=1;HAVE_STRING_H=1;HAVE_MEMORY_H=1;HAVE_STRINGS_H=1;HAVE_INTTYPES_H=1;HAVE_STDINT_H=1;HAVE_UNISTD_H=1;SILENT=1;NO_SIGNALS=1;NO_EXECUTE_PERMISSION=1;JAVA_FINALIZATION=1;GC_GCJ_SUPPORT=1;ATOMIC_UNCOLLECTABLE=1;_IN_LIBGC=1;WINVER=0x0500;_WIN32_WINNT=0x0500;_WIN32_IE=0x0501;WIN32_THREADS;FD_SETSIZE=1024;$(NOINHERIT)"
MinimalRebuild="true"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
......@@ -438,7 +438,7 @@
Name="VCCLCompilerTool"
Optimization="1"
AdditionalIncludeDirectories="..\libgc\include"
PreprocessorDefinitions="NDEBUG;__i386__;TARGET_X86;i386;WIN32;_WIN32;__WIN32__;_WINDOWS;WINDOWS;PLATFORM_WIN32;TARGET_WIN32;_CRT_SECURE_NO_DEPRECATE;__STDC__;PACKAGE_NAME=\&quot;libgc-mono\&quot;;PACKAGE_TARNAME=\&quot;libgc-mono\&quot;;PACKAGE_VERSION=\&quot;6.6\&quot;;&quot;PACKAGE_STRING=\&quot;libgc-mono 6.6\&quot;&quot;;PACKAGE_BUGREPORT=\&quot;Hans_Boehm@hp.com\&quot;;GC_WIN32_THREADS=1;NO_GETENV=1;GC_INSIDE_DLL=1;GC_NOT_DLL=1;STDC_HEADERS=1;HAVE_SYS_TYPES_H=1;HAVE_SYS_STAT_H=1;HAVE_STDLIB_H=1;HAVE_STRING_H=1;HAVE_MEMORY_H=1;HAVE_STRINGS_H=1;HAVE_INTTYPES_H=1;HAVE_STDINT_H=1;HAVE_UNISTD_H=1;SILENT=1;NO_SIGNALS=1;NO_EXECUTE_PERMISSION=1;JAVA_FINALIZATION=1;GC_GCJ_SUPPORT=1;ATOMIC_UNCOLLECTABLE=1;_IN_LIBGC=1;WINVER=0x0500;_WIN32_WINNT=0x0500;_WIN32_IE=0x0501;WIN32_THREADS;FD_SETSIZE=1024;USE_MUNMAP;USE_MMAP"
PreprocessorDefinitions="NDEBUG;__i386__;TARGET_X86;i386;WIN32;_WIN32;__WIN32__;_WINDOWS;WINDOWS;PLATFORM_WIN32;TARGET_WIN32;_CRT_SECURE_NO_DEPRECATE;__STDC__;PACKAGE_NAME=\&quot;libgc-mono\&quot;;PACKAGE_TARNAME=\&quot;libgc-mono\&quot;;PACKAGE_VERSION=\&quot;6.6\&quot;;&quot;PACKAGE_STRING=\&quot;libgc-mono 6.6\&quot;&quot;;PACKAGE_BUGREPORT=\&quot;Hans_Boehm@hp.com\&quot;;GC_WIN32_THREADS=1;NO_GETENV=1;GC_INSIDE_DLL=1;GC_NOT_DLL=1;STDC_HEADERS=1;HAVE_SYS_TYPES_H=1;HAVE_SYS_STAT_H=1;HAVE_STDLIB_H=1;HAVE_STRING_H=1;HAVE_MEMORY_H=1;HAVE_STRINGS_H=1;HAVE_INTTYPES_H=1;HAVE_STDINT_H=1;HAVE_UNISTD_H=1;SILENT=1;NO_SIGNALS=1;NO_EXECUTE_PERMISSION=1;JAVA_FINALIZATION=1;GC_GCJ_SUPPORT=1;ATOMIC_UNCOLLECTABLE=1;_IN_LIBGC=1;WINVER=0x0500;_WIN32_WINNT=0x0500;_WIN32_IE=0x0501;WIN32_THREADS;FD_SETSIZE=1024"
RuntimeLibrary="0"
BufferSecurityCheck="true"
UsePrecompiledHeader="0"
......@@ -502,7 +502,7 @@
Name="VCCLCompilerTool"
Optimization="1"
AdditionalIncludeDirectories="..\libgc\include"
PreprocessorDefinitions="NDEBUG;__x86_64__;TARGET_AMD64;WIN64;_WIN64;WIN32;_WIN32;__WIN32__;_WINDOWS;WINDOWS;PLATFORM_WIN32;TARGET_WIN32;_CRT_SECURE_NO_DEPRECATE;__STDC__;PACKAGE_NAME=\&quot;libgc-mono\&quot;;PACKAGE_TARNAME=\&quot;libgc-mono\&quot;;PACKAGE_VERSION=\&quot;6.6\&quot;;&quot;PACKAGE_STRING=\&quot;libgc-mono 6.6\&quot;&quot;;PACKAGE_BUGREPORT=\&quot;Hans_Boehm@hp.com\&quot;;GC_WIN32_THREADS=1;NO_GETENV=1;GC_INSIDE_DLL=1;GC_NOT_DLL=1;STDC_HEADERS=1;HAVE_SYS_TYPES_H=1;HAVE_SYS_STAT_H=1;HAVE_STDLIB_H=1;HAVE_STRING_H=1;HAVE_MEMORY_H=1;HAVE_STRINGS_H=1;HAVE_INTTYPES_H=1;HAVE_STDINT_H=1;HAVE_UNISTD_H=1;SILENT=1;NO_SIGNALS=1;NO_EXECUTE_PERMISSION=1;JAVA_FINALIZATION=1;GC_GCJ_SUPPORT=1;ATOMIC_UNCOLLECTABLE=1;_IN_LIBGC=1;WINVER=0x0500;_WIN32_WINNT=0x0500;_WIN32_IE=0x0501;WIN32_THREADS;FD_SETSIZE=1024;USE_MUNMAP;USE_MMAP"
PreprocessorDefinitions="NDEBUG;__x86_64__;TARGET_AMD64;WIN64;_WIN64;WIN32;_WIN32;__WIN32__;_WINDOWS;WINDOWS;PLATFORM_WIN32;TARGET_WIN32;_CRT_SECURE_NO_DEPRECATE;__STDC__;PACKAGE_NAME=\&quot;libgc-mono\&quot;;PACKAGE_TARNAME=\&quot;libgc-mono\&quot;;PACKAGE_VERSION=\&quot;6.6\&quot;;&quot;PACKAGE_STRING=\&quot;libgc-mono 6.6\&quot;&quot;;PACKAGE_BUGREPORT=\&quot;Hans_Boehm@hp.com\&quot;;GC_WIN32_THREADS=1;NO_GETENV=1;GC_INSIDE_DLL=1;GC_NOT_DLL=1;STDC_HEADERS=1;HAVE_SYS_TYPES_H=1;HAVE_SYS_STAT_H=1;HAVE_STDLIB_H=1;HAVE_STRING_H=1;HAVE_MEMORY_H=1;HAVE_STRINGS_H=1;HAVE_INTTYPES_H=1;HAVE_STDINT_H=1;HAVE_UNISTD_H=1;SILENT=1;NO_SIGNALS=1;NO_EXECUTE_PERMISSION=1;JAVA_FINALIZATION=1;GC_GCJ_SUPPORT=1;ATOMIC_UNCOLLECTABLE=1;_IN_LIBGC=1;WINVER=0x0500;_WIN32_WINNT=0x0500;_WIN32_IE=0x0501;WIN32_THREADS;FD_SETSIZE=1024"
RuntimeLibrary="2"
BufferSecurityCheck="true"
UsePrecompiledHeader="0"
......@@ -565,7 +565,7 @@
Name="VCCLCompilerTool"
Optimization="1"
AdditionalIncludeDirectories="..\libgc\include"
PreprocessorDefinitions="NDEBUG;__i386__;TARGET_ARM;i386;WIN32;_WIN32;__WIN32__;_WINDOWS;WINDOWS;PLATFORM_WIN32;TARGET_WIN32;_CRT_SECURE_NO_DEPRECATE;__STDC__;PACKAGE_NAME=\&quot;libgc-mono\&quot;;PACKAGE_TARNAME=\&quot;libgc-mono\&quot;;PACKAGE_VERSION=\&quot;6.6\&quot;;&quot;PACKAGE_STRING=\&quot;libgc-mono 6.6\&quot;&quot;;PACKAGE_BUGREPORT=\&quot;Hans_Boehm@hp.com\&quot;;NO_GETENV=1;GC_INSIDE_DLL=1;GC_NOT_DLL=1;STDC_HEADERS=1;HAVE_SYS_TYPES_H=1;HAVE_SYS_STAT_H=1;HAVE_STDLIB_H=1;HAVE_STRING_H=1;HAVE_MEMORY_H=1;HAVE_STRINGS_H=1;HAVE_INTTYPES_H=1;HAVE_STDINT_H=1;HAVE_UNISTD_H=1;SILENT=1;NO_SIGNALS=1;NO_EXECUTE_PERMISSION=1;JAVA_FINALIZATION=1;GC_GCJ_SUPPORT=1;ATOMIC_UNCOLLECTABLE=1;_IN_LIBGC=1;WINVER=0x0500;_WIN32_WINNT=0x0500;_WIN32_IE=0x0501;WIN32_THREADS;FD_SETSIZE=1024;USE_MUNMAP;USE_MMAP"
PreprocessorDefinitions="NDEBUG;__i386__;TARGET_ARM;i386;WIN32;_WIN32;__WIN32__;_WINDOWS;WINDOWS;PLATFORM_WIN32;TARGET_WIN32;_CRT_SECURE_NO_DEPRECATE;__STDC__;PACKAGE_NAME=\&quot;libgc-mono\&quot;;PACKAGE_TARNAME=\&quot;libgc-mono\&quot;;PACKAGE_VERSION=\&quot;6.6\&quot;;&quot;PACKAGE_STRING=\&quot;libgc-mono 6.6\&quot;&quot;;PACKAGE_BUGREPORT=\&quot;Hans_Boehm@hp.com\&quot;;NO_GETENV=1;GC_INSIDE_DLL=1;GC_NOT_DLL=1;STDC_HEADERS=1;HAVE_SYS_TYPES_H=1;HAVE_SYS_STAT_H=1;HAVE_STDLIB_H=1;HAVE_STRING_H=1;HAVE_MEMORY_H=1;HAVE_STRINGS_H=1;HAVE_INTTYPES_H=1;HAVE_STDINT_H=1;HAVE_UNISTD_H=1;SILENT=1;NO_SIGNALS=1;NO_EXECUTE_PERMISSION=1;JAVA_FINALIZATION=1;GC_GCJ_SUPPORT=1;ATOMIC_UNCOLLECTABLE=1;_IN_LIBGC=1;WINVER=0x0500;_WIN32_WINNT=0x0500;_WIN32_IE=0x0501;WIN32_THREADS;FD_SETSIZE=1024"
RuntimeLibrary="0"
BufferSecurityCheck="true"
UsePrecompiledHeader="0"
......@@ -629,7 +629,7 @@
Name="VCCLCompilerTool"
Optimization="1"
AdditionalIncludeDirectories="..\libgc\include"
PreprocessorDefinitions="NDEBUG;__x86_64__;TARGET_AMD64;WIN64;_WIN64;WIN32;_WIN32;__WIN32__;_WINDOWS;WINDOWS;PLATFORM_WIN32;TARGET_WIN32;_CRT_SECURE_NO_DEPRECATE;__STDC__;PACKAGE_NAME=\&quot;libgc-mono\&quot;;PACKAGE_TARNAME=\&quot;libgc-mono\&quot;;PACKAGE_VERSION=\&quot;6.6\&quot;;&quot;PACKAGE_STRING=\&quot;libgc-mono 6.6\&quot;&quot;;PACKAGE_BUGREPORT=\&quot;Hans_Boehm@hp.com\&quot;;GC_WIN32_THREADS=1;NO_GETENV=1;GC_INSIDE_DLL=1;GC_NOT_DLL=1;STDC_HEADERS=1;HAVE_SYS_TYPES_H=1;HAVE_SYS_STAT_H=1;HAVE_STDLIB_H=1;HAVE_STRING_H=1;HAVE_MEMORY_H=1;HAVE_STRINGS_H=1;HAVE_INTTYPES_H=1;HAVE_STDINT_H=1;HAVE_UNISTD_H=1;SILENT=1;NO_SIGNALS=1;NO_EXECUTE_PERMISSION=1;JAVA_FINALIZATION=1;GC_GCJ_SUPPORT=1;ATOMIC_UNCOLLECTABLE=1;_IN_LIBGC=1;WINVER=0x0500;_WIN32_WINNT=0x0500;_WIN32_IE=0x0501;WIN32_THREADS;FD_SETSIZE=1024;USE_MUNMAP;USE_MMAP"
PreprocessorDefinitions="NDEBUG;__x86_64__;TARGET_AMD64;WIN64;_WIN64;WIN32;_WIN32;__WIN32__;_WINDOWS;WINDOWS;PLATFORM_WIN32;TARGET_WIN32;_CRT_SECURE_NO_DEPRECATE;__STDC__;PACKAGE_NAME=\&quot;libgc-mono\&quot;;PACKAGE_TARNAME=\&quot;libgc-mono\&quot;;PACKAGE_VERSION=\&quot;6.6\&quot;;&quot;PACKAGE_STRING=\&quot;libgc-mono 6.6\&quot;&quot;;PACKAGE_BUGREPORT=\&quot;Hans_Boehm@hp.com\&quot;;GC_WIN32_THREADS=1;NO_GETENV=1;GC_INSIDE_DLL=1;GC_NOT_DLL=1;STDC_HEADERS=1;HAVE_SYS_TYPES_H=1;HAVE_SYS_STAT_H=1;HAVE_STDLIB_H=1;HAVE_STRING_H=1;HAVE_MEMORY_H=1;HAVE_STRINGS_H=1;HAVE_INTTYPES_H=1;HAVE_STDINT_H=1;HAVE_UNISTD_H=1;SILENT=1;NO_SIGNALS=1;NO_EXECUTE_PERMISSION=1;JAVA_FINALIZATION=1;GC_GCJ_SUPPORT=1;ATOMIC_UNCOLLECTABLE=1;_IN_LIBGC=1;WINVER=0x0500;_WIN32_WINNT=0x0500;_WIN32_IE=0x0501;WIN32_THREADS;FD_SETSIZE=1024"
RuntimeLibrary="2"
BufferSecurityCheck="true"
UsePrecompiledHeader="0"
......
......@@ -64,11 +64,11 @@ FILE* unity_fopen( const char *name, const char *mode )
return _wfopen( wideName, wideMode );
}
LONG CALLBACK seh_handler(EXCEPTION_POINTERS* ep);
extern LONG CALLBACK seh_vectored_exception_handler(EXCEPTION_POINTERS* ep);
LONG mono_unity_seh_handler(EXCEPTION_POINTERS* ep)
{
#if defined(TARGET_X86) || defined(TARGET_AMD64)
return seh_handler(ep);
return seh_vectored_exception_handler(ep);
#else
g_assert_not_reached();
#endif
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册