[multiple changes]
2003-01-31 Andrew Haley <aph@redhat.com> * except.c (prepare_eh_table_type): Use new encoding for exception handlers when using -fno-assume-compiled. 2003-08-20 Andrew Haley <aph@redhat.com> * gnu/gcj/runtime/StackTrace.java (getClass): New method. * gnu/gcj/runtime/natStackTrace.cc (getClass): New method. (classAt): Break out class lookup function into getClass(). * exception.cc (PERSONALITY_FUNCTION): Use new encoding for exception handlers when using -fno-assume-compiled. From-SVN: r70605
This commit is contained in:
parent
3e6d83ec9c
commit
f2f3f409f6
5 changed files with 69 additions and 15 deletions
|
@ -15,6 +15,9 @@ details. */
|
|||
|
||||
#include <java/lang/Class.h>
|
||||
#include <java/lang/NullPointerException.h>
|
||||
#include <gnu/gcj/runtime/StackTrace.h>
|
||||
#include <gnu/gcj/runtime/MethodRef.h>
|
||||
#include <gnu/gcj/RawData.h>
|
||||
#include <gcj/cni.h>
|
||||
#include <jvm.h>
|
||||
|
||||
|
@ -335,11 +338,21 @@ PERSONALITY_FUNCTION (int version,
|
|||
|
||||
jclass catch_type = get_ttype_entry (context, &info, ar_filter);
|
||||
|
||||
// The catch_type is either a (java::lang::Class*) or
|
||||
// is one more than a (Utf8Const*).
|
||||
if ((size_t)catch_type & 1)
|
||||
catch_type = _Jv_FindClass ((Utf8Const*)((size_t)catch_type ^ 1), NULL);
|
||||
|
||||
typedef struct {
|
||||
int __attribute__ ((mode (pointer))) dummy;
|
||||
Utf8Const *utf8;
|
||||
} utf8_hdr;
|
||||
utf8_hdr *p = (utf8_hdr *)catch_type;
|
||||
if (p->dummy == -1)
|
||||
{
|
||||
using namespace gnu::gcj::runtime;
|
||||
java::lang::Class *klass
|
||||
= StackTrace::getClass ((gnu::gcj::RawData *)ip);
|
||||
java::lang::ClassLoader *loader
|
||||
= klass ? klass->getClassLoaderInternal () : NULL;
|
||||
catch_type = _Jv_FindClass (p->utf8, loader);
|
||||
}
|
||||
|
||||
if (_Jv_IsInstanceOf (xh->value, catch_type))
|
||||
{
|
||||
handler_switch_value = ar_filter;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue