You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by gs...@apache.org on 2006/12/12 17:38:20 UTC

svn commit: r486222 - in /harmony/enhanced/drlvm/trunk/vm/vmcore/src: class_support/Class.cpp jni/jni.cpp

Author: gshimansky
Date: Tue Dec 12 08:38:19 2006
New Revision: 486222

URL: http://svn.apache.org/viewvc?view=rev&rev=486222
Log:
Applied HARMONY-2200 [drlvm][jvmti] VM crashes running classes instrumented by JVMTI profiler

Tests passed on Ubuntu6 x86, windows 2003 server and SuSE9 x86_64


Modified:
    harmony/enhanced/drlvm/trunk/vm/vmcore/src/class_support/Class.cpp
    harmony/enhanced/drlvm/trunk/vm/vmcore/src/jni/jni.cpp

Modified: harmony/enhanced/drlvm/trunk/vm/vmcore/src/class_support/Class.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/vmcore/src/class_support/Class.cpp?view=diff&rev=486222&r1=486221&r2=486222
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/vmcore/src/class_support/Class.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/vmcore/src/class_support/Class.cpp Tue Dec 12 08:38:19 2006
@@ -38,6 +38,7 @@
 #include "jit_intf_cpp.h"
 #include "type.h"
 #include "cci.h"
+#include "interpreter.h"
 
 #ifdef _IPF_
 #include "vm_ipf.h"
@@ -1025,13 +1026,33 @@
 
                 // Calling callback for NativeMethodBind event
                 NativeCodePtr native_addr = methods[index].fnPtr;
+
                 jvmti_process_native_method_bind_event( (jmethodID) class_method, native_addr, &native_addr);
 
-                // lock class
-                klass->lock();
-                class_method->set_code_addr( native_addr );
-                class_method->set_registered( true );
-                klass->unlock();
+                if (interpreter_enabled()) {
+                    //lock class
+                    klass->lock();
+                    class_method->set_code_addr( native_addr );
+                    class_method->set_registered( true );
+                    klass->unlock();
+                } else {
+                    NativeCodePtr stub = compile_create_lil_jni_stub(class_method, native_addr, NULL);
+                    if (!stub)
+                        return true;
+
+                    class_method->lock();
+                    class_method->set_code_addr(stub);
+                    class_method->unlock();
+
+                    // the following lines were copy-pasted from compile_do_compilation() function
+                    // it is not obvious that they should be here.
+                    //compile_flush_generated_code();
+                    //class_method->set_state(Method::ST_Compiled);
+                    //class_method->do_jit_recompiled_method_callbacks();
+
+                    class_method->apply_vtable_patches();
+                }
+
                 break;
             }
         }

Modified: harmony/enhanced/drlvm/trunk/vm/vmcore/src/jni/jni.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/vmcore/src/jni/jni.cpp?view=diff&rev=486222&r1=486221&r2=486222
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/vmcore/src/jni/jni.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/vmcore/src/jni/jni.cpp Tue Dec 12 08:38:19 2006
@@ -1209,7 +1209,6 @@
     TRACE2("jni", "RegisterNatives called");
     assert(hythread_is_suspend_enabled());
     Class_Handle clss = jclass_to_struct_Class(clazz);
-    class_register_methods(clss, methods, nMethods);
     return class_register_methods(clss, methods, nMethods) ? -1 : 0;
 } //RegisterNatives