aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Tromey <tromey@redhat.com>2002-12-06 23:41:38 +0000
committerTom Tromey <tromey@redhat.com>2002-12-06 23:41:38 +0000
commit5d1a9d1503264d9581f9b0bf09133b0987e230eb (patch)
tree17255e0977815a30bda684d2dba5ea831676898f
parent441153cd1d7a4aa8725d29c57024503820642e18 (diff)
* 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. git-svn-id: https://gcc.gnu.org/svn/gcc/trunk@59900 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--libjava/ChangeLog8
-rw-r--r--libjava/boehm.cc36
-rw-r--r--libjava/include/java-interp.h4
-rw-r--r--libjava/interpret.cc2
4 files changed, 34 insertions, 16 deletions
diff --git a/libjava/ChangeLog b/libjava/ChangeLog
index 34125a36ab8..3e3ba7842d2 100644
--- a/libjava/ChangeLog
+++ b/libjava/ChangeLog
@@ -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
diff --git a/libjava/boehm.cc b/libjava/boehm.cc
index 466c9223ac8..90796f2ddf0 100644
--- a/libjava/boehm.cc
+++ b/libjava/boehm.cc
@@ -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;
diff --git a/libjava/include/java-interp.h b/libjava/include/java-interp.h
index ef2b5206cdb..a44db38ca85 100644
--- a/libjava/include/java-interp.h
+++ b/libjava/include/java-interp.h
@@ -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
diff --git a/libjava/interpret.cc b/libjava/interpret.cc
index bc324b13ba9..9791b4a5cd8 100644
--- a/libjava/interpret.cc
+++ b/libjava/interpret.cc
@@ -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;
}