summaryrefslogtreecommitdiff
path: root/libjava/prims.cc
diff options
context:
space:
mode:
authormegacz <megacz@138bc75d-0d04-0410-961f-82ee72b054a4>2002-02-02 04:34:15 +0000
committermegacz <megacz@138bc75d-0d04-0410-961f-82ee72b054a4>2002-02-02 04:34:15 +0000
commitf9f038908e7d7b2390f87de471b38fd7cf79ce2e (patch)
tree44639ae2b8b19fee5fc19dca154b0352865f2f0c /libjava/prims.cc
parentbd3166220defbdc8ded78cd94aa832218f565ad6 (diff)
downloadgcc-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.cc30
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)