aboutsummaryrefslogtreecommitdiff
path: root/libjava/prims.cc
diff options
context:
space:
mode:
authorAdam Megacz <adam@xwt.org>2002-02-02 04:34:15 +0000
committerAdam Megacz <megacz@gcc.gnu.org>2002-02-02 04:34:15 +0000
commita7006428b65500caa45e26143f143c1021139493 (patch)
tree44639ae2b8b19fee5fc19dca154b0352865f2f0c /libjava/prims.cc
parenta70cb11b6cf6b16ef6b20328027a11ccb516c286 (diff)
downloadgcc-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.cc30
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)