java-interp.h (class _Jv_InterpMethod): Added JV_MARKOBJ_DECL.

* include/java-interp.h (class _Jv_InterpMethod): Added
	JV_MARKOBJ_DECL.
	* boehm.cc (_Jv_MarkObj): Consolidated interpreter code.  Also
	mark `prepared' field of interpreted method.
	* interpret.cc (compile): Use _Jv_AllocBytes.

From-SVN: r59900
This commit is contained in:
Tom Tromey 2002-12-06 23:41:38 +00:00 committed by Tom Tromey
parent 377dfc820f
commit b4d0051bd9
4 changed files with 34 additions and 16 deletions

View file

@ -1,3 +1,11 @@
2002-12-06 Tom Tromey <tromey@redhat.com>
* include/java-interp.h (class _Jv_InterpMethod): Added
JV_MARKOBJ_DECL.
* boehm.cc (_Jv_MarkObj): Consolidated interpreter code. Also
mark `prepared' field of interpreted method.
* interpret.cc (compile): Use _Jv_AllocBytes.
2002-12-05 Andrew Haley <aph@redhat.com>
* gnu/gcj/runtime/natStackTrace.cc (fillInStackTrace): Throw

View file

@ -39,7 +39,6 @@ extern "C"
ptr_t GC_debug_generic_malloc (size_t size, int k, GC_EXTRA_PARAMS);
};
// We must check for plausibility ourselves.
#define MAYBE_MARK(Obj, Top, Limit, Source, Exit) \
Top=GC_MARK_AND_PUSH((GC_PTR)Obj, Top, Limit, (GC_PTR *)Source)
@ -153,19 +152,6 @@ _Jv_MarkObj (void *addr, void *msp, void *msl, void * /* env */)
p = (ptr_t) c->methods[i].signature;
MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, c,
cm2label);
// FIXME: `ncode' entry?
#ifdef INTERPRETER
// The interpreter installs a heap-allocated
// trampoline here, so we'll mark it.
if (_Jv_IsInterpretedClass (c))
{
p = (ptr_t) c->methods[i].ncode;
MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, c,
cm3label);
}
#endif
}
}
@ -221,7 +207,7 @@ _Jv_MarkObj (void *addr, void *msp, void *msl, void * /* env */)
#ifdef INTERPRETER
if (_Jv_IsInterpretedClass (c))
{
_Jv_InterpClass* ic = (_Jv_InterpClass*)c;
_Jv_InterpClass* ic = (_Jv_InterpClass*) c;
p = (ptr_t) ic->interpreted_methods;
MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, ic, cElabel);
@ -231,6 +217,26 @@ _Jv_MarkObj (void *addr, void *msp, void *msl, void * /* env */)
p = (ptr_t) ic->interpreted_methods[i];
MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, ic, \
cFlabel);
// Mark the direct-threaded code.
if ((c->methods[i].accflags
& java::lang::reflect::Modifier::NATIVE) == 0)
{
_Jv_InterpMethod *im
= (_Jv_InterpMethod *) ic->interpreted_methods[i];
if (im)
{
p = (ptr_t) im->prepared;
MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, ic, \
cFlabel);
}
}
// The interpreter installs a heap-allocated trampoline
// here, so we'll mark it.
p = (ptr_t) c->methods[i].ncode;
MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, c,
cm3label);
}
p = (ptr_t) ic->field_initializers;

View file

@ -144,6 +144,10 @@ class _Jv_InterpMethod : public _Jv_MethodBase
friend class gnu::gcj::runtime::StackTrace;
friend void _Jv_PrepareClass(jclass);
#ifdef JV_MARKOBJ_DECL
friend JV_MARKOBJ_DECL;
#endif
};
class _Jv_InterpClass : public java::lang::Class

View file

@ -312,7 +312,7 @@ _Jv_InterpMethod::compile (const void * const *insn_targets)
if (! first_pass)
{
insns = (insn_slot *) _Jv_Malloc (sizeof (insn_slot) * next);
insns = (insn_slot *) _Jv_AllocBytes (sizeof (insn_slot) * next);
next = 0;
}