diff options
author | kgallowa <kgallowa@138bc75d-0d04-0410-961f-82ee72b054a4> | 2007-02-07 23:28:04 +0000 |
---|---|---|
committer | kgallowa <kgallowa@138bc75d-0d04-0410-961f-82ee72b054a4> | 2007-02-07 23:28:04 +0000 |
commit | 08f67980a87ba0bd30ef23ead37ce411b4856339 (patch) | |
tree | 2038b56ebfb3636da8769eab3a6f9a836e9d878c /libjava | |
parent | 6d84c3e2de7dfb7e3c7742541701ce67676d9735 (diff) | |
download | ppe42-gcc-08f67980a87ba0bd30ef23ead37ce411b4856339.tar.gz ppe42-gcc-08f67980a87ba0bd30ef23ead37ce411b4856339.zip |
2007-02-07 Kyle Galloway <kgallowa@redhat.com>
* jvmti.cc (CHECK_FOR_NATIVE_METHOD): New macro.
(_Jv_JVMTI_GetMaxLocals): New method.
* include/java-interp.h
(_Jv_InterpMethod::get_max_locals): New method.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@121700 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libjava')
-rw-r--r-- | libjava/ChangeLog | 7 | ||||
-rw-r--r-- | libjava/include/java-interp.h | 5 | ||||
-rw-r--r-- | libjava/jvmti.cc | 39 |
3 files changed, 50 insertions, 1 deletions
diff --git a/libjava/ChangeLog b/libjava/ChangeLog index 561f8262056..3ced148aa4c 100644 --- a/libjava/ChangeLog +++ b/libjava/ChangeLog @@ -1,3 +1,10 @@ +2007-02-07 Kyle Galloway <kgallowa@redhat.com> + + * jvmti.cc (CHECK_FOR_NATIVE_METHOD): New macro. + (_Jv_JVMTI_GetMaxLocals): New method. + * include/java-interp.h + (_Jv_InterpMethod::get_max_locals): New method. + 2007-02-01 Marco Trudel <mtrudel@gmx.ch> * jni.cc (_Jv_JNI_DeleteWeakGlobalRef): Check for NULL objects. diff --git a/libjava/include/java-interp.h b/libjava/include/java-interp.h index 3a43977747f..1370ef1de50 100644 --- a/libjava/include/java-interp.h +++ b/libjava/include/java-interp.h @@ -219,6 +219,11 @@ class _Jv_InterpMethod : public _Jv_MethodBase */ void get_line_table (jlong& start, jlong& end, jintArray& line_numbers, jlongArray& code_indices); + + int get_max_locals () + { + return static_cast<int> (max_locals); + } /* Installs a break instruction at the given code index. Returns the pc_t of the breakpoint or NULL if index is invalid. */ diff --git a/libjava/jvmti.cc b/libjava/jvmti.cc index e14bd7c5005..ba4ee817d47 100644 --- a/libjava/jvmti.cc +++ b/libjava/jvmti.cc @@ -155,6 +155,18 @@ ReentrantReadWriteLock *_envListLock = NULL; } \ while (0) +#define CHECK_FOR_NATIVE_METHOD(AjmethodID) \ + do \ + { \ + jboolean is_native; \ + jvmtiError jerr = env->IsMethodNative (AjmethodID, &is_native); \ + if (jerr != JVMTI_ERROR_NONE) \ + return jerr; \ + if (is_native) \ + return JVMTI_ERROR_NATIVE_METHOD; \ + } \ + while (0) + static jvmtiError JNICALL _Jv_JVMTI_SuspendThread (MAYBE_UNUSED jvmtiEnv *env, jthread thread) { @@ -730,6 +742,31 @@ _Jv_JVMTI_IsMethodSynthetic (MAYBE_UNUSED jvmtiEnv *env, jmethodID method, } static jvmtiError JNICALL +_Jv_JVMTI_GetMaxLocals (MAYBE_UNUSED jvmtiEnv *env, jmethodID method, + jint *max_locals) +{ + REQUIRE_PHASE (env, JVMTI_PHASE_START | JVMTI_PHASE_LIVE); + NULL_CHECK (max_locals); + + CHECK_FOR_NATIVE_METHOD (method); + + jclass klass; + jvmtiError jerr = env->GetMethodDeclaringClass (method, &klass); + if (jerr != JVMTI_ERROR_NONE) + return jerr; + + _Jv_InterpMethod *imeth = reinterpret_cast<_Jv_InterpMethod *> + (_Jv_FindInterpreterMethod (klass, method)); + + if (imeth == NULL) + return JVMTI_ERROR_INVALID_METHODID; + + *max_locals = imeth->get_max_locals (); + + return JVMTI_ERROR_NONE; +} + +static jvmtiError JNICALL _Jv_JVMTI_GetMethodDeclaringClass (MAYBE_UNUSED jvmtiEnv *env, jmethodID method, jclass *declaring_class_ptr) @@ -1656,7 +1693,7 @@ struct _Jv_jvmtiEnv _Jv_JVMTI_Interface = _Jv_JVMTI_GetMethodDeclaringClass, // GetMethodDeclaringClass _Jv_JVMTI_GetMethodModifiers, // GetMethodModifers RESERVED, // reserved67 - UNIMPLEMENTED, // GetMaxLocals + _Jv_JVMTI_GetMaxLocals, // GetMaxLocals UNIMPLEMENTED, // GetArgumentsSize _Jv_JVMTI_GetLineNumberTable, // GetLineNumberTable UNIMPLEMENTED, // GetMethodLocation |