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:
parent
377dfc820f
commit
b4d0051bd9
4 changed files with 34 additions and 16 deletions
|
@ -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>
|
2002-12-05 Andrew Haley <aph@redhat.com>
|
||||||
|
|
||||||
* gnu/gcj/runtime/natStackTrace.cc (fillInStackTrace): Throw
|
* gnu/gcj/runtime/natStackTrace.cc (fillInStackTrace): Throw
|
||||||
|
|
|
@ -39,7 +39,6 @@ extern "C"
|
||||||
ptr_t GC_debug_generic_malloc (size_t size, int k, GC_EXTRA_PARAMS);
|
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) \
|
#define MAYBE_MARK(Obj, Top, Limit, Source, Exit) \
|
||||||
Top=GC_MARK_AND_PUSH((GC_PTR)Obj, Top, Limit, (GC_PTR *)Source)
|
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;
|
p = (ptr_t) c->methods[i].signature;
|
||||||
MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, c,
|
MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, c,
|
||||||
cm2label);
|
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
|
#ifdef INTERPRETER
|
||||||
if (_Jv_IsInterpretedClass (c))
|
if (_Jv_IsInterpretedClass (c))
|
||||||
{
|
{
|
||||||
_Jv_InterpClass* ic = (_Jv_InterpClass*)c;
|
_Jv_InterpClass* ic = (_Jv_InterpClass*) c;
|
||||||
|
|
||||||
p = (ptr_t) ic->interpreted_methods;
|
p = (ptr_t) ic->interpreted_methods;
|
||||||
MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, ic, cElabel);
|
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];
|
p = (ptr_t) ic->interpreted_methods[i];
|
||||||
MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, ic, \
|
MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, ic, \
|
||||||
cFlabel);
|
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;
|
p = (ptr_t) ic->field_initializers;
|
||||||
|
|
|
@ -144,6 +144,10 @@ class _Jv_InterpMethod : public _Jv_MethodBase
|
||||||
friend class gnu::gcj::runtime::StackTrace;
|
friend class gnu::gcj::runtime::StackTrace;
|
||||||
|
|
||||||
friend void _Jv_PrepareClass(jclass);
|
friend void _Jv_PrepareClass(jclass);
|
||||||
|
|
||||||
|
#ifdef JV_MARKOBJ_DECL
|
||||||
|
friend JV_MARKOBJ_DECL;
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
class _Jv_InterpClass : public java::lang::Class
|
class _Jv_InterpClass : public java::lang::Class
|
||||||
|
|
|
@ -312,7 +312,7 @@ _Jv_InterpMethod::compile (const void * const *insn_targets)
|
||||||
|
|
||||||
if (! first_pass)
|
if (! first_pass)
|
||||||
{
|
{
|
||||||
insns = (insn_slot *) _Jv_Malloc (sizeof (insn_slot) * next);
|
insns = (insn_slot *) _Jv_AllocBytes (sizeof (insn_slot) * next);
|
||||||
next = 0;
|
next = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue