You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by va...@apache.org on 2007/02/08 11:08:58 UTC

svn commit: r504842 - in /harmony/enhanced/drlvm/trunk: src/test/regression/H3130/ vm/interpreter/src/

Author: varlax
Date: Thu Feb  8 02:08:57 2007
New Revision: 504842

URL: http://svn.apache.org/viewvc?view=rev&rev=504842
Log:
HARMONY-3130 [drlvm][interpreter] segfault in interpreter_execute_method

Added:
    harmony/enhanced/drlvm/trunk/src/test/regression/H3130/
    harmony/enhanced/drlvm/trunk/src/test/regression/H3130/CallNativeTest.c   (with props)
    harmony/enhanced/drlvm/trunk/src/test/regression/H3130/CallNativeTest.java
    harmony/enhanced/drlvm/trunk/src/test/regression/H3130/run.test.xml
Modified:
    harmony/enhanced/drlvm/trunk/vm/interpreter/src/interp_native_em64t.cpp
    harmony/enhanced/drlvm/trunk/vm/interpreter/src/interp_native_ia32.cpp
    harmony/enhanced/drlvm/trunk/vm/interpreter/src/interp_native_ipf.cpp

Added: harmony/enhanced/drlvm/trunk/src/test/regression/H3130/CallNativeTest.c
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/src/test/regression/H3130/CallNativeTest.c?view=auto&rev=504842
==============================================================================
--- harmony/enhanced/drlvm/trunk/src/test/regression/H3130/CallNativeTest.c (added)
+++ harmony/enhanced/drlvm/trunk/src/test/regression/H3130/CallNativeTest.c Thu Feb  8 02:08:57 2007
@@ -0,0 +1,24 @@
+#include <jni.h>
+
+JNIEXPORT void JNICALL 
+Java_org_apache_harmony_drlvm_tests_regression_h3130_CallNativeTest_testCallNative(JNIEnv *, jobject); 
+
+JNIEXPORT jobject JNICALL 
+Java_org_apache_harmony_drlvm_tests_regression_h3130_CallNativeTest_getNull(JNIEnv *, jclass);
+
+
+JNIEXPORT void JNICALL 
+Java_org_apache_harmony_drlvm_tests_regression_h3130_CallNativeTest_testCallNative(JNIEnv *jenv, jobject obj) 
+{
+    jclass clazz = (*jenv)->GetObjectClass(jenv, obj);
+    jmethodID mid = (*jenv)->GetMethodID(jenv, clazz, "getNull", "()Ljava/lang/Object;");
+    jobject res = (*jenv)->CallObjectMethod(jenv, obj, mid);
+    if (res) {
+        (*jenv)->ThrowNew(jenv, (*jenv)->FindClass(jenv, "junit/framework/AssertionFailedError"), "Non-null returned");
+    }
+}
+
+JNIEXPORT jobject JNICALL 
+Java_org_apache_harmony_drlvm_tests_regression_h3130_CallNativeTest_getNull(JNIEnv *jenv, jclass jcl) {
+    return NULL;
+}

Propchange: harmony/enhanced/drlvm/trunk/src/test/regression/H3130/CallNativeTest.c
------------------------------------------------------------------------------
    svn:eol-style = native

Added: harmony/enhanced/drlvm/trunk/src/test/regression/H3130/CallNativeTest.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/src/test/regression/H3130/CallNativeTest.java?view=auto&rev=504842
==============================================================================
--- harmony/enhanced/drlvm/trunk/src/test/regression/H3130/CallNativeTest.java (added)
+++ harmony/enhanced/drlvm/trunk/src/test/regression/H3130/CallNativeTest.java Thu Feb  8 02:08:57 2007
@@ -0,0 +1,10 @@
+package org.apache.harmony.drlvm.tests.regression.h3130;
+
+import junit.framework.TestCase;
+
+public class CallNativeTest extends TestCase {
+   static { System.loadLibrary("CallNativeTest"); }
+
+   public native void testCallNative();
+   private native Object getNull();
+}
\ No newline at end of file

Added: harmony/enhanced/drlvm/trunk/src/test/regression/H3130/run.test.xml
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/src/test/regression/H3130/run.test.xml?view=auto&rev=504842
==============================================================================
--- harmony/enhanced/drlvm/trunk/src/test/regression/H3130/run.test.xml (added)
+++ harmony/enhanced/drlvm/trunk/src/test/regression/H3130/run.test.xml Thu Feb  8 02:08:57 2007
@@ -0,0 +1,12 @@
+<project name="RUN HARMONY-3130 Regression Test">
+    <target name="run-test">
+        <run-junit-test 
+            test="org.apache.harmony.drlvm.tests.regression.h3130.CallNativeTest"
+            vmarg="-Xint">
+            <junit-element>
+              <sysproperty key="java.library.path" value="${reg.test.native.path}/H3130"/>
+            </junit-element>
+        </run-junit-test>
+    </target>
+</project>
+

Modified: harmony/enhanced/drlvm/trunk/vm/interpreter/src/interp_native_em64t.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/interpreter/src/interp_native_em64t.cpp?view=diff&rev=504842&r1=504841&r2=504842
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/interpreter/src/interp_native_em64t.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/interpreter/src/interp_native_em64t.cpp Thu Feb  8 02:08:57 2007
@@ -203,11 +203,16 @@
             {
                 jobject obj = (jobject) invokeJNI_Obj(out_args, n_fps, n_stacks, f);
                 hythread_suspend_disable();
-                ManagedObject *ref = obj->object;
-                M2N_FREE_MACRO;
-                ObjectHandle new_handle = oh_allocate_local_handle();
-                new_handle->object = ref;
-                resultPtr->l = new_handle;
+                if (obj) {
+                    ManagedObject *ref = obj->object;
+                    M2N_FREE_MACRO;
+                    ObjectHandle new_handle = oh_allocate_local_handle();
+                    new_handle->object = ref;
+                    resultPtr->l = new_handle;
+                } else {
+                    M2N_FREE_MACRO;
+                    resultPtr->l = NULL;
+                }
             }
             break;
 

Modified: harmony/enhanced/drlvm/trunk/vm/interpreter/src/interp_native_ia32.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/interpreter/src/interp_native_ia32.cpp?view=diff&rev=504842&r1=504841&r2=504842
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/interpreter/src/interp_native_ia32.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/interpreter/src/interp_native_ia32.cpp Thu Feb  8 02:08:57 2007
@@ -182,11 +182,16 @@
             {
                 jobject obj = (jobject) invokeJNI_Obj(arg_words, argId, f);
                 hythread_suspend_disable();
-                ManagedObject *ref = obj->object;
-                M2N_FREE_MACRO;
-                ObjectHandle new_handle = oh_allocate_local_handle();
-                new_handle->object = ref;
-                resultPtr->l = new_handle;
+                if (obj) {
+                    ManagedObject *ref = obj->object;
+                    M2N_FREE_MACRO;
+                    ObjectHandle new_handle = oh_allocate_local_handle();
+                    new_handle->object = ref;
+                    resultPtr->l = new_handle;
+                } else {
+                    M2N_FREE_MACRO;
+                    resultPtr->l = NULL;
+                }
             }
             break;
 

Modified: harmony/enhanced/drlvm/trunk/vm/interpreter/src/interp_native_ipf.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/interpreter/src/interp_native_ipf.cpp?view=diff&rev=504842&r1=504841&r2=504842
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/interpreter/src/interp_native_ipf.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/interpreter/src/interp_native_ipf.cpp Thu Feb  8 02:08:57 2007
@@ -196,11 +196,16 @@
             {
                 jobject obj = (jobject) invokeJNI_Obj(arg_words, fpargs, argId, frameSize, f);
                 hythread_suspend_disable();
-                ManagedObject *ref = obj->object;
-                M2N_FREE_MACRO;
-                ObjectHandle new_handle = oh_allocate_local_handle();
-                new_handle->object = ref;
-                resultPtr->l = new_handle;
+                if (obj) {
+                    ManagedObject *ref = obj->object;
+                    M2N_FREE_MACRO;
+                    ObjectHandle new_handle = oh_allocate_local_handle();
+                    new_handle->object = ref;
+                    resultPtr->l = new_handle;
+                } else {
+                    M2N_FREE_MACRO;
+                    resultPtr->l = NULL;
+                }
             }
             break;