java-interp.h (_Jv_InterpMethod::run_debug): New method.

2006-08-15  Kyle Galloway  <kgallowa@redhat.com>

  * include/java-interp.h (_Jv_InterpMethod::run_debug): New method.
  * interpret.cc: Added placeholder for debug variable type info to STORE*
  macros.
  (_Jv_InterpMethod::run_debug): New method.
  (_Jv_InterpMethod::run_sync_object_debug): New method.
  (_Jv_InterpMethod::run_sync_class_debug): New method.
  (_Jv_InterpMethod::run_normal_debug): New method.
  (_Jv_InterpMethod::run_class_debug): New method.
  (_Jv_InterpMethod::ncode ()): Changed to select either debug or normal
  versions of these functions.
  * interpret-run.cc: New file, holds contents of old 	
  _Jv_InterpMethod::run method.
  * stacktrace.cc (_Jv_StackTrace::UnwindTraceFn): Changed to select
  appropriate function for debug or normal mode.

From-SVN: r116167
This commit is contained in:
Kyle Galloway 2006-08-15 20:40:10 +00:00
parent 4adb785d44
commit 50ac25005f
4 changed files with 2671 additions and 2514 deletions

View File

@ -176,21 +176,31 @@ class _Jv_InterpMethod : public _Jv_MethodBase
static void run_synch_object (ffi_cif*, void*, ffi_raw*, void*);
static void run_class (ffi_cif*, void*, ffi_raw*, void*);
static void run_synch_class (ffi_cif*, void*, ffi_raw*, void*);
static void run_normal_debug (ffi_cif*, void*, ffi_raw*, void*);
static void run_synch_object_debug (ffi_cif*, void*, ffi_raw*, void*);
static void run_class_debug (ffi_cif*, void*, ffi_raw*, void*);
static void run_synch_class_debug (ffi_cif*, void*, ffi_raw*, void*);
static void run (void*, ffi_raw *, _Jv_InterpMethod *);
static void run (void *, ffi_raw *, _Jv_InterpMethod *);
static void run_debug (void *, ffi_raw *, _Jv_InterpMethod *);
// Returns source file line number for given PC value, or -1 if line
// number info is unavailable.
int get_source_line(pc_t mpc);
#ifdef DIRECT_THREADED
// Convenience function for indexing bytecode PC/insn slots in
// line tables for JDWP
jlong insn_index (pc_t pc);
#endif
public:
public:
/* Get the line table for this method.
* start is the lowest index in the method
* end is the highest index in the method

2508
libjava/interpret-run.cc Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -24,6 +24,7 @@ details. */
#include <java/security/AccessController.h>
#include <java/util/ArrayList.h>
#include <java/util/IdentityHashMap.h>
#include <gnu/classpath/jdwp/Jdwp.h>
#include <gnu/java/lang/MainThread.h>
#include <gnu/gcj/runtime/NameFinder.h>
#include <gnu/gcj/runtime/StringBuffer.h>
@ -113,7 +114,13 @@ _Jv_StackTrace::UnwindTraceFn (struct _Unwind_Context *context, void *state_ptr)
// correspondance between call frames in the interpreted stack and occurances
// of _Jv_InterpMethod::run() on the native stack.
#ifdef INTERPRETER
void *interp_run = (void *) &_Jv_InterpMethod::run;
void *interp_run = NULL;
if (::gnu::classpath::jdwp::Jdwp::isDebugging)
interp_run = (void *) &_Jv_InterpMethod::run_debug;
else
interp_run = (void *) &_Jv_InterpMethod::run;
if (func_addr == UNWRAP_FUNCTION_DESCRIPTOR (interp_run))
{
state->frames[pos].type = frame_interpreter;