StackFrameCommandSet.java (executeGetValues): Pass jlong instead of ByteBuffer.
2007-02-08 Kyle Galloway <kgallowa@redhat.com> * classpath/gnu/classpath/jdwp/processor/ StackFrameCommandSet.java (executeGetValues): Pass jlong instead of ByteBuffer. (executeSetValues): Ditto. (executeThisObject): Ditto. * classpath/gnu/classpath/jdwp/processor/ StackFrameCommandSet.class: Rebuilt. * classpath/lib/gnu/classpath/jdwp/VMVirtualMachine.class: Rebuilt. * classpath/lib/gnu/classpath/jdwp/VMFrame.class: Rebuilt. * classpath/lib/gnu/classpath/jdwp/exception/ InvalidFrameException.java: New file. * gnu/classpath/jdwp/VMFrame.java: Added field for thread of frame. (Constructor): New method. * gnu/classpath/jdwp/VMFrame.h: Regenerated. * gnu/classpath/jdwp/VMVirtualMachine.java (getFrame): Changed ByteBuffer to jlong. * gnu/classpath/jdwp/natVMVirtualMachine.cc (getFrame): Implement. * gnu/classpath/jdwp/VMVirtualMachine.h: Regenerated. From-SVN: r121719
This commit is contained in:
parent
e9105edd8c
commit
0588f8c8db
@ -1,4 +1,28 @@
|
||||
2007-02-07 Kyle Galloway <kgallowa@redhat.com>
|
||||
2007-02-08 Kyle Galloway <kgallowa@redhat.com>
|
||||
|
||||
* classpath/gnu/classpath/jdwp/processor/
|
||||
StackFrameCommandSet.java (executeGetValues): Pass jlong instead
|
||||
of ByteBuffer.
|
||||
(executeSetValues): Ditto.
|
||||
(executeThisObject): Ditto.
|
||||
* classpath/gnu/classpath/jdwp/processor/
|
||||
StackFrameCommandSet.class: Rebuilt.
|
||||
* classpath/lib/gnu/classpath/jdwp/VMVirtualMachine.class:
|
||||
Rebuilt.
|
||||
* classpath/lib/gnu/classpath/jdwp/VMFrame.class: Rebuilt.
|
||||
* classpath/lib/gnu/classpath/jdwp/exception/
|
||||
InvalidFrameException.java: New file.
|
||||
* gnu/classpath/jdwp/VMFrame.java: Added field for thread of
|
||||
frame.
|
||||
(Constructor): New method.
|
||||
* gnu/classpath/jdwp/VMFrame.h: Regenerated.
|
||||
* gnu/classpath/jdwp/VMVirtualMachine.java
|
||||
(getFrame): Changed ByteBuffer to jlong.
|
||||
* gnu/classpath/jdwp/natVMVirtualMachine.cc
|
||||
(getFrame): Implement.
|
||||
* gnu/classpath/jdwp/VMVirtualMachine.h: Regenerated.
|
||||
|
||||
2007-02-08 Kyle Galloway <kgallowa@redhat.com>
|
||||
|
||||
* include/java-interp.h (_Jv_InterpFrame): obj_ptr field added
|
||||
to hold "this" pointer for frame.
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* StackFrameCommandSet.java -- class to implement the StackFrame Command Set
|
||||
Copyright (C) 2005 Free Software Foundation
|
||||
Copyright (C) 2005, 2007 Free Software Foundation
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
@ -107,7 +107,8 @@ public class StackFrameCommandSet
|
||||
// has a reference to them. Furthermore they are not ReferenceTypeIds since
|
||||
// these are held permanently and we want these to be held only as long as
|
||||
// the Thread is suspended.
|
||||
VMFrame frame = VMVirtualMachine.getFrame(thread, bb);
|
||||
long frameID = bb.getLong();
|
||||
VMFrame frame = VMVirtualMachine.getFrame(thread, frameID);
|
||||
int slots = bb.getInt();
|
||||
os.writeInt(slots); // Looks pointless but this is the protocol
|
||||
for (int i = 0; i < slots; i++)
|
||||
@ -125,7 +126,8 @@ public class StackFrameCommandSet
|
||||
ObjectId tId = idMan.readObjectId(bb);
|
||||
Thread thread = (Thread) tId.getObject();
|
||||
|
||||
VMFrame frame = VMVirtualMachine.getFrame(thread, bb);
|
||||
long frameID = bb.getLong();
|
||||
VMFrame frame = VMVirtualMachine.getFrame(thread, frameID);
|
||||
|
||||
int slots = bb.getInt();
|
||||
for (int i = 0; i < slots; i++)
|
||||
@ -142,7 +144,8 @@ public class StackFrameCommandSet
|
||||
ObjectId tId = idMan.readObjectId(bb);
|
||||
Thread thread = (Thread) tId.getObject();
|
||||
|
||||
VMFrame frame = VMVirtualMachine.getFrame(thread, bb);
|
||||
long frameID = bb.getLong();
|
||||
VMFrame frame = VMVirtualMachine.getFrame(thread, frameID);
|
||||
|
||||
Object thisObject = frame.getObject();
|
||||
Value.writeTaggedValue(os, thisObject);
|
||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -29,7 +29,7 @@ class gnu::classpath::jdwp::VMFrame : public ::java::lang::Object
|
||||
{
|
||||
|
||||
public:
|
||||
VMFrame();
|
||||
VMFrame(::java::lang::Thread *, jlong, ::gnu::classpath::jdwp::util::Location *);
|
||||
virtual ::gnu::classpath::jdwp::util::Location * getLocation();
|
||||
virtual ::java::lang::Object * getValue(jint);
|
||||
virtual void setValue(jint, ::java::lang::Object *);
|
||||
@ -37,7 +37,8 @@ public:
|
||||
virtual jlong getId();
|
||||
static const jint SIZE = 8;
|
||||
private:
|
||||
::java::lang::Object * __attribute__((aligned(__alignof__( ::java::lang::Object)))) obj;
|
||||
::java::lang::Thread * __attribute__((aligned(__alignof__( ::java::lang::Object)))) thread;
|
||||
::java::lang::Object * obj;
|
||||
::gnu::classpath::jdwp::util::Location * loc;
|
||||
jlong id;
|
||||
public:
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* VMFrame.java -- Reference implementation of VM hooks for JDWP Frame access.
|
||||
Copyright (C) 2005, 2006 Free Software Foundation
|
||||
Copyright (C) 2005, 2006, 2007 Free Software Foundation
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
@ -54,7 +54,10 @@ public class VMFrame
|
||||
*/
|
||||
public static final int SIZE = 8;
|
||||
|
||||
// The object this frame resides in
|
||||
// The thread this frame resides in
|
||||
private Thread thread;
|
||||
|
||||
//The object of this frame
|
||||
private Object obj;
|
||||
|
||||
// The current location of this frame
|
||||
@ -63,6 +66,20 @@ public class VMFrame
|
||||
// id of this frame
|
||||
private long id;
|
||||
|
||||
/**
|
||||
* Create a new VMFrame object.
|
||||
*
|
||||
* @param thr a Thread, the thread this frame is in
|
||||
* @param frame_id a long, the jframeID of this frame
|
||||
* @param frame_loc a Location, the location of this frame
|
||||
*/
|
||||
public VMFrame(Thread thr, long frame_id, Location frame_loc)
|
||||
{
|
||||
thread = thr;
|
||||
id = frame_id;
|
||||
loc = frame_loc;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the current location of the frame.
|
||||
*/
|
||||
@ -84,6 +101,14 @@ public class VMFrame
|
||||
* @param value The value to assign the variable to
|
||||
*/
|
||||
public native void setValue(int slot, Object value);
|
||||
|
||||
/**
|
||||
* Get the thread this frame is in.
|
||||
*/
|
||||
public Thread getThread()
|
||||
{
|
||||
return thread;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the object which is represented by 'this' in the context of the frame,
|
||||
|
@ -1,4 +1,3 @@
|
||||
|
||||
// DO NOT EDIT THIS FILE - it is machine generated -*- c++ -*-
|
||||
|
||||
#ifndef __gnu_classpath_jdwp_VMVirtualMachine__
|
||||
@ -17,59 +16,52 @@ extern "Java"
|
||||
{
|
||||
namespace jdwp
|
||||
{
|
||||
class VMFrame;
|
||||
class VMMethod;
|
||||
class VMVirtualMachine;
|
||||
class VMVirtualMachine;
|
||||
namespace event
|
||||
{
|
||||
class EventRequest;
|
||||
class EventRequest;
|
||||
}
|
||||
namespace util
|
||||
{
|
||||
class MethodResult;
|
||||
class MethodResult;
|
||||
}
|
||||
class VMFrame;
|
||||
class VMMethod;
|
||||
}
|
||||
}
|
||||
}
|
||||
namespace java
|
||||
{
|
||||
namespace nio
|
||||
{
|
||||
class ByteBuffer;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class gnu::classpath::jdwp::VMVirtualMachine : public ::java::lang::Object
|
||||
{
|
||||
|
||||
public:
|
||||
VMVirtualMachine();
|
||||
static void initialize();
|
||||
static void suspendThread(::java::lang::Thread *);
|
||||
static void suspendAllThreads();
|
||||
static void resumeThread(::java::lang::Thread *);
|
||||
static void resumeAllThreads();
|
||||
static jint getSuspendCount(::java::lang::Thread *);
|
||||
static jint getAllLoadedClassesCount();
|
||||
static ::java::util::Iterator * getAllLoadedClasses();
|
||||
static jint getClassStatus(::java::lang::Class *);
|
||||
static JArray< ::gnu::classpath::jdwp::VMMethod * > * getAllClassMethods(::java::lang::Class *);
|
||||
static ::gnu::classpath::jdwp::VMMethod * getClassMethod(::java::lang::Class *, jlong);
|
||||
static ::java::util::ArrayList * getFrames(::java::lang::Thread *, jint, jint);
|
||||
static ::gnu::classpath::jdwp::VMFrame * getFrame(::java::lang::Thread *, ::java::nio::ByteBuffer *);
|
||||
static jint getFrameCount(::java::lang::Thread *);
|
||||
static jint getThreadStatus(::java::lang::Thread *);
|
||||
static ::java::util::ArrayList * getLoadRequests(::java::lang::ClassLoader *);
|
||||
static ::gnu::classpath::jdwp::util::MethodResult * executeMethod(::java::lang::Object *, ::java::lang::Thread *, ::java::lang::Class *, ::java::lang::reflect::Method *, JArray< ::java::lang::Object * > *, jboolean);
|
||||
static ::java::lang::String * getSourceFile(::java::lang::Class *);
|
||||
static void registerEvent(::gnu::classpath::jdwp::event::EventRequest *);
|
||||
static void unregisterEvent(::gnu::classpath::jdwp::event::EventRequest *);
|
||||
static void clearEvents(jbyte);
|
||||
VMVirtualMachine ();
|
||||
static void initialize ();
|
||||
static void suspendThread (::java::lang::Thread *);
|
||||
static void suspendAllThreads ();
|
||||
static void resumeThread (::java::lang::Thread *);
|
||||
static void resumeAllThreads ();
|
||||
static jint getSuspendCount (::java::lang::Thread *);
|
||||
static jint getAllLoadedClassesCount ();
|
||||
static ::java::util::Iterator *getAllLoadedClasses ();
|
||||
static jint getClassStatus (::java::lang::Class *);
|
||||
static JArray< ::gnu::classpath::jdwp::VMMethod *> *getAllClassMethods (::java::lang::Class *);
|
||||
static ::gnu::classpath::jdwp::VMMethod *getClassMethod (::java::lang::Class *, jlong);
|
||||
static ::java::util::ArrayList *getFrames (::java::lang::Thread *, jint, jint);
|
||||
static ::gnu::classpath::jdwp::VMFrame *getFrame (::java::lang::Thread *, jlong);
|
||||
static jint getFrameCount (::java::lang::Thread *);
|
||||
static jint getThreadStatus (::java::lang::Thread *);
|
||||
static ::java::util::ArrayList *getLoadRequests (::java::lang::ClassLoader *);
|
||||
static ::gnu::classpath::jdwp::util::MethodResult *executeMethod (::java::lang::Object *, ::java::lang::Thread *, ::java::lang::Class *, ::java::lang::reflect::Method *, JArray< ::java::lang::Object *> *, jboolean);
|
||||
static ::java::lang::String *getSourceFile (::java::lang::Class *);
|
||||
static void registerEvent (::gnu::classpath::jdwp::event::EventRequest *);
|
||||
static void unregisterEvent (::gnu::classpath::jdwp::event::EventRequest *);
|
||||
static void clearEvents (jbyte);
|
||||
private:
|
||||
static ::java::util::Hashtable * _jdwp_suspend_counts;
|
||||
static ::java::util::Hashtable *_jdwp_suspend_counts;
|
||||
public:
|
||||
|
||||
static ::java::lang::Class class$;
|
||||
};
|
||||
|
||||
#endif // __gnu_classpath_jdwp_VMVirtualMachine__
|
||||
#endif /* __gnu_classpath_jdwp_VMVirtualMachine__ */
|
||||
|
@ -1,7 +1,7 @@
|
||||
/* VMVirtualMachine.java -- A reference implementation of a JDWP virtual
|
||||
machine
|
||||
|
||||
Copyright (C) 2005, 2006 Free Software Foundation
|
||||
Copyright (C) 2005, 2006, 2007 Free Software Foundation
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
@ -243,7 +243,7 @@ public class VMVirtualMachine
|
||||
* @param bb buffer containing the frame's ID
|
||||
* @return the desired frame
|
||||
*/
|
||||
public static native VMFrame getFrame (Thread thread, ByteBuffer bb)
|
||||
public static native VMFrame getFrame (Thread thread, long frameID)
|
||||
throws JdwpException;
|
||||
|
||||
/**
|
||||
|
36
libjava/gnu/classpath/jdwp/exception/InvalidFrameException.h
Normal file
36
libjava/gnu/classpath/jdwp/exception/InvalidFrameException.h
Normal file
@ -0,0 +1,36 @@
|
||||
|
||||
// DO NOT EDIT THIS FILE - it is machine generated -*- c++ -*-
|
||||
|
||||
#ifndef __gnu_classpath_jdwp_exception_InvalidFrameException__
|
||||
#define __gnu_classpath_jdwp_exception_InvalidFrameException__
|
||||
|
||||
#pragma interface
|
||||
|
||||
#include <gnu/classpath/jdwp/exception/JdwpException.h>
|
||||
extern "Java"
|
||||
{
|
||||
namespace gnu
|
||||
{
|
||||
namespace classpath
|
||||
{
|
||||
namespace jdwp
|
||||
{
|
||||
namespace exception
|
||||
{
|
||||
class InvalidFrameException;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class gnu::classpath::jdwp::exception::InvalidFrameException : public ::gnu::classpath::jdwp::exception::JdwpException
|
||||
{
|
||||
|
||||
public:
|
||||
InvalidFrameException(jlong);
|
||||
InvalidFrameException(::java::lang::String *);
|
||||
static ::java::lang::Class class$;
|
||||
};
|
||||
|
||||
#endif // __gnu_classpath_jdwp_exception_InvalidFrameException__
|
@ -14,6 +14,8 @@ details. */
|
||||
#include <jvm.h>
|
||||
#include <jvmti.h>
|
||||
|
||||
#include <java-interp.h>
|
||||
|
||||
#include <java/lang/Class.h>
|
||||
#include <java/lang/ClassLoader.h>
|
||||
#include <java/lang/Integer.h>
|
||||
@ -21,6 +23,7 @@ details. */
|
||||
#include <java/lang/StringBuilder.h>
|
||||
#include <java/lang/Thread.h>
|
||||
#include <java/nio/ByteBuffer.h>
|
||||
#include <java/nio/ByteBufferImpl.h>
|
||||
#include <java/util/ArrayList.h>
|
||||
#include <java/util/Collection.h>
|
||||
#include <java/util/Hashtable.h>
|
||||
@ -39,6 +42,7 @@ details. */
|
||||
#include <gnu/classpath/jdwp/event/VmInitEvent.h>
|
||||
#include <gnu/classpath/jdwp/event/filters/IEventFilter.h>
|
||||
#include <gnu/classpath/jdwp/event/filters/LocationOnlyFilter.h>
|
||||
#include <gnu/classpath/jdwp/exception/InvalidFrameException.h>
|
||||
#include <gnu/classpath/jdwp/exception/InvalidLocationException.h>
|
||||
#include <gnu/classpath/jdwp/exception/InvalidMethodException.h>
|
||||
#include <gnu/classpath/jdwp/exception/JdwpInternalErrorException.h>
|
||||
@ -432,9 +436,50 @@ gnu::classpath::jdwp::VMVirtualMachine::getFrames (MAYBE_UNUSED Thread *thread,
|
||||
|
||||
gnu::classpath::jdwp::VMFrame *
|
||||
gnu::classpath::jdwp::VMVirtualMachine::
|
||||
getFrame (MAYBE_UNUSED Thread *thread, MAYBE_UNUSED::java::nio::ByteBuffer *bb)
|
||||
getFrame (Thread *thread, jlong frameID)
|
||||
{
|
||||
return NULL;
|
||||
using namespace gnu::classpath::jdwp::exception;
|
||||
|
||||
_Jv_Frame *vm_frame = (_Jv_Frame *) thread->frame;
|
||||
jint depth = 0;
|
||||
_Jv_Frame *frame = reinterpret_cast<_Jv_Frame *> (frameID);
|
||||
|
||||
// We need to find the stack depth of the frame, so search through the call
|
||||
// stack to find it. This also checks for a valid frameID.
|
||||
while (vm_frame != frame)
|
||||
{
|
||||
vm_frame = vm_frame->next;
|
||||
depth++;
|
||||
if (vm_frame == NULL)
|
||||
throw new InvalidFrameException (frameID);
|
||||
}
|
||||
|
||||
Location *loc = NULL;
|
||||
jvmtiFrameInfo info;
|
||||
jvmtiError jerr;
|
||||
jint num_frames;
|
||||
jclass klass;
|
||||
|
||||
// Get the info for the frame of interest
|
||||
jerr = _jdwp_jvmtiEnv->GetStackTrace (thread, depth, 1, &info, &num_frames);
|
||||
|
||||
if (jerr != JVMTI_ERROR_NONE)
|
||||
throw_jvmti_error (jerr);
|
||||
|
||||
jerr = _jdwp_jvmtiEnv->GetMethodDeclaringClass (info.method, &klass);
|
||||
|
||||
if (jerr != JVMTI_ERROR_NONE)
|
||||
throw_jvmti_error (jerr);
|
||||
|
||||
VMMethod *meth
|
||||
= getClassMethod (klass, reinterpret_cast<jlong> (info.method));
|
||||
|
||||
if (info.location == -1)
|
||||
loc = new Location (meth, 0);
|
||||
else
|
||||
loc = new Location (meth, info.location);
|
||||
|
||||
return new VMFrame (thread, reinterpret_cast<jlong> (vm_frame), loc);
|
||||
}
|
||||
|
||||
jint
|
||||
|
Loading…
Reference in New Issue
Block a user