prims.cc (catch_segv): Create exception in handler.
2003-06-12 Andrew Haley <aph@redhat.com> * prims.cc (catch_segv): Create exception in handler. (catch_fpe): Likewise. (_Jv_divI, _Jv_remI, _Jv_divJ, _Jv_remJ): Likewise. (_Jv_ThrowSignal): Remove. * include/x86_64-signal.h (INIT_SEGV): Delete reference to nullp. * include/default-signal.h (INIT_SEGV, INIT_FPE): Delete reference to nullp and arithexception. * include/dwarf2-signal.h (INIT_SEGV, INIT_FPE): Likewise. * include/i386-signal.h (INIT_SEGV, INIT_FPE): Likewise. * include/s390-signal.h (INIT_SEGV, INIT_FPE): Likewise. * include/sparc-signal.h (INIT_SEGV, INIT_FPE): Likewise. * include/win32-signal.h (INIT_SEGV, INIT_FPE): Likewise. From-SVN: r67892
This commit is contained in:
parent
12e816bf16
commit
bec3e66d1a
9 changed files with 45 additions and 56 deletions
|
@ -1,3 +1,19 @@
|
||||||
|
2003-06-12 Andrew Haley <aph@redhat.com>
|
||||||
|
|
||||||
|
* prims.cc (catch_segv): Create exception in handler.
|
||||||
|
(catch_fpe): Likewise.
|
||||||
|
(_Jv_divI, _Jv_remI, _Jv_divJ, _Jv_remJ): Likewise.
|
||||||
|
(_Jv_ThrowSignal): Remove.
|
||||||
|
|
||||||
|
* include/x86_64-signal.h (INIT_SEGV): Delete reference to nullp.
|
||||||
|
* include/default-signal.h (INIT_SEGV, INIT_FPE): Delete reference
|
||||||
|
to nullp and arithexception.
|
||||||
|
* include/dwarf2-signal.h (INIT_SEGV, INIT_FPE): Likewise.
|
||||||
|
* include/i386-signal.h (INIT_SEGV, INIT_FPE): Likewise.
|
||||||
|
* include/s390-signal.h (INIT_SEGV, INIT_FPE): Likewise.
|
||||||
|
* include/sparc-signal.h (INIT_SEGV, INIT_FPE): Likewise.
|
||||||
|
* include/win32-signal.h (INIT_SEGV, INIT_FPE): Likewise.
|
||||||
|
|
||||||
2003-06-11 Andrew Haley <aph@redhat.com>
|
2003-06-11 Andrew Haley <aph@redhat.com>
|
||||||
|
|
||||||
* jni.cc (_Jv_JNI_check_types): New.
|
* jni.cc (_Jv_JNI_check_types): New.
|
||||||
|
|
|
@ -24,7 +24,6 @@ static void _name (int _dummy)
|
||||||
#define INIT_SEGV \
|
#define INIT_SEGV \
|
||||||
do \
|
do \
|
||||||
{ \
|
{ \
|
||||||
nullp = new java::lang::NullPointerException (); \
|
|
||||||
signal (SIGSEGV, catch_segv); \
|
signal (SIGSEGV, catch_segv); \
|
||||||
} \
|
} \
|
||||||
while (0)
|
while (0)
|
||||||
|
@ -32,8 +31,6 @@ while (0)
|
||||||
#define INIT_FPE \
|
#define INIT_FPE \
|
||||||
do \
|
do \
|
||||||
{ \
|
{ \
|
||||||
arithexception = new java::lang::ArithmeticException \
|
|
||||||
(JvNewStringLatin1 ("/ by zero")); \
|
|
||||||
signal (SIGFPE, catch_fpe); \
|
signal (SIGFPE, catch_fpe); \
|
||||||
} \
|
} \
|
||||||
while (0)
|
while (0)
|
||||||
|
|
|
@ -143,7 +143,6 @@ extern "C" {
|
||||||
#define INIT_SEGV \
|
#define INIT_SEGV \
|
||||||
do \
|
do \
|
||||||
{ \
|
{ \
|
||||||
nullp = new java::lang::NullPointerException (); \
|
|
||||||
struct kernel_sigaction act; \
|
struct kernel_sigaction act; \
|
||||||
unsigned long stub = ((unsigned long)&__rt_sigreturn_stub); \
|
unsigned long stub = ((unsigned long)&__rt_sigreturn_stub); \
|
||||||
act.k_sa_sigaction = _Jv_catch_segv; \
|
act.k_sa_sigaction = _Jv_catch_segv; \
|
||||||
|
@ -158,8 +157,6 @@ while (0)
|
||||||
#define INIT_FPE \
|
#define INIT_FPE \
|
||||||
do \
|
do \
|
||||||
{ \
|
{ \
|
||||||
arithexception = new java::lang::ArithmeticException \
|
|
||||||
(JvNewStringLatin1 ("/ by zero")); \
|
|
||||||
struct kernel_sigaction act; \
|
struct kernel_sigaction act; \
|
||||||
unsigned long stub = ((unsigned long)&__rt_sigreturn_stub); \
|
unsigned long stub = ((unsigned long)&__rt_sigreturn_stub); \
|
||||||
act.k_sa_sigaction = _Jv_catch_fpe; \
|
act.k_sa_sigaction = _Jv_catch_fpe; \
|
||||||
|
@ -185,7 +182,6 @@ extern "C" {
|
||||||
do \
|
do \
|
||||||
{ \
|
{ \
|
||||||
struct kernel_sigaction act; \
|
struct kernel_sigaction act; \
|
||||||
nullp = new java::lang::NullPointerException (); \
|
|
||||||
act.k_sa_sigaction = _Jv_catch_segv; \
|
act.k_sa_sigaction = _Jv_catch_segv; \
|
||||||
act.k_sa_mask = 0; \
|
act.k_sa_mask = 0; \
|
||||||
act.k_sa_flags = SA_SIGINFO; \
|
act.k_sa_flags = SA_SIGINFO; \
|
||||||
|
@ -197,8 +193,6 @@ while (0)
|
||||||
#define INIT_FPE \
|
#define INIT_FPE \
|
||||||
do \
|
do \
|
||||||
{ \
|
{ \
|
||||||
arithexception = new java::lang::ArithmeticException \
|
|
||||||
(JvNewStringLatin1 ("/ by zero")); \
|
|
||||||
struct kernel_sigaction act; \
|
struct kernel_sigaction act; \
|
||||||
act.k_sa_sigaction = _Jv_catch_fpe; \
|
act.k_sa_sigaction = _Jv_catch_fpe; \
|
||||||
act.k_sa_mask = 0; \
|
act.k_sa_mask = 0; \
|
||||||
|
@ -212,7 +206,6 @@ while (0)
|
||||||
#define INIT_SEGV \
|
#define INIT_SEGV \
|
||||||
do \
|
do \
|
||||||
{ \
|
{ \
|
||||||
nullp = new java::lang::NullPointerException (); \
|
|
||||||
struct sigaction act; \
|
struct sigaction act; \
|
||||||
act.sa_sigaction = _Jv_catch_segv; \
|
act.sa_sigaction = _Jv_catch_segv; \
|
||||||
sigemptyset (&act.sa_mask); \
|
sigemptyset (&act.sa_mask); \
|
||||||
|
@ -224,8 +217,6 @@ while (0)
|
||||||
#define INIT_FPE \
|
#define INIT_FPE \
|
||||||
do \
|
do \
|
||||||
{ \
|
{ \
|
||||||
arithexception = new java::lang::ArithmeticException \
|
|
||||||
(JvNewStringLatin1 ("/ by zero")); \
|
|
||||||
struct sigaction act; \
|
struct sigaction act; \
|
||||||
act.sa_sigaction = _Jv_catch_fpe; \
|
act.sa_sigaction = _Jv_catch_fpe; \
|
||||||
sigemptyset (&act.sa_mask); \
|
sigemptyset (&act.sa_mask); \
|
||||||
|
@ -250,7 +241,6 @@ while (0)
|
||||||
#define INIT_SEGV \
|
#define INIT_SEGV \
|
||||||
do \
|
do \
|
||||||
{ \
|
{ \
|
||||||
nullp = new java::lang::NullPointerException (); \
|
|
||||||
struct sigaction act; \
|
struct sigaction act; \
|
||||||
act.sa_sigaction = _Jv_catch_segv; \
|
act.sa_sigaction = _Jv_catch_segv; \
|
||||||
sigemptyset (&act.sa_mask); \
|
sigemptyset (&act.sa_mask); \
|
||||||
|
@ -262,8 +252,6 @@ while (0)
|
||||||
#define INIT_FPE \
|
#define INIT_FPE \
|
||||||
do \
|
do \
|
||||||
{ \
|
{ \
|
||||||
arithexception = new java::lang::ArithmeticException \
|
|
||||||
(JvNewStringLatin1 ("/ by zero")); \
|
|
||||||
struct sigaction act; \
|
struct sigaction act; \
|
||||||
act.sa_sigaction = _Jv_catch_fpe; \
|
act.sa_sigaction = _Jv_catch_fpe; \
|
||||||
sigemptyset (&act.sa_mask); \
|
sigemptyset (&act.sa_mask); \
|
||||||
|
|
|
@ -111,7 +111,6 @@ struct old_i386_kernel_sigaction {
|
||||||
#define INIT_SEGV \
|
#define INIT_SEGV \
|
||||||
do \
|
do \
|
||||||
{ \
|
{ \
|
||||||
nullp = new java::lang::NullPointerException (); \
|
|
||||||
struct old_i386_kernel_sigaction kact; \
|
struct old_i386_kernel_sigaction kact; \
|
||||||
kact.k_sa_handler = catch_segv; \
|
kact.k_sa_handler = catch_segv; \
|
||||||
kact.k_sa_mask = 0; \
|
kact.k_sa_mask = 0; \
|
||||||
|
@ -123,8 +122,6 @@ while (0)
|
||||||
#define INIT_FPE \
|
#define INIT_FPE \
|
||||||
do \
|
do \
|
||||||
{ \
|
{ \
|
||||||
arithexception = new java::lang::ArithmeticException \
|
|
||||||
(JvNewStringLatin1 ("/ by zero")); \
|
|
||||||
struct old_i386_kernel_sigaction kact; \
|
struct old_i386_kernel_sigaction kact; \
|
||||||
kact.k_sa_handler = catch_fpe; \
|
kact.k_sa_handler = catch_fpe; \
|
||||||
kact.k_sa_mask = 0; \
|
kact.k_sa_mask = 0; \
|
||||||
|
|
|
@ -52,7 +52,6 @@ struct old_s390_kernel_sigaction {
|
||||||
#define INIT_SEGV \
|
#define INIT_SEGV \
|
||||||
do \
|
do \
|
||||||
{ \
|
{ \
|
||||||
nullp = new java::lang::NullPointerException (); \
|
|
||||||
struct old_s390_kernel_sigaction kact; \
|
struct old_s390_kernel_sigaction kact; \
|
||||||
kact.k_sa_handler = catch_segv; \
|
kact.k_sa_handler = catch_segv; \
|
||||||
kact.k_sa_mask = 0; \
|
kact.k_sa_mask = 0; \
|
||||||
|
@ -64,8 +63,6 @@ while (0)
|
||||||
#define INIT_FPE \
|
#define INIT_FPE \
|
||||||
do \
|
do \
|
||||||
{ \
|
{ \
|
||||||
arithexception = new java::lang::ArithmeticException \
|
|
||||||
(JvNewStringLatin1 ("/ by zero")); \
|
|
||||||
struct old_s390_kernel_sigaction kact; \
|
struct old_s390_kernel_sigaction kact; \
|
||||||
kact.k_sa_handler = catch_fpe; \
|
kact.k_sa_handler = catch_fpe; \
|
||||||
kact.k_sa_mask = 0; \
|
kact.k_sa_mask = 0; \
|
||||||
|
|
|
@ -45,7 +45,6 @@ while (0)
|
||||||
#define INIT_SEGV \
|
#define INIT_SEGV \
|
||||||
do \
|
do \
|
||||||
{ \
|
{ \
|
||||||
nullp = new java::lang::NullPointerException (); \
|
|
||||||
struct sigaction act; \
|
struct sigaction act; \
|
||||||
act.sa_sigaction = catch_segv; \
|
act.sa_sigaction = catch_segv; \
|
||||||
act.sa_flags = SA_SIGINFO | SA_NODEFER; \
|
act.sa_flags = SA_SIGINFO | SA_NODEFER; \
|
||||||
|
@ -57,8 +56,6 @@ while (0)
|
||||||
#define INIT_FPE \
|
#define INIT_FPE \
|
||||||
do \
|
do \
|
||||||
{ \
|
{ \
|
||||||
arithexception = new java::lang::ArithmeticException \
|
|
||||||
(JvNewStringLatin1 ("/ by zero")); \
|
|
||||||
struct sigaction act; \
|
struct sigaction act; \
|
||||||
act.sa_flags = SA_SIGINFO | SA_NODEFER; \
|
act.sa_flags = SA_SIGINFO | SA_NODEFER; \
|
||||||
act.sa_sigaction = catch_fpe; \
|
act.sa_sigaction = catch_fpe; \
|
||||||
|
|
|
@ -26,7 +26,6 @@ static void _name (int _dummy)
|
||||||
#define INIT_SEGV \
|
#define INIT_SEGV \
|
||||||
do \
|
do \
|
||||||
{ \
|
{ \
|
||||||
nullp = new java::lang::NullPointerException (); \
|
|
||||||
} \
|
} \
|
||||||
while (0)
|
while (0)
|
||||||
|
|
||||||
|
@ -34,8 +33,6 @@ while (0)
|
||||||
#define INIT_FPE \
|
#define INIT_FPE \
|
||||||
do \
|
do \
|
||||||
{ \
|
{ \
|
||||||
arithexception = new java::lang::ArithmeticException \
|
|
||||||
(JvNewStringLatin1 ("/ by zero")); \
|
|
||||||
} \
|
} \
|
||||||
while (0)
|
while (0)
|
||||||
|
|
||||||
|
|
|
@ -64,7 +64,6 @@ static void restore_rt (void) asm ("__restore_rt");
|
||||||
#define INIT_SEGV \
|
#define INIT_SEGV \
|
||||||
do \
|
do \
|
||||||
{ \
|
{ \
|
||||||
nullp = new java::lang::NullPointerException (); \
|
|
||||||
struct kernel_sigaction act; \
|
struct kernel_sigaction act; \
|
||||||
act.k_sa_sigaction = _Jv_catch_segv; \
|
act.k_sa_sigaction = _Jv_catch_segv; \
|
||||||
sigemptyset (&act.k_sa_mask); \
|
sigemptyset (&act.k_sa_mask); \
|
||||||
|
|
|
@ -122,39 +122,27 @@ void (*_Jv_JVMPI_Notify_THREAD_END) (JVMPI_Event *event);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
extern "C" void _Jv_ThrowSignal (jthrowable) __attribute ((noreturn));
|
|
||||||
|
|
||||||
// Just like _Jv_Throw, but fill in the stack trace first. Although
|
|
||||||
// this is declared extern in order that its name not be mangled, it
|
|
||||||
// is not intended to be used outside this file.
|
|
||||||
void
|
|
||||||
_Jv_ThrowSignal (jthrowable throwable)
|
|
||||||
{
|
|
||||||
throwable->fillInStackTrace ();
|
|
||||||
throw throwable;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef HANDLE_SEGV
|
#ifdef HANDLE_SEGV
|
||||||
static java::lang::NullPointerException *nullp;
|
|
||||||
|
|
||||||
SIGNAL_HANDLER (catch_segv)
|
SIGNAL_HANDLER (catch_segv)
|
||||||
{
|
{
|
||||||
|
java::lang::NullPointerException *nullp
|
||||||
|
= new java::lang::NullPointerException;
|
||||||
MAKE_THROW_FRAME (nullp);
|
MAKE_THROW_FRAME (nullp);
|
||||||
_Jv_ThrowSignal (nullp);
|
throw nullp;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static java::lang::ArithmeticException *arithexception;
|
|
||||||
|
|
||||||
#ifdef HANDLE_FPE
|
#ifdef HANDLE_FPE
|
||||||
SIGNAL_HANDLER (catch_fpe)
|
SIGNAL_HANDLER (catch_fpe)
|
||||||
{
|
{
|
||||||
|
java::lang::ArithmeticException *arithexception
|
||||||
|
= new java::lang::ArithmeticException (JvNewStringLatin1 ("/ by zero"));
|
||||||
#ifdef HANDLE_DIVIDE_OVERFLOW
|
#ifdef HANDLE_DIVIDE_OVERFLOW
|
||||||
HANDLE_DIVIDE_OVERFLOW;
|
HANDLE_DIVIDE_OVERFLOW;
|
||||||
#else
|
#else
|
||||||
MAKE_THROW_FRAME (arithexception);
|
MAKE_THROW_FRAME (arithexception);
|
||||||
#endif
|
#endif
|
||||||
_Jv_ThrowSignal (arithexception);
|
throw arithexception;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -921,9 +909,6 @@ _Jv_CreateJavaVM (void* /*vm_args*/)
|
||||||
INIT_SEGV;
|
INIT_SEGV;
|
||||||
#ifdef HANDLE_FPE
|
#ifdef HANDLE_FPE
|
||||||
INIT_FPE;
|
INIT_FPE;
|
||||||
#else
|
|
||||||
arithexception = new java::lang::ArithmeticException
|
|
||||||
(JvNewStringLatin1 ("/ by zero"));
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
no_memory = new java::lang::OutOfMemoryError;
|
no_memory = new java::lang::OutOfMemoryError;
|
||||||
|
@ -1093,7 +1078,11 @@ jint
|
||||||
_Jv_divI (jint dividend, jint divisor)
|
_Jv_divI (jint dividend, jint divisor)
|
||||||
{
|
{
|
||||||
if (__builtin_expect (divisor == 0, false))
|
if (__builtin_expect (divisor == 0, false))
|
||||||
_Jv_ThrowSignal (arithexception);
|
{
|
||||||
|
java::lang::ArithmeticException *arithexception
|
||||||
|
= new java::lang::ArithmeticException (JvNewStringLatin1 ("/ by zero"));
|
||||||
|
throw arithexception;
|
||||||
|
}
|
||||||
|
|
||||||
if (dividend == (jint) 0x80000000L && divisor == -1)
|
if (dividend == (jint) 0x80000000L && divisor == -1)
|
||||||
return dividend;
|
return dividend;
|
||||||
|
@ -1105,11 +1094,15 @@ jint
|
||||||
_Jv_remI (jint dividend, jint divisor)
|
_Jv_remI (jint dividend, jint divisor)
|
||||||
{
|
{
|
||||||
if (__builtin_expect (divisor == 0, false))
|
if (__builtin_expect (divisor == 0, false))
|
||||||
_Jv_ThrowSignal (arithexception);
|
{
|
||||||
|
java::lang::ArithmeticException *arithexception
|
||||||
|
= new java::lang::ArithmeticException (JvNewStringLatin1 ("/ by zero"));
|
||||||
|
throw arithexception;
|
||||||
|
}
|
||||||
|
|
||||||
if (dividend == (jint) 0x80000000L && divisor == -1)
|
if (dividend == (jint) 0x80000000L && divisor == -1)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
return dividend % divisor;
|
return dividend % divisor;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1117,8 +1110,12 @@ jlong
|
||||||
_Jv_divJ (jlong dividend, jlong divisor)
|
_Jv_divJ (jlong dividend, jlong divisor)
|
||||||
{
|
{
|
||||||
if (__builtin_expect (divisor == 0, false))
|
if (__builtin_expect (divisor == 0, false))
|
||||||
_Jv_ThrowSignal (arithexception);
|
{
|
||||||
|
java::lang::ArithmeticException *arithexception
|
||||||
|
= new java::lang::ArithmeticException (JvNewStringLatin1 ("/ by zero"));
|
||||||
|
throw arithexception;
|
||||||
|
}
|
||||||
|
|
||||||
if (dividend == (jlong) 0x8000000000000000LL && divisor == -1)
|
if (dividend == (jlong) 0x8000000000000000LL && divisor == -1)
|
||||||
return dividend;
|
return dividend;
|
||||||
|
|
||||||
|
@ -1129,8 +1126,12 @@ jlong
|
||||||
_Jv_remJ (jlong dividend, jlong divisor)
|
_Jv_remJ (jlong dividend, jlong divisor)
|
||||||
{
|
{
|
||||||
if (__builtin_expect (divisor == 0, false))
|
if (__builtin_expect (divisor == 0, false))
|
||||||
_Jv_ThrowSignal (arithexception);
|
{
|
||||||
|
java::lang::ArithmeticException *arithexception
|
||||||
|
= new java::lang::ArithmeticException (JvNewStringLatin1 ("/ by zero"));
|
||||||
|
throw arithexception;
|
||||||
|
}
|
||||||
|
|
||||||
if (dividend == (jlong) 0x8000000000000000LL && divisor == -1)
|
if (dividend == (jlong) 0x8000000000000000LL && divisor == -1)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue