]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
2007-02-07 Kyle Galloway <kgallowa@redhat.com>
authorkgallowa <kgallowa@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 7 Feb 2007 23:28:04 +0000 (23:28 +0000)
committerkgallowa <kgallowa@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 7 Feb 2007 23:28:04 +0000 (23:28 +0000)
    * 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

libjava/ChangeLog
libjava/include/java-interp.h
libjava/jvmti.cc

index 561f8262056280679c758a337fea548bf298a266..3ced148aa4c4b21b52764ff7ede44d4912fb90cc 100644 (file)
@@ -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.
index 3a43977747fec7c58a7cd9f48bff65a617bcb791..1370ef1de50e44f306f987fe2c6c3d809b8aee9f 100644 (file)
@@ -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. */
index e14bd7c50056c72dbbc2edf33949851bb1bf612f..ba4ee817d4726d99faa4c9994c5550d679fe6ccc 100644 (file)
@@ -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)
 {
@@ -729,6 +741,31 @@ _Jv_JVMTI_IsMethodSynthetic (MAYBE_UNUSED jvmtiEnv *env, jmethodID method,
   return JVMTI_ERROR_NONE;
 }
 
+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,
@@ -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