OSDN Git Service
(root)
/
pf3gnuchains
/
gcc-fork.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Add new testcases.
[pf3gnuchains/gcc-fork.git]
/
libjava
/
jni.cc
diff --git
a/libjava/jni.cc
b/libjava/jni.cc
index
07ef713
..
86a4dc5
100644
(file)
--- a/
libjava/jni.cc
+++ b/
libjava/jni.cc
@@
-1,6
+1,6
@@
// jni.cc - JNI implementation, including the jump table.
// jni.cc - JNI implementation, including the jump table.
-/* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
+/* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
, 2008
Free Software Foundation
This file is part of libgcj.
Free Software Foundation
This file is part of libgcj.
@@
-22,8
+22,10
@@
details. */
#ifdef ENABLE_JVMPI
#include <jvmpi.h>
#endif
#ifdef ENABLE_JVMPI
#include <jvmpi.h>
#endif
+#ifdef INTERPRETER
#include <jvmti.h>
#include <jvmti.h>
-
+#include "jvmti-int.h"
+#endif
#include <java/lang/Class.h>
#include <java/lang/ClassLoader.h>
#include <java/lang/Throwable.h>
#include <java/lang/Class.h>
#include <java/lang/ClassLoader.h>
#include <java/lang/Throwable.h>
@@
-68,8
+70,8
@@
enum invocation_type
};
// Forward declarations.
};
// Forward declarations.
-extern struct JNINativeInterface _Jv_JNIFunctions;
-extern struct JNIInvokeInterface _Jv_JNI_InvokeFunctions;
+extern struct JNINativeInterface
_
_Jv_JNIFunctions;
+extern struct JNIInvokeInterface
_
_Jv_JNI_InvokeFunctions;
// Number of slots in the default frame. The VM must allow at least
// 16.
// Number of slots in the default frame. The VM must allow at least
// 16.
@@
-451,13
+453,17
@@
_Jv_JNI_PopSystemFrame (JNIEnv *env)
_Jv_JNI_PopLocalFrame (env, NULL, MARK_SYSTEM);
else
env->locals = NULL;
_Jv_JNI_PopLocalFrame (env, NULL, MARK_SYSTEM);
else
env->locals = NULL;
-
+
+#ifdef INTERPRETER
if (__builtin_expect (env->ex != NULL, false))
{
jthrowable t = env->ex;
env->ex = NULL;
if (__builtin_expect (env->ex != NULL, false))
{
jthrowable t = env->ex;
env->ex = NULL;
+ if (JVMTI_REQUESTED_EVENT (Exception))
+ _Jv_ReportJVMTIExceptionThrow (t);
throw t;
}
throw t;
}
+#endif
}
template<typename T> T extract_from_jvalue(jvalue const & t);
}
template<typename T> T extract_from_jvalue(jvalue const & t);
@@
-751,7
+757,8
@@
_Jv_JNI_GetAnyMethodID (JNIEnv *env, jclass clazz,
java::lang::StringBuffer *name_sig =
new java::lang::StringBuffer (JvNewStringUTF (name));
java::lang::StringBuffer *name_sig =
new java::lang::StringBuffer (JvNewStringUTF (name));
- name_sig->append ((jchar) ' ')->append (JvNewStringUTF (s));
+ name_sig->append ((jchar) ' ');
+ name_sig->append (JvNewStringUTF (s));
env->ex = new java::lang::NoSuchMethodError (name_sig->toString ());
}
catch (jthrowable t)
env->ex = new java::lang::NoSuchMethodError (name_sig->toString ());
}
catch (jthrowable t)
@@
-866,7
+873,7
@@
_Jv_JNI_CallAnyMethod (JNIEnv *env, jobject obj, jclass klass,
template<typename T, invocation_type style>
static T JNICALL
_Jv_JNI_CallAnyMethodA (JNIEnv *env, jobject obj, jclass klass,
template<typename T, invocation_type style>
static T JNICALL
_Jv_JNI_CallAnyMethodA (JNIEnv *env, jobject obj, jclass klass,
- jmethodID id, jvalue *args)
+ jmethodID id,
const
jvalue *args)
{
obj = unwrap (obj);
klass = unwrap (klass);
{
obj = unwrap (obj);
klass = unwrap (klass);
@@
-963,7
+970,7
@@
_Jv_JNI_CallAnyVoidMethod (JNIEnv *env, jobject obj, jclass klass,
template<invocation_type style>
static void JNICALL
_Jv_JNI_CallAnyVoidMethodA (JNIEnv *env, jobject obj, jclass klass,
template<invocation_type style>
static void JNICALL
_Jv_JNI_CallAnyVoidMethodA (JNIEnv *env, jobject obj, jclass klass,
- jmethodID id, jvalue *args)
+ jmethodID id,
const
jvalue *args)
{
jclass decl_class = klass ? klass : obj->getClass ();
JvAssert (decl_class != NULL);
{
jclass decl_class = klass ? klass : obj->getClass ();
JvAssert (decl_class != NULL);
@@
-1028,7
+1035,7
@@
_Jv_JNI_CallMethod (JNIEnv *env, jobject obj, jmethodID id, ...)
template<typename T>
static T JNICALL
_Jv_JNI_CallMethodA (JNIEnv *env, jobject obj,
template<typename T>
static T JNICALL
_Jv_JNI_CallMethodA (JNIEnv *env, jobject obj,
- jmethodID id, jvalue *args)
+ jmethodID id,
const
jvalue *args)
{
return _Jv_JNI_CallAnyMethodA<T, normal> (env, obj, NULL, id, args);
}
{
return _Jv_JNI_CallAnyMethodA<T, normal> (env, obj, NULL, id, args);
}
@@
-1052,7
+1059,7
@@
_Jv_JNI_CallVoidMethod (JNIEnv *env, jobject obj, jmethodID id, ...)
static void JNICALL
_Jv_JNI_CallVoidMethodA (JNIEnv *env, jobject obj,
static void JNICALL
_Jv_JNI_CallVoidMethodA (JNIEnv *env, jobject obj,
- jmethodID id, jvalue *args)
+ jmethodID id,
const
jvalue *args)
{
_Jv_JNI_CallAnyVoidMethodA<normal> (env, obj, NULL, id, args);
}
{
_Jv_JNI_CallAnyVoidMethodA<normal> (env, obj, NULL, id, args);
}
@@
-1096,7
+1103,7
@@
_Jv_JNI_CallStaticMethod (JNIEnv *env, jclass klass,
template<typename T>
static T JNICALL
_Jv_JNI_CallStaticMethodA (JNIEnv *env, jclass klass, jmethodID id,
template<typename T>
static T JNICALL
_Jv_JNI_CallStaticMethodA (JNIEnv *env, jclass klass, jmethodID id,
- jvalue *args)
+
const
jvalue *args)
{
JvAssert (((id->accflags) & java::lang::reflect::Modifier::STATIC));
JvAssert (java::lang::Class::class$.isInstance (unwrap (klass)));
{
JvAssert (((id->accflags) & java::lang::reflect::Modifier::STATIC));
JvAssert (java::lang::Class::class$.isInstance (unwrap (klass)));
@@
-1124,7
+1131,7
@@
_Jv_JNI_CallStaticVoidMethod (JNIEnv *env, jclass klass,
static void JNICALL
_Jv_JNI_CallStaticVoidMethodA (JNIEnv *env, jclass klass,
static void JNICALL
_Jv_JNI_CallStaticVoidMethodA (JNIEnv *env, jclass klass,
- jmethodID id, jvalue *args)
+ jmethodID id,
const
jvalue *args)
{
_Jv_JNI_CallAnyVoidMethodA<static_type> (env, NULL, klass, id, args);
}
{
_Jv_JNI_CallAnyVoidMethodA<static_type> (env, NULL, klass, id, args);
}
@@
-1167,7
+1174,7
@@
_Jv_JNI_NewObject (JNIEnv *env, jclass klass, jmethodID id, ...)
static jobject JNICALL
_Jv_JNI_NewObjectA (JNIEnv *env, jclass klass, jmethodID id,
static jobject JNICALL
_Jv_JNI_NewObjectA (JNIEnv *env, jclass klass, jmethodID id,
- jvalue *args)
+
const
jvalue *args)
{
JvAssert (klass && ! klass->isArray ());
JvAssert (! strcmp (id->name->chars(), "<init>")
{
JvAssert (klass && ! klass->isArray ());
JvAssert (! strcmp (id->name->chars(), "<init>")
@@
-1325,6
+1332,9
@@
_Jv_JNI_NewStringUTF (JNIEnv *env, const char *bytes)
{
try
{
{
try
{
+ // For compatibility with the JDK.
+ if (!bytes)
+ return NULL;
jstring result = JvNewStringUTF (bytes);
return (jstring) wrap_value (env, result);
}
jstring result = JvNewStringUTF (bytes);
return (jstring) wrap_value (env, result);
}
@@
-1570,7
+1580,7
@@
_Jv_JNI_GetPrimitiveArrayRegion (JNIEnv *env, JArray<T> *array,
template<typename T, jclass K>
static void JNICALL
_Jv_JNI_SetPrimitiveArrayRegion (JNIEnv *env, JArray<T> *array,
template<typename T, jclass K>
static void JNICALL
_Jv_JNI_SetPrimitiveArrayRegion (JNIEnv *env, JArray<T> *array,
- jsize start, jsize len, T *buf)
+ jsize start, jsize len,
const
T *buf)
{
array = unwrap (array);
if (! _Jv_JNI_check_types (env, array, K))
{
array = unwrap (array);
if (! _Jv_JNI_check_types (env, array, K))
@@
-1750,6
+1760,10
@@
_Jv_JNI_NewWeakGlobalRef (JNIEnv *env, jobject obj)
void JNICALL
_Jv_JNI_DeleteWeakGlobalRef (JNIEnv *, jweak obj)
{
void JNICALL
_Jv_JNI_DeleteWeakGlobalRef (JNIEnv *, jweak obj)
{
+ // JDK compatibility.
+ if (obj == NULL)
+ return;
+
using namespace gnu::gcj::runtime;
JNIWeakRef *ref = reinterpret_cast<JNIWeakRef *> (obj);
unmark_for_gc (ref, global_ref_table);
using namespace gnu::gcj::runtime;
JNIWeakRef *ref = reinterpret_cast<JNIWeakRef *> (obj);
unmark_for_gc (ref, global_ref_table);
@@
-1791,6
+1805,13
@@
_Jv_JNI_GetDirectBufferCapacity (JNIEnv *, jobject buffer)
return tmp->capacity();
}
return tmp->capacity();
}
+static jobjectRefType JNICALL
+_Jv_JNI_GetObjectRefType (JNIEnv *, MAYBE_UNUSED jobject object)
+{
+ JvFail("GetObjectRefType not implemented");
+ return JNIInvalidRefType;
+}
+
\f
struct NativeMethodCacheEntry : public JNINativeMethod
\f
struct NativeMethodCacheEntry : public JNINativeMethod
@@
-2097,7
+2118,7
@@
_Jv_GetJNIEnvNewFrameWithLoader (::java::lang::ClassLoader *loader)
if (__builtin_expect (env == NULL, false))
{
env = (JNIEnv *) _Jv_MallocUnchecked (sizeof (JNIEnv));
if (__builtin_expect (env == NULL, false))
{
env = (JNIEnv *) _Jv_MallocUnchecked (sizeof (JNIEnv));
- env->
p
= &_Jv_JNIFunctions;
+ env->
functions
= &_Jv_JNIFunctions;
env->locals = NULL;
// We set env->ex below.
env->locals = NULL;
// We set env->ex below.
@@
-2282,7
+2303,8
@@
_Jv_LookupJNIMethod (jclass klass, _Jv_Utf8Const *name,
// This function is the stub which is used to turn an ordinary (CNI)
// method call into a JNI call.
void
// This function is the stub which is used to turn an ordinary (CNI)
// method call into a JNI call.
void
-_Jv_JNIMethod::call (ffi_cif *, void *ret, ffi_raw *args, void *__this)
+_Jv_JNIMethod::call (ffi_cif *, void *ret, INTERP_FFI_RAW_TYPE *args,
+ void *__this)
{
_Jv_JNIMethod* _this = (_Jv_JNIMethod *) __this;
{
_Jv_JNIMethod* _this = (_Jv_JNIMethod *) __this;
@@
-2314,8
+2336,9
@@
_Jv_JNIMethod::call (ffi_cif *, void *ret, ffi_raw *args, void *__this)
}
}
}
}
- JvAssert (_this->args_raw_size % sizeof (ffi_raw) == 0);
- ffi_raw real_args[2 + _this->args_raw_size / sizeof (ffi_raw)];
+ JvAssert (_this->args_raw_size % sizeof (INTERP_FFI_RAW_TYPE) == 0);
+ INTERP_FFI_RAW_TYPE
+ real_args[2 + _this->args_raw_size / sizeof (INTERP_FFI_RAW_TYPE)];
int offset = 0;
// First argument is always the environment pointer.
int offset = 0;
// First argument is always the environment pointer.
@@
-2405,7
+2428,7
@@
_Jv_JNI_AttachCurrentThread (JavaVM *, jstring name, void **penv,
env = (JNIEnv *) _Jv_MallocUnchecked (sizeof (JNIEnv));
if (env == NULL)
return JNI_ERR;
env = (JNIEnv *) _Jv_MallocUnchecked (sizeof (JNIEnv));
if (env == NULL)
return JNI_ERR;
- env->
p
= &_Jv_JNIFunctions;
+ env->
functions
= &_Jv_JNIFunctions;
env->ex = NULL;
env->bottom_locals
= (_Jv_JNI_LocalFrame *) _Jv_MallocUnchecked (sizeof (_Jv_JNI_LocalFrame)
env->ex = NULL;
env->bottom_locals
= (_Jv_JNI_LocalFrame *) _Jv_MallocUnchecked (sizeof (_Jv_JNI_LocalFrame)
@@
-2527,12
+2550,14
@@
_Jv_JNI_GetEnv (JavaVM *, void **penv, jint version)
}
#endif
}
#endif
+#ifdef INTERPRETER
// Handle JVMTI requests
if (version == JVMTI_VERSION_1_0)
{
*penv = (void *) _Jv_GetJVMTIEnv ();
return 0;
}
// Handle JVMTI requests
if (version == JVMTI_VERSION_1_0)
{
*penv = (void *) _Jv_GetJVMTIEnv ();
return 0;
}
+#endif
// FIXME: do we really want to support 1.1?
if (version != JNI_VERSION_1_4 && version != JNI_VERSION_1_2
// FIXME: do we really want to support 1.1?
if (version != JNI_VERSION_1_4 && version != JNI_VERSION_1_2
@@
-2580,7
+2605,7
@@
_Jv_JNI_GetJavaVM (JNIEnv *, JavaVM **vm)
#define RESERVED NULL
#define RESERVED NULL
-struct JNINativeInterface _Jv_JNIFunctions =
+struct JNINativeInterface
_
_Jv_JNIFunctions =
{
RESERVED,
RESERVED,
{
RESERVED,
RESERVED,
@@
-2860,10
+2885,12
@@
struct JNINativeInterface _Jv_JNIFunctions =
_Jv_JNI_NewDirectByteBuffer, // NewDirectByteBuffer
_Jv_JNI_GetDirectBufferAddress, // GetDirectBufferAddress
_Jv_JNI_NewDirectByteBuffer, // NewDirectByteBuffer
_Jv_JNI_GetDirectBufferAddress, // GetDirectBufferAddress
- _Jv_JNI_GetDirectBufferCapacity // GetDirectBufferCapacity
+ _Jv_JNI_GetDirectBufferCapacity, // GetDirectBufferCapacity
+
+ _Jv_JNI_GetObjectRefType // GetObjectRefType
};
};
-struct JNIInvokeInterface _Jv_JNI_InvokeFunctions =
+struct JNIInvokeInterface
_
_Jv_JNI_InvokeFunctions =
{
RESERVED,
RESERVED,
{
RESERVED,
RESERVED,