diff options
author | megacz <megacz@138bc75d-0d04-0410-961f-82ee72b054a4> | 2002-02-02 04:34:15 +0000 |
---|---|---|
committer | megacz <megacz@138bc75d-0d04-0410-961f-82ee72b054a4> | 2002-02-02 04:34:15 +0000 |
commit | f9f038908e7d7b2390f87de471b38fd7cf79ce2e (patch) | |
tree | 44639ae2b8b19fee5fc19dca154b0352865f2f0c /libjava/prims.cc | |
parent | bd3166220defbdc8ded78cd94aa832218f565ad6 (diff) | |
download | gcc-f9f038908e7d7b2390f87de471b38fd7cf79ce2e.tar.gz |
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
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@49429 138bc75d-0d04-0410-961f-82ee72b054a4
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 279e3caad02..23ee38d5060 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) |