auto import from //depot/cupcake/@135843
diff --git a/core/jni/BindTest.cpp b/core/jni/BindTest.cpp
new file mode 100644
index 0000000..5fae400
--- /dev/null
+++ b/core/jni/BindTest.cpp
@@ -0,0 +1,289 @@
+/* //device/libs/android_runtime/BindTest.cpp
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License"); 
+** you may not use this file except in compliance with the License. 
+** You may obtain a copy of the License at 
+**
+**     http://www.apache.org/licenses/LICENSE-2.0 
+**
+** Unless required by applicable law or agreed to in writing, software 
+** distributed under the License is distributed on an "AS IS" BASIS, 
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+** See the License for the specific language governing permissions and 
+** limitations under the License.
+*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <jam-public.h>
+
+static u4 offset_instanceString;
+static FieldBlock *fb_classString = NULL;
+static Class *class_ReturnedObject = NULL;
+static MethodBlock *mb_ReturnedObject_setReturnedString = NULL;
+static MethodBlock *mb_Java_Lang_Object_Equals = NULL;
+
+static u4 offset_mObj;
+static u4 offset_mBool;
+static u4 offset_mInt;
+static u4 offset_mString;
+static u4 offset_mDouble;
+static u4 offset_mLong;
+
+
+/* native String getString(); */
+static uintptr_t *
+getString(Class *clazz, MethodBlock *mb, uintptr_t *ostack)
+{
+    RETURN_OBJ (createString ("String"));
+}
+
+/* native String getNullString(); */
+static uintptr_t *
+getNullString(Class *clazz, MethodBlock *mb, uintptr_t *ostack)
+{
+    RETURN_OBJ (createString (NULL));
+}
+
+/* native String getBooleanTrue(); */
+static uintptr_t *
+getBooleanTrue(Class *clazz, MethodBlock *mb, uintptr_t *ostack)
+{
+    RETURN_BOOLEAN (TRUE);
+}
+
+/* native String getBooleanFalse(); */
+static uintptr_t *
+getBooleanFalse(Class *clazz, MethodBlock *mb, uintptr_t *ostack)
+{
+    RETURN_BOOLEAN (FALSE);
+}
+
+/* native Object nonvoidThrowsException() */
+static uintptr_t *
+nonvoidThrowsException (Class *clazz, MethodBlock *mb, uintptr_t *ostack)
+{
+    if (1) {
+        signalException("java/lang/NullPointerException", NULL);
+        goto exception;
+    } 
+    
+    RETURN_OBJ (NULL);
+exception:
+    RETURN_VOID;
+}
+
+/* native void setInstanceString(String s); */
+static uintptr_t *
+setInstanceString (Class *clazz, MethodBlock *mb, uintptr_t *ostack)
+{
+    Object *jthis = (Object *) ostack[0];
+    
+    JOBJ_set_obj(jthis, offset_instanceString, ostack[1]);
+
+    RETURN_VOID;
+}
+
+/* native void setClassString(String s) */
+static uintptr_t *
+setClassString (Class *clazz, MethodBlock *mb, uintptr_t *ostack)
+{
+//    Object *jthis = (Object *) ostack[0];
+
+    fb_classString->static_value = ostack[1];
+
+    RETURN_VOID;
+}
+
+/* native String makeStringFromThreeChars(char a, char b, char c); */
+static uintptr_t *
+makeStringFromThreeChars (Class *clazz, MethodBlock *mb, uintptr_t *ostack)
+{
+    // Object *jthis =  ostack[0];
+    char a = (char) ostack[1];
+    char b = (char) ostack[2];
+    char c = (char) ostack[3];
+
+    char str[4];
+
+    str[0] = a;
+    str[1] = b;
+    str[2] = c;
+    str[3] = 0;
+    
+    RETURN_OBJ(createString(str));
+}
+
+/* native ReturnedObject makeReturnedObject(String a); */
+static uintptr_t *
+makeReturnedObject (Class *clazz, MethodBlock *mb, uintptr_t *ostack)
+{
+    //Object *jthis = (Object*)ostack[0];
+    Object *a = (Object*)ostack[1];
+
+    Object *ret;
+
+    ret = allocObject(class_ReturnedObject);
+
+    executeMethod(ret, mb_ReturnedObject_setReturnedString, a);
+    
+    RETURN_OBJ (ret);
+}
+
+/* native double addDoubles(double a, double b); */
+static uintptr_t *
+addDoubles (Class *clazz, MethodBlock *mb, uintptr_t *ostack)
+{
+    //Object *jthis = (Object*)ostack[0];        
+    double a = JARG_get_double(1);
+    double b = JARG_get_double(3);
+
+    RETURN_DOUBLE(a+b);
+}
+
+/* native void setAll (Object obj, boolean bool, int i, String str, double d, long l) */
+static uintptr_t *
+setAll  (Class *clazz, MethodBlock *mb, uintptr_t *ostack)
+{
+    Object *jthis = JARG_get_obj(0);
+
+    Object *obj     = JARG_get_obj(1);
+    bool b          = JARG_get_bool(2);
+    int i           = JARG_get_int(3);
+    char *str       = JARG_get_cstr_strdup(4);
+    double d        = JARG_get_double(5);
+    long long ll    = JARG_get_long_long(5+2);
+
+    JOBJ_set_obj(jthis, offset_mObj, obj);
+    JOBJ_set_bool(jthis, offset_mBool, b);
+    JOBJ_set_int(jthis, offset_mInt, i);
+    JOBJ_set_cstr(jthis, offset_mString, str);
+    free(str);
+    str = NULL;
+    JOBJ_set_double(jthis, offset_mDouble, d);
+    JOBJ_set_long_long(jthis, offset_mLong, ll);
+
+    RETURN_VOID;
+}
+
+/* native void compareAll (Object obj, boolean bool, int i, String str, double d, long l) */
+static uintptr_t *
+compareAll  (Class *clazz, MethodBlock *mb, uintptr_t *ostack)
+{
+    Object *jthis = JARG_get_obj(0);
+
+    Object *obj     = JARG_get_obj(1);
+    bool b          = JARG_get_bool(2);
+    int i           = JARG_get_int(3);
+    Object *strObj  = JARG_get_obj(4);
+    double d        = JARG_get_double(5);
+    long long ll    = JARG_get_long_long(5+2);
+
+    bool ret;
+
+    void *result;
+
+    Object *mStringObj = JOBJ_get_obj(jthis, offset_mString);
+
+    char *s = JARG_get_cstr_strdup(4);
+    
+    result = executeMethod (strObj, lookupVirtualMethod(strObj,mb_Java_Lang_Object_Equals), 
+                JOBJ_get_obj(jthis, offset_mString));
+
+    if (exceptionOccurred()) {
+        RETURN_VOID;
+    }
+
+    ret =   (*(uintptr_t *)result != 0)
+            && (obj == JOBJ_get_obj(jthis, offset_mObj))
+            && (b == JOBJ_get_bool(jthis, offset_mBool))
+            && (i == JOBJ_get_int(jthis, offset_mInt))
+            && (d == JOBJ_get_double(jthis, offset_mDouble))
+            && (ll == JOBJ_get_long_long(jthis, offset_mLong));
+
+
+    RETURN_BOOLEAN(ret);
+}
+
+static VMMethod methods[] = {
+    {"getString", getString},
+    {"getNullString", getNullString},
+    {"getBooleanTrue", getBooleanTrue},
+    {"getBooleanFalse", getBooleanFalse},
+    {"nonvoidThrowsException", nonvoidThrowsException},
+    {"setInstanceString",     setInstanceString},
+    {"setClassString",     setClassString},
+    {"makeStringFromThreeChars", makeStringFromThreeChars}, 
+    {"makeReturnedObject", makeReturnedObject},
+    {"addDoubles", addDoubles},
+    {"setAll", setAll},
+    {"compareAll", compareAll},
+    {NULL, NULL}
+};
+
+
+void register_BindTest()
+{
+    jamvm_registerClass("BindTest", methods);
+
+    Class *clazz = NULL;
+
+    clazz = findClassFromClassLoader("BindTest", getSystemClassLoader());
+
+    if (clazz == NULL) {
+        fprintf(stderr, "Error: BindTest not found\n");
+	clearException();
+        return;
+    }
+    
+    FieldBlock *fb;
+
+    fb = findField(clazz, "instanceString", "Ljava/lang/String;");
+
+    if (fb == NULL || ((fb->access_flags & ACC_STATIC) == ACC_STATIC)) {
+        fprintf(stderr, "Error: BindTest.instanceString not found or error\n");        
+        return;
+    }  
+
+    offset_instanceString = fb->offset;
+
+    fb_classString = findField(clazz, "classString", "Ljava/lang/String;");
+
+    if (fb_classString == NULL || ((fb_classString->access_flags & ACC_STATIC) != ACC_STATIC)) {
+        fprintf(stderr, "Error: BindTest.classString not found or error\n");        
+        return;
+    }  
+
+
+    class_ReturnedObject = findClassFromClassLoader("ReturnedObject", getSystemClassLoader());
+
+    if (class_ReturnedObject == NULL) {
+        fprintf(stderr, "Error: ReturnedObject class not found or error\n");        
+        return;
+    }
+    
+    mb_ReturnedObject_setReturnedString=
+           findMethod (class_ReturnedObject, "setReturnedString", "(Ljava/lang/String;)V");
+
+    if (mb_ReturnedObject_setReturnedString == NULL) {
+        fprintf(stderr, "Error: ReturnedObject.setReturnedString class not found or error\n");        
+        return;
+    }
+
+    offset_mObj = findField(clazz, "mObj", "Ljava/lang/Object;")->offset;
+    offset_mBool = findField(clazz, "mBool", "Z" )->offset;
+    offset_mInt = findField(clazz, "mInt", "I")->offset;
+    offset_mString = findField(clazz, "mString", "Ljava/lang/String;")->offset;
+    offset_mDouble = findField(clazz, "mDouble", "D")->offset;
+    offset_mLong = findField(clazz, "mLong", "J")->offset;
+
+
+    mb_Java_Lang_Object_Equals = findMethod (
+                                    findClassFromClassLoader("java/lang/Object", getSystemClassLoader()),
+                                    "equals", "(Ljava/lang/Object;)Z");
+
+}
+
+