You are viewing a plain text version of this content. The canonical link for it is here.
Posted to kato-commits@incubator.apache.org by sp...@apache.org on 2009/06/22 09:03:25 UTC
svn commit: r787172 - in
/incubator/kato/branches/experimental/maven_restructure/org.apache.kato.native/kato.native.pyjvmti/src:
pyjvmti.c pyjvmti.h pyjvmti_convert.h
Author: spoole
Date: Mon Jun 22 09:03:25 2009
New Revision: 787172
URL: http://svn.apache.org/viewvc?rev=787172&view=rev
Log:
updated pyjvmti code to compile on windows
Modified:
incubator/kato/branches/experimental/maven_restructure/org.apache.kato.native/kato.native.pyjvmti/src/pyjvmti.c
incubator/kato/branches/experimental/maven_restructure/org.apache.kato.native/kato.native.pyjvmti/src/pyjvmti.h
incubator/kato/branches/experimental/maven_restructure/org.apache.kato.native/kato.native.pyjvmti/src/pyjvmti_convert.h
Modified: incubator/kato/branches/experimental/maven_restructure/org.apache.kato.native/kato.native.pyjvmti/src/pyjvmti.c
URL: http://svn.apache.org/viewvc/incubator/kato/branches/experimental/maven_restructure/org.apache.kato.native/kato.native.pyjvmti/src/pyjvmti.c?rev=787172&r1=787171&r2=787172&view=diff
==============================================================================
--- incubator/kato/branches/experimental/maven_restructure/org.apache.kato.native/kato.native.pyjvmti/src/pyjvmti.c (original)
+++ incubator/kato/branches/experimental/maven_restructure/org.apache.kato.native/kato.native.pyjvmti/src/pyjvmti.c Mon Jun 22 09:03:25 2009
@@ -20,8 +20,7 @@
* To help the python user get benefit from the jvmti functions, common jni functions are
* also bridged
*
-**/
-
+**/
#include <Python.h>
#include "jni.h"
#include "jvmti.h"
@@ -40,11 +39,15 @@
static PyObject *exception_callback = NULL;
static jrawMonitorID lock=NULL;
+
+
+
static void enterLock(jvmtiEnv *jvmti)
{
jvmtiError error;
+ jint rc=0;
error = (*jvmti)->RawMonitorEnter(jvmti, lock);
if(error!=JNI_OK) {
@@ -55,7 +58,7 @@
jvmtiptr=jvmti;
oldjniptr=jniptr;
- jint rc = (*vmptr)->GetEnv(vmptr, (void **)&jniptr, JNI_VERSION_1_6);
+ rc = (*vmptr)->GetEnv(vmptr, (void **)&jniptr, JNI_VERSION_1_6);
if (rc != JNI_OK) {
printf("unable to load jni environment");
@@ -83,15 +86,19 @@
}
static PyObject * jvmti_getPhase(PyObject *self, PyObject *args) {
- CHECK_VALID();
+
jvmtiPhase phase;
+ jvmtiError err;
+ int result=0;
- jvmtiError err=(*jvmtiptr)->GetPhase(jvmtiptr,&phase);
+ CHECK_VALID();
+
+ err=(*jvmtiptr)->GetPhase(jvmtiptr,&phase);
CHECK_OK("get phase");
- int result=phase;
+ result=phase;
return Py_BuildValue("i", result);
@@ -126,22 +133,23 @@
jlocation locationj, jobject exceptionj, jmethodID catch_methodj,
jlocation catch_locationj) {
-
- if(exception_callback == NULL) return; // nothing to call
-
- enterLock(jvmti_env);
-
-
PyObject *arglist=NULL;
PyObject *result=NULL;
- int thread=JTHREAD2INT(threadj);
+ int thread=JTHREAD2INT(threadj);
int method=JMETHOD2INT(methodj);
long location=JLOCATION2LONG(locationj);
int exception=JOBJECT2INT(exceptionj);
int catch_method=JMETHOD2INT(catch_methodj);
long catch_location=JLOCATION2LONG(locationj);
+ if(exception_callback == NULL) return; // nothing to call
+
+ enterLock(jvmti_env);
+
+
+
+
arglist = Py_BuildValue("(iiiiliil)",vmptr,jvmti_env,thread,method,location,exception,catch_method,catch_location);
result = PyObject_CallObject(exception_callback, arglist);
if(PyErr_Occurred()) {
@@ -181,172 +189,197 @@
}
-#define getStringValue(FUNC,DESC) \
- CHECK_VALID(); \
-\
- int objectID=0; \
-\
- PyArg_ParseTuple(args, "i", &objectID);\
-\
- jobject object=(jobject)objectID;\
- char *result=NULL;\
-\
- jvmtiError err=(*jvmtiptr)->FUNC(jvmtiptr,object,&result);\
-\
- CHECK_OK(DESC);\
- PyObject* string=Py_BuildValue("s", result); \
- DEALLOC(result); \
+#define getStringValue(FUNC,DESC) \
+ \
+ int objectID=0; \
+ char *result=NULL; \
+ jobject object; \
+ PyObject* string=NULL; \
+ jvmtiError err; \
+ \
+ CHECK_VALID(); \
+ \
+ PyArg_ParseTuple(args, "i", &objectID); \
+ \
+ object=(jobject)objectID; \
+ \
+ err=(*jvmtiptr)->FUNC(jvmtiptr,object,&result);\
+ \
+ CHECK_OK(DESC); \
+ string=Py_BuildValue("s", result); \
+ DEALLOC(result); \
return string;
-
-#define getFieldValue(FUNC,TYPE,PTYPE,DESC) \
- CHECK_VALID();\
-\
- int objectID=0; \
- int fieldID=0; \
-\
+#define getFieldValue(FUNC,TYPE,PTYPE,DESC) \
+ \
+ \
+ int objectID=0; \
+ int fieldID=0; \
+ jobject object=0; \
+ jfieldID field=0; \
+ TYPE result=0; \
+ \
+ CHECK_VALID(); \
+ \
PyArg_ParseTuple(args, "ii",&fieldID,&objectID);\
- jobject object=(jobject)objectID;\
- jfieldID field=(jfieldID)fieldID;\
- \
- TYPE result=0;\
+ object=(jobject)objectID; \
+ field=(jfieldID)fieldID; \
+ \
result=(*jniptr)->FUNC(jniptr,object,field);\
- return Py_BuildValue(PTYPE, result);
+ \
+ return Py_BuildValue(PTYPE, result);
-#define getValue(FUNC,SRCTYPE,TYPE,PTYPE,DESC) \
- CHECK_VALID();\
-\
- int objectID=0; \
-\
- PyArg_ParseTuple(args, "i", &objectID);\
-\
- SRCTYPE object=(SRCTYPE)objectID;\
- TYPE result=0;\
-\
- jvmtiError err=(*jvmtiptr)->FUNC(jvmtiptr,object,&result);\
-\
- CHECK_OK(DESC);\
-\
- return Py_BuildValue(PTYPE, result);
-
-#define getStaticValue(FUNC,TYPE,PTYPE) \
- CHECK_VALID(); \
- \
- int clazzID=0; \
- int fieldID=0; \
+
+#define getValue(FUNC,SRCTYPE,TYPE,PTYPE,DESC) \
+ \
+ int objectID=0; \
+ SRCTYPE object; \
+ TYPE result=0; \
+ jvmtiError err; \
+ CHECK_VALID(); \
+ \
+ PyArg_ParseTuple(args, "i", &objectID); \
+ \
+ object=(SRCTYPE)objectID; \
+ \
+ err=(*jvmtiptr)->FUNC(jvmtiptr,object,&result);\
+ \
+ CHECK_OK(DESC); \
+ \
+ return Py_BuildValue(PTYPE, result);
+
+
+#define getStaticValue(FUNC,TYPE,PTYPE) \
+ \
+ int clazzID=0; \
+ int fieldID=0; \
+ jclass clazz; \
+ jfieldID field; \
+ TYPE result; \
+ PyObject *pyresult=NULL; \
+ \
+ CHECK_VALID(); \
+ \
PyArg_ParseTuple(args, "ii", &clazzID,&fieldID);\
\
- TRACE("clazzid=%d ",clazzID); \
- TRACE("fieldID=%d\n",fieldID); \
- jclass clazz=clazzID;\
- jfieldID field=fieldID;\
- \
- TYPE result=(*jniptr)->FUNC(jniptr,clazz,field);\
+ clazz=INT2JCLASS(clazzID); \
+ field=INT2JFIELD(fieldID); \
+ \
+ result=(*jniptr)->FUNC(jniptr,clazz,field); \
\
- PyObject *pyresult=Py_BuildValue(PTYPE, result); \
- TRACE_EXIT(); \
+ pyresult=Py_BuildValue(PTYPE, result); \
+ TRACE_EXIT(); \
return pyresult;
-#define getList(FUNC,TYPE,DESC) \
- CHECK_VALID(); \
- \
- int ID=0; \
- \
- PyArg_ParseTuple(args, "i", &ID); \
-\
- jobject object=(jobject)ID; \
- jint countj=0;\
- TYPE *entries=NULL; \
-\
- jvmtiError err=(*jvmtiptr)->FUNC(jvmtiptr,object,&countj,&entries);\
-\
- CHECK_OK(DESC);\
-\
- int count=countj;\
- PyObject* list= PyList_New(count);\
-\
- int i=0;\
- for(i=0;i<count;i++) {\
- TYPE entryid=entries[i];\
- PyObject *value= Py_BuildValue("i",entryid);\
- PyList_SetItem(list,i,value);\
- }\
-\
- DEALLOC(entries);\
-\
- return list;\
-
+#define getList(FUNC,TYPE,DESC) \
+ \
+ int ID=0; \
+ jint countj=0; \
+ TYPE *entries=NULL; \
+ jobject object; \
+ jvmtiError err; \
+ int count=0; \
+ int i=0; \
+ PyObject* list=NULL; \
+ \
+ CHECK_VALID(); \
+ \
+ PyArg_ParseTuple(args, "i", &ID); \
+ \
+ object=(jobject)ID; \
+ \
+ err=(*jvmtiptr)->FUNC(jvmtiptr,object,&countj,&entries);\
+ \
+ CHECK_OK(DESC); \
+ count=countj; \
+ list= PyList_New(count); \
+ for(i=0;i<count;i++) { \
+ TYPE entryid; \
+ PyObject *value=NULL; \
+ entryid=entries[i]; \
+ value=Py_BuildValue("i",entryid); \
+ PyList_SetItem(list,i,value); \
+ } \
+ \
+ DEALLOC(entries); \
+ \
+ return list;
-#define getArray(FUNC,JNITYPE,CTYPE,PYTYPE) \
- CHECK_VALID(); \
-\
- int arrayid=0;\
- int offset=0; \
- int length=0; \
+#define getArray(FUNC,JNITYPE,CTYPE,PYTYPE) \
+ \
+ int arrayid=0; \
+ int offset=0; \
+ int length=0; \
+ jsize sizej; \
+ int i=0,size=0; \
+ PyObject* list=NULL; \
+ jint offsetj; \
+ JNITYPE##Array array; \
+ JNITYPE *result=NULL; \
+ CHECK_VALID(); \
+ \
PyArg_ParseTuple(args, "i|ii", &arrayid,&offset,&length);\
- if(length>0) { \
- getArrayRegion(FUNC,JNITYPE,CTYPE,PYTYPE)\
- }\
- else {\
- getFullArray(FUNC,JNITYPE,CTYPE,PYTYPE) \
- } \
- return NULL;
-
-#define getFullArray(FUNC,JNITYPE,CTYPE,PYTYPE) \
-\
- JNITYPE##Array array=(JNITYPE##Array)arrayid;\
- jsize sizej=(*jniptr)->GetArrayLength(jniptr,array);\
- int size=sizej;\
- PyObject* list= PyList_New(size);\
- if(size>0) {\
- JNITYPE *result=(*jniptr)->Get##FUNC##ArrayElements(jniptr,array,0);\
- if(result==NULL) ERROR(-100);\
- int i=0; \
- for (i=0; i<size; i++) { \
- CTYPE entry=result[i]; \
- PyList_SetItem(list,i,Py_BuildValue(PYTYPE,entry));\
- }\
- } \
- return list;
-
-
-#define getArrayRegion(FUNC,JNITYPE,CTYPE,PYTYPE) \
-\
- JNITYPE##Array array=(JNITYPE##Array)arrayid;\
- int size=length;\
- jint sizej=size; \
- jint offsetj=offset;\
- PyObject* list= PyList_New(size);\
- if(size==0) return list; \
- JNITYPE *result=(JNITYPE *)malloc( sizeof(JNITYPE) * size); \
- if(result==NULL) ERROR(-101); \
+ \
+ if(length>0) { \
+ array=(JNITYPE##Array)arrayid; \
+ size=length; \
+ sizej=size; \
+ offsetj=offset; \
+ list= PyList_New(size); \
+ if(size==0) return list; \
+ result=(JNITYPE *)malloc( sizeof(JNITYPE) * size); \
+ if(result==NULL) ERROR(-101); \
(*jniptr)->Get##FUNC##ArrayRegion(jniptr,array, offsetj, sizej, result); \
- int i=0; \
- for (i=0; i<size; i++) { \
- CTYPE entry=result[i]; \
+ \
+ for (i=0; i<size; i++) { \
+ CTYPE entry=result[i]; \
PyList_SetItem(list,i,Py_BuildValue(PYTYPE,entry));\
- }\
- free(result);\
- return list;
+ } \
+ free(result); \
+ return list; \
+ \
+ } \
+ else { \
+ array=(JNITYPE##Array)arrayid; \
+ sizej=(*jniptr)->GetArrayLength(jniptr,array); \
+ size=sizej; \
+ list= PyList_New(size); \
+ if(size>0) { \
+ result=(*jniptr)->Get##FUNC##ArrayElements(jniptr,array,0);\
+ if(result==NULL) ERROR(-100); \
+ \
+ for (i=0; i<size; i++) { \
+ CTYPE entry=result[i]; \
+ PyList_SetItem(list,i,Py_BuildValue(PYTYPE,entry));\
+ } \
+ } \
+ return list; \
+ } \
+ return NULL;
+
static char * getErrorMessage(jvmtiError err,char *usrmsg) {
char *msg=NULL;
+ jvmtiError e;
+ int length=0;
+ char *result=NULL;
+
if(jvmtiptr==NULL) {
msg="UNABLE TO RESOLVE";
}
else {
- jvmtiError e=(*jvmtiptr)->GetErrorName(jvmtiptr,err,&msg);
- if(e!=JNI_OK) msg="unknown message";
+ e=(*jvmtiptr)->GetErrorName(jvmtiptr,err,&msg);
+ if(e!=JNI_OK) msg="unknown message";
}
- int length=strlen(msg)+50+strlen(usrmsg);
- char *result=malloc(length);
+ length=strlen(msg)+50+strlen(usrmsg);
+ result=malloc(length);
sprintf(result,"failed %s (%i) %s",usrmsg,err,msg);
@@ -354,77 +387,83 @@
}
static PyObject * jvmti_getStaticBooleanField(PyObject *self, PyObject *args) {
- TRACE_ENTER();
+
getStaticValue(GetStaticBooleanField,jboolean,"i")
- TRACE_EXIT();
+
}
static PyObject * jvmti_getStaticByteField(PyObject *self, PyObject *args) {
- TRACE_ENTER();
+
getStaticValue(GetStaticByteField,jbyte,"h")
- TRACE_EXIT();
+
}
static PyObject * jvmti_getStaticCharField(PyObject *self, PyObject *args) {
- TRACE_ENTER();
+
getStaticValue(GetStaticCharField,jchar,"c")
}
static PyObject * jvmti_getStaticShortField(PyObject *self, PyObject *args) {
- TRACE_ENTER();
+
getStaticValue(GetStaticShortField,jshort,"h")
}
static PyObject * jvmti_getStaticIntField(PyObject *self, PyObject *args) {
- TRACE_ENTER();
+
getStaticValue(GetStaticIntField,jshort,"i")
}
static PyObject * jvmti_getStaticLongField(PyObject *self, PyObject *args) {
- TRACE_ENTER();
+
getStaticValue(GetStaticLongField,jlong,"l")
}
static PyObject * jvmti_getStaticFloatField(PyObject *self, PyObject *args) {
- TRACE_ENTER();
+
getStaticValue(GetStaticFloatField,jfloat,"f")
}
static PyObject * jvmti_getStaticDoubleField(PyObject *self, PyObject *args) {
- TRACE_ENTER();
+
getStaticValue(GetStaticDoubleField,jdouble,"f")
}
static PyObject * jvmti_getStaticObjectField(PyObject *self, PyObject *args) {
- TRACE_ENTER();
+
getStaticValue(GetStaticObjectField,jobject,"i")
- TRACE_EXIT();
+
}
static PyObject * jvmti_getArrayLength(PyObject *self, PyObject *args) {
+
+ int arrayid=0;
+ jarray array;
+ jsize result;
+
TRACE_ENTER();
CHECK_VALID();
- int arrayid=0;
-
PyArg_ParseTuple(args, "i", &arrayid);
TRACE("arrayid=%d\n",arrayid);
- jarray array=INT2JARRAY(arrayid);
+ array=INT2JARRAY(arrayid);
- jsize result=(*jniptr)->GetArrayLength(jniptr,array);
+ result=(*jniptr)->GetArrayLength(jniptr,array);
return Py_BuildValue("i", result);
}
static PyObject * jvmti_getStringUTFChars(PyObject *self, PyObject *args) {
- TRACE_ENTER();
- CHECK_VALID();
-
+
int objid=0;
const char *utf;
jboolean iscopy;
+ jstring string;
+ PyObject *result=NULL;
+
+ TRACE_ENTER();
+ CHECK_VALID();
PyArg_ParseTuple(args, "i", &objid);
- jstring string=(jstring)objid;
+ string=(jstring)objid;
utf=(*jniptr)->GetStringUTFChars(jniptr,string,&iscopy);
- PyObject *result=Py_BuildValue("s",utf);
+ result=Py_BuildValue("s",utf);
if(iscopy==JNI_TRUE) {
@@ -437,18 +476,22 @@
static PyObject * jvmti_getObjectArrayElement(PyObject *self, PyObject *args) {
- TRACE_ENTER();
- CHECK_VALID();
-
+
int arrayid=0;
int index=0;
+ jarray array;
+ jsize element;
+ jobject result;
+
+ TRACE_ENTER();
+ CHECK_VALID();
PyArg_ParseTuple(args, "ii", &arrayid,&index);
- jarray array=(jarray)arrayid;
- jsize element=(jsize)index;
+ array=(jarray)arrayid;
+ element=(jsize)index;
- jobject result=(*jniptr)->GetObjectArrayElement(jniptr,array, element);
+ result=(*jniptr)->GetObjectArrayElement(jniptr,array, element);
return Py_BuildValue("i", result);
@@ -457,89 +500,91 @@
static PyObject * jvmti_getObjectField(PyObject *self, PyObject *args) {
- TRACE_ENTER();
+
getFieldValue(GetObjectField,jobject,"i","get obj field")
}
static PyObject * jvmti_getBooleanField(PyObject *self, PyObject *args) {
- TRACE_ENTER();
+
getFieldValue(GetBooleanField,jboolean,"i","get boolean field")
}
static PyObject * jvmti_getByteField(PyObject *self, PyObject *args) {
- TRACE_ENTER();
+
getFieldValue(GetByteField,jbyte,"i","get byte field")
}
static PyObject * jvmti_getCharField(PyObject *self, PyObject *args) {
- TRACE_ENTER();
+
getFieldValue(GetCharField,jchar,"i","get char field")
}
static PyObject * jvmti_getShortField(PyObject *self, PyObject *args) {
- TRACE_ENTER();
+
getFieldValue(GetShortField,jshort,"i","get short field")
}
static PyObject * jvmti_getIntField(PyObject *self, PyObject *args) {
- TRACE_ENTER();
+
getFieldValue(GetIntField,jint,"i","get int field")
}
static PyObject * jvmti_getLongField(PyObject *self, PyObject *args) {
- TRACE_ENTER();
+
getFieldValue(GetLongField,jlong,"l","get long field")
}
static PyObject * jvmti_getFloatField(PyObject *self, PyObject *args) {
- TRACE_ENTER();
+
getFieldValue(GetFloatField,jfloat,"f","get float field")
}
static PyObject * jvmti_getDoubleField(PyObject *self, PyObject *args) {
- TRACE_ENTER();
+
getFieldValue(GetDoubleField,jlong,"f","get double field")
}
static PyObject * jvmti_getIntArrayElements(PyObject *self, PyObject *args) {
- TRACE_ENTER();
+
getArray(Int,jint,int,"i")
}
static PyObject * jvmti_getByteArrayElements(PyObject *self, PyObject *args) {
- TRACE_ENTER();
+
getArray(Byte,jbyte,int,"i")
}
static PyObject * jvmti_getBooleanArrayElements(PyObject *self, PyObject *args) {
- TRACE_ENTER();
+
getArray(Boolean,jboolean,int,"i")
}
static PyObject * jvmti_getCharArrayElements(PyObject *self, PyObject *args) {
- TRACE_ENTER();
+
getArray(Char,jchar,char,"c")
}
static PyObject * jvmti_getShortArrayElements(PyObject *self, PyObject *args) {
- TRACE_ENTER();
+
getArray(Short,jshort,short,"h")
}
static PyObject * jvmti_getLongArrayElements(PyObject *self, PyObject *args) {
- TRACE_ENTER();
+
getArray(Long,jlong,long,"l")
}
static PyObject * jvmti_getFloatArrayElements(PyObject *self, PyObject *args) {
- TRACE_ENTER();
+
getArray(Float,jfloat,float,"f")
}
static PyObject * jvmti_getDoubleArrayElements(PyObject *self, PyObject *args) {
- TRACE_ENTER();
+
getArray(Double,jdouble,double,"d")
}
static PyObject * jvmti_registerExceptionFilter(PyObject *self, PyObject *args) {
- TRACE_ENTER();
- CHECK_VALID();
+
PyObject *temp=NULL;
PyObject *result = NULL;
+ TRACE_ENTER();
+ CHECK_VALID();
+
if (PyArg_ParseTuple(args, "O", &temp)) {
printf("\ntemp=%p\n",temp);
if (!PyCallable_Check(temp)) {
@@ -562,12 +607,13 @@
}
static PyObject * jvmti_iterateOverReachableObjects(PyObject *self, PyObject *args) {
- TRACE_ENTER();
- CHECK_VALID();
- objectcounter=0;
+ int objectcounter=0;
PyObject *temp=NULL;
PyObject *result = NULL;
-
+ jvmtiError err;
+ TRACE_ENTER();
+ CHECK_VALID();
+
if (PyArg_ParseTuple(args, "O", &temp)) {
printf("\ntemp=%p\n",temp);
if (!PyCallable_Check(temp)) {
@@ -585,41 +631,50 @@
PyErr_SetString(PyExc_TypeError, "can get function");
return NULL;
}
- jvmtiError err=(*jvmtiptr)->IterateOverReachableObjects(jvmtiptr,NULL,NULL,&object_ref_callback,NULL);
+ err=(*jvmtiptr)->IterateOverReachableObjects(jvmtiptr,NULL,NULL,&object_ref_callback,NULL);
CHECK_OK("iterate over reachable objects");
return Py_BuildValue("i", objectcounter);
}
static PyObject * jvmti_getStackTrace(PyObject *self, PyObject *args) {
- TRACE_ENTER();
+
int threadID=0;
int start_depth=0;
int max_frame_count=0;
+ jthread thread;
+ jint count;
+ jint jstart;
+ jint jmax;
+ jvmtiFrameInfo *info=NULL;
+ jvmtiError err;
+ PyObject* list=NULL;
+ int i=0;
+
+ TRACE_ENTER();
PyArg_ParseTuple(args, "iii", &threadID,&start_depth,&max_frame_count);
- jthread thread=INT2JTHREAD(threadID);
- jint count=0;
- jint jstart=start_depth;
- jint jmax=max_frame_count;
+ thread=INT2JTHREAD(threadID);
+ count=0;
+ jstart=start_depth;
+ jmax=max_frame_count;
if(max_frame_count<1) max_frame_count=1;
- jvmtiFrameInfo *info=malloc(sizeof(jvmtiFrameInfo)*max_frame_count);
-
-
- jvmtiError err=(*jvmtiptr)->GetStackTrace(jvmtiptr,thread,jstart,jmax,info,&count);
+ info=malloc(sizeof(jvmtiFrameInfo)*max_frame_count);
+
+ err=(*jvmtiptr)->GetStackTrace(jvmtiptr,thread,jstart,jmax,info,&count);
CHECK_OK("get stack trace");
- PyObject* list= PyList_New(count);
+ list= PyList_New(count);
- int i=0;
+
for( i=0;i<count;i++) {
PyList_SetItem(list,i,Py_BuildValue("ii",info[i].method,info[i].location));
}
@@ -632,18 +687,21 @@
static PyObject * jvmti_deleteLocalRef(PyObject *self, PyObject *args) {
- TRACE_ENTER();
- CHECK_VALID();
-
+
// get required ref
int ref=0;
+ jobject refj;
+ PyObject *result=NULL;
+
+ TRACE_ENTER();
+ CHECK_VALID();
PyArg_ParseTuple(args, "i", &ref);
- jobject refj=INT2JOBJECT(ref);
+ refj=INT2JOBJECT(ref);
(*jniptr)->DeleteLocalRef(jniptr,refj);
- PyObject *result= Py_BuildValue("i", ref);
+ result= Py_BuildValue("i", ref);
TRACE_EXIT();
return result;
@@ -652,18 +710,21 @@
}
static PyObject * jvmti_getFrameCount(PyObject *self, PyObject *args) {
- TRACE_ENTER();
- CHECK_VALID();
-
+
// get required thread...
int threadID=0;
+ jthread thread;
+ jint count=0;
+ jvmtiError err;
- PyArg_ParseTuple(args, "i", &threadID);
+ TRACE_ENTER();
+ CHECK_VALID();
- jthread thread=INT2JTHREAD(threadID);
- jint count=0;
+ PyArg_ParseTuple(args, "i", &threadID);
- jvmtiError err=(*jvmtiptr)->GetFrameCount(jvmtiptr,thread,&count);
+ thread=INT2JTHREAD(threadID);
+
+ err=(*jvmtiptr)->GetFrameCount(jvmtiptr,thread,&count);
CHECK_OK("get frame count");
@@ -676,19 +737,22 @@
* Takes threadid and returns a python list of object ids
*/
static PyObject * jvmti_getCurrentContendedMonitor(PyObject *self, PyObject *args) {
- TRACE_ENTER();
-
- CHECK_VALID();
// get required thread...
int threadID=0;
+ jthread thread;
+ jobject monitor;
+ jvmtiError err;
+
+ TRACE_ENTER();
+ CHECK_VALID();
PyArg_ParseTuple(args, "i", &threadID);
- jthread thread=INT2JTHREAD(threadID);
- jobject monitor=0;
+ thread=INT2JTHREAD(threadID);
+ monitor=0;
- jvmtiError err=(*jvmtiptr)->GetCurrentContendedMonitor(jvmtiptr,thread,&monitor);
+ err=(*jvmtiptr)->GetCurrentContendedMonitor(jvmtiptr,thread,&monitor);
CHECK_OK("get contended monitor");
@@ -700,25 +764,29 @@
* Takes threadid and returns a python list of object ids
*/
static PyObject * jvmti_getOwnedMonitorInfo(PyObject *self, PyObject *args) {
- TRACE_ENTER();
- CHECK_VALID();
-
+
// get required thread...
int threadID=0;
-
- PyArg_ParseTuple(args, "i", &threadID);
-
- jthread thread=INT2JTHREAD(threadID);
+ jthread thread;
jint count=0;
jobject *monitors=NULL;
+ jvmtiError err;
+ PyObject* list=NULL;
+ int i=0;
+
+ TRACE_ENTER();
+ CHECK_VALID();
- jvmtiError err=(*jvmtiptr)->GetOwnedMonitorInfo(jvmtiptr,thread,&count,&monitors);
+ PyArg_ParseTuple(args, "i", &threadID);
+
+ thread=INT2JTHREAD(threadID);
+
+ err=(*jvmtiptr)->GetOwnedMonitorInfo(jvmtiptr,thread,&count,&monitors);
CHECK_OK("get owned monitor info");
- PyObject* list= PyList_New(count);
+ list= PyList_New(count);
- int i=0;
for( i=0;i<count;i++) {
PyList_SetItem(list,i,Py_BuildValue("i",monitors[i]));
}
@@ -730,44 +798,52 @@
}
static PyObject * jvmti_getThreadGroupInfo(PyObject *self, PyObject *args) {
- TRACE_ENTER();
- CHECK_VALID();
// get required threadgroup
int ID=0;
+ jvmtiThreadGroupInfo info;
+ jthreadGroup threadGroup;
+ jvmtiError err;
+ PyObject *result=NULL;
- PyArg_ParseTuple(args, "i", &ID);
+ TRACE_ENTER();
+ CHECK_VALID();
- jvmtiThreadGroupInfo info;
- jthreadGroup threadGroup=(jthreadGroup)ID;
+ PyArg_ParseTuple(args, "i", &ID);
+ threadGroup=(jthreadGroup)ID;
- jvmtiError err=(*jvmtiptr)->GetThreadGroupInfo(jvmtiptr,threadGroup,&info);
+ err=(*jvmtiptr)->GetThreadGroupInfo(jvmtiptr,threadGroup,&info);
CHECK_OK("get threadGroup info");
- PyObject *result=Py_BuildValue("isiiii", info.parent,info.name,info.max_priority,info.is_daemon);
+ result=Py_BuildValue("isiiii", info.parent,info.name,info.max_priority,info.is_daemon);
DEALLOC(info.name); // allocated by jvmti
return result;
}
+
static PyObject * jvmti_getTopThreadGroups(PyObject *self, PyObject *args) {
- TRACE_ENTER();
- CHECK_VALID();
jint count=0;
jthreadGroup *groups=NULL;
+ jvmtiError err;
+ PyObject* list=NULL;
+ int i=0;
- jvmtiError err=(*jvmtiptr)->GetTopThreadGroups(jvmtiptr,&count,&groups);
+ TRACE_ENTER();
+ CHECK_VALID();
+
+ err=(*jvmtiptr)->GetTopThreadGroups(jvmtiptr,&count,&groups);
CHECK_OK("get Top Thread Groups");
- PyObject* list= PyList_New(count);
+ list= PyList_New(count);
- int i=0;
+
for( i=0;i<count;i++) {
PyList_SetItem(list,i,Py_BuildValue("i",groups[i]));
}
@@ -784,13 +860,14 @@
*/
static PyObject * jvmti_getcapabilities(PyObject *self, PyObject *args) {
- TRACE_ENTER();
-
- CHECK_VALID();
jvmtiCapabilities capabilities;
+ jvmtiError err;
+
+ TRACE_ENTER();
+ CHECK_VALID();
- jvmtiError err=(*jvmtiptr)->GetPotentialCapabilities(jvmtiptr,
+ err=(*jvmtiptr)->GetPotentialCapabilities(jvmtiptr,
&capabilities);
CHECK_OK("get capabilities");
@@ -802,21 +879,26 @@
static PyObject *
jvmti_getThread(PyObject *self, PyObject *args)
-{TRACE_ENTER();
- CHECK_VALID();
- // get required thread...
+{
+
int threadID=0;
+ jvmtiThreadInfo info;
+ jthread thread;
+ jvmtiError err;
+ PyObject *result=NULL;
- PyArg_ParseTuple(args, "i", &threadID);
+ TRACE_ENTER();
+ CHECK_VALID();
- jvmtiThreadInfo info;
- jthread thread=INT2JTHREAD(threadID);
+ PyArg_ParseTuple(args, "i", &threadID);
+
+ thread=INT2JTHREAD(threadID);
- jvmtiError err=(*jvmtiptr)->GetThreadInfo(jvmtiptr,thread,&info);
+ err=(*jvmtiptr)->GetThreadInfo(jvmtiptr,thread,&info);
CHECK_OK("get thread info");
- PyObject *result=Py_BuildValue("siiii", info.name,info.priority,info.is_daemon,info.thread_group,info.context_class_loader);
+ result=Py_BuildValue("siiii", info.name,info.priority,info.is_daemon,info.thread_group,info.context_class_loader);
DEALLOC(info.name); // allocated by jvmti
@@ -826,16 +908,21 @@
static PyObject *
jvmti_getCurrentThread(PyObject *self, PyObject *args)
-{TRACE_ENTER();
- CHECK_VALID();
+{
jthread threadj=0;
+ jvmtiError err;
+ int thread=0;
+ PyObject *result=NULL;
- jvmtiError err=(*jvmtiptr)->GetCurrentThread(jvmtiptr,&threadj);
+ TRACE_ENTER();
+ CHECK_VALID();
+
+ err=(*jvmtiptr)->GetCurrentThread(jvmtiptr,&threadj);
CHECK_OK("get currentthread");
- int thread=JTHREAD2INT(threadj);
- PyObject *result=Py_BuildValue("i",thread);
+ thread=JTHREAD2INT(threadj);
+ result=Py_BuildValue("i",thread);
return result;
}
@@ -846,21 +933,21 @@
static PyObject *
jvmti_getLoadedClasses(PyObject *self, PyObject *args)
{
- TRACE_ENTER();
- CHECK_VALID();
-
+
jint count=0;
jclass* classes=NULL;
+ jvmtiError err;
+ PyObject* list=NULL;
+ int i=0;
+ TRACE_ENTER();
+ CHECK_VALID();
- jvmtiError err=(*jvmtiptr)->GetLoadedClasses(jvmtiptr,&count,&classes);
+ err=(*jvmtiptr)->GetLoadedClasses(jvmtiptr,&count,&classes);
CHECK_OK("get all classes");
- PyObject* list= PyList_New(count);
-
- int i=0;
-
+ list= PyList_New(count);
for( i=0;i<count;i++) {
int class=JCLASS2INT(classes[i]);
@@ -877,22 +964,22 @@
static PyObject *
jvmti_getAllThreads(PyObject *self, PyObject *args)
{
- TRACE_ENTER();
- CHECK_VALID();
-
+
jint count=0;
jthread* threads=NULL;
+ jvmtiError err;
+ PyObject* list=NULL;
+ int i=0;
+ TRACE_ENTER();
+ CHECK_VALID();
- jvmtiError err=(*jvmtiptr)->GetAllThreads(jvmtiptr,&count,&threads);
+ err=(*jvmtiptr)->GetAllThreads(jvmtiptr,&count,&threads);
CHECK_OK("get all threads");
- PyObject* list= PyList_New(count);
-
- int i=0;
-
+ list= PyList_New(count);
for( i=0;i<count;i++) {
PyList_SetItem(list,i,Py_BuildValue("i",threads[i]));
@@ -910,21 +997,26 @@
static PyObject *
jvmti_getsystemproperties(PyObject *self, PyObject *args)
{
- TRACE_ENTER();
- CHECK_VALID();
jint countj=0;
char **ptr=NULL;
+ jvmtiError err;
+ int count=0;
+ int i=0;
+ PyObject *pDict=NULL;
- jvmtiError err=(*jvmtiptr)->GetSystemProperties(jvmtiptr,&countj,&ptr);
+ TRACE_ENTER();
+ CHECK_VALID();
+
+ err=(*jvmtiptr)->GetSystemProperties(jvmtiptr,&countj,&ptr);
CHECK_OK("get system properties");
- int count=count;
+ count=countj;
- PyObject *pDict = PyDict_New(); // new reference
+ pDict = PyDict_New(); // new reference
- int i=0;
+
for( i=0;i<count;i++) {
char *name=ptr[i];
@@ -959,31 +1051,39 @@
jvmti_getSuperClass(PyObject *self, PyObject *args)
{
+ int classid=0;
+ jclass clazz;
+ jclass result;
+
TRACE_ENTER();
-CHECK_VALID();
+ CHECK_VALID();
- int classid=0;
PyArg_ParseTuple(args, "i", &classid);
- jclass clazz=INT2JCLASS(classid);
+ clazz=INT2JCLASS(classid);
- jclass result=(*jniptr)->GetSuperclass(jniptr,clazz);
+ result=(*jniptr)->GetSuperclass(jniptr,clazz);
return Py_BuildValue("i", result);
}
+
static PyObject *
jvmti_getObjectClass(PyObject *self, PyObject *args)
{
+
+ int objid=0;
+ jobject objectj;
+ jclass result;
+
TRACE_ENTER();
-CHECK_VALID();
+ CHECK_VALID();
- int objid=0;
PyArg_ParseTuple(args, "i", &objid);
- jobject objectj=INT2JOBJECT(objid);
+ objectj=INT2JOBJECT(objid);
- jclass result=(*jniptr)->GetObjectClass(jniptr,objectj);
+ result=(*jniptr)->GetObjectClass(jniptr,objectj);
return Py_BuildValue("i", result);
@@ -993,12 +1093,14 @@
jvmti_gettime(PyObject *self, PyObject *args)
{
- TRACE_ENTER();
-CHECK_VALID();
-
+
jlong result=0;
+ jvmtiError err;
+
+ TRACE_ENTER();
+ CHECK_VALID();
- jvmtiError err=(*jvmtiptr)->GetTime(jvmtiptr,&result);
+ err=(*jvmtiptr)->GetTime(jvmtiptr,&result);
CHECK_OK("GetTime");
@@ -1009,21 +1111,26 @@
static PyObject *
jvmti_getLocalValue(PyObject *self, PyObject *args)
{
- TRACE_ENTER();
+
int threadID=0;
int depth=0;
int slot=0;
-
- PyArg_ParseTuple(args, "iii", &threadID,&depth,&slot);
-
- jthread threadj=INT2JTHREAD(threadID);
- jint depthj=depth;
- jint slotj=slot;
+ jthread threadj;
+ jint depthj;
+ jint slotj;
jobject oresult;
jint iresult;
jlong lresult;
+ jvmtiError err;
- jvmtiError err=(*jvmtiptr)->GetLocalObject(jvmtiptr,threadj,depthj,slotj,&oresult);
+ TRACE_ENTER();
+ PyArg_ParseTuple(args, "iii", &threadID,&depth,&slot);
+
+ threadj=INT2JTHREAD(threadID);
+ depthj=depth;
+ slotj=slot;
+
+ err=(*jvmtiptr)->GetLocalObject(jvmtiptr,threadj,depthj,slotj,&oresult);
if(err==JNI_OK) return Py_BuildValue("i", oresult);
err=(*jvmtiptr)->GetLocalInt(jvmtiptr,threadj,depthj,slotj,&iresult);
@@ -1041,13 +1148,19 @@
static PyObject *
jvmti_getFrameLocation(PyObject *self, PyObject *args)
{
- TRACE_ENTER();
-
-CHECK_VALID();
-
+
int threadID=0;
int depth=0;
int methodID=0;
+ jthread threadj;
+ jint depthj;
+ jmethodID methodj=0;
+ jlocation result=0;
+ jvmtiError err;
+ PyObject *pyresult=NULL;
+
+ TRACE_ENTER();
+ CHECK_VALID();
PyArg_ParseTuple(args, "iii", &threadID,&depth);
@@ -1055,16 +1168,16 @@
TRACE("depth=%d ",depth);
- jthread threadj=INT2JTHREAD(threadID);
- jint depthj=depth;
- jmethodID methodj=0;
- jlocation result=0;
+ threadj=INT2JTHREAD(threadID);
+ depthj=depth;
+ methodj=0;
+ result=0;
- jvmtiError err=(*jvmtiptr)->GetFrameLocation(jvmtiptr,threadj,depthj,&methodj,&result);
+ err=(*jvmtiptr)->GetFrameLocation(jvmtiptr,threadj,depthj,&methodj,&result);
CHECK_OK("GetFrameLocation");
- PyObject *pyresult=Py_BuildValue("ii", methodj,result);
+ pyresult=Py_BuildValue("ii", methodj,result);
TRACE_EXIT();
return pyresult;
}
@@ -1075,13 +1188,19 @@
static PyObject *
jvmti_getLocalObject(PyObject *self, PyObject *args)
{
- TRACE_ENTER();
-
-CHECK_VALID();
-
+
int threadID=0;
int depth=0;
int slot=0;
+ jthread threadj;
+ jint depthj;
+ jint slotj;
+ jobject result;
+ jvmtiError err;
+ PyObject *pyresult=NULL;
+
+ TRACE_ENTER();
+ CHECK_VALID();
PyArg_ParseTuple(args, "iii", &threadID,&depth,&slot);
@@ -1089,16 +1208,17 @@
TRACE("depth=%d ",depth);
TRACE("slot=%d\n",slot);
- jthread threadj=INT2JTHREAD(threadID);
- jint depthj=depth;
- jint slotj=slot;
- jobject result=0;
+ threadj=INT2JTHREAD(threadID);
+ depthj=depth;
+ slotj=slot;
+ result=0;
- jvmtiError err=(*jvmtiptr)->GetLocalObject(jvmtiptr,threadj,depthj,slotj,&result);
+ err=(*jvmtiptr)->GetLocalObject(jvmtiptr,threadj,depthj,slotj,&result);
CHECK_OK("GetLocalObject");
- PyObject *pyresult=Py_BuildValue("i", result);
+ pyresult=Py_BuildValue("i", result);
+
TRACE_EXIT();
return pyresult;
}
@@ -1110,23 +1230,27 @@
static PyObject *
jvmti_getLocalInt(PyObject *self, PyObject *args)
{
- TRACE_ENTER();
-
-CHECK_VALID();
-
+
int threadID=0;
int depth=0;
int slot=0;
+ jthread threadj;
+ jint depthj;
+ jint slotj;
+ jint result;
+ jvmtiError err;
- PyArg_ParseTuple(args, "iii", &threadID,&depth,&slot);
+ TRACE_ENTER();
+ CHECK_VALID();
+ PyArg_ParseTuple(args, "iii", &threadID,&depth,&slot);
- jthread threadj=INT2JTHREAD(threadID);
- jint depthj=depth;
- jint slotj=slot;
- jint result;
- jvmtiError err=(*jvmtiptr)->GetLocalInt(jvmtiptr,threadj,depthj,slotj,&result);
+ threadj=INT2JTHREAD(threadID);
+ depthj=depth;
+ slotj=slot;
+
+ err=(*jvmtiptr)->GetLocalInt(jvmtiptr,threadj,depthj,slotj,&result);
CHECK_OK("GetLocalInt");
@@ -1140,22 +1264,27 @@
jvmti_getLocalLong(PyObject *self, PyObject *args)
{
- TRACE_ENTER();
-CHECK_VALID();
-
+
int threadID=0;
int depth=0;
int slot=0;
-
- PyArg_ParseTuple(args, "iii", &threadID,&depth,&slot);
+ jthread threadj;
+ jint depthj;
+ jint slotj;
+ jlong result;
+ jvmtiError err;
+
+ TRACE_ENTER();
+ CHECK_VALID();
- jthread threadj=INT2JTHREAD(threadID);
- jint depthj=depth;
- jint slotj=slot;
- jlong result;
+ PyArg_ParseTuple(args, "iii", &threadID,&depth,&slot);
- jvmtiError err=(*jvmtiptr)->GetLocalLong(jvmtiptr,threadj,depthj,slotj,&result);
+ threadj=INT2JTHREAD(threadID);
+ depthj=depth;
+ slotj=slot;
+
+ err=(*jvmtiptr)->GetLocalLong(jvmtiptr,threadj,depthj,slotj,&result);
CHECK_OK("GetLocalLong");
@@ -1168,23 +1297,26 @@
static PyObject *
jvmti_getBytecodes(PyObject *self, PyObject *args)
{
- TRACE_ENTER();
- CHECK_VALID();
-
+
int methodID=0;
jint size=0;
+ jmethodID method;
unsigned char* bytes=NULL;
+ jvmtiError err;
+ PyObject *value=NULL;
+
+ TRACE_ENTER();
+ CHECK_VALID();
PyArg_ParseTuple(args, "i", &methodID);
- jmethodID method=INT2JMETHOD(methodID);
+ method=INT2JMETHOD(methodID);
- jvmtiError err=(*jvmtiptr)->GetBytecodes(jvmtiptr,method,&size,&bytes);
+ err=(*jvmtiptr)->GetBytecodes(jvmtiptr,method,&size,&bytes);
CHECK_OK("Getbytecodes");
-
-
- PyObject *value= Py_BuildValue("s",bytes);
+
+ value= Py_BuildValue("s",bytes);
DEALLOC(bytes);
@@ -1200,25 +1332,28 @@
static PyObject *
jvmti_getMethodName(PyObject *self, PyObject *args)
{
- TRACE_ENTER();
-
-
- CHECK_VALID();
int methodID=0;
-
- PyArg_ParseTuple(args, "i", &methodID);
-
- jmethodID method=INT2JMETHOD(methodID);
char *name=NULL;
char *sig=NULL;
char *generic=NULL;
+ jmethodID method;
+ jvmtiError err;
+ PyObject *value=NULL;
+
- jvmtiError err=(*jvmtiptr)->GetMethodName(jvmtiptr,method,&name,&sig,&generic);
+ TRACE_ENTER();
+ CHECK_VALID();
+
+ PyArg_ParseTuple(args, "i", &methodID);
+
+ method=INT2JMETHOD(methodID);
+
+ err=(*jvmtiptr)->GetMethodName(jvmtiptr,method,&name,&sig,&generic);
CHECK_OK("GetMethodName");
- PyObject *value= Py_BuildValue("sss", name,sig,generic);
+ value= Py_BuildValue("sss", name,sig,generic);
DEALLOC(name);
DEALLOC(sig);
DEALLOC(generic);
@@ -1234,26 +1369,26 @@
static PyObject *
jvmti_getClassSignature(PyObject *self, PyObject *args)
{
- TRACE_ENTER();
-
-
- CHECK_VALID();
int classID=0;
+ jclass class;
+ char *sig=NULL;
+ char *generic=NULL;
+ PyObject *value=NULL;
+ jvmtiError err;
- PyArg_ParseTuple(args, "i", &classID);
-
- jclass class=INT2JCLASS(classID);
+ TRACE_ENTER();
+ CHECK_VALID();
+ PyArg_ParseTuple(args, "i", &classID);
- char *sig=NULL;
- char *generic=NULL;
+ class=INT2JCLASS(classID);
- jvmtiError err=(*jvmtiptr)->GetClassSignature(jvmtiptr,class,&sig,&generic);
+ err=(*jvmtiptr)->GetClassSignature(jvmtiptr,class,&sig,&generic);
CHECK_OK("GetClassSignature");
- PyObject *value= Py_BuildValue("ss",sig,generic);
+ value= Py_BuildValue("ss",sig,generic);
DEALLOC(sig);
DEALLOC(generic);
@@ -1266,19 +1401,23 @@
static PyObject *
jvmti_getFieldModifiers(PyObject *self, PyObject *args)
{
- TRACE_ENTER();
- CHECK_VALID();
int class=0;
int field=0;
+ jint result=0;
+ jclass classid;
+ jfieldID fieldid;
+ jvmtiError err;
+ TRACE_ENTER();
+ CHECK_VALID();
+
PyArg_ParseTuple(args, "ii", &class,&field);
- jclass classid=INT2JCLASS(class);
- jfieldID fieldid=(jfieldID)field;
+ classid=INT2JCLASS(class);
+ fieldid=(jfieldID)field;
- jint result=0;
-
- jvmtiError err=(*jvmtiptr)->GetFieldModifiers(jvmtiptr,classid,fieldid,&result);
+
+ err=(*jvmtiptr)->GetFieldModifiers(jvmtiptr,classid,fieldid,&result);
CHECK_OK(DESC);
return Py_BuildValue("i", result);
@@ -1295,26 +1434,31 @@
{
- TRACE_ENTER();
- CHECK_VALID();
-
+
int classID=0;
int fieldID=0;
-
- PyArg_ParseTuple(args, "ii", &classID,&fieldID);
-
- jclass class=INT2JCLASS(classID);
- jfieldID field=(jfieldID)fieldID;
-
char *name=NULL;
char *sig=NULL;
char *generic=NULL;
+ jclass class;
+ jfieldID field;
+ jvmtiError err;
+ PyObject *value=NULL;
- jvmtiError err=(*jvmtiptr)->GetFieldName(jvmtiptr,class,field,&name,&sig,&generic);
+ TRACE_ENTER();
+ CHECK_VALID();
+
+ PyArg_ParseTuple(args, "ii", &classID,&fieldID);
+
+ class=INT2JCLASS(classID);
+ field=(jfieldID)fieldID;
+
+
+ err=(*jvmtiptr)->GetFieldName(jvmtiptr,class,field,&name,&sig,&generic);
CHECK_OK("GetFieldName");
- PyObject *value= Py_BuildValue("sss",name,sig,generic);
+ value= Py_BuildValue("sss",name,sig,generic);
DEALLOC(name);
DEALLOC(sig);
@@ -1332,19 +1476,23 @@
{
- TRACE_ENTER();
- CHECK_VALID();
-
+
int methodID=0;
-
- PyArg_ParseTuple(args, "i", &methodID);
-
- jmethodID method=INT2JMETHOD(methodID);
jint countj=0;
-
jvmtiLocalVariableEntry *entries=NULL;
+ jvmtiError err;
+ jmethodID method;
+ int count=countj;
+ int i=0;
+ PyObject* list= NULL;
+ TRACE_ENTER();
+ CHECK_VALID();
+
+ PyArg_ParseTuple(args, "i", &methodID);
- jvmtiError err=(*jvmtiptr)->GetLocalVariableTable(jvmtiptr,method,&countj,&entries);
+ method=INT2JMETHOD(methodID);
+
+ err=(*jvmtiptr)->GetLocalVariableTable(jvmtiptr,method,&countj,&entries);
/*
if(err==JVMTI_ERROR_NATIVE_METHOD) {
@@ -1357,10 +1505,8 @@
CHECK_OK("GetLocalVariableTable");
// turn table into python data...
- int count=countj;
- PyObject* list= PyList_New(count);
-
- int i=0;
+ list= PyList_New(count);
+
for(i=0;i<count;i++) {
jlocation startj=entries[i].start_location;
long start=startj;
@@ -1390,79 +1536,84 @@
* Returns the size of the object
*/
static PyObject * jvmti_getObjectSize(PyObject *self, PyObject *args) {
- TRACE_ENTER();
+
getValue(GetObjectSize,jobject,jlong,"i","Get Object Size")
}
static PyObject * jvmti_getClassLoaderClasses(PyObject *self, PyObject *args) {
- TRACE_ENTER();
+
getList(GetClassLoaderClasses,jclass,"Get ClassLoader classes")
}
static PyObject * jvmti_getSourceFileName(PyObject *self, PyObject *args) {
- TRACE_ENTER();
+
getStringValue(GetSourceFileName,"Get Source File Name")
}
static PyObject * jvmti_getClassStatus(PyObject *self, PyObject *args) {
- TRACE_ENTER();
+
getValue(GetClassStatus,jobject,jint,"i","Get Class Status")
}
static PyObject * jvmti_getClassModifiers(PyObject *self, PyObject *args) {
- TRACE_ENTER();
+
getValue(GetClassModifiers,jobject,jint,"i","Get Class Modifiers")
}
static PyObject * jvmti_getClassMethods(PyObject *self, PyObject *args) {
- TRACE_ENTER();
+
getList(GetClassMethods,jmethodID,"Get Class Methods")
}
static PyObject * jvmti_getClassFields(PyObject *self, PyObject *args) {
- TRACE_ENTER();
+
getList(GetClassFields,jfieldID,"Get Class Fields")
}
static PyObject * jvmti_getClassLoader(PyObject *self, PyObject *args) {
- TRACE_ENTER();
+
getValue(GetClassLoader,jobject,jclass,"i","Get Class Loader")
}
static PyObject * jvmti_getMethodModifiers(PyObject *self, PyObject *args) {
- TRACE_ENTER();
+
getValue(GetMethodModifiers,jmethodID,jint,"i","Get Method Modifiers")
}
static PyObject * jvmti_getMaxLocals(PyObject *self, PyObject *args) {
- TRACE_ENTER();
+
getValue(GetMaxLocals,jmethodID,jint,"i","Get Max Locals")
}
static PyObject * jvmti_getArgumentsSize(PyObject *self, PyObject *args) {
- TRACE_ENTER();
+
getValue(GetArgumentsSize,jmethodID,jint,"i","Get Arguments Size")
}
static PyObject * jvmti_isMethodNative(PyObject *self, PyObject *args) {
- TRACE_ENTER();
+
getValue(IsMethodNative,jmethodID,jboolean,"i","Is method native")
}
static PyObject * jvmti_getImplementedInterfaces(PyObject *self, PyObject *args) {
- TRACE_ENTER();
+
getList(GetImplementedInterfaces,jclass,"Get Implemented Interfaces")
}
static PyObject * jvmti_iterateOverInstancesOfClass(PyObject *self, PyObject *args) {
- TRACE_ENTER();
- CHECK_VALID();
// get required class
int classID=0;
+ jclass classj;
+ PyObject* list=NULL;
+ jvmtiError err;
+ jvmtiHeapObjectCallback callback;
+
+ TRACE_ENTER();
+ CHECK_VALID();
PyArg_ParseTuple(args, "i", &classID);
- jclass classj=INT2JCLASS(classID);
+ classj=INT2JCLASS(classID);
- PyObject* list= PyList_New(100);
+ list= PyList_New(100);
- jvmtiHeapObjectCallback callback=&myjvmtiHeapObjectCallback;
+ callback=&myjvmtiHeapObjectCallback;
- jvmtiError err=(*jvmtiptr)->IterateOverInstancesOfClass(jvmtiptr,classj,
+ err=(*jvmtiptr)->IterateOverInstancesOfClass(jvmtiptr,classj,
JVMTI_HEAP_OBJECT_EITHER, callback,(void*)list);
CHECK_OK("iterate over instances of class");
@@ -1560,10 +1711,11 @@
PyMODINIT_FUNC
initjvmti(void)
{
- TRACE_ENTER();
+
- PyObject *m;
+ PyObject *m=NULL;
+ TRACE_ENTER();
m = Py_InitModule("jvmti", JvmtiMethods);
if (m == NULL)
return;
@@ -1611,11 +1763,13 @@
void runScript(char *script) {
- TRACE_ENTER();
+
+ FILE* fd=NULL;
+
printf("\nrunning script %s\n",script);
// Python code in separate environments
- FILE* fd = fopen(script, "r");
+ fd = fopen(script, "r");
PyRun_SimpleFile(fd, script);
fclose(fd);
@@ -1637,7 +1791,7 @@
startPython();
}
void startPython() {
- TRACE_ENTER();
+
char *names[]={scriptname,scriptname};
exec_interactive_interpreter(1,names);
@@ -1647,10 +1801,12 @@
static void JNICALL
dataDumpRequest(jvmtiEnv *jvmti)
{
- TRACE_ENTER();
+
+ jint rc;
+
jvmtiptr=jvmti;
- jint rc = (*vmptr)->GetEnv(vmptr, (void **)&jniptr, JNI_VERSION_1_6);
+ rc = (*vmptr)->GetEnv(vmptr, (void **)&jniptr, JNI_VERSION_1_6);
if (rc != JNI_OK) {
report("unable to load jni environment");
@@ -1666,6 +1822,11 @@
JNIEXPORT jint JNICALL
Agent_OnLoad(JavaVM *vm, char *options, void *reserved)
{
+ jint rc;
+ jvmtiError err;
+ jvmtiCapabilities caps;
+ jvmtiEventCallbacks callbacks;
+
TRACE_ENTER();
report(" jvmti is active");
@@ -1673,7 +1834,7 @@
- jint rc = (*vm)->GetEnv(vm, (void **)&jvmtiptr, JVMTI_VERSION);
+ rc = (*vm)->GetEnv(vm, (void **)&jvmtiptr, JVMTI_VERSION);
if (rc != JNI_OK) {
report("unable to load jvm environment");
@@ -1692,14 +1853,12 @@
if(options!=NULL) runScript(options);
- jvmtiEventCallbacks callbacks;
-
memset(&callbacks, 0, sizeof(callbacks));
callbacks.DataDumpRequest = &dataDumpRequest;
callbacks.Exception = &myjvmtiEventException;
callbacks.VMInit = &myVMInit;
- jvmtiError err = (*jvmtiptr)->SetEventCallbacks(jvmtiptr, &callbacks, sizeof(callbacks));
+ err = (*jvmtiptr)->SetEventCallbacks(jvmtiptr, &callbacks, sizeof(callbacks));
err = (*jvmtiptr)->SetEventNotificationMode(jvmtiptr, JVMTI_ENABLE,
JVMTI_EVENT_DATA_DUMP_REQUEST,
@@ -1719,7 +1878,7 @@
// turn on required capabilities
- jvmtiCapabilities caps;
+
memset(&caps, 0, sizeof(jvmtiCapabilities));
caps.can_get_owned_monitor_info=1;
Modified: incubator/kato/branches/experimental/maven_restructure/org.apache.kato.native/kato.native.pyjvmti/src/pyjvmti.h
URL: http://svn.apache.org/viewvc/incubator/kato/branches/experimental/maven_restructure/org.apache.kato.native/kato.native.pyjvmti/src/pyjvmti.h?rev=787172&r1=787171&r2=787172&view=diff
==============================================================================
--- incubator/kato/branches/experimental/maven_restructure/org.apache.kato.native/kato.native.pyjvmti/src/pyjvmti.h (original)
+++ incubator/kato/branches/experimental/maven_restructure/org.apache.kato.native/kato.native.pyjvmti/src/pyjvmti.h Mon Jun 22 09:03:25 2009
@@ -18,6 +18,9 @@
#include "pyjvmti_convert.h"
+
+char * initlibpyjvmti=NULL;
+
#define CHECK_VALID() \
if(jvmtiptr==NULL) { \
PyErr_SetString(PYJVMTIError, "jvmti environment pointer not present"); \
Modified: incubator/kato/branches/experimental/maven_restructure/org.apache.kato.native/kato.native.pyjvmti/src/pyjvmti_convert.h
URL: http://svn.apache.org/viewvc/incubator/kato/branches/experimental/maven_restructure/org.apache.kato.native/kato.native.pyjvmti/src/pyjvmti_convert.h?rev=787172&r1=787171&r2=787172&view=diff
==============================================================================
--- incubator/kato/branches/experimental/maven_restructure/org.apache.kato.native/kato.native.pyjvmti/src/pyjvmti_convert.h (original)
+++ incubator/kato/branches/experimental/maven_restructure/org.apache.kato.native/kato.native.pyjvmti/src/pyjvmti_convert.h Mon Jun 22 09:03:25 2009
@@ -33,6 +33,9 @@
#define JCLASS2INT(t) (int)t
#define INT2JCLASS(i) (jclass)i
+#define JFIELD2INT(t) (int)t
+#define INT2JFIELD(i) (jfieldID)i
+
#define JARRAY2INT(t) (int)t
#define INT2JARRAY(i) (jarray)i