mirror of
git://gcc.gnu.org/git/gcc.git
synced 2024-12-22 20:19:51 +08:00
2002-02-01 Adam Megacz <adam@xwt.org>
* prims.cc (_Jv_CreateJavaVM): We now use WIN32 instead of USE_WIN32_SIGNALLING and USE_WINSOCK. (win32_exception_handler): Now throws an exception out of the signal handler; assumes SJLJ From-SVN: r49429
This commit is contained in:
parent
a70cb11b6c
commit
a7006428b6
@ -1,3 +1,11 @@
|
||||
2002-02-01 Adam Megacz <adam@xwt.org>
|
||||
|
||||
* prims.cc
|
||||
(_Jv_CreateJavaVM): We now use WIN32 instead of
|
||||
USE_WIN32_SIGNALLING and USE_WINSOCK.
|
||||
(win32_exception_handler): Now throws an exception out of
|
||||
the signal handler; assumes SJLJ
|
||||
|
||||
2002-02-01 Adam Megacz
|
||||
|
||||
* win32-threads.cc:
|
||||
|
@ -10,14 +10,14 @@ details. */
|
||||
|
||||
#include <config.h>
|
||||
|
||||
#ifdef USE_WIN32_SIGNALLING
|
||||
#ifdef WIN32
|
||||
#include <windows.h>
|
||||
#endif /* USE_WIN32_SIGNALLING */
|
||||
#endif /* WIN32 */
|
||||
|
||||
#ifdef USE_WINSOCK
|
||||
#ifdef WIN32
|
||||
#undef __INSIDE_CYGWIN__
|
||||
#include <winsock.h>
|
||||
#endif /* USE_WINSOCK */
|
||||
#endif /* WIN32 */
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdarg.h>
|
||||
@ -730,28 +730,19 @@ _Jv_ThisExecutable (const char *name)
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef USE_WIN32_SIGNALLING
|
||||
#ifdef WIN32
|
||||
|
||||
extern "C" int* win32_get_restart_frame (void *);
|
||||
|
||||
LONG CALLBACK
|
||||
win32_exception_handler (LPEXCEPTION_POINTERS e)
|
||||
{
|
||||
int* setjmp_buf;
|
||||
if (e->ExceptionRecord->ExceptionCode == EXCEPTION_ACCESS_VIOLATION)
|
||||
setjmp_buf = win32_get_restart_frame (nullp);
|
||||
if (e->ExceptionRecord->ExceptionCode == EXCEPTION_ACCESS_VIOLATION)
|
||||
_Jv_ThrowNullPointerException();
|
||||
else if (e->ExceptionRecord->ExceptionCode == EXCEPTION_INT_DIVIDE_BY_ZERO)
|
||||
setjmp_buf = win32_get_restart_frame (arithexception);
|
||||
throw new java::lang::ArithmeticException;
|
||||
else
|
||||
return EXCEPTION_CONTINUE_SEARCH;
|
||||
|
||||
e->ContextRecord->Ebp = setjmp_buf[0];
|
||||
// FIXME: Why does i386-signal.h increment the PC here, do we need to do it?
|
||||
e->ContextRecord->Eip = setjmp_buf[1];
|
||||
// FIXME: Is this the stack pointer? Do we need it?
|
||||
e->ContextRecord->Esp = setjmp_buf[2];
|
||||
|
||||
return EXCEPTION_CONTINUE_EXECUTION;
|
||||
}
|
||||
|
||||
#endif
|
||||
@ -962,14 +953,11 @@ _Jv_CreateJavaVM (void* /*vm_args*/)
|
||||
LTDL_SET_PRELOADED_SYMBOLS ();
|
||||
#endif
|
||||
|
||||
#ifdef USE_WINSOCK
|
||||
#ifdef WIN32
|
||||
// Initialise winsock for networking
|
||||
WSADATA data;
|
||||
if (WSAStartup (MAKEWORD (1, 1), &data))
|
||||
MessageBox (NULL, "Error initialising winsock library.", "Error", MB_OK | MB_ICONEXCLAMATION);
|
||||
#endif /* USE_WINSOCK */
|
||||
|
||||
#ifdef USE_WIN32_SIGNALLING
|
||||
// Install exception handler
|
||||
SetUnhandledExceptionFilter (win32_exception_handler);
|
||||
#elif defined(HAVE_SIGACTION)
|
||||
|
Loading…
Reference in New Issue
Block a user