diff options
author | Adam Megacz <adam@xwt.org> | 2002-02-02 04:34:15 +0000 |
---|---|---|
committer | Adam Megacz <megacz@gcc.gnu.org> | 2002-02-02 04:34:15 +0000 |
commit | a7006428b65500caa45e26143f143c1021139493 (patch) | |
tree | 44639ae2b8b19fee5fc19dca154b0352865f2f0c /libjava/prims.cc | |
parent | a70cb11b6cf6b16ef6b20328027a11ccb516c286 (diff) | |
download | gcc-a7006428b65500caa45e26143f143c1021139493.zip gcc-a7006428b65500caa45e26143f143c1021139493.tar.gz gcc-a7006428b65500caa45e26143f143c1021139493.tar.bz2 |
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
Diffstat (limited to 'libjava/prims.cc')
-rw-r--r-- | libjava/prims.cc | 30 |
1 files changed, 9 insertions, 21 deletions
diff --git a/libjava/prims.cc b/libjava/prims.cc index 279e3ca..23ee38d 100644 --- a/libjava/prims.cc +++ b/libjava/prims.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) |