[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:
Andrew Haley 2003-08-20 17:27:56 +00:00 committed by Andrew Haley
parent 3e6d83ec9c
commit f2f3f409f6
5 changed files with 69 additions and 15 deletions

View file

@ -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;