diff options
Diffstat (limited to 'libjava')
| -rw-r--r-- | libjava/ChangeLog | 8 | ||||
| -rw-r--r-- | libjava/boehm.cc | 36 | ||||
| -rw-r--r-- | libjava/include/java-interp.h | 4 | ||||
| -rw-r--r-- | libjava/interpret.cc | 2 | 
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;  	}  | 

