From: michi Date: Thu, 16 Aug 2007 11:37:25 +0000 (+0000) Subject: Merged revisions 8299-8320 via svnmerge from X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=commitdiff_plain;h=674380e1553dbbd46bdd2da199666df0091e5dce;p=cacao.git Merged revisions 8299-8320 via svnmerge from svn+ssh://michi@c1.complang.tuwien.ac.at/ahome/cacao/svn/cacao/trunk ........ r8300 | michi | 2007-08-13 12:23:20 +0200 (Mon, 13 Aug 2007) | 2 lines * src/native/localref.c (localref_table_remove): Fixed assertion. ........ r8301 | twisti | 2007-08-13 15:34:12 +0200 (Mon, 13 Aug 2007) | 5 lines * configure.ac (dl): Check for dl before all other stuff. (AC_CHECK_ENABLE_LIBJVM): Added. * m4/libjvm.m4: New file. ........ r8303 | twisti | 2007-08-13 21:01:52 +0200 (Mon, 13 Aug 2007) | 2 lines * src/vm/exceptions.c (exceptions_print_exception): Fixed typo. ........ r8304 | pm | 2007-08-14 21:57:20 +0200 (Tue, 14 Aug 2007) | 9 lines * src/threads/none/threads.h [!defined(NDEBUG)] (_no_threads_tracejavacallindent, _no_threads_tracejavacallcount, TRACEJAVACALLINDENT, TRACEJAVACALLCOUNT): added. * src/threads/native/threads.h [!defined(NDEBUG)] (threadinfo): Added tracejavacallindent, tracejavacallcount members. (TRACEJAVACALLINDENT, TRACEJAVACALLCOUNT): added. * src/threads/native/threads.c: Likewise. * src/vm/jit/trace.h New file. * src/vm/jit/trace.c: Likewise. * src/vm/jit/Makefile.am (libjit_la_SOURCES): added trace.h and trace.c. * src/vm/jit/s390/emit.c (emit_verbosecall_enter): adpated to use trace_java_call_enter, (emit_verbosecall_exit): adapted to use trace_java_call_exit. ........ r8305 | panzi | 2007-08-15 15:49:26 +0200 (Wed, 15 Aug 2007) | 34 lines * src/native/vm/java_lang_Class.c (_Jv_java_lang_Class_getDeclaredAnnotations): Use LLNI_* macro. * src/native/vm/gnu/java_lang_reflect_Method.c (Java_java_lang_reflect_Method_getDefaultValue): Use LLNI_* macros. (Java_java_lang_reflect_Method_declaredAnnotations): Use LLNI_* macros. (Java_java_lang_reflect_Method_getParameterAnnotations): Use LLNI_* macros. * src/native/vm/gnu/java_lang_reflect_Field.c (Java_java_lang_reflect_Field_declaredAnnotations): Use LLNI_* macros. * src/native/vm/gnu/java_lang_reflect_Constructor.c (Java_java_lang_reflect_Constructor_declaredAnnotations): Use LLNI_* macros. (Java_java_lang_reflect_Constructor_getParameterAnnotations): Use LLNI_* macros. * src/native/vm/sun/jvm.c (native/llni.h): Added include. (JVM_GetFieldAnnotations): Use LLNI_* macros. (JVM_GetMethodAnnotations): Use LLNI_* macros. (JVM_GetMethodDefaultAnnotationValue): Use LLNI_* macros. (JVM_GetMethodParameterAnnotations): Use LLNI_* macros. (JVM_GetClassConstantPool): Use LLNI_* macros. * src/native/vm/reflect.c (reflect_constructor_new): Forgot to set annotations and parameterAnnotations attributes for GNU Classpath. (reflect_get_declaredannotatios): Use LLNI_* macros. (reflect_get_parameterannotations): Use LLNI_* macros. * src/native/vm/reflect.h (reflect_get_declaredannotatios): Now the caller has to set the declaredAnnotations attribute of the according object itself, because the LLNI_* macros can't get the address of an field. ........ r8306 | twisti | 2007-08-15 16:47:11 +0200 (Wed, 15 Aug 2007) | 5 lines * src/vm/signal.c (signal_init): Cast to functionptr to fix warnings. (signal_register_signal): Changed signature. * src/vm/signallocal.h (signal_register_signal): Likewise. ........ r8307 | twisti | 2007-08-15 17:20:47 +0200 (Wed, 15 Aug 2007) | 7 lines * src/vmcore/class.c (class_get_interfaces): New function. * src/vmcore/class.h (class_get_interfaces): Likewise. * src/native/vm/java_lang_Class.c (getSuperclass): Cast return value. (getInterfaces): Use class_get_interfaces. * src/native/vm/sun/jvm.c (JVM_GetClassInterfaces): Likewise. ........ r8308 | pm | 2007-08-15 18:03:28 +0200 (Wed, 15 Aug 2007) | 2 lines * src/native/vm/sun/jvm.c (JVM_Available) [FIONREAD]: Argument to ioctl is int *. ........ r8309 | twisti | 2007-08-15 18:42:52 +0200 (Wed, 15 Aug 2007) | 10 lines * src/vmcore/class.c (vm/builtin.h): Added. (class_get_declaredclasses): New function. * src/vmcore/class.h (class_get_declaredclasses): Likewise. * src/native/vm/java_lang_Class.c (getDeclaredClasses): Use class_get_declaredclasses. * src/native/vm/sun/jvm.c (JVM_GetDeclaredClasses): Likewise. ........ r8310 | twisti | 2007-08-15 18:49:03 +0200 (Wed, 15 Aug 2007) | 3 lines * src/native/vm/sun/jvm.c (JVM_GetClassInterfaces): Bugfix, forgot to set c. ........ r8311 | panzi | 2007-08-15 19:03:40 +0200 (Wed, 15 Aug 2007) | 20 lines * src/native/vm/java_lang_Class.c [WITH_CLASSPATH_GNU] [ENABLE_ANNOTATIONS] (vm/vm.h): Added include. * src/native/vm/gnu/sun_reflect_ConstantPool.c (vm/stringlocal.h): Added include. (Java_sun_reflect_ConstantPool_getClassAtIfLoaded0): Removed wrong call of the macro TRACEJVMCALLS. * src/native/vm/gnu/java_lang_reflect_Method.c (Java_java_lang_reflect_Method_getDefaultValue): Added proper casts so gcc don't give me warnings. * src/native/vm/gnu/java_lang_reflect_Constructor.c [ENABLE_ANNOTATIONS] (vm/exceptions.h): Added include. * src/native/vm/sun/jvm.c (JVM_ConstantPoolGetStringAt): Corrected cast. (JVM_ConstantPoolGetUTF8At): Corrected cast. (JVM_GetArrayElement): Using primitive_box_* functions. ........ r8312 | twisti | 2007-08-16 00:10:22 +0200 (Thu, 16 Aug 2007) | 2 lines * src/native/jni.c (native/localref.h): Added. ........ r8313 | twisti | 2007-08-16 00:11:35 +0200 (Thu, 16 Aug 2007) | 4 lines * src/native/localref.c: Added Id keyword. * src/native/localref.h: Likewise. * src/native/llni.h: Likewise. ........ r8314 | twisti | 2007-08-16 00:18:44 +0200 (Thu, 16 Aug 2007) | 2 lines * src/vm/jit/codegen-common.c (native/localref.h): Added. ........ r8315 | panzi | 2007-08-16 00:49:20 +0200 (Thu, 16 Aug 2007) | 28 lines * src/native/vm/reflect.c (reflect_constructor_new): Allocation of the java_bytearray is now done in the method_get_* functions. (reflect_field_new): Allocation of the java_bytearray is now done in the field_get_* functions. (reflect_method_new): Allocation of the java_bytearray is now done in the method_get_* functions. Added use of LLNI_field_* macros. * src/vmcore/method.c (method_get_annotations): Do allocation of the java_bytearray here. (method_get_parameterannotations): Do allocation of the java_bytearray here. (method_get_annotationdefault): Do allocation of the java_bytearray here. * src/vmcore/method.h (method_get_annotations): This function now returns java_bytearray*. (method_get_parameterannotations): This function now returns java_bytearray*. (method_get_annotationdefault): This function now returns java_bytearray*. * src/vmcore/field.c (vm/builtin.h): Added include. (field_get_annotations): Do allocation of the java_bytearray here. * src/vmcore/field.h (field_get_annotations): This function now returns java_bytearray*. * src/cacaoh/dummy.c (builtin_newarray_byte): Added. ........ r8316 | ajordan | 2007-08-16 01:32:57 +0200 (Thu, 16 Aug 2007) | 6 lines * src/vm/jit/sparc64/codegen.h: Added M_SAVE_REG and 13-bit overflow checking. * src/vm/jit/sparc64/codegen.c (codegen_emit): Fixed stack increasing for large stackframe sizes. (check_13bit_imm): Added for overflow checking. ........ r8317 | pm | 2007-08-16 08:53:26 +0200 (Thu, 16 Aug 2007) | 2 lines * src/vm/jit/trace (_array_load_param) [SIZEOF_VOID_P == 8]: Bugfix, forgotten obsolete stack_offset. ........ r8318 | michi | 2007-08-16 12:05:34 +0200 (Thu, 16 Aug 2007) | 70 lines * src/native/llni.h: Added macros for array handling. * src/vm/global.h: Added typedefs for array handles. Renamed array types. Use LLNI macros for array access and adapted to above changes: * src/vm/access.c * src/vm/jit/arm/emit.c * src/vm/jit/arm/codegen.c * src/vm/jit/powerpc/emit.c * src/vm/jit/powerpc/codegen.c * src/vm/jit/sparc64/emit.c * src/vm/jit/sparc64/codegen.c * src/vm/jit/alpha/emit.c * src/vm/jit/alpha/codegen.c * src/vm/jit/s390/emit.c * src/vm/jit/s390/codegen.c * src/vm/jit/mips/emit.c * src/vm/jit/mips/codegen.c * src/vm/jit/m68k/emit.c * src/vm/jit/m68k/codegen.c * src/vm/jit/powerpc64/emit.c * src/vm/jit/powerpc64/codegen.c * src/vm/jit/i386/emit.c * src/vm/jit/i386/codegen.c * src/vm/jit/x86_64/emit.c * src/vm/jit/x86_64/codegen.c * src/vm/jit/stacktrace.c * src/vm/jit/stacktrace.h * src/vm/builtin.c * src/vm/string.c * src/vm/builtin.h * src/vm/exceptions.c * src/vm/vm.c * src/vm/stringlocal.h * src/vm/vm.h * src/native/jni.c * src/native/vm/java_lang_ClassLoader.c * src/native/vm/java_lang_reflect_Constructor.h * src/native/vm/java_lang_ClassLoader.h * src/native/vm/java_lang_Class.c * src/native/vm/gnu/gnu_java_lang_management_VMThreadMXBeanImpl.c * src/native/vm/gnu/java_security_VMAccessController.c * src/native/vm/gnu/java_lang_VMClassLoader.c * src/native/vm/gnu/java_lang_management_VMManagementFactory.c * src/native/vm/gnu/java_lang_VMClass.c * src/native/vm/gnu/gnu_java_lang_management_VMRuntimeMXBeanImpl.c * src/native/vm/gnu/sun_reflect_ConstantPool.c * src/native/vm/gnu/java_lang_reflect_Method.c * src/native/vm/gnu/gnu_classpath_VMStackWalker.c * src/native/vm/gnu/java_lang_VMSystem.c * src/native/vm/gnu/java_lang_reflect_Constructor.c * src/native/vm/gnu/java_lang_VMThrowable.c * src/native/vm/java_lang_Class.h * src/native/vm/sun_misc_Unsafe.c * src/native/vm/sun/jvm.c * src/native/vm/reflect.c * src/native/vm/java_lang_reflect_Method.c * src/native/vm/reflect.h * src/native/vm/java_lang_reflect_Constructor.c * src/native/vm/java_lang_reflect_Method.h * src/native/jni.h * src/vmcore/class.c * src/vmcore/class.h * src/vmcore/method.c * src/vmcore/method.h * src/vmcore/linker.c * src/cacaoh/headers.h * src/cacaoh/dummy.c * src/cacaoh/headers.c ........ r8319 | michi | 2007-08-16 12:43:43 +0200 (Thu, 16 Aug 2007) | 5 lines * src/native/vm/java_lang_Class.c (_Jv_java_lang_Class_getDeclaredFields): Fixed postincrement of array index. (_Jv_java_lang_Class_getDeclaredMethods): Likewise. (_Jv_java_lang_Class_getDeclaredConstructors): Likewise. ........ r8320 | michi | 2007-08-16 13:35:14 +0200 (Thu, 16 Aug 2007) | 4 lines * src/vm/jit/allocator/simplereg.c (simplereg_free): Index into memcopycount is divided by SIZE_OF_STACKSLOT now. (simplereg_allocate_temporaries): Likewise. ........ --HG-- branch : exact-gc --- diff --git a/configure.ac b/configure.ac index 0b614aaa4..74312f04a 100644 --- a/configure.ac +++ b/configure.ac @@ -22,7 +22,7 @@ dnl along with this program; if not, write to the Free Software dnl Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA dnl 02110-1301, USA. dnl -dnl $Id: configure.ac 8299 2007-08-13 08:41:18Z michi $ +dnl $Id: configure.ac 8301 2007-08-13 13:34:12Z twisti $ dnl Process this file with autoconf to produce a configure script. @@ -249,6 +249,10 @@ AC_TYPE_SIZE_T AC_HEADER_TIME AC_STRUCT_TM +dnl Checks for libraries (NOTE: Should be done before function checks, +dnl as some functions may be in libraries we check for). +AC_CHECK_LIB(dl, dlopen,,) + dnl Checks for library functions. AC_PROG_GCC_TRADITIONAL AC_TYPE_SIGNAL @@ -803,37 +807,14 @@ AC_CHECK_ENABLE_ZLIB dnl check for stuff to be built AC_CHECK_ENABLE_JNI +AC_CHECK_ENABLE_LIBJVM - -dnl check if a libjvm.so should be built -AC_MSG_CHECKING(whether to build a libjvm.so) -AC_ARG_ENABLE([libjvm], - [AS_HELP_STRING(--disable-libjvm,build a libjvm.so [[default=yes]])], - [case "${enableval}" in - no) ENABLE_LIBJVM=no;; - *) ENABLE_LIBJVM=yes;; - esac], - [ENABLE_LIBJVM=yes]) -AC_MSG_RESULT(${ENABLE_LIBJVM}) -AM_CONDITIONAL([ENABLE_LIBJVM], test x"${ENABLE_LIBJVM}" = "xyes") -AC_SUBST(ENABLE_LIBJVM) - -if test x"${ENABLE_LIBJVM}" = "xyes"; then - AC_DEFINE([ENABLE_LIBJVM], 1, [enable libjvm.so]) - - dnl set AC_ENABLE_SHARED and AC_DISABLE_STATIC properly - enable_shared=yes - enable_static=no -else - enable_shared=no - enable_static=yes -fi - -dnl libtool stuff +dnl ATTENTION: These check must be after setting +dnl enable_shared/enable_static (happens in AC_CHECK_ENABLE_LIBJVM), +dnl because libtool uses them to build the correct libraries. AC_LIBTOOL_DLOPEN AC_PROG_LIBTOOL - dnl check if CACAO should be linked statically AC_MSG_CHECKING(whether to link CACAO statically) AC_ARG_ENABLE([staticvm], diff --git a/src/cacaoh/dummy.c b/src/cacaoh/dummy.c index 285e11d6b..de58bf949 100644 --- a/src/cacaoh/dummy.c +++ b/src/cacaoh/dummy.c @@ -22,7 +22,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - $Id: dummy.c 8299 2007-08-13 08:41:18Z michi $ + $Id: dummy.c 8321 2007-08-16 11:37:25Z michi $ */ @@ -123,7 +123,14 @@ java_handle_t *builtin_new(classinfo *c) return NULL; } -java_objectarray *builtin_anewarray(int32_t size, classinfo *componentclass) +java_handle_objectarray_t *builtin_anewarray(int32_t size, classinfo *componentclass) +{ + abort(); + + return NULL; +} + +java_handle_bytearray_t *builtin_newarray_byte(int32_t size) { abort(); @@ -594,7 +601,7 @@ classinfo * resolve_classref_or_classinfo_eager(classref_or_classinfo cls, /* stacktrace *****************************************************************/ -java_objectarray *stacktrace_getClassContext() +java_handle_objectarray_t *stacktrace_getClassContext() { return NULL; } diff --git a/src/cacaoh/headers.c b/src/cacaoh/headers.c index 2e597df29..2dccb9855 100644 --- a/src/cacaoh/headers.c +++ b/src/cacaoh/headers.c @@ -22,7 +22,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - $Id: headers.c 8295 2007-08-11 17:57:24Z michi $ + $Id: headers.c 8318 2007-08-16 10:05:34Z michi $ */ @@ -174,24 +174,24 @@ static char *printtype(char *utf_ptr) fprintf(file, "double"); break; case '[': - addoutputsize ( sizeof(java_arrayheader*) ); + addoutputsize ( sizeof(java_array_t*) ); switch (utf_nextu2(&utf_ptr)) { - case 'I': fprintf (file, "java_intarray*"); break; - case 'J': fprintf (file, "java_longarray*"); break; - case 'Z': fprintf (file, "java_booleanarray*"); break; - case 'B': fprintf (file, "java_bytearray*"); break; - case 'S': fprintf (file, "java_shortarray*"); break; - case 'C': fprintf (file, "java_chararray*"); break; - case 'F': fprintf (file, "java_floatarray*"); break; - case 'D': fprintf (file, "java_doublearray*"); break; + case 'I': fprintf (file, "java_intarray_t*"); break; + case 'J': fprintf (file, "java_longarray_t*"); break; + case 'Z': fprintf (file, "java_booleanarray_t*"); break; + case 'B': fprintf (file, "java_bytearray_t*"); break; + case 'S': fprintf (file, "java_shortarray_t*"); break; + case 'C': fprintf (file, "java_chararray_t*"); break; + case 'F': fprintf (file, "java_floatarray_t*"); break; + case 'D': fprintf (file, "java_doublearray_t*"); break; - case '[': fprintf(file, "java_objectarray*"); + case '[': fprintf(file, "java_objectarray_t*"); while ((c = utf_nextu2(&utf_ptr)) == '['); if (c == 'L') while (utf_nextu2(&utf_ptr) != ';'); break; - case 'L': fprintf(file, "java_objectarray*"); + case 'L': fprintf(file, "java_objectarray_t*"); while (utf_nextu2(&utf_ptr) != ';'); break; default: diff --git a/src/cacaoh/headers.h b/src/cacaoh/headers.h index a404eff6b..16ef7adb6 100644 --- a/src/cacaoh/headers.h +++ b/src/cacaoh/headers.h @@ -22,7 +22,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - $Id: headers.h 8295 2007-08-11 17:57:24Z michi $ + $Id: headers.h 8318 2007-08-16 10:05:34Z michi $ */ @@ -42,7 +42,6 @@ /* export variables ***********************************************************/ -#warning object or handle??? extern java_object_t *_exceptionptr; extern chain *nativemethod_chain; extern chain *nativeclass_chain; diff --git a/src/native/jni.c b/src/native/jni.c index 162aebcb0..aa7d44e92 100644 --- a/src/native/jni.c +++ b/src/native/jni.c @@ -22,7 +22,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - $Id: jni.c 8299 2007-08-13 08:41:18Z michi $ + $Id: jni.c 8321 2007-08-16 11:37:25Z michi $ */ @@ -37,8 +37,10 @@ #include "mm/gc-common.h" #include "mm/memory.h" + #include "native/jni.h" #include "native/llni.h" +#include "native/localref.h" #include "native/native.h" #if defined(ENABLE_JAVASE) @@ -786,7 +788,7 @@ static void _Jv_jni_CallVoidMethodA(java_handle_t *o, vftbl_t *vftbl, *******************************************************************************/ java_handle_t *_Jv_jni_invokeNative(methodinfo *m, java_handle_t *o, - java_objectarray *params) + java_handle_objectarray_t *params) { methodinfo *resm; java_handle_t *ro; @@ -822,7 +824,7 @@ java_handle_t *_Jv_jni_invokeNative(methodinfo *m, java_handle_t *o, /* check if we got the right number of arguments */ if (((params == NULL) && (paramcount != 0)) || - (params && (params->header.size != paramcount))) + (params && (LLNI_array_size(params) != paramcount))) { exceptions_throw_illegalargumentexception(); return NULL; @@ -2634,9 +2636,9 @@ void _Jv_JNI_SetStaticObjectField(JNIEnv *env, jclass clazz, jfieldID fieldID, jstring _Jv_JNI_NewString(JNIEnv *env, const jchar *buf, jsize len) { - java_lang_String *s; - java_chararray *a; - u4 i; + java_lang_String *s; + java_handle_chararray_t *a; + u4 i; STATISTICS(jniinvokation()); @@ -2649,7 +2651,7 @@ jstring _Jv_JNI_NewString(JNIEnv *env, const jchar *buf, jsize len) /* copy text */ for (i = 0; i < len; i++) - a->data[i] = buf[i]; + LLNI_array_direct(a, i) = buf[i]; LLNI_field_set_ref(s, value , a); LLNI_field_set_val(s, offset, 0); @@ -2687,10 +2689,12 @@ jsize _Jv_JNI_GetStringLength(JNIEnv *env, jstring str) u2 *javastring_tou2(jstring so) { - java_lang_String *s; - java_chararray *a; - u2 *stringbuffer; - u4 i; + java_lang_String *s; + java_handle_chararray_t *a; + u2 *stringbuffer; + u4 i; + int32_t count; + int32_t offset; STATISTICS(jniinvokation()); @@ -2704,14 +2708,17 @@ u2 *javastring_tou2(jstring so) if (!a) return NULL; + LLNI_field_get_val(s, count, count); + LLNI_field_get_val(s, offset, offset); + /* allocate memory */ - stringbuffer = MNEW(u2, LLNI_field_direct(s, count) + 1); + stringbuffer = MNEW(u2, count + 1); /* copy text */ - for (i = 0; i < LLNI_field_direct(s, count); i++) - stringbuffer[i] = a->data[LLNI_field_direct(s, offset) + i]; + for (i = 0; i < count; i++) + stringbuffer[i] = LLNI_array_direct(a, offset + i); /* terminate string */ @@ -2796,14 +2803,14 @@ jstring _Jv_JNI_NewStringUTF(JNIEnv *env, const char *bytes) jsize _Jv_JNI_GetStringUTFLength(JNIEnv *env, jstring string) { - java_lang_String *s; + java_lang_String *s; s4 length; TRACEJNICALLS("_Jv_JNI_GetStringUTFLength(env=%p, string=%p)", env, string); s = (java_lang_String *) string; - length = u2_utflength(LLNI_field_direct(s, value)->data, LLNI_field_direct(s, count)); + length = u2_utflength(LLNI_field_direct(s, value)->data, LLNI_field_direct(s, count)); return length; } @@ -2867,13 +2874,16 @@ void _Jv_JNI_ReleaseStringUTFChars(JNIEnv *env, jstring string, const char *utf) jsize _Jv_JNI_GetArrayLength(JNIEnv *env, jarray array) { - java_arrayheader *a; + java_handle_t *a; + jsize size; STATISTICS(jniinvokation()); - a = (java_arrayheader *) array; + a = (java_handle_t *) array; - return a->size; + size = LLNI_array_size(a); + + return size; } @@ -2887,10 +2897,10 @@ jsize _Jv_JNI_GetArrayLength(JNIEnv *env, jarray array) jobjectArray _Jv_JNI_NewObjectArray(JNIEnv *env, jsize length, jclass elementClass, jobject initialElement) { - classinfo *c; - java_handle_t *o; - java_objectarray *oa; - s4 i; + classinfo *c; + java_handle_t *o; + java_handle_objectarray_t *oa; + s4 i; STATISTICS(jniinvokation()); @@ -2910,7 +2920,7 @@ jobjectArray _Jv_JNI_NewObjectArray(JNIEnv *env, jsize length, /* set all elements to initialElement */ for (i = 0; i < length; i++) - oa->data[i] = o; + LLNI_objectarray_element_set(oa, i, o); return (jobjectArray) _Jv_JNI_NewLocalRef(env, (jobject) oa); } @@ -2919,19 +2929,19 @@ jobjectArray _Jv_JNI_NewObjectArray(JNIEnv *env, jsize length, jobject _Jv_JNI_GetObjectArrayElement(JNIEnv *env, jobjectArray array, jsize index) { - java_objectarray *oa; - java_handle_t *o; + java_handle_objectarray_t *oa; + java_handle_t *o; STATISTICS(jniinvokation()); - oa = (java_objectarray *) array; + oa = (java_handle_objectarray_t *) array; - if (index >= oa->header.size) { + if (index >= LLNI_array_size(oa)) { exceptions_throw_arrayindexoutofboundsexception(); return NULL; } - o = oa->data[index]; + LLNI_objectarray_element_get(oa, index, o); return _Jv_JNI_NewLocalRef(env, (jobject) o); } @@ -2940,15 +2950,15 @@ jobject _Jv_JNI_GetObjectArrayElement(JNIEnv *env, jobjectArray array, void _Jv_JNI_SetObjectArrayElement(JNIEnv *env, jobjectArray array, jsize index, jobject val) { - java_objectarray *oa; - java_handle_t *o; + java_handle_objectarray_t *oa; + java_handle_t *o; STATISTICS(jniinvokation()); - oa = (java_objectarray *) array; + oa = (java_handle_objectarray_t *) array; o = (java_handle_t *) val; - if (index >= oa->header.size) { + if (index >= LLNI_array_size(oa)) { exceptions_throw_arrayindexoutofboundsexception(); return; } @@ -2959,14 +2969,14 @@ void _Jv_JNI_SetObjectArrayElement(JNIEnv *env, jobjectArray array, if (!builtin_canstore(oa, o)) return; - oa->data[index] = o; + LLNI_objectarray_element_set(oa, index, o); } #define JNI_NEW_ARRAY(name, type, intern) \ type _Jv_JNI_New##name##Array(JNIEnv *env, jsize len) \ { \ - java_##intern##array *a; \ + java_handle_##intern##array_t *a; \ \ STATISTICS(jniinvokation()); \ \ @@ -3000,16 +3010,16 @@ JNI_NEW_ARRAY(Double, jdoubleArray, double) type *_Jv_JNI_Get##name##ArrayElements(JNIEnv *env, type##Array array, \ jboolean *isCopy) \ { \ - java_##intern##array *a; \ + java_handle_##intern##array_t *a; \ \ STATISTICS(jniinvokation()); \ \ - a = (java_##intern##array *) array; \ + a = (java_handle_##intern##array_t *) array; \ \ if (isCopy) \ *isCopy = JNI_FALSE; \ \ - return a->data; \ + return LLNI_array_data(a); \ } JNI_GET_ARRAY_ELEMENTS(Boolean, jboolean, boolean) @@ -3033,30 +3043,30 @@ JNI_GET_ARRAY_ELEMENTS(Double, jdouble, double) *******************************************************************************/ -#define JNI_RELEASE_ARRAY_ELEMENTS(name, type, intern, intern2) \ -void _Jv_JNI_Release##name##ArrayElements(JNIEnv *env, type##Array array, \ - type *elems, jint mode) \ -{ \ - java_##intern##array *a; \ - \ - STATISTICS(jniinvokation()); \ - \ - a = (java_##intern##array *) array; \ - \ - if (elems != a->data) { \ - switch (mode) { \ - case JNI_COMMIT: \ - MCOPY(a->data, elems, intern2, a->header.size); \ - break; \ - case 0: \ - MCOPY(a->data, elems, intern2, a->header.size); \ - /* XXX TWISTI how should it be freed? */ \ - break; \ - case JNI_ABORT: \ - /* XXX TWISTI how should it be freed? */ \ - break; \ - } \ - } \ +#define JNI_RELEASE_ARRAY_ELEMENTS(name, type, intern, intern2) \ +void _Jv_JNI_Release##name##ArrayElements(JNIEnv *env, type##Array array, \ + type *elems, jint mode) \ +{ \ + java_handle_##intern##array_t *a; \ + \ + STATISTICS(jniinvokation()); \ + \ + a = (java_handle_##intern##array_t *) array; \ + \ + if (elems != LLNI_array_data(a)) { \ + switch (mode) { \ + case JNI_COMMIT: \ + MCOPY(LLNI_array_data(a), elems, intern2, LLNI_array_size(a)); \ + break; \ + case 0: \ + MCOPY(LLNI_array_data(a), elems, intern2, LLNI_array_size(a)); \ + /* XXX TWISTI how should it be freed? */ \ + break; \ + case JNI_ABORT: \ + /* XXX TWISTI how should it be freed? */ \ + break; \ + } \ + } \ } JNI_RELEASE_ARRAY_ELEMENTS(Boolean, jboolean, boolean, u1) @@ -3076,20 +3086,20 @@ JNI_RELEASE_ARRAY_ELEMENTS(Double, jdouble, double, double) *******************************************************************************/ -#define JNI_GET_ARRAY_REGION(name, type, intern, intern2) \ -void _Jv_JNI_Get##name##ArrayRegion(JNIEnv *env, type##Array array, \ - jsize start, jsize len, type *buf) \ -{ \ - java_##intern##array *a; \ - \ - STATISTICS(jniinvokation()); \ - \ - a = (java_##intern##array *) array; \ - \ - if ((start < 0) || (len < 0) || (start + len > a->header.size)) \ - exceptions_throw_arrayindexoutofboundsexception(); \ - else \ - MCOPY(buf, &a->data[start], intern2, len); \ +#define JNI_GET_ARRAY_REGION(name, type, intern, intern2) \ +void _Jv_JNI_Get##name##ArrayRegion(JNIEnv *env, type##Array array, \ + jsize start, jsize len, type *buf) \ +{ \ + java_handle_##intern##array_t *a; \ + \ + STATISTICS(jniinvokation()); \ + \ + a = (java_handle_##intern##array_t *) array; \ + \ + if ((start < 0) || (len < 0) || (start + len > LLNI_array_size(a))) \ + exceptions_throw_arrayindexoutofboundsexception(); \ + else \ + MCOPY(buf, &LLNI_array_direct(a, start), intern2, len); \ } JNI_GET_ARRAY_REGION(Boolean, jboolean, boolean, u1) @@ -3113,16 +3123,16 @@ JNI_GET_ARRAY_REGION(Double, jdouble, double, double) void _Jv_JNI_Set##name##ArrayRegion(JNIEnv *env, type##Array array, \ jsize start, jsize len, const type *buf) \ { \ - java_##intern##array *a; \ + java_handle_##intern##array_t *a; \ \ STATISTICS(jniinvokation()); \ \ - a = (java_##intern##array *) array; \ + a = (java_handle_##intern##array_t *) array; \ \ - if ((start < 0) || (len < 0) || (start + len > a->header.size)) \ + if ((start < 0) || (len < 0) || (start + len > LLNI_array_size(a))) \ exceptions_throw_arrayindexoutofboundsexception(); \ else \ - MCOPY(&a->data[start], buf, intern2, len); \ + MCOPY(&LLNI_array_direct(a, start), buf, intern2, len); \ } JNI_SET_ARRAY_REGION(Boolean, jboolean, boolean, u1) @@ -3271,8 +3281,8 @@ jint _Jv_JNI_GetJavaVM(JNIEnv *env, JavaVM **vm) void _Jv_JNI_GetStringRegion(JNIEnv* env, jstring str, jsize start, jsize len, jchar *buf) { - java_lang_String *s; - java_chararray *ca; + java_lang_String *s; + java_handle_chararray_t *ca; STATISTICS(jniinvokation()); @@ -3285,7 +3295,7 @@ void _Jv_JNI_GetStringRegion(JNIEnv* env, jstring str, jsize start, jsize len, return; } - MCOPY(buf, &ca->data[start], u2, len); + MCOPY(buf, &LLNI_array_direct(ca, start), u2, len); } @@ -3302,23 +3312,26 @@ void _Jv_JNI_GetStringRegion(JNIEnv* env, jstring str, jsize start, jsize len, void _Jv_JNI_GetStringUTFRegion(JNIEnv* env, jstring str, jsize start, jsize len, char *buf) { - java_lang_String *s; - java_chararray *ca; - s4 i; + java_lang_String *s; + java_handle_chararray_t *ca; + s4 i; + int32_t count; + int32_t offset; TRACEJNICALLS("_Jv_JNI_GetStringUTFRegion(env=%p, str=%p, start=%d, len=%d, buf=%p)", env, str, start, len, buf); s = (java_lang_String *) str; LLNI_field_get_ref(s, value, ca); + LLNI_field_get_val(s, count, count); + LLNI_field_get_val(s, offset, offset); - if ((start < 0) || (len < 0) || (start > LLNI_field_direct(s, count)) || - (start + len > LLNI_field_direct(s, count))) { + if ((start < 0) || (len < 0) || (start > count) || (start + len > count)) { exceptions_throw_stringindexoutofboundsexception(); return; } for (i = 0; i < len; i++) - buf[i] = ca->data[LLNI_field_direct(s, offset) + start + i]; + buf[i] = LLNI_array_direct(ca, offset + start + i); buf[i] = '\0'; } @@ -3333,10 +3346,10 @@ void _Jv_JNI_GetStringUTFRegion(JNIEnv* env, jstring str, jsize start, void *_Jv_JNI_GetPrimitiveArrayCritical(JNIEnv *env, jarray array, jboolean *isCopy) { - java_bytearray *ba; - jbyte *bp; + java_handle_bytearray_t *ba; + jbyte *bp; - ba = (java_bytearray *) array; + ba = (java_handle_bytearray_t *) array; /* do the same as Kaffe does */ diff --git a/src/native/jni.h b/src/native/jni.h index e295b00f1..9dacaf72c 100644 --- a/src/native/jni.h +++ b/src/native/jni.h @@ -22,7 +22,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - $Id: jni.h 8297 2007-08-12 00:02:48Z michi $ + $Id: jni.h 8318 2007-08-16 10:05:34Z michi $ */ @@ -112,7 +112,7 @@ struct hashtable_global_ref_entry { bool jni_init(void); java_handle_t *_Jv_jni_invokeNative(methodinfo *m, java_handle_t *o, - java_objectarray *params); + java_handle_objectarray_t *params); #endif /* _JNI_H */ diff --git a/src/native/localref.c b/src/native/localref.c index 09d89b352..a9a9d3368 100644 --- a/src/native/localref.c +++ b/src/native/localref.c @@ -22,7 +22,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - $Id$ + $Id: localref.c 8321 2007-08-16 11:37:25Z michi $ */ @@ -38,6 +38,17 @@ #include "threads/threads-common.h" +#include "toolbox/logging.h" + + +/* debug **********************************************************************/ + +#if !defined(NDEBUG) && 0 +# define TRACELOCALREF(message) log_println("%s", message) +#else +# define TRACELOCALREF(message) +#endif + /* global variables ***********************************************************/ @@ -56,6 +67,8 @@ bool localref_table_init(void) { localref_table *lrt; + TRACELOCALREF("table init"); + assert(LOCALREFTABLE == NULL); #if defined(ENABLE_GC_CACAO) @@ -113,8 +126,8 @@ void localref_table_remove() lrt = LOCALREFTABLE; + assert(lrt != NULL); assert(lrt->localframes == 1); - assert(lrt->prev != NULL); lrt = lrt->prev; @@ -135,6 +148,13 @@ bool localref_frame_push(int32_t capacity) localref_table *nlrt; int32_t additionalrefs; + TRACELOCALREF("frame push"); + + /* get current local reference table from thread */ + + lrt = LOCALREFTABLE; + + assert(lrt != NULL); assert(capacity > 0); /* Allocate new local reference table on Java heap. Calculate the @@ -154,10 +174,6 @@ bool localref_frame_push(int32_t capacity) if (nlrt == NULL) return false; - /* get current local reference table from thread */ - - lrt = LOCALREFTABLE; - /* Set up the new local reference table and add it to the local frames chain. */ @@ -187,10 +203,14 @@ void localref_frame_pop_all(void) int32_t localframes; int32_t additionalrefs; + TRACELOCALREF("frame pop all"); + /* get current local reference table from thread */ lrt = LOCALREFTABLE; + assert(lrt != NULL); + localframes = lrt->localframes; /* Don't delete the top local frame, as this one is allocated in @@ -252,10 +272,10 @@ void localref_dump() lrt = LOCALREFTABLE; - printf("\n--------- Local Reference Tables Dump ---------\n"); + log_println("--------- Local Reference Tables Dump ---------"); while (lrt != NULL) { - printf("Frame #%d, Used=%d, Capacity=%d, Addr=%p:\n", lrt->localframes, lrt->used, lrt->capacity, (void *) lrt); + log_println("Frame #%d, Used=%d, Capacity=%d, Addr=%p:", lrt->localframes, lrt->used, lrt->capacity, (void *) lrt); for (i = 0; i < lrt->used; i++) { printf("\t0x%08lx ", (intptr_t) lrt->refs[i]); diff --git a/src/native/vm/gnu/gnu_classpath_VMStackWalker.c b/src/native/vm/gnu/gnu_classpath_VMStackWalker.c index 716bd47d2..d8525ea49 100644 --- a/src/native/vm/gnu/gnu_classpath_VMStackWalker.c +++ b/src/native/vm/gnu/gnu_classpath_VMStackWalker.c @@ -22,7 +22,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - $Id: gnu_classpath_VMStackWalker.c 8299 2007-08-13 08:41:18Z michi $ + $Id: gnu_classpath_VMStackWalker.c 8321 2007-08-16 11:37:25Z michi $ */ @@ -30,6 +30,7 @@ #include "config.h" #include "native/jni.h" +#include "native/llni.h" #include "native/native.h" #include "native/include/java_lang_Class.h" @@ -76,9 +77,9 @@ void _Jv_gnu_classpath_VMStackWalker_init(void) * Method: getClassContext * Signature: ()[Ljava/lang/Class; */ -JNIEXPORT java_objectarray* JNICALL Java_gnu_classpath_VMStackWalker_getClassContext(JNIEnv *env, jclass clazz) +JNIEXPORT java_handle_objectarray_t* JNICALL Java_gnu_classpath_VMStackWalker_getClassContext(JNIEnv *env, jclass clazz) { - java_objectarray *oa; + java_handle_objectarray_t *oa; oa = stacktrace_getClassContext(); @@ -93,17 +94,20 @@ JNIEXPORT java_objectarray* JNICALL Java_gnu_classpath_VMStackWalker_getClassCon */ JNIEXPORT java_lang_Class* JNICALL Java_gnu_classpath_VMStackWalker_getCallingClass(JNIEnv *env, jclass clazz) { - java_objectarray *oa; + java_handle_objectarray_t *oa; + java_handle_t *o; oa = stacktrace_getClassContext(); if (oa == NULL) return NULL; - if (oa->header.size < 2) + if (LLNI_array_size(oa) < 2) return NULL; - return (java_lang_Class *) oa->data[1]; + LLNI_objectarray_element_get(oa, 1, o); + + return (java_lang_Class *) o; } @@ -114,20 +118,20 @@ JNIEXPORT java_lang_Class* JNICALL Java_gnu_classpath_VMStackWalker_getCallingCl */ JNIEXPORT java_lang_ClassLoader* JNICALL Java_gnu_classpath_VMStackWalker_getCallingClassLoader(JNIEnv *env, jclass clazz) { - java_objectarray *oa; - classinfo *c; - classloader *cl; + java_handle_objectarray_t *oa; + classinfo *c; + classloader *cl; oa = stacktrace_getClassContext(); if (oa == NULL) return NULL; - if (oa->header.size < 2) + if (LLNI_array_size(oa) < 2) return NULL; - c = (classinfo *) oa->data[1]; - cl = c->classloader; + c = (classinfo *) LLNI_array_direct(oa, 1); + cl = c->classloader; if (cl == NULL) return NULL; @@ -143,18 +147,18 @@ JNIEXPORT java_lang_ClassLoader* JNICALL Java_gnu_classpath_VMStackWalker_getCal */ JNIEXPORT java_lang_ClassLoader* JNICALL Java_gnu_classpath_VMStackWalker_firstNonNullClassLoader(JNIEnv *env, jclass clazz) { - java_objectarray *oa; - classinfo *c; - classloader *cl; - s4 i; + java_handle_objectarray_t *oa; + classinfo *c; + classloader *cl; + s4 i; oa = stacktrace_getClassContext(); if (oa == NULL) return NULL; - for (i = 0; i < oa->header.size; i++) { - c = (classinfo *) oa->data[i]; + for (i = 0; i < LLNI_array_size(oa); i++) { + c = (classinfo *) LLNI_array_direct(oa, i); cl = c->classloader; if (cl != NULL) diff --git a/src/native/vm/gnu/gnu_java_lang_management_VMRuntimeMXBeanImpl.c b/src/native/vm/gnu/gnu_java_lang_management_VMRuntimeMXBeanImpl.c index 990e7d960..6bf92015d 100644 --- a/src/native/vm/gnu/gnu_java_lang_management_VMRuntimeMXBeanImpl.c +++ b/src/native/vm/gnu/gnu_java_lang_management_VMRuntimeMXBeanImpl.c @@ -73,7 +73,7 @@ void _Jv_gnu_java_lang_management_VMRuntimeMXBeanImpl_init(void) * Method: getInputArguments * Signature: ()[Ljava/lang/String; */ -JNIEXPORT java_objectarray* JNICALL Java_gnu_java_lang_management_VMRuntimeMXBeanImpl_getInputArguments(JNIEnv *env, jclass clazz) +JNIEXPORT java_handle_objectarray_t* JNICALL Java_gnu_java_lang_management_VMRuntimeMXBeanImpl_getInputArguments(JNIEnv *env, jclass clazz) { log_println("Java_gnu_java_lang_management_VMRuntimeMXBeanImpl_getInputArguments: IMPLEMENT ME!"); diff --git a/src/native/vm/gnu/gnu_java_lang_management_VMThreadMXBeanImpl.c b/src/native/vm/gnu/gnu_java_lang_management_VMThreadMXBeanImpl.c index 44047f27c..fc7c2a2d7 100644 --- a/src/native/vm/gnu/gnu_java_lang_management_VMThreadMXBeanImpl.c +++ b/src/native/vm/gnu/gnu_java_lang_management_VMThreadMXBeanImpl.c @@ -85,7 +85,7 @@ void _Jv_gnu_java_lang_management_VMThreadMXBeanImpl_init(void) * Method: findMonitorDeadlockedThreads * Signature: ()[J */ -JNIEXPORT java_longarray* JNICALL Java_gnu_java_lang_management_VMThreadMXBeanImpl_findMonitorDeadlockedThreads(JNIEnv *env, jclass clazz) +JNIEXPORT java_handle_longarray_t* JNICALL Java_gnu_java_lang_management_VMThreadMXBeanImpl_findMonitorDeadlockedThreads(JNIEnv *env, jclass clazz) { log_println("Java_gnu_java_lang_management_VMThreadMXBeanImpl_findMonitorDeadlockedThreads: IMPLEMENT ME!"); diff --git a/src/native/vm/gnu/java_lang_VMClass.c b/src/native/vm/gnu/java_lang_VMClass.c index 60f893237..723d9a6a0 100644 --- a/src/native/vm/gnu/java_lang_VMClass.c +++ b/src/native/vm/gnu/java_lang_VMClass.c @@ -22,7 +22,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - $Id: java_lang_VMClass.c 8249 2007-07-31 12:59:03Z panzi $ + $Id: java_lang_VMClass.c 8318 2007-08-16 10:05:34Z michi $ */ @@ -168,7 +168,7 @@ JNIEXPORT java_lang_Class* JNICALL Java_java_lang_VMClass_getSuperclass(JNIEnv * * Method: getInterfaces * Signature: (Ljava/lang/Class;)[Ljava/lang/Class; */ -JNIEXPORT java_objectarray* JNICALL Java_java_lang_VMClass_getInterfaces(JNIEnv *env, jclass clazz, java_lang_Class *klass) +JNIEXPORT java_handle_objectarray_t* JNICALL Java_java_lang_VMClass_getInterfaces(JNIEnv *env, jclass clazz, java_lang_Class *klass) { return _Jv_java_lang_Class_getInterfaces(klass); } @@ -212,7 +212,7 @@ JNIEXPORT java_lang_Class* JNICALL Java_java_lang_VMClass_getDeclaringClass(JNIE * Method: getDeclaredClasses * Signature: (Ljava/lang/Class;Z)[Ljava/lang/Class; */ -JNIEXPORT java_objectarray* JNICALL Java_java_lang_VMClass_getDeclaredClasses(JNIEnv *env, jclass clazz, java_lang_Class *klass, s4 publicOnly) +JNIEXPORT java_handle_objectarray_t* JNICALL Java_java_lang_VMClass_getDeclaredClasses(JNIEnv *env, jclass clazz, java_lang_Class *klass, s4 publicOnly) { return _Jv_java_lang_Class_getDeclaredClasses(klass, publicOnly); } @@ -223,7 +223,7 @@ JNIEXPORT java_objectarray* JNICALL Java_java_lang_VMClass_getDeclaredClasses(JN * Method: getDeclaredFields * Signature: (Ljava/lang/Class;Z)[Ljava/lang/reflect/Field; */ -JNIEXPORT java_objectarray* JNICALL Java_java_lang_VMClass_getDeclaredFields(JNIEnv *env, jclass clazz, java_lang_Class *klass, s4 publicOnly) +JNIEXPORT java_handle_objectarray_t* JNICALL Java_java_lang_VMClass_getDeclaredFields(JNIEnv *env, jclass clazz, java_lang_Class *klass, s4 publicOnly) { return _Jv_java_lang_Class_getDeclaredFields(klass, publicOnly); } @@ -234,7 +234,7 @@ JNIEXPORT java_objectarray* JNICALL Java_java_lang_VMClass_getDeclaredFields(JNI * Method: getDeclaredMethods * Signature: (Ljava/lang/Class;Z)[Ljava/lang/reflect/Method; */ -JNIEXPORT java_objectarray* JNICALL Java_java_lang_VMClass_getDeclaredMethods(JNIEnv *env, jclass clazz, java_lang_Class *klass, s4 publicOnly) +JNIEXPORT java_handle_objectarray_t* JNICALL Java_java_lang_VMClass_getDeclaredMethods(JNIEnv *env, jclass clazz, java_lang_Class *klass, s4 publicOnly) { return _Jv_java_lang_Class_getDeclaredMethods(klass, publicOnly); } @@ -245,7 +245,7 @@ JNIEXPORT java_objectarray* JNICALL Java_java_lang_VMClass_getDeclaredMethods(JN * Method: getDeclaredConstructors * Signature: (Ljava/lang/Class;Z)[Ljava/lang/reflect/Constructor; */ -JNIEXPORT java_objectarray* JNICALL Java_java_lang_VMClass_getDeclaredConstructors(JNIEnv *env, jclass clazz, java_lang_Class *klass, s4 publicOnly) +JNIEXPORT java_handle_objectarray_t* JNICALL Java_java_lang_VMClass_getDeclaredConstructors(JNIEnv *env, jclass clazz, java_lang_Class *klass, s4 publicOnly) { return _Jv_java_lang_Class_getDeclaredConstructors(klass, publicOnly); } @@ -301,7 +301,7 @@ JNIEXPORT void JNICALL Java_java_lang_VMClass_throwException(JNIEnv *env, jclass * Method: getDeclaredAnnotations * Signature: (Ljava/lang/Class;)[Ljava/lang/annotation/Annotation; */ -JNIEXPORT java_objectarray* JNICALL Java_java_lang_VMClass_getDeclaredAnnotations(JNIEnv *env, jclass clazz, java_lang_Class* klass) +JNIEXPORT java_handle_objectarray_t* JNICALL Java_java_lang_VMClass_getDeclaredAnnotations(JNIEnv *env, jclass clazz, java_lang_Class* klass) { return _Jv_java_lang_Class_getDeclaredAnnotations(klass); } diff --git a/src/native/vm/gnu/java_lang_VMClassLoader.c b/src/native/vm/gnu/java_lang_VMClassLoader.c index 845816915..1ef3d9a0d 100644 --- a/src/native/vm/gnu/java_lang_VMClassLoader.c +++ b/src/native/vm/gnu/java_lang_VMClassLoader.c @@ -22,7 +22,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - $Id: java_lang_VMClassLoader.c 8299 2007-08-13 08:41:18Z michi $ + $Id: java_lang_VMClassLoader.c 8321 2007-08-16 11:37:25Z michi $ */ @@ -107,7 +107,7 @@ void _Jv_java_lang_VMClassLoader_init(void) * Method: defineClass * Signature: (Ljava/lang/ClassLoader;Ljava/lang/String;[BIILjava/security/ProtectionDomain;)Ljava/lang/Class; */ -JNIEXPORT java_lang_Class* JNICALL Java_java_lang_VMClassLoader_defineClass(JNIEnv *env, jclass clazz, java_lang_ClassLoader *cl, java_lang_String *name, java_bytearray *data, s4 offset, s4 len, java_security_ProtectionDomain *pd) +JNIEXPORT java_lang_Class* JNICALL Java_java_lang_VMClassLoader_defineClass(JNIEnv *env, jclass clazz, java_lang_ClassLoader *cl, java_lang_String *name, java_handle_bytearray_t *data, s4 offset, s4 len, java_security_ProtectionDomain *pd) { return _Jv_java_lang_ClassLoader_defineClass(cl, name, data, offset, len, pd); } diff --git a/src/native/vm/gnu/java_lang_VMSystem.c b/src/native/vm/gnu/java_lang_VMSystem.c index 1b13f7ffe..8e27184ab 100644 --- a/src/native/vm/gnu/java_lang_VMSystem.c +++ b/src/native/vm/gnu/java_lang_VMSystem.c @@ -22,7 +22,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - $Id: java_lang_VMSystem.c 7918 2007-05-20 20:42:18Z michi $ + $Id: java_lang_VMSystem.c 8321 2007-08-16 11:37:25Z michi $ */ @@ -78,8 +78,8 @@ void _Jv_java_lang_VMSystem_init(void) */ JNIEXPORT void JNICALL Java_java_lang_VMSystem_arraycopy(JNIEnv *env, jclass clazz, java_lang_Object *src, s4 srcStart, java_lang_Object *dest, s4 destStart, s4 len) { - (void) builtin_arraycopy((java_arrayheader *) src, srcStart, - (java_arrayheader *) dest, destStart, len); + (void) builtin_arraycopy((java_handle_t *) src, srcStart, + (java_handle_t *) dest, destStart, len); } diff --git a/src/native/vm/gnu/java_lang_VMThrowable.c b/src/native/vm/gnu/java_lang_VMThrowable.c index e7a2427eb..e7d282e59 100644 --- a/src/native/vm/gnu/java_lang_VMThrowable.c +++ b/src/native/vm/gnu/java_lang_VMThrowable.c @@ -22,7 +22,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - $Id: java_lang_VMThrowable.c 8295 2007-08-11 17:57:24Z michi $ + $Id: java_lang_VMThrowable.c 8318 2007-08-16 10:05:34Z michi $ */ @@ -112,7 +112,7 @@ JNIEXPORT java_lang_VMThrowable* JNICALL Java_java_lang_VMThrowable_fillInStackT * Method: getStackTrace * Signature: (Ljava/lang/Throwable;)[Ljava/lang/StackTraceElement; */ -JNIEXPORT java_objectarray* JNICALL Java_java_lang_VMThrowable_getStackTrace(JNIEnv *env, java_lang_VMThrowable *this, java_lang_Throwable *t) +JNIEXPORT java_handle_objectarray_t* JNICALL Java_java_lang_VMThrowable_getStackTrace(JNIEnv *env, java_lang_VMThrowable *this, java_lang_Throwable *t) { stacktracecontainer *stc; stacktracebuffer *stb; @@ -125,7 +125,7 @@ JNIEXPORT java_objectarray* JNICALL Java_java_lang_VMThrowable_getStackTrace(JNI bool leftexceptionclass; methodinfo *m; - java_objectarray *oa; + java_handle_objectarray_t *oa; s4 oalength; java_lang_StackTraceElement *o; java_lang_String *filename; @@ -263,7 +263,7 @@ JNIEXPORT java_objectarray* JNICALL Java_java_lang_VMThrowable_getStackTrace(JNI LLNI_field_set_ref(o, methodName , (java_lang_String *) javastring_new(ste->method->name)); LLNI_field_set_val(o, isNative , (ste->method->flags & ACC_NATIVE) ? 1 : 0); - oa->data[i] = o; + LLNI_objectarray_element_set(oa, i, o); } return oa; diff --git a/src/native/vm/gnu/java_lang_management_VMManagementFactory.c b/src/native/vm/gnu/java_lang_management_VMManagementFactory.c index e4e78fa0b..1e0f4eceb 100644 --- a/src/native/vm/gnu/java_lang_management_VMManagementFactory.c +++ b/src/native/vm/gnu/java_lang_management_VMManagementFactory.c @@ -75,9 +75,9 @@ void _Jv_java_lang_management_VMManagementFactory_init(void) * Method: getMemoryPoolNames * Signature: ()[Ljava/lang/String; */ -JNIEXPORT java_objectarray* JNICALL Java_java_lang_management_VMManagementFactory_getMemoryPoolNames(JNIEnv *env, jclass clazz) +JNIEXPORT java_handle_objectarray_t* JNICALL Java_java_lang_management_VMManagementFactory_getMemoryPoolNames(JNIEnv *env, jclass clazz) { - java_objectarray *oa; + java_handle_objectarray_t *oa; log_println("Java_java_lang_management_VMManagementFactory_getMemoryPoolNames: IMPLEMENT ME!"); @@ -92,9 +92,9 @@ JNIEXPORT java_objectarray* JNICALL Java_java_lang_management_VMManagementFactor * Method: getMemoryManagerNames * Signature: ()[Ljava/lang/String; */ -JNIEXPORT java_objectarray* JNICALL Java_java_lang_management_VMManagementFactory_getMemoryManagerNames(JNIEnv *env, jclass clazz) +JNIEXPORT java_handle_objectarray_t* JNICALL Java_java_lang_management_VMManagementFactory_getMemoryManagerNames(JNIEnv *env, jclass clazz) { - java_objectarray *oa; + java_handle_objectarray_t *oa; log_println("Java_java_lang_management_VMManagementFactory_getMemoryManagerNames: IMPLEMENT ME!"); @@ -109,9 +109,9 @@ JNIEXPORT java_objectarray* JNICALL Java_java_lang_management_VMManagementFactor * Method: getGarbageCollectorNames * Signature: ()[Ljava/lang/String; */ -JNIEXPORT java_objectarray* JNICALL Java_java_lang_management_VMManagementFactory_getGarbageCollectorNames(JNIEnv *env, jclass clazz) +JNIEXPORT java_handle_objectarray_t* JNICALL Java_java_lang_management_VMManagementFactory_getGarbageCollectorNames(JNIEnv *env, jclass clazz) { - java_objectarray *oa; + java_handle_objectarray_t *oa; log_println("Java_java_lang_management_VMManagementFactory_getGarbageCollectorNames: IMPLEMENT ME!"); diff --git a/src/native/vm/gnu/java_lang_reflect_Constructor.c b/src/native/vm/gnu/java_lang_reflect_Constructor.c index 3a82a63aa..605a2b9ae 100644 --- a/src/native/vm/gnu/java_lang_reflect_Constructor.c +++ b/src/native/vm/gnu/java_lang_reflect_Constructor.c @@ -22,7 +22,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - $Id: java_lang_reflect_Constructor.c 8295 2007-08-11 17:57:24Z michi $ + $Id: java_lang_reflect_Constructor.c 8318 2007-08-16 10:05:34Z michi $ */ @@ -34,6 +34,7 @@ #if defined(ENABLE_ANNOTATIONS) #include "vm/vm.h" +#include "vm/exceptions.h" #endif #include "vm/types.h" @@ -93,7 +94,7 @@ void _Jv_java_lang_reflect_Constructor_init(void) * Method: constructNative * Signature: ([Ljava/lang/Object;Ljava/lang/Class;I)Ljava/lang/Object; */ -JNIEXPORT java_lang_Object* JNICALL Java_java_lang_reflect_Constructor_constructNative(JNIEnv *env, java_lang_reflect_Constructor *this, java_objectarray *args, java_lang_Class *declaringClass, s4 slot) +JNIEXPORT java_lang_Object* JNICALL Java_java_lang_reflect_Constructor_constructNative(JNIEnv *env, java_lang_reflect_Constructor *this, java_handle_objectarray_t *args, java_lang_Class *declaringClass, s4 slot) { /* just to be sure */ @@ -112,14 +113,28 @@ JNIEXPORT java_lang_Object* JNICALL Java_java_lang_reflect_Constructor_construct */ JNIEXPORT struct java_util_Map* JNICALL Java_java_lang_reflect_Constructor_declaredAnnotations(JNIEnv *env, struct java_lang_reflect_Constructor* this) { - java_handle_t *o = (java_handle_t*)this; + java_handle_t *o = (java_handle_t*)this; + struct java_util_Map *declaredAnnotations = NULL; + java_bytearray *annotations = NULL; + java_lang_Class *declaringClass = NULL; if (this == NULL) { exceptions_throw_nullpointerexception(); return NULL; } + + LLNI_field_get_ref(this, declaredAnnotations, declaredAnnotations); - return reflect_get_declaredannotatios(&(this->declaredAnnotations), this->annotations, this->clazz, o->vftbl->class); + if (declaredAnnotations == NULL) { + LLNI_field_get_val(this, annotations, annotations); + LLNI_field_get_ref(this, clazz, declaringClass); + + declaredAnnotations = reflect_get_declaredannotatios(annotations, declaringClass, o->vftbl->class); + + LLNI_field_set_ref(this, declaredAnnotations, declaredAnnotations); + } + + return declaredAnnotations; } @@ -128,16 +143,23 @@ JNIEXPORT struct java_util_Map* JNICALL Java_java_lang_reflect_Constructor_decla * Method: getParameterAnnotations * Signature: ()[[Ljava/lang/annotation/Annotation; */ -JNIEXPORT java_objectarray* JNICALL Java_java_lang_reflect_Constructor_getParameterAnnotations(JNIEnv *env, struct java_lang_reflect_Constructor* this) +JNIEXPORT java_handle_objectarray_t* JNICALL Java_java_lang_reflect_Constructor_getParameterAnnotations(JNIEnv *env, struct java_lang_reflect_Constructor* this) { - java_handle_t *o = (java_handle_t*)this; + java_handle_t *o = (java_handle_t*)this; + java_bytearray *parameterAnnotations = NULL; + int32_t slot = -1; + java_lang_Class *declaringClass = NULL; if (this == NULL) { exceptions_throw_nullpointerexception(); return NULL; } - return reflect_get_parameterannotations((java_handle_t*)this->parameterAnnotations, this->slot, this->clazz, o->vftbl->class); + LLNI_field_get_ref(this, parameterAnnotations, parameterAnnotations); + LLNI_field_get_val(this, slot, slot); + LLNI_field_get_ref(this, clazz, declaringClass); + + return reflect_get_parameterannotations((java_handle_t*)parameterAnnotations, slot, declaringClass, o->vftbl->class); } #endif diff --git a/src/native/vm/gnu/java_lang_reflect_Field.c b/src/native/vm/gnu/java_lang_reflect_Field.c index b35f70a14..a58447c39 100644 --- a/src/native/vm/gnu/java_lang_reflect_Field.c +++ b/src/native/vm/gnu/java_lang_reflect_Field.c @@ -22,7 +22,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - $Id: java_lang_reflect_Field.c 8295 2007-08-11 17:57:24Z michi $ + $Id: java_lang_reflect_Field.c 8305 2007-08-15 13:49:26Z panzi $ */ @@ -1253,14 +1253,28 @@ JNIEXPORT java_lang_String* JNICALL Java_java_lang_reflect_Field_getSignature(JN */ JNIEXPORT struct java_util_Map* JNICALL Java_java_lang_reflect_Field_declaredAnnotations(JNIEnv *env, struct java_lang_reflect_Field* this) { - java_handle_t *o = (java_handle_t*)this; + java_handle_t *o = (java_handle_t*)this; + struct java_util_Map *declaredAnnotations = NULL; + java_bytearray *annotations = NULL; + java_lang_Class *declaringClass = NULL; if (this == NULL) { exceptions_throw_nullpointerexception(); return NULL; } - return reflect_get_declaredannotatios(&(this->declaredAnnotations), this->annotations, this->clazz, o->vftbl->class); + LLNI_field_get_ref(this, declaredAnnotations, declaredAnnotations); + + if (declaredAnnotations == NULL) { + LLNI_field_get_val(this, annotations, annotations); + LLNI_field_get_ref(this, clazz, declaringClass); + + declaredAnnotations = reflect_get_declaredannotatios(annotations, declaringClass, o->vftbl->class); + + LLNI_field_set_ref(this, declaredAnnotations, declaredAnnotations); + } + + return declaredAnnotations; } #endif diff --git a/src/native/vm/gnu/java_lang_reflect_Method.c b/src/native/vm/gnu/java_lang_reflect_Method.c index 826fbdc19..700219363 100644 --- a/src/native/vm/gnu/java_lang_reflect_Method.c +++ b/src/native/vm/gnu/java_lang_reflect_Method.c @@ -22,7 +22,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - $Id: java_lang_reflect_Method.c 8295 2007-08-11 17:57:24Z michi $ + $Id: java_lang_reflect_Method.c 8318 2007-08-16 10:05:34Z michi $ */ @@ -144,7 +144,7 @@ JNIEXPORT java_lang_Class* JNICALL Java_java_lang_reflect_Method_getReturnType(J * Method: getParameterTypes * Signature: ()[Ljava/lang/Class; */ -JNIEXPORT java_objectarray* JNICALL Java_java_lang_reflect_Method_getParameterTypes(JNIEnv *env, java_lang_reflect_Method *this) +JNIEXPORT java_handle_objectarray_t* JNICALL Java_java_lang_reflect_Method_getParameterTypes(JNIEnv *env, java_lang_reflect_Method *this) { classinfo *c; methodinfo *m; @@ -163,7 +163,7 @@ JNIEXPORT java_objectarray* JNICALL Java_java_lang_reflect_Method_getParameterTy * Method: getExceptionTypes * Signature: ()[Ljava/lang/Class; */ -JNIEXPORT java_objectarray* JNICALL Java_java_lang_reflect_Method_getExceptionTypes(JNIEnv *env, java_lang_reflect_Method *this) +JNIEXPORT java_handle_objectarray_t* JNICALL Java_java_lang_reflect_Method_getExceptionTypes(JNIEnv *env, java_lang_reflect_Method *this) { classinfo *c; methodinfo *m; @@ -182,7 +182,7 @@ JNIEXPORT java_objectarray* JNICALL Java_java_lang_reflect_Method_getExceptionTy * Method: invokeNative * Signature: (Ljava/lang/Object;[Ljava/lang/Object;Ljava/lang/Class;I)Ljava/lang/Object; */ -JNIEXPORT java_lang_Object* JNICALL Java_java_lang_reflect_Method_invokeNative(JNIEnv *env, java_lang_reflect_Method *this, java_lang_Object *o, java_objectarray *args, java_lang_Class *clazz, s4 slot) +JNIEXPORT java_lang_Object* JNICALL Java_java_lang_reflect_Method_invokeNative(JNIEnv *env, java_lang_reflect_Method *this, java_lang_Object *o, java_handle_objectarray_t *args, java_lang_Class *clazz, s4 slot) { /* just to be sure */ @@ -229,9 +229,10 @@ JNIEXPORT struct java_lang_Object* JNICALL Java_java_lang_reflect_Method_getDefa { static methodinfo *m_parseAnnotationDefault = NULL; utf *utf_parseAnnotationDefault = NULL; - utf *utf_desc = NULL; - sun_reflect_ConstantPool *constantPool = NULL; - java_handle_t *o = (java_handle_t*)this; + utf *utf_desc = NULL; + sun_reflect_ConstantPool *constantPool = NULL; + java_handle_t *o = (java_handle_t*)this; + java_lang_Class *constantPoolOop = NULL; if (this == NULL) { exceptions_throw_nullpointerexception(); @@ -247,7 +248,8 @@ JNIEXPORT struct java_lang_Object* JNICALL Java_java_lang_reflect_Method_getDefa return NULL; } - constantPool->constantPoolOop = (java_lang_Object*)this->clazz; + LLNI_field_get_ref(this, clazz, constantPoolOop); + LLNI_field_set_ref(constantPool, constantPoolOop, (java_lang_Object*)constantPoolOop); /* only resolve the method the first time */ if (m_parseAnnotationDefault == NULL) { @@ -288,14 +290,28 @@ JNIEXPORT struct java_lang_Object* JNICALL Java_java_lang_reflect_Method_getDefa */ JNIEXPORT struct java_util_Map* JNICALL Java_java_lang_reflect_Method_declaredAnnotations(JNIEnv *env, struct java_lang_reflect_Method* this) { - java_handle_t *o = (java_handle_t*)this; + java_handle_t *o = (java_handle_t*)this; + struct java_util_Map *declaredAnnotations = NULL; + java_bytearray *annotations = NULL; + java_lang_Class *declaringClass = NULL; if (this == NULL) { exceptions_throw_nullpointerexception(); return NULL; } - return reflect_get_declaredannotatios(&(this->declaredAnnotations), this->annotations, this->clazz, o->vftbl->class); + LLNI_field_get_ref(this, declaredAnnotations, declaredAnnotations); + + if (declaredAnnotations == NULL) { + LLNI_field_get_val(this, annotations, annotations); + LLNI_field_get_ref(this, clazz, declaringClass); + + declaredAnnotations = reflect_get_declaredannotatios(annotations, declaringClass, o->vftbl->class); + + LLNI_field_set_ref(this, declaredAnnotations, declaredAnnotations); + } + + return declaredAnnotations; } @@ -304,16 +320,23 @@ JNIEXPORT struct java_util_Map* JNICALL Java_java_lang_reflect_Method_declaredAn * Method: getParameterAnnotations * Signature: ()[[Ljava/lang/annotation/Annotation; */ -JNIEXPORT java_objectarray* JNICALL Java_java_lang_reflect_Method_getParameterAnnotations(JNIEnv *env, struct java_lang_reflect_Method* this) +JNIEXPORT java_handle_objectarray_t* JNICALL Java_java_lang_reflect_Method_getParameterAnnotations(JNIEnv *env, struct java_lang_reflect_Method* this) { - java_handle_t *o = (java_handle_t*)this; + java_handle_t *o = (java_handle_t*)this; + java_bytearray *parameterAnnotations = NULL; + int32_t slot = -1; + java_lang_Class *declaringClass = NULL; if (this == NULL) { exceptions_throw_nullpointerexception(); return NULL; } - return reflect_get_parameterannotations((java_handle_t*)this->parameterAnnotations, this->slot, this->clazz, o->vftbl->class); + LLNI_field_get_ref(this, parameterAnnotations, parameterAnnotations); + LLNI_field_get_val(this, slot, slot); + LLNI_field_get_ref(this, clazz, declaringClass); + + return reflect_get_parameterannotations((java_handle_t*)parameterAnnotations, slot, declaringClass, o->vftbl->class); } #endif diff --git a/src/native/vm/gnu/java_security_VMAccessController.c b/src/native/vm/gnu/java_security_VMAccessController.c index 47dfe6cdf..615c7109a 100644 --- a/src/native/vm/gnu/java_security_VMAccessController.c +++ b/src/native/vm/gnu/java_security_VMAccessController.c @@ -22,7 +22,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - $Id: java_security_VMAccessController.c 7910 2007-05-16 08:02:52Z twisti $ + $Id: java_security_VMAccessController.c 8318 2007-08-16 10:05:34Z michi $ */ @@ -71,7 +71,7 @@ void _Jv_java_security_VMAccessController_init(void) * Method: getStack * Signature: ()[[Ljava/lang/Object; */ -JNIEXPORT java_objectarray* JNICALL Java_java_security_VMAccessController_getStack(JNIEnv *env, jclass clazz) +JNIEXPORT java_handle_objectarray_t* JNICALL Java_java_security_VMAccessController_getStack(JNIEnv *env, jclass clazz) { return stacktrace_getStack(); } diff --git a/src/native/vm/java_lang_Class.c b/src/native/vm/java_lang_Class.c index d263a63c4..923ff43f1 100644 --- a/src/native/vm/java_lang_Class.c +++ b/src/native/vm/java_lang_Class.c @@ -22,7 +22,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - $Id: java_lang_Class.c 8299 2007-08-13 08:41:18Z michi $ + $Id: java_lang_Class.c 8321 2007-08-16 11:37:25Z michi $ */ @@ -82,6 +82,7 @@ #include "vmcore/loader.h" #if defined(WITH_CLASSPATH_GNU) && defined(ENABLE_ANNOTATIONS) +#include "vm/vm.h" #include "vmcore/annotation.h" #include "native/include/sun_reflect_ConstantPool.h" #endif @@ -95,7 +96,7 @@ java_lang_String *_Jv_java_lang_Class_getName(java_lang_Class *klass) { classinfo *c; java_lang_String *s; - java_chararray *ca; + java_chararray_t *ca; u4 i; c = (classinfo *) klass; @@ -111,9 +112,9 @@ java_lang_String *_Jv_java_lang_Class_getName(java_lang_Class *klass) LLNI_field_get_ref(s, value, ca); - for (i = 0; i < ca->header.size; i++) { - if (ca->data[i] == '/') - ca->data[i] = '.'; + for (i = 0; i < LLNI_array_size(ca); i++) { + if (LLNI_array_direct(ca, i) == '/') + LLNI_array_direct(ca, i) = '.'; } return s; @@ -290,7 +291,7 @@ java_lang_Class *_Jv_java_lang_Class_getSuperclass(java_lang_Class *klass) super = class_get_superclass(c); - return super; + return (java_lang_Class *) super; } @@ -299,29 +300,14 @@ java_lang_Class *_Jv_java_lang_Class_getSuperclass(java_lang_Class *klass) * Method: getInterfaces * Signature: ()[Ljava/lang/Class; */ -java_objectarray *_Jv_java_lang_Class_getInterfaces(java_lang_Class *klass) +java_handle_objectarray_t *_Jv_java_lang_Class_getInterfaces(java_lang_Class *klass) { - classinfo *c; - classinfo *ic; - java_objectarray *oa; - u4 i; + classinfo *c; + java_handle_objectarray_t *oa; c = (classinfo *) klass; - if (!(c->state & CLASS_LINKED)) - if (!link_class(c)) - return NULL; - - oa = builtin_anewarray(c->interfacescount, class_java_lang_Class); - - if (oa == NULL) - return NULL; - - for (i = 0; i < c->interfacescount; i++) { - ic = c->interfaces[i].cls; - - oa->data[i] = ic; - } + oa = class_get_interfaces(c); return oa; } @@ -428,71 +414,14 @@ java_lang_Class *_Jv_java_lang_Class_getDeclaringClass(java_lang_Class *klass) * Method: getDeclaredClasses * Signature: (Z)[Ljava/lang/Class; */ -java_objectarray *_Jv_java_lang_Class_getDeclaredClasses(java_lang_Class *klass, s4 publicOnly) +java_handle_objectarray_t *_Jv_java_lang_Class_getDeclaredClasses(java_lang_Class *klass, s4 publicOnly) { - classinfo *c; - classref_or_classinfo outer; - utf *outername; - s4 declaredclasscount; /* number of declared classes */ - s4 pos; /* current declared class */ - java_objectarray *oa; /* array of declared classes */ - s4 i; + classinfo *c; + java_handle_objectarray_t *oa; c = (classinfo *) klass; - declaredclasscount = 0; - - if (!class_is_primitive(c) && (c->name->text[0] != '[')) { - /* determine number of declared classes */ - - for (i = 0; i < c->innerclasscount; i++) { - outer = c->innerclass[i].outer_class; - - /* check if outer_class is a classref or a real class and - get the class name from the structure */ - - outername = IS_CLASSREF(outer) ? outer.ref->name : outer.cls->name; - /* outer class is this class */ - - if ((outername == c->name) && - ((publicOnly == 0) || (c->innerclass[i].flags & ACC_PUBLIC))) - declaredclasscount++; - } - } - - /* allocate Class[] and check for OOM */ - - oa = builtin_anewarray(declaredclasscount, class_java_lang_Class); - - if (oa == NULL) - return NULL; - - for (i = 0, pos = 0; i < c->innerclasscount; i++) { - outer = c->innerclass[i].outer_class; - - /* check if outer_class is a classref or a real class and - get the class name from the structure */ - - outername = IS_CLASSREF(outer) ? outer.ref->name : outer.cls->name; - - /* outer class is this class */ - - if ((outername == c->name) && - ((publicOnly == 0) || (c->innerclass[i].flags & ACC_PUBLIC))) { - classinfo *inner; - - if ((inner = resolve_classref_or_classinfo_eager( - c->innerclass[i].inner_class, - false)) == NULL) - return NULL; - - if (!(inner->state & CLASS_LINKED)) - if (!link_class(inner)) - return NULL; - - oa->data[pos++] = inner; - } - } + oa = class_get_declaredclasses(c, publicOnly); return oa; } @@ -503,12 +432,12 @@ java_objectarray *_Jv_java_lang_Class_getDeclaredClasses(java_lang_Class *klass, * Method: getDeclaredFields * Signature: (Z)[Ljava/lang/reflect/Field; */ -java_objectarray *_Jv_java_lang_Class_getDeclaredFields(java_lang_Class *klass, s4 publicOnly) +java_handle_objectarray_t *_Jv_java_lang_Class_getDeclaredFields(java_lang_Class *klass, s4 publicOnly) { - classinfo *c; - java_objectarray *oa; /* result: array of field-objects */ - fieldinfo *f; - java_lang_reflect_Field *rf; + classinfo *c; + java_handle_objectarray_t *oa; /* result: array of field-objects */ + fieldinfo *f; + java_lang_reflect_Field *rf; s4 public_fields; /* number of elements in field-array */ s4 pos; s4 i; @@ -540,7 +469,8 @@ java_objectarray *_Jv_java_lang_Class_getDeclaredFields(java_lang_Class *klass, /* store object into array */ - oa->data[pos++] = rf; + LLNI_objectarray_element_set(oa, pos, rf); + pos++; } } @@ -553,12 +483,12 @@ java_objectarray *_Jv_java_lang_Class_getDeclaredFields(java_lang_Class *klass, * Method: getDeclaredMethods * Signature: (Z)[Ljava/lang/reflect/Method; */ -java_objectarray *_Jv_java_lang_Class_getDeclaredMethods(java_lang_Class *klass, s4 publicOnly) +java_handle_objectarray_t *_Jv_java_lang_Class_getDeclaredMethods(java_lang_Class *klass, s4 publicOnly) { - classinfo *c; - java_lang_reflect_Method *rm; - java_objectarray *oa; /* result: array of Method-objects */ - methodinfo *m; /* the current method to be represented */ + classinfo *c; + java_lang_reflect_Method *rm; + java_handle_objectarray_t *oa; /* result: array of Method-objects */ + methodinfo *m; /* the current method to be represented */ s4 public_methods; /* number of public methods of the class */ s4 pos; s4 i; @@ -603,7 +533,8 @@ java_objectarray *_Jv_java_lang_Class_getDeclaredMethods(java_lang_Class *klass, /* store object into array */ - oa->data[pos++] = rm; + LLNI_objectarray_element_set(oa, pos, rm); + pos++; } } @@ -616,11 +547,11 @@ java_objectarray *_Jv_java_lang_Class_getDeclaredMethods(java_lang_Class *klass, * Method: getDeclaredConstructors * Signature: (Z)[Ljava/lang/reflect/Constructor; */ -java_objectarray *_Jv_java_lang_Class_getDeclaredConstructors(java_lang_Class *klass, s4 publicOnly) +java_handle_objectarray_t *_Jv_java_lang_Class_getDeclaredConstructors(java_lang_Class *klass, s4 publicOnly) { classinfo *c; methodinfo *m; /* the current method to be represented */ - java_objectarray *oa; /* result: array of Method-objects */ + java_handle_objectarray_t *oa; /* result: array of Method-objects */ java_lang_reflect_Constructor *rc; s4 public_methods; /* number of public methods of the class */ s4 pos; @@ -654,7 +585,8 @@ java_objectarray *_Jv_java_lang_Class_getDeclaredConstructors(java_lang_Class *k /* store object into array */ - oa->data[pos++] = rc; + LLNI_objectarray_element_set(oa, pos, rc); + pos++; } } @@ -720,15 +652,16 @@ void _Jv_java_lang_Class_throwException(java_lang_Throwable *t) * Method: getDeclaredAnnotations * Signature: (Ljava/lang/Class;)[Ljava/lang/annotation/Annotation; */ -java_objectarray *_Jv_java_lang_Class_getDeclaredAnnotations(java_lang_Class* klass) +java_handle_objectarray_t *_Jv_java_lang_Class_getDeclaredAnnotations(java_lang_Class* klass) { - classinfo *c = (classinfo*)klass; + classinfo *c = (classinfo*)klass; static methodinfo *m_parseAnnotationsIntoArray = NULL; utf *utf_parseAnnotationsIntoArray = NULL; - utf *utf_desc = NULL; - java_bytearray *annotations = NULL; - sun_reflect_ConstantPool *constantPool = NULL; - uint32_t size = 0; + utf *utf_desc = NULL; + java_handle_bytearray_t *annotations = NULL; + sun_reflect_ConstantPool *constantPool = NULL; + uint32_t size = 0; + java_lang_Object *constantPoolOop = (java_lang_Object*)klass; if (c == NULL) { exceptions_throw_nullpointerexception(); @@ -758,7 +691,7 @@ java_objectarray *_Jv_java_lang_Class_getDeclaredAnnotations(java_lang_Class* kl return NULL; } - constantPool->constantPoolOop = (java_lang_Object*)klass; + LLNI_field_set_ref(constantPool, constantPoolOop, constantPoolOop); /* only resolve the method the first time */ if (m_parseAnnotationsIntoArray == NULL) { @@ -785,7 +718,7 @@ java_objectarray *_Jv_java_lang_Class_getDeclaredAnnotations(java_lang_Class* kl } } - return vm_call_method( + return (java_handle_objectarray_t*)vm_call_method( m_parseAnnotationsIntoArray, NULL, annotations, constantPool, klass); } diff --git a/src/native/vm/java_lang_Class.h b/src/native/vm/java_lang_Class.h index 4d9896e7f..759d9421c 100644 --- a/src/native/vm/java_lang_Class.h +++ b/src/native/vm/java_lang_Class.h @@ -67,14 +67,14 @@ JNIEXPORT int32_t JNICALL _Jv_java_lang_Class_isInterface(JNIEnv *env, java #if defined(ENABLE_JAVASE) s4 _Jv_java_lang_Class_isPrimitive(java_lang_Class *klass); java_lang_Class *_Jv_java_lang_Class_getSuperclass(java_lang_Class *klass); -java_objectarray *_Jv_java_lang_Class_getInterfaces(java_lang_Class *klass); +java_handle_objectarray_t *_Jv_java_lang_Class_getInterfaces(java_lang_Class *klass); java_lang_Class *_Jv_java_lang_Class_getComponentType(java_lang_Class *klass); s4 _Jv_java_lang_Class_getModifiers(java_lang_Class *klass, s4 ignoreInnerClassesAttrib); java_lang_Class *_Jv_java_lang_Class_getDeclaringClass(java_lang_Class *klass); -java_objectarray *_Jv_java_lang_Class_getDeclaredClasses(java_lang_Class *klass, s4 publicOnly); -java_objectarray *_Jv_java_lang_Class_getDeclaredFields(java_lang_Class *klass, s4 publicOnly); -java_objectarray *_Jv_java_lang_Class_getDeclaredMethods(java_lang_Class *klass, s4 publicOnly); -java_objectarray *_Jv_java_lang_Class_getDeclaredConstructors(java_lang_Class *klass, s4 publicOnly); +java_handle_objectarray_t *_Jv_java_lang_Class_getDeclaredClasses(java_lang_Class *klass, s4 publicOnly); +java_handle_objectarray_t *_Jv_java_lang_Class_getDeclaredFields(java_lang_Class *klass, s4 publicOnly); +java_handle_objectarray_t *_Jv_java_lang_Class_getDeclaredMethods(java_lang_Class *klass, s4 publicOnly); +java_handle_objectarray_t *_Jv_java_lang_Class_getDeclaredConstructors(java_lang_Class *klass, s4 publicOnly); java_lang_ClassLoader *_Jv_java_lang_Class_getClassLoader(java_lang_Class *klass); #endif @@ -84,7 +84,7 @@ JNIEXPORT int32_t JNICALL _Jv_java_lang_Class_isArray(JNIEnv *env, java_lan void _Jv_java_lang_Class_throwException(java_lang_Throwable *t); #if defined(WITH_CLASSPATH_GNU) && defined(ENABLE_ANNOTATIONS) -java_objectarray *_Jv_java_lang_Class_getDeclaredAnnotations(java_lang_Class* klass); +java_handle_objectarray_t *_Jv_java_lang_Class_getDeclaredAnnotations(java_lang_Class* klass); #endif java_lang_Class *_Jv_java_lang_Class_getEnclosingClass(java_lang_Class *klass); diff --git a/src/native/vm/java_lang_ClassLoader.c b/src/native/vm/java_lang_ClassLoader.c index bb209a3c7..3559b4877 100644 --- a/src/native/vm/java_lang_ClassLoader.c +++ b/src/native/vm/java_lang_ClassLoader.c @@ -74,7 +74,7 @@ * Method: defineClass * Signature: (Ljava/lang/ClassLoader;Ljava/lang/String;[BIILjava/security/ProtectionDomain;)Ljava/lang/Class; */ -java_lang_Class *_Jv_java_lang_ClassLoader_defineClass(java_lang_ClassLoader *cl, java_lang_String *name, java_bytearray *data, s4 offset, s4 len, java_security_ProtectionDomain *pd) +java_lang_Class *_Jv_java_lang_ClassLoader_defineClass(java_lang_ClassLoader *cl, java_lang_String *name, java_handle_bytearray_t *data, s4 offset, s4 len, java_security_ProtectionDomain *pd) { utf *utfname; classinfo *c; @@ -95,7 +95,7 @@ java_lang_Class *_Jv_java_lang_ClassLoader_defineClass(java_lang_ClassLoader *cl /* check the indexes passed */ - if ((offset < 0) || (len < 0) || ((offset + len) > data->header.size)) { + if ((offset < 0) || (len < 0) || ((offset + len) > LLNI_array_size(data))) { exceptions_throw_arrayindexoutofboundsexception(); return NULL; } diff --git a/src/native/vm/java_lang_ClassLoader.h b/src/native/vm/java_lang_ClassLoader.h index 0127dd3d4..33364bbe1 100644 --- a/src/native/vm/java_lang_ClassLoader.h +++ b/src/native/vm/java_lang_ClassLoader.h @@ -50,7 +50,7 @@ /* function prototypes ********************************************************/ #if defined(ENABLE_JAVASE) -java_lang_Class *_Jv_java_lang_ClassLoader_defineClass(java_lang_ClassLoader *cl, java_lang_String *name, java_bytearray *data, s4 offset, s4 len, java_security_ProtectionDomain *pd); +java_lang_Class *_Jv_java_lang_ClassLoader_defineClass(java_lang_ClassLoader *cl, java_lang_String *name, java_handle_bytearray_t *data, s4 offset, s4 len, java_security_ProtectionDomain *pd); #endif #endif /* _JV_JAVA_LANG_CLASSLOADER_H */ diff --git a/src/native/vm/java_lang_reflect_Method.c b/src/native/vm/java_lang_reflect_Method.c index 7e48c32e9..b532a520f 100644 --- a/src/native/vm/java_lang_reflect_Method.c +++ b/src/native/vm/java_lang_reflect_Method.c @@ -54,7 +54,7 @@ * Method: invoke * Signature: (Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object; */ -java_lang_Object *_Jv_java_lang_reflect_Method_invoke(java_lang_reflect_Method *this, java_lang_Object *o, java_objectarray *args) +java_lang_Object *_Jv_java_lang_reflect_Method_invoke(java_lang_reflect_Method *this, java_lang_Object *o, java_handle_objectarray_t *args) { classinfo *c; methodinfo *m; diff --git a/src/native/vm/java_lang_reflect_Method.h b/src/native/vm/java_lang_reflect_Method.h index 516591bc8..85fa518fb 100644 --- a/src/native/vm/java_lang_reflect_Method.h +++ b/src/native/vm/java_lang_reflect_Method.h @@ -45,7 +45,7 @@ /* function prototypes ********************************************************/ -java_lang_Object *_Jv_java_lang_reflect_Method_invoke(java_lang_reflect_Method *this, java_lang_Object *o, java_objectarray *args); +java_lang_Object *_Jv_java_lang_reflect_Method_invoke(java_lang_reflect_Method *this, java_lang_Object *o, java_handle_objectarray_t *args); #endif /* _JV_JAVA_LANG_REFLECT_METHOD_H */ diff --git a/src/native/vm/sun_misc_Unsafe.c b/src/native/vm/sun_misc_Unsafe.c index 11ec8c5c4..42ce71ac1 100644 --- a/src/native/vm/sun_misc_Unsafe.c +++ b/src/native/vm/sun_misc_Unsafe.c @@ -535,7 +535,7 @@ JNIEXPORT int32_t JNICALL Java_sun_misc_Unsafe_addressSize(JNIEnv *env, sun_misc * Method: defineClass * Signature: (Ljava/lang/String;[BIILjava/lang/ClassLoader;Ljava/security/ProtectionDomain;)Ljava/lang/Class; */ -JNIEXPORT java_lang_Class* JNICALL Java_sun_misc_Unsafe_defineClass__Ljava_lang_String_2_3BIILjava_lang_ClassLoader_2Ljava_security_ProtectionDomain_2(JNIEnv *env, sun_misc_Unsafe *this, java_lang_String *name, java_bytearray *b, int32_t off, int32_t len, java_lang_ClassLoader *loader, java_security_ProtectionDomain *protectionDomain) +JNIEXPORT java_lang_Class* JNICALL Java_sun_misc_Unsafe_defineClass__Ljava_lang_String_2_3BIILjava_lang_ClassLoader_2Ljava_security_ProtectionDomain_2(JNIEnv *env, sun_misc_Unsafe *this, java_lang_String *name, java_handle_bytearray_t *b, int32_t off, int32_t len, java_lang_ClassLoader *loader, java_security_ProtectionDomain *protectionDomain) { classloader *cl; utf *utfname; @@ -553,7 +553,7 @@ JNIEXPORT java_lang_Class* JNICALL Java_sun_misc_Unsafe_defineClass__Ljava_lang_ /* check the indexes passed */ - if ((off < 0) || (len < 0) || ((off + len) > b->header.size)) { + if ((off < 0) || (len < 0) || ((off + len) > LLNI_array_size(b))) { exceptions_throw_arrayindexoutofboundsexception(); return NULL; } diff --git a/src/threads/native/threads.c b/src/threads/native/threads.c index 035b96bcd..09985a6cf 100644 --- a/src/threads/native/threads.c +++ b/src/threads/native/threads.c @@ -22,7 +22,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - $Id: threads.c 8299 2007-08-13 08:41:18Z michi $ + $Id: threads.c 8321 2007-08-16 11:37:25Z michi $ */ @@ -709,6 +709,11 @@ void threads_impl_thread_new(threadobject *t) t->filterverbosecallctr[0] = 0; t->filterverbosecallctr[1] = 0; #endif + +#if !defined(NDEBUG) + t->tracejavacallindent = 0; + t->tracejavacallcount = 0; +#endif } diff --git a/src/threads/native/threads.h b/src/threads/native/threads.h index dc6c22066..03c52bbd9 100644 --- a/src/threads/native/threads.h +++ b/src/threads/native/threads.h @@ -22,7 +22,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - $Id: threads.h 8299 2007-08-13 08:41:18Z michi $ + $Id: threads.h 8321 2007-08-16 11:37:25Z michi $ */ @@ -162,6 +162,11 @@ struct threadobject { u2 filterverbosecallctr[2]; /* counters for verbose call filter */ #endif +#if !defined(NDEBUG) + s4 tracejavacallindent; + u4 tracejavacallcount; +#endif + listnode_t linkage; /* threads-list */ }; @@ -181,6 +186,13 @@ struct threadobject { # define FILTERVERBOSECALLCTR (THREADOBJECT->filterverbosecallctr) #endif +/* state for trace java call **************************************************/ + +#if !defined(NDEBUG) +# define TRACEJAVACALLINDENT (THREADOBJECT->tracejavacallindent) +# define TRACEJAVACALLCOUNT (THREADOBJECT->tracejavacallcount) +#endif + /* functions ******************************************************************/ void threads_sem_init(sem_t *sem, bool shared, int value); diff --git a/src/threads/none/threads.h b/src/threads/none/threads.h index 044bc3259..e8b06e913 100644 --- a/src/threads/none/threads.h +++ b/src/threads/none/threads.h @@ -64,6 +64,16 @@ extern u2 _no_threads_filterverbosecallctr[2]; #define FILTERVERBOSECALLCTR (_no_threads_filterverbosecallctr) #endif +/* state for trace java call **************************************************/ + +#if !defined(NDEBUG) +extern s4 _no_threads_tracejavacallindent; +#define TRACEJAVACALLINDENT (_no_threads_tracejavacallindent) + +extern u4 _no_threads_tracejavacallcount; +#define TRACEJAVACALLCOUNT (_no_threads_tracejavacallcount) +#endif + #endif /* _THREADS_H */ diff --git a/src/vm/access.c b/src/vm/access.c index 70acfc38e..984f8d002 100644 --- a/src/vm/access.c +++ b/src/vm/access.c @@ -22,7 +22,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - $Id: access.c 8237 2007-07-27 16:15:29Z twisti $ + $Id: access.c 8318 2007-08-16 10:05:34Z michi $ */ @@ -36,6 +36,8 @@ #include "mm/memory.h" +#include "native/llni.h" + #include "vm/access.h" #include "vm/builtin.h" #include "vm/exceptions.h" @@ -213,11 +215,11 @@ bool access_is_accessible_member(classinfo *referer, classinfo *declarer, bool access_check_field(fieldinfo *f, s4 calldepth) { - java_objectarray *oa; - classinfo *callerclass; - char *msg; - s4 msglen; - utf *u; + java_handle_objectarray_t *oa; + classinfo *callerclass; + char *msg; + s4 msglen; + utf *u; /* if everything is public, there is nothing to check */ @@ -231,7 +233,7 @@ bool access_check_field(fieldinfo *f, s4 calldepth) if (oa == NULL) return false; - assert(calldepth >= 0 && calldepth < oa->header.size); + assert(calldepth >= 0 && calldepth < LLNI_array_size(oa)); callerclass = (classinfo *) oa->data[calldepth]; @@ -294,11 +296,11 @@ bool access_check_field(fieldinfo *f, s4 calldepth) bool access_check_method(methodinfo *m, s4 calldepth) { - java_objectarray *oa; - classinfo *callerclass; - char *msg; - s4 msglen; - utf *u; + java_handle_objectarray_t *oa; + classinfo *callerclass; + char *msg; + s4 msglen; + utf *u; /* if everything is public, there is nothing to check */ @@ -312,7 +314,7 @@ bool access_check_method(methodinfo *m, s4 calldepth) if (oa == NULL) return false; - assert(calldepth >= 0 && calldepth < oa->header.size); + assert(calldepth >= 0 && calldepth < LLNI_array_size(oa)); callerclass = (classinfo *) oa->data[calldepth]; diff --git a/src/vm/builtin.c b/src/vm/builtin.c index cb958cc05..2286c40f7 100644 --- a/src/vm/builtin.c +++ b/src/vm/builtin.c @@ -28,7 +28,7 @@ calls instead of machine instructions, using the C calling convention. - $Id: builtin.c 8299 2007-08-13 08:41:18Z michi $ + $Id: builtin.c 8321 2007-08-16 11:37:25Z michi $ */ @@ -604,7 +604,7 @@ void *builtin_throw_exception(java_handle_t *xptr) *******************************************************************************/ -s4 builtin_canstore(java_objectarray *oa, java_handle_t *o) +s4 builtin_canstore(java_handle_objectarray_t *oa, java_handle_t *o) { arraydescriptor *desc; arraydescriptor *valuedesc; @@ -679,7 +679,7 @@ s4 builtin_canstore(java_objectarray *oa, java_handle_t *o) /* This is an optimized version where a is guaranteed to be one-dimensional */ -s4 builtin_canstore_onedim (java_objectarray *a, java_handle_t *o) +s4 builtin_canstore_onedim (java_handle_objectarray_t *a, java_handle_t *o) { arraydescriptor *desc; vftbl_t *elementvftbl; @@ -730,7 +730,7 @@ s4 builtin_canstore_onedim (java_objectarray *a, java_handle_t *o) /* This is an optimized version where a is guaranteed to be a * one-dimensional array of a class type */ -s4 builtin_canstore_onedim_class(java_objectarray *a, java_handle_t *o) +s4 builtin_canstore_onedim_class(java_handle_objectarray_t *a, java_handle_t *o) { vftbl_t *elementvftbl; vftbl_t *valuevftbl; @@ -909,13 +909,13 @@ java_objectheader *builtin_fast_new(classinfo *c) *******************************************************************************/ -java_arrayheader *builtin_newarray(s4 size, classinfo *arrayclass) +java_handle_t *builtin_newarray(s4 size, classinfo *arrayclass) { - arraydescriptor *desc; - s4 dataoffset; - s4 componentsize; - s4 actualsize; - java_arrayheader *a; + arraydescriptor *desc; + s4 dataoffset; + s4 componentsize; + s4 actualsize; + java_array_t *a; #if defined(ENABLE_RT_TIMING) struct timespec time_start, time_end; #endif @@ -951,7 +951,7 @@ java_arrayheader *builtin_newarray(s4 size, classinfo *arrayclass) lock_init_object_lock(&a->objheader); #endif - a->size = size; + LLNI_array_size(a) = size; RT_TIMING_GET_TIME(time_end); RT_TIMING_TIME_DIFF(time_start, time_end, RT_TIMING_NEW_ARRAY); @@ -969,7 +969,7 @@ java_arrayheader *builtin_newarray(s4 size, classinfo *arrayclass) *******************************************************************************/ -java_objectarray *builtin_anewarray(s4 size, classinfo *componentclass) +java_handle_objectarray_t *builtin_anewarray(s4 size, classinfo *componentclass) { classinfo *arrayclass; @@ -988,7 +988,7 @@ java_objectarray *builtin_anewarray(s4 size, classinfo *componentclass) if (!arrayclass) return NULL; - return (java_objectarray *) builtin_newarray(size, arrayclass); + return (java_handle_objectarray_t *) builtin_newarray(size, arrayclass); } @@ -1002,9 +1002,9 @@ java_objectarray *builtin_anewarray(s4 size, classinfo *componentclass) *******************************************************************************/ -java_booleanarray *builtin_newarray_boolean(s4 size) +java_handle_booleanarray_t *builtin_newarray_boolean(s4 size) { - return (java_booleanarray *) + return (java_handle_booleanarray_t *) builtin_newarray(size, primitivetype_table[ARRAYTYPE_BOOLEAN].arrayclass); } @@ -1019,9 +1019,9 @@ java_booleanarray *builtin_newarray_boolean(s4 size) *******************************************************************************/ -java_bytearray *builtin_newarray_byte(s4 size) +java_handle_bytearray_t *builtin_newarray_byte(s4 size) { - return (java_bytearray *) + return (java_handle_bytearray_t *) builtin_newarray(size, primitivetype_table[ARRAYTYPE_BYTE].arrayclass); } @@ -1035,9 +1035,9 @@ java_bytearray *builtin_newarray_byte(s4 size) *******************************************************************************/ -java_chararray *builtin_newarray_char(s4 size) +java_handle_chararray_t *builtin_newarray_char(s4 size) { - return (java_chararray *) + return (java_handle_chararray_t *) builtin_newarray(size, primitivetype_table[ARRAYTYPE_CHAR].arrayclass); } @@ -1051,9 +1051,9 @@ java_chararray *builtin_newarray_char(s4 size) *******************************************************************************/ -java_shortarray *builtin_newarray_short(s4 size) +java_handle_shortarray_t *builtin_newarray_short(s4 size) { - return (java_shortarray *) + return (java_handle_shortarray_t *) builtin_newarray(size, primitivetype_table[ARRAYTYPE_SHORT].arrayclass); } @@ -1067,9 +1067,9 @@ java_shortarray *builtin_newarray_short(s4 size) *******************************************************************************/ -java_intarray *builtin_newarray_int(s4 size) +java_handle_intarray_t *builtin_newarray_int(s4 size) { - return (java_intarray *) + return (java_handle_intarray_t *) builtin_newarray(size, primitivetype_table[ARRAYTYPE_INT].arrayclass); } @@ -1083,9 +1083,9 @@ java_intarray *builtin_newarray_int(s4 size) *******************************************************************************/ -java_longarray *builtin_newarray_long(s4 size) +java_handle_longarray_t *builtin_newarray_long(s4 size) { - return (java_longarray *) + return (java_handle_longarray_t *) builtin_newarray(size, primitivetype_table[ARRAYTYPE_LONG].arrayclass); } @@ -1099,9 +1099,9 @@ java_longarray *builtin_newarray_long(s4 size) *******************************************************************************/ -java_floatarray *builtin_newarray_float(s4 size) +java_handle_floatarray_t *builtin_newarray_float(s4 size) { - return (java_floatarray *) + return (java_handle_floatarray_t *) builtin_newarray(size, primitivetype_table[ARRAYTYPE_FLOAT].arrayclass); } @@ -1115,9 +1115,9 @@ java_floatarray *builtin_newarray_float(s4 size) *******************************************************************************/ -java_doublearray *builtin_newarray_double(s4 size) +java_handle_doublearray_t *builtin_newarray_double(s4 size) { - return (java_doublearray *) + return (java_handle_doublearray_t *) builtin_newarray(size, primitivetype_table[ARRAYTYPE_DOUBLE].arrayclass); } @@ -1138,19 +1138,19 @@ java_doublearray *builtin_newarray_double(s4 size) ******************************************************************************/ -static java_arrayheader *builtin_multianewarray_intern(int n, - classinfo *arrayclass, - long *dims) +static java_handle_t *builtin_multianewarray_intern(int n, + classinfo *arrayclass, + long *dims) { - s4 size; - java_arrayheader *a; - classinfo *componentclass; - s4 i; + s4 size; + java_handle_t *a; + classinfo *componentclass; + s4 i; /* create this dimension */ size = (s4) dims[0]; - a = builtin_newarray(size, arrayclass); + a = builtin_newarray(size, arrayclass); if (!a) return NULL; @@ -1169,7 +1169,7 @@ static java_arrayheader *builtin_multianewarray_intern(int n, /* create the component arrays */ for (i = 0; i < size; i++) { - java_arrayheader *ea = + java_handle_t *ea = #if defined(__MIPS__) && (SIZEOF_VOID_P == 4) /* we save an s4 to a s8 slot, 8-byte aligned */ @@ -1181,7 +1181,7 @@ static java_arrayheader *builtin_multianewarray_intern(int n, if (!ea) return NULL; - ((java_objectarray *) a)->data[i] = (java_object_t *) ea; + ((java_handle_objectarray_t *) a)->data[i] = (java_object_t *) ea; } return a; @@ -1195,8 +1195,8 @@ static java_arrayheader *builtin_multianewarray_intern(int n, ******************************************************************************/ -java_arrayheader *builtin_multianewarray(int n, classinfo *arrayclass, - long *dims) +java_handle_objectarray_t *builtin_multianewarray(int n, classinfo *arrayclass, + long *dims) { s4 i; s4 size; @@ -2635,8 +2635,8 @@ float builtin_d2f(double a) *******************************************************************************/ -bool builtin_arraycopy(java_arrayheader *src, s4 srcStart, - java_arrayheader *dest, s4 destStart, s4 len) +bool builtin_arraycopy(java_handle_t *src, s4 srcStart, + java_handle_t *dest, s4 destStart, s4 len) { arraydescriptor *sdesc; arraydescriptor *ddesc; @@ -2647,8 +2647,8 @@ bool builtin_arraycopy(java_arrayheader *src, s4 srcStart, return false; } - sdesc = src->objheader.vftbl->arraydesc; - ddesc = dest->objheader.vftbl->arraydesc; + sdesc = LLNI_vftbl_direct(src)->arraydesc; + ddesc = LLNI_vftbl_direct(dest)->arraydesc; if (!sdesc || !ddesc || (sdesc->arraytype != ddesc->arraytype)) { exceptions_throw_arraystoreexception(); @@ -2658,8 +2658,8 @@ bool builtin_arraycopy(java_arrayheader *src, s4 srcStart, /* we try to throw exception with the same message as SUN does */ if ((len < 0) || (srcStart < 0) || (destStart < 0) || - (srcStart + len < 0) || (srcStart + len > src->size) || - (destStart + len < 0) || (destStart + len > dest->size)) { + (srcStart + len < 0) || (srcStart + len > LLNI_array_size(src)) || + (destStart + len < 0) || (destStart + len > LLNI_array_size(dest))) { exceptions_throw_arrayindexoutofboundsexception(); return false; } @@ -2677,8 +2677,8 @@ bool builtin_arraycopy(java_arrayheader *src, s4 srcStart, else { /* We copy references of different type */ - java_objectarray *oas = (java_objectarray *) src; - java_objectarray *oad = (java_objectarray *) dest; + java_handle_objectarray_t *oas = (java_handle_objectarray_t *) src; + java_handle_objectarray_t *oad = (java_handle_objectarray_t *) dest; if (destStart <= srcStart) { for (i = 0; i < len; i++) { @@ -2756,11 +2756,11 @@ s8 builtin_currenttimemillis(void) java_handle_t *builtin_clone(void *env, java_handle_t *o) { - arraydescriptor *ad; - java_arrayheader *ah; - u4 size; - classinfo *c; - java_handle_t *co; /* cloned object header */ + arraydescriptor *ad; + java_handle_t *ah; + u4 size; + classinfo *c; + java_handle_t *co; /* cloned object header */ /* get the array descriptor */ @@ -2769,9 +2769,9 @@ java_handle_t *builtin_clone(void *env, java_handle_t *o) /* we are cloning an array */ if (ad != NULL) { - ah = (java_arrayheader *) o; + ah = (java_handle_t *) o; - size = ad->dataoffset + ad->componentsize * ah->size; + size = ad->dataoffset + ad->componentsize * LLNI_array_size(ah); co = heap_alloc(size, (ad->arraytype == ARRAYTYPE_OBJECT), NULL, true); diff --git a/src/vm/builtin.h b/src/vm/builtin.h index 0b4dc18c9..64ade7a29 100644 --- a/src/vm/builtin.h +++ b/src/vm/builtin.h @@ -22,7 +22,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - $Id: builtin.h 8299 2007-08-13 08:41:18Z michi $ + $Id: builtin.h 8321 2007-08-16 11:37:25Z michi $ */ @@ -144,34 +144,34 @@ java_handle_t *builtin_new(classinfo *c); java_objectheader *builtin_fast_new(classinfo *c); #define BUILTIN_FAST_new (functionptr) builtin_fast_new -java_arrayheader *builtin_newarray(s4 size, classinfo *arrayclass); +java_handle_t *builtin_newarray(s4 size, classinfo *arrayclass); #define BUILTIN_newarray (functionptr) builtin_newarray -java_objectarray *builtin_anewarray(s4 size, classinfo *componentclass); +java_handle_objectarray_t *builtin_anewarray(s4 size, classinfo *componentclass); #define BUILTIN_anewarray (functionptr) builtin_anewarray -java_booleanarray *builtin_newarray_boolean(s4 size); +java_handle_booleanarray_t *builtin_newarray_boolean(s4 size); #define BUILTIN_newarray_boolean (functionptr) builtin_newarray_boolean -java_chararray *builtin_newarray_char(s4 size); +java_handle_chararray_t *builtin_newarray_char(s4 size); #define BUILTIN_newarray_char (functionptr) builtin_newarray_char -java_floatarray *builtin_newarray_float(s4 size); +java_handle_floatarray_t *builtin_newarray_float(s4 size); #define BUILTIN_newarray_float (functionptr) builtin_newarray_float -java_doublearray *builtin_newarray_double(s4 size); +java_handle_doublearray_t *builtin_newarray_double(s4 size); #define BUILTIN_newarray_double (functionptr) builtin_newarray_double -java_bytearray *builtin_newarray_byte(s4 size); +java_handle_bytearray_t *builtin_newarray_byte(s4 size); #define BUILTIN_newarray_byte (functionptr) builtin_newarray_byte -java_shortarray *builtin_newarray_short(s4 size); +java_handle_shortarray_t *builtin_newarray_short(s4 size); #define BUILTIN_newarray_short (functionptr) builtin_newarray_short -java_intarray *builtin_newarray_int(s4 size); +java_handle_intarray_t *builtin_newarray_int(s4 size); #define BUILTIN_newarray_int (functionptr) builtin_newarray_int -java_longarray *builtin_newarray_long(s4 size); +java_handle_longarray_t *builtin_newarray_long(s4 size); #define BUILTIN_newarray_long (functionptr) builtin_newarray_long -java_arrayheader *builtin_multianewarray(int n, classinfo *arrayclass, - long *dims); +java_handle_objectarray_t *builtin_multianewarray(int n, classinfo *arrayclass, + long *dims); #define BUILTIN_multianewarray (functionptr) builtin_multianewarray -s4 builtin_canstore(java_objectarray *oa, java_handle_t *o); +s4 builtin_canstore(java_handle_objectarray_t *oa, java_handle_t *o); #define BUILTIN_canstore (functionptr) builtin_canstore #if defined(TRACE_ARGS_NUM) @@ -300,8 +300,8 @@ float builtin_d2f(double a); java_handle_t *builtin_clone(void *env, java_handle_t *o); #define BUILTIN_clone (functionptr) builtin_clone -bool builtin_arraycopy(java_arrayheader *src, s4 srcStart, - java_arrayheader *dest, s4 destStart, s4 len); +bool builtin_arraycopy(java_handle_t *src, s4 srcStart, + java_handle_t *dest, s4 destStart, s4 len); #define BUILTIN_arraycopy (functionptr) builtin_arraycopy s8 builtin_nanotime(void); diff --git a/src/vm/exceptions.c b/src/vm/exceptions.c index e8e44651e..3b2859d8b 100644 --- a/src/vm/exceptions.c +++ b/src/vm/exceptions.c @@ -22,7 +22,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - $Id: exceptions.c 8296 2007-08-11 22:38:38Z pm $ + $Id: exceptions.c 8318 2007-08-16 10:05:34Z michi $ */ @@ -107,8 +107,8 @@ bool exceptions_init(void) /* check if we get into trouble with our hardware-exceptions */ - if (OFFSET(java_bytearray, data) <= EXCEPTION_HARDWARE_LARGEST) - vm_abort("signal_init: array-data offset is less or equal the maximum hardware-exception displacement: %d <= %d", OFFSET(java_bytearray, data), EXCEPTION_HARDWARE_LARGEST); + if (OFFSET(java_bytearray_t, data) <= EXCEPTION_HARDWARE_LARGEST) + vm_abort("signal_init: array-data offset is less or equal the maximum hardware-exception displacement: %d <= %d", OFFSET(java_bytearray_t, data), EXCEPTION_HARDWARE_LARGEST); /* java/lang/Throwable */ @@ -1947,7 +1947,7 @@ void exceptions_print_exception(java_handle_t *xptr) } #if defined(ENABLE_JAVASE) - LLNI_field_set_ref(t, cause, cause); + LLNI_field_get_ref(t, cause, cause); #endif /* print the root exception */ diff --git a/src/vm/global.h b/src/vm/global.h index 07963d38f..87f82d742 100644 --- a/src/vm/global.h +++ b/src/vm/global.h @@ -22,7 +22,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - $Id: global.h 8299 2007-08-13 08:41:18Z michi $ + $Id: global.h 8321 2007-08-16 11:37:25Z michi $ */ @@ -82,7 +82,7 @@ typedef union { /* forward typedefs ***********************************************************/ typedef struct java_object_t java_object_t; -typedef struct java_objectarray java_objectarray; +typedef struct java_objectarray_t java_objectarray_t; #define MAX_ALIGN 8 /* most generic alignment for JavaVM values */ @@ -224,15 +224,6 @@ struct java_object_t { /* header for all objects */ }; -#if 0 -typedef struct java_handle_t { - java_object_t *heap_object; -} java_handle_t; -#else -typedef java_object_t java_handle_t; -#endif - - /* arrays ********************************************************************** All arrays are objects (they need the object header with a pointer @@ -241,10 +232,10 @@ typedef java_object_t java_handle_t; which is referenced by the vftbl. */ -typedef struct java_arrayheader { /* header for all arrays */ +typedef struct java_array_t { /* header for all arrays */ java_object_t objheader; /* object header */ s4 size; /* array size */ -} java_arrayheader; +} java_array_t; @@ -253,55 +244,84 @@ typedef struct java_arrayheader { /* header for all arrays */ /* booleanarray and bytearray need identical memory layout (access methods use the same machine code */ -typedef struct java_booleanarray { - java_arrayheader header; +typedef struct java_booleanarray_t { + java_array_t header; u1 data[1]; -} java_booleanarray; +} java_booleanarray_t; -typedef struct java_bytearray { - java_arrayheader header; +typedef struct java_bytearray_t { + java_array_t header; s1 data[1]; -} java_bytearray; +} java_bytearray_t; -typedef struct java_chararray { - java_arrayheader header; +typedef struct java_chararray_t { + java_array_t header; u2 data[1]; -} java_chararray; +} java_chararray_t; -typedef struct java_shortarray { - java_arrayheader header; +typedef struct java_shortarray_t { + java_array_t header; s2 data[1]; -} java_shortarray; +} java_shortarray_t; -typedef struct java_intarray { - java_arrayheader header; +typedef struct java_intarray_t { + java_array_t header; s4 data[1]; -} java_intarray; +} java_intarray_t; -typedef struct java_longarray { - java_arrayheader header; +typedef struct java_longarray_t { + java_array_t header; s8 data[1]; -} java_longarray; +} java_longarray_t; -typedef struct java_floatarray { - java_arrayheader header; +typedef struct java_floatarray_t { + java_array_t header; float data[1]; -} java_floatarray; +} java_floatarray_t; -typedef struct java_doublearray { - java_arrayheader header; +typedef struct java_doublearray_t { + java_array_t header; double data[1]; -} java_doublearray; +} java_doublearray_t; /* objectarray and arrayarray need identical memory layout (access methods use the same machine code */ -struct java_objectarray { - java_arrayheader header; - java_object_t *data[1]; +struct java_objectarray_t { + java_array_t header; + java_object_t *data[1]; }; +/* java_handle_t *************************************************************** + + TODO: document me! + +*******************************************************************************/ + +#if 0 +typedef struct java_handle_t { + java_object_t *heap_object; +} java_handle_t; +#elseif 0 +typedef union { + java_object_t object; + java_array_t array; +} java_handle_t; +#else +typedef java_object_t java_handle_t; +typedef java_objectarray_t java_handle_objectarray_t; +typedef java_booleanarray_t java_handle_booleanarray_t; +typedef java_bytearray_t java_handle_bytearray_t; +typedef java_chararray_t java_handle_chararray_t; +typedef java_shortarray_t java_handle_shortarray_t; +typedef java_intarray_t java_handle_intarray_t; +typedef java_longarray_t java_handle_longarray_t; +typedef java_floatarray_t java_handle_floatarray_t; +typedef java_doublearray_t java_handle_doublearray_t; +#endif + + /* global constants related to the verifier ***********************************/ /* The verifier needs additional variables in the variable array. Since these */ diff --git a/src/vm/jit/Makefile.am b/src/vm/jit/Makefile.am index 65b45aa90..2ea63caec 100644 --- a/src/vm/jit/Makefile.am +++ b/src/vm/jit/Makefile.am @@ -22,7 +22,7 @@ ## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA ## 02110-1301, USA. ## -## $Id: Makefile.am 8274 2007-08-08 15:58:17Z twisti $ +## $Id: Makefile.am 8304 2007-08-14 19:57:20Z pm $ ## Process this file with automake to produce Makefile.in @@ -166,7 +166,9 @@ libjit_la_SOURCES = \ show.h \ $(STACK_SOURCES) \ stacktrace.c \ - stacktrace.h + stacktrace.h \ + trace.c \ + trace.h libjit_la_SOURCES += \ cfg.c \ diff --git a/src/vm/jit/allocator/simplereg.c b/src/vm/jit/allocator/simplereg.c index c5c557bc3..8449ce8a9 100644 --- a/src/vm/jit/allocator/simplereg.c +++ b/src/vm/jit/allocator/simplereg.c @@ -22,7 +22,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - $Id: simplereg.c 8210 2007-07-18 12:51:00Z twisti $ + $Id: simplereg.c 8320 2007-08-16 11:35:14Z michi $ */ @@ -30,6 +30,7 @@ #include "config.h" #include +#include #include "vm/types.h" @@ -1177,13 +1178,15 @@ static void simplereg_free(registerdata *rd, s4 flags, s4 regoff, s4 type) /* if this is a copy of another variable, just decrement the copy counter */ if (flags & INMEMORY) { + int32_t memindex; + if (flags & INOUT) return; - #warning this will be more efficient if we divide it by SIZE_OF_STACKSLOT + memindex = regoff / SIZE_OF_STACKSLOT; - if (regoff < rd->memcopycountsize && rd->memcopycount[regoff]) { - rd->memcopycount[regoff]--; + if (memindex < rd->memcopycountsize && rd->memcopycount[memindex]) { + rd->memcopycount[memindex]--; return; } } @@ -1610,14 +1613,15 @@ static void simplereg_allocate_temporaries(jitdata *jd) v = VAROP(iptr->dst); if (v->flags & INMEMORY) { - if (v->vv.regoff >= rd->memcopycountsize) { - int newsize = (v->vv.regoff + 1) * 2; + int32_t memindex = v->vv.regoff / SIZE_OF_STACKSLOT; + if (memindex >= rd->memcopycountsize) { + int newsize = (memindex + 1) * 2; i = rd->memcopycountsize; rd->memcopycount = DMREALLOC(rd->memcopycount, int, i, newsize); MZERO(rd->memcopycount + i, int, newsize - i); rd->memcopycountsize = newsize; } - rd->memcopycount[v->vv.regoff]++; + rd->memcopycount[memindex]++; } else { /* XXX split reg/mem variables on arm may need special handling here */ diff --git a/src/vm/jit/alpha/codegen.c b/src/vm/jit/alpha/codegen.c index fa54d8e8f..a56dc0b52 100644 --- a/src/vm/jit/alpha/codegen.c +++ b/src/vm/jit/alpha/codegen.c @@ -22,7 +22,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - $Id: codegen.c 8299 2007-08-13 08:41:18Z michi $ + $Id: codegen.c 8321 2007-08-16 11:37:25Z michi $ */ @@ -1419,7 +1419,7 @@ bool codegen_emit(jitdata *jd) s1 = emit_load_s1(jd, iptr, REG_ITMP1); d = codegen_reg_of_dst(jd, iptr, REG_ITMP2); /* implicit null-pointer check */ - M_ILD(d, s1, OFFSET(java_arrayheader, size)); + M_ILD(d, s1, OFFSET(java_array_t, size)); emit_store_dst(jd, iptr, d); break; @@ -1432,13 +1432,13 @@ bool codegen_emit(jitdata *jd) emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); if (has_ext_instr_set) { M_LADD(s2, s1, REG_ITMP1); - M_BLDU(d, REG_ITMP1, OFFSET (java_bytearray, data[0])); + M_BLDU(d, REG_ITMP1, OFFSET (java_bytearray_t, data[0])); M_BSEXT(d, d); } else { M_LADD(s2, s1, REG_ITMP1); - M_LLD_U(REG_ITMP2, REG_ITMP1, OFFSET(java_bytearray, data[0])); - M_LDA(REG_ITMP1, REG_ITMP1, OFFSET(java_bytearray, data[0])+1); + M_LLD_U(REG_ITMP2, REG_ITMP1, OFFSET(java_bytearray_t, data[0])); + M_LDA(REG_ITMP1, REG_ITMP1, OFFSET(java_bytearray_t, data[0])+1); M_EXTQH(REG_ITMP2, REG_ITMP1, d); M_SRA_IMM(d, 56, d); } @@ -1455,13 +1455,13 @@ bool codegen_emit(jitdata *jd) if (has_ext_instr_set) { M_LADD(s2, s1, REG_ITMP1); M_LADD(s2, REG_ITMP1, REG_ITMP1); - M_SLDU(d, REG_ITMP1, OFFSET(java_chararray, data[0])); + M_SLDU(d, REG_ITMP1, OFFSET(java_chararray_t, data[0])); } else { M_LADD (s2, s1, REG_ITMP1); M_LADD (s2, REG_ITMP1, REG_ITMP1); - M_LLD_U(REG_ITMP2, REG_ITMP1, OFFSET(java_chararray, data[0])); - M_LDA (REG_ITMP1, REG_ITMP1, OFFSET(java_chararray, data[0])); + M_LLD_U(REG_ITMP2, REG_ITMP1, OFFSET(java_chararray_t, data[0])); + M_LDA (REG_ITMP1, REG_ITMP1, OFFSET(java_chararray_t, data[0])); M_EXTWL(REG_ITMP2, REG_ITMP1, d); } emit_store_dst(jd, iptr, d); @@ -1477,13 +1477,13 @@ bool codegen_emit(jitdata *jd) if (has_ext_instr_set) { M_LADD(s2, s1, REG_ITMP1); M_LADD(s2, REG_ITMP1, REG_ITMP1); - M_SLDU( d, REG_ITMP1, OFFSET (java_shortarray, data[0])); + M_SLDU( d, REG_ITMP1, OFFSET (java_shortarray_t, data[0])); M_SSEXT(d, d); } else { M_LADD(s2, s1, REG_ITMP1); M_LADD(s2, REG_ITMP1, REG_ITMP1); - M_LLD_U(REG_ITMP2, REG_ITMP1, OFFSET(java_shortarray, data[0])); - M_LDA(REG_ITMP1, REG_ITMP1, OFFSET(java_shortarray, data[0])+2); + M_LLD_U(REG_ITMP2, REG_ITMP1, OFFSET(java_shortarray_t, data[0])); + M_LDA(REG_ITMP1, REG_ITMP1, OFFSET(java_shortarray_t, data[0])+2); M_EXTQH(REG_ITMP2, REG_ITMP1, d); M_SRA_IMM(d, 48, d); } @@ -1498,7 +1498,7 @@ bool codegen_emit(jitdata *jd) /* implicit null-pointer check */ emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); M_S4ADDQ(s2, s1, REG_ITMP1); - M_ILD(d, REG_ITMP1, OFFSET(java_intarray, data[0])); + M_ILD(d, REG_ITMP1, OFFSET(java_intarray_t, data[0])); emit_store_dst(jd, iptr, d); break; @@ -1510,7 +1510,7 @@ bool codegen_emit(jitdata *jd) /* implicit null-pointer check */ emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); M_S8ADDQ(s2, s1, REG_ITMP1); - M_LLD(d, REG_ITMP1, OFFSET(java_longarray, data[0])); + M_LLD(d, REG_ITMP1, OFFSET(java_longarray_t, data[0])); emit_store_dst(jd, iptr, d); break; @@ -1522,7 +1522,7 @@ bool codegen_emit(jitdata *jd) /* implicit null-pointer check */ emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); M_S4ADDQ(s2, s1, REG_ITMP1); - M_FLD(d, REG_ITMP1, OFFSET(java_floatarray, data[0])); + M_FLD(d, REG_ITMP1, OFFSET(java_floatarray_t, data[0])); emit_store_dst(jd, iptr, d); break; @@ -1534,7 +1534,7 @@ bool codegen_emit(jitdata *jd) /* implicit null-pointer check */ emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); M_S8ADDQ(s2, s1, REG_ITMP1); - M_DLD(d, REG_ITMP1, OFFSET(java_doublearray, data[0])); + M_DLD(d, REG_ITMP1, OFFSET(java_doublearray_t, data[0])); emit_store_dst(jd, iptr, d); break; @@ -1546,7 +1546,7 @@ bool codegen_emit(jitdata *jd) /* implicit null-pointer check */ emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); M_SAADDQ(s2, s1, REG_ITMP1); - M_ALD(d, REG_ITMP1, OFFSET(java_objectarray, data[0])); + M_ALD(d, REG_ITMP1, OFFSET(java_objectarray_t, data[0])); emit_store_dst(jd, iptr, d); break; @@ -1560,12 +1560,12 @@ bool codegen_emit(jitdata *jd) s3 = emit_load_s3(jd, iptr, REG_ITMP3); if (has_ext_instr_set) { M_LADD(s2, s1, REG_ITMP1); - M_BST(s3, REG_ITMP1, OFFSET(java_bytearray, data[0])); + M_BST(s3, REG_ITMP1, OFFSET(java_bytearray_t, data[0])); } else { M_LADD(s2, s1, REG_ITMP1); - M_LLD_U(REG_ITMP2, REG_ITMP1, OFFSET(java_bytearray, data[0])); - M_LDA(REG_ITMP1, REG_ITMP1, OFFSET(java_bytearray, data[0])); + M_LLD_U(REG_ITMP2, REG_ITMP1, OFFSET(java_bytearray_t, data[0])); + M_LDA(REG_ITMP1, REG_ITMP1, OFFSET(java_bytearray_t, data[0])); M_INSBL(s3, REG_ITMP1, REG_ITMP3); M_MSKBL(REG_ITMP2, REG_ITMP1, REG_ITMP2); M_OR(REG_ITMP2, REG_ITMP3, REG_ITMP2); @@ -1583,13 +1583,13 @@ bool codegen_emit(jitdata *jd) if (has_ext_instr_set) { M_LADD(s2, s1, REG_ITMP1); M_LADD(s2, REG_ITMP1, REG_ITMP1); - M_SST(s3, REG_ITMP1, OFFSET(java_chararray, data[0])); + M_SST(s3, REG_ITMP1, OFFSET(java_chararray_t, data[0])); } else { M_LADD(s2, s1, REG_ITMP1); M_LADD(s2, REG_ITMP1, REG_ITMP1); - M_LLD_U(REG_ITMP2, REG_ITMP1, OFFSET(java_chararray, data[0])); - M_LDA(REG_ITMP1, REG_ITMP1, OFFSET(java_chararray, data[0])); + M_LLD_U(REG_ITMP2, REG_ITMP1, OFFSET(java_chararray_t, data[0])); + M_LDA(REG_ITMP1, REG_ITMP1, OFFSET(java_chararray_t, data[0])); M_INSWL(s3, REG_ITMP1, REG_ITMP3); M_MSKWL(REG_ITMP2, REG_ITMP1, REG_ITMP2); M_OR(REG_ITMP2, REG_ITMP3, REG_ITMP2); @@ -1607,13 +1607,13 @@ bool codegen_emit(jitdata *jd) if (has_ext_instr_set) { M_LADD(s2, s1, REG_ITMP1); M_LADD(s2, REG_ITMP1, REG_ITMP1); - M_SST(s3, REG_ITMP1, OFFSET(java_shortarray, data[0])); + M_SST(s3, REG_ITMP1, OFFSET(java_shortarray_t, data[0])); } else { M_LADD(s2, s1, REG_ITMP1); M_LADD(s2, REG_ITMP1, REG_ITMP1); - M_LLD_U(REG_ITMP2, REG_ITMP1, OFFSET(java_shortarray, data[0])); - M_LDA(REG_ITMP1, REG_ITMP1, OFFSET(java_shortarray, data[0])); + M_LLD_U(REG_ITMP2, REG_ITMP1, OFFSET(java_shortarray_t, data[0])); + M_LDA(REG_ITMP1, REG_ITMP1, OFFSET(java_shortarray_t, data[0])); M_INSWL(s3, REG_ITMP1, REG_ITMP3); M_MSKWL(REG_ITMP2, REG_ITMP1, REG_ITMP2); M_OR(REG_ITMP2, REG_ITMP3, REG_ITMP2); @@ -1629,7 +1629,7 @@ bool codegen_emit(jitdata *jd) emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); s3 = emit_load_s3(jd, iptr, REG_ITMP3); M_S4ADDQ(s2, s1, REG_ITMP1); - M_IST(s3, REG_ITMP1, OFFSET(java_intarray, data[0])); + M_IST(s3, REG_ITMP1, OFFSET(java_intarray_t, data[0])); break; case ICMD_LASTORE: /* ..., arrayref, index, value ==> ... */ @@ -1640,7 +1640,7 @@ bool codegen_emit(jitdata *jd) emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); s3 = emit_load_s3(jd, iptr, REG_ITMP3); M_S8ADDQ(s2, s1, REG_ITMP1); - M_LST(s3, REG_ITMP1, OFFSET(java_longarray, data[0])); + M_LST(s3, REG_ITMP1, OFFSET(java_longarray_t, data[0])); break; case ICMD_FASTORE: /* ..., arrayref, index, value ==> ... */ @@ -1651,7 +1651,7 @@ bool codegen_emit(jitdata *jd) emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); s3 = emit_load_s3(jd, iptr, REG_FTMP3); M_S4ADDQ(s2, s1, REG_ITMP1); - M_FST(s3, REG_ITMP1, OFFSET(java_floatarray, data[0])); + M_FST(s3, REG_ITMP1, OFFSET(java_floatarray_t, data[0])); break; case ICMD_DASTORE: /* ..., arrayref, index, value ==> ... */ @@ -1662,7 +1662,7 @@ bool codegen_emit(jitdata *jd) emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); s3 = emit_load_s3(jd, iptr, REG_FTMP3); M_S8ADDQ(s2, s1, REG_ITMP1); - M_DST(s3, REG_ITMP1, OFFSET(java_doublearray, data[0])); + M_DST(s3, REG_ITMP1, OFFSET(java_doublearray_t, data[0])); break; case ICMD_AASTORE: /* ..., arrayref, index, value ==> ... */ @@ -1687,7 +1687,7 @@ bool codegen_emit(jitdata *jd) s2 = emit_load_s2(jd, iptr, REG_ITMP2); s3 = emit_load_s3(jd, iptr, REG_ITMP3); M_SAADDQ(s2, s1, REG_ITMP1); - M_AST(s3, REG_ITMP1, OFFSET(java_objectarray, data[0])); + M_AST(s3, REG_ITMP1, OFFSET(java_objectarray_t, data[0])); break; @@ -1699,12 +1699,12 @@ bool codegen_emit(jitdata *jd) emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); if (has_ext_instr_set) { M_LADD(s2, s1, REG_ITMP1); - M_BST(REG_ZERO, REG_ITMP1, OFFSET(java_bytearray, data[0])); + M_BST(REG_ZERO, REG_ITMP1, OFFSET(java_bytearray_t, data[0])); } else { M_LADD(s2, s1, REG_ITMP1); - M_LLD_U(REG_ITMP2, REG_ITMP1, OFFSET(java_bytearray, data[0])); - M_LDA(REG_ITMP1, REG_ITMP1, OFFSET(java_bytearray, data[0])); + M_LLD_U(REG_ITMP2, REG_ITMP1, OFFSET(java_bytearray_t, data[0])); + M_LDA(REG_ITMP1, REG_ITMP1, OFFSET(java_bytearray_t, data[0])); M_INSBL(REG_ZERO, REG_ITMP1, REG_ITMP3); M_MSKBL(REG_ITMP2, REG_ITMP1, REG_ITMP2); M_OR(REG_ITMP2, REG_ITMP3, REG_ITMP2); @@ -1721,13 +1721,13 @@ bool codegen_emit(jitdata *jd) if (has_ext_instr_set) { M_LADD(s2, s1, REG_ITMP1); M_LADD(s2, REG_ITMP1, REG_ITMP1); - M_SST(REG_ZERO, REG_ITMP1, OFFSET(java_chararray, data[0])); + M_SST(REG_ZERO, REG_ITMP1, OFFSET(java_chararray_t, data[0])); } else { M_LADD(s2, s1, REG_ITMP1); M_LADD(s2, REG_ITMP1, REG_ITMP1); - M_LLD_U(REG_ITMP2, REG_ITMP1, OFFSET(java_chararray, data[0])); - M_LDA(REG_ITMP1, REG_ITMP1, OFFSET(java_chararray, data[0])); + M_LLD_U(REG_ITMP2, REG_ITMP1, OFFSET(java_chararray_t, data[0])); + M_LDA(REG_ITMP1, REG_ITMP1, OFFSET(java_chararray_t, data[0])); M_INSWL(REG_ZERO, REG_ITMP1, REG_ITMP3); M_MSKWL(REG_ITMP2, REG_ITMP1, REG_ITMP2); M_OR(REG_ITMP2, REG_ITMP3, REG_ITMP2); @@ -1744,13 +1744,13 @@ bool codegen_emit(jitdata *jd) if (has_ext_instr_set) { M_LADD(s2, s1, REG_ITMP1); M_LADD(s2, REG_ITMP1, REG_ITMP1); - M_SST(REG_ZERO, REG_ITMP1, OFFSET(java_shortarray, data[0])); + M_SST(REG_ZERO, REG_ITMP1, OFFSET(java_shortarray_t, data[0])); } else { M_LADD(s2, s1, REG_ITMP1); M_LADD(s2, REG_ITMP1, REG_ITMP1); - M_LLD_U(REG_ITMP2, REG_ITMP1, OFFSET(java_shortarray, data[0])); - M_LDA(REG_ITMP1, REG_ITMP1, OFFSET(java_shortarray, data[0])); + M_LLD_U(REG_ITMP2, REG_ITMP1, OFFSET(java_shortarray_t, data[0])); + M_LDA(REG_ITMP1, REG_ITMP1, OFFSET(java_shortarray_t, data[0])); M_INSWL(REG_ZERO, REG_ITMP1, REG_ITMP3); M_MSKWL(REG_ITMP2, REG_ITMP1, REG_ITMP2); M_OR(REG_ITMP2, REG_ITMP3, REG_ITMP2); @@ -1765,7 +1765,7 @@ bool codegen_emit(jitdata *jd) /* implicit null-pointer check */ emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); M_S4ADDQ(s2, s1, REG_ITMP1); - M_IST(REG_ZERO, REG_ITMP1, OFFSET(java_intarray, data[0])); + M_IST(REG_ZERO, REG_ITMP1, OFFSET(java_intarray_t, data[0])); break; case ICMD_LASTORECONST: /* ..., arrayref, index ==> ... */ @@ -1775,7 +1775,7 @@ bool codegen_emit(jitdata *jd) /* implicit null-pointer check */ emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); M_S8ADDQ(s2, s1, REG_ITMP1); - M_LST(REG_ZERO, REG_ITMP1, OFFSET(java_longarray, data[0])); + M_LST(REG_ZERO, REG_ITMP1, OFFSET(java_longarray_t, data[0])); break; case ICMD_AASTORECONST: /* ..., arrayref, index ==> ... */ @@ -1785,7 +1785,7 @@ bool codegen_emit(jitdata *jd) /* implicit null-pointer check */ emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); M_SAADDQ(s2, s1, REG_ITMP1); - M_AST(REG_ZERO, REG_ITMP1, OFFSET(java_objectarray, data[0])); + M_AST(REG_ZERO, REG_ITMP1, OFFSET(java_objectarray_t, data[0])); break; diff --git a/src/vm/jit/alpha/emit.c b/src/vm/jit/alpha/emit.c index 044a01bd1..84c3bf3ea 100644 --- a/src/vm/jit/alpha/emit.c +++ b/src/vm/jit/alpha/emit.c @@ -22,7 +22,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - $Id: emit.c 8260 2007-08-06 12:19:01Z michi $ + $Id: emit.c 8318 2007-08-16 10:05:34Z michi $ */ @@ -343,7 +343,7 @@ void emit_arithmetic_check(codegendata *cd, instruction *iptr, s4 reg) void emit_arrayindexoutofbounds_check(codegendata *cd, instruction *iptr, s4 s1, s4 s2) { if (INSTRUCTION_MUST_CHECK(iptr)) { - M_ILD(REG_ITMP3, s1, OFFSET(java_arrayheader, size)); + M_ILD(REG_ITMP3, s1, OFFSET(java_array_t, size)); M_CMPULT(s2, REG_ITMP3, REG_ITMP3); M_BNEZ(REG_ITMP3, 1); M_ALD_INTERN(s2, REG_ZERO, EXCEPTION_HARDWARE_ARRAYINDEXOUTOFBOUNDS); diff --git a/src/vm/jit/arm/codegen.c b/src/vm/jit/arm/codegen.c index 3c4130da1..188165dd4 100644 --- a/src/vm/jit/arm/codegen.c +++ b/src/vm/jit/arm/codegen.c @@ -22,7 +22,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - $Id: codegen.c 8299 2007-08-13 08:41:18Z michi $ + $Id: codegen.c 8321 2007-08-16 11:37:25Z michi $ */ @@ -1145,7 +1145,7 @@ bool codegen_emit(jitdata *jd) s1 = emit_load_s1(jd, iptr, REG_ITMP1); d = codegen_reg_of_dst(jd, iptr, REG_ITMP2); /* implicit null-pointer check */ - M_ILD_INTERN(d, s1, OFFSET(java_arrayheader, size)); + M_ILD_INTERN(d, s1, OFFSET(java_array_t, size)); emit_store_dst(jd, iptr, d); break; @@ -1157,7 +1157,7 @@ bool codegen_emit(jitdata *jd) /* implicit null-pointer check */ emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); M_ADD(REG_ITMP1, s1, s2); /* REG_ITMP1 = s1 + 1 * s2 */ - M_LDRSB(d, REG_ITMP1, OFFSET(java_bytearray, data[0])); + M_LDRSB(d, REG_ITMP1, OFFSET(java_bytearray_t, data[0])); emit_store_dst(jd, iptr, d); break; @@ -1169,7 +1169,7 @@ bool codegen_emit(jitdata *jd) /* implicit null-pointer check */ emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); M_ADD(REG_ITMP1, s1, REG_LSL(s2, 1)); /* REG_ITMP1 = s1 + 2 * s2 */ - M_LDRH(d, REG_ITMP1, OFFSET(java_chararray, data[0])); + M_LDRH(d, REG_ITMP1, OFFSET(java_chararray_t, data[0])); emit_store_dst(jd, iptr, d); break; @@ -1181,7 +1181,7 @@ bool codegen_emit(jitdata *jd) /* implicit null-pointer check */ emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); M_ADD(REG_ITMP1, s1, REG_LSL(s2, 1)); /* REG_ITMP1 = s1 + 2 * s2 */ - M_LDRSH(d, REG_ITMP1, OFFSET(java_shortarray, data[0])); + M_LDRSH(d, REG_ITMP1, OFFSET(java_shortarray_t, data[0])); emit_store_dst(jd, iptr, d); break; @@ -1193,7 +1193,7 @@ bool codegen_emit(jitdata *jd) /* implicit null-pointer check */ emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); M_ADD(REG_ITMP1, s1, REG_LSL(s2, 2)); /* REG_ITMP1 = s1 + 4 * s2 */ - M_ILD_INTERN(d, REG_ITMP1, OFFSET(java_intarray, data[0])); + M_ILD_INTERN(d, REG_ITMP1, OFFSET(java_intarray_t, data[0])); emit_store_dst(jd, iptr, d); break; @@ -1205,7 +1205,7 @@ bool codegen_emit(jitdata *jd) /* implicit null-pointer check */ emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); M_ADD(REG_ITMP3, s1, REG_LSL(s2, 3)); /* REG_ITMP3 = s1 + 8 * s2 */ - M_LLD_INTERN(d, REG_ITMP3, OFFSET(java_longarray, data[0])); + M_LLD_INTERN(d, REG_ITMP3, OFFSET(java_longarray_t, data[0])); emit_store_dst(jd, iptr, d); break; @@ -1218,10 +1218,10 @@ bool codegen_emit(jitdata *jd) M_ADD(REG_ITMP1, s1, REG_LSL(s2, 2)); /* REG_ITMP1 = s1 + 4 * s2 */ #if !defined(ENABLE_SOFTFLOAT) d = codegen_reg_of_dst(jd, iptr, REG_FTMP1); - M_FLD_INTERN(d, REG_ITMP1, OFFSET(java_floatarray, data[0])); + M_FLD_INTERN(d, REG_ITMP1, OFFSET(java_floatarray_t, data[0])); #else d = codegen_reg_of_dst(jd, iptr, REG_ITMP1); - M_ILD_INTERN(d, REG_ITMP1, OFFSET(java_floatarray, data[0])); + M_ILD_INTERN(d, REG_ITMP1, OFFSET(java_floatarray_t, data[0])); #endif emit_store_dst(jd, iptr, d); break; @@ -1235,10 +1235,10 @@ bool codegen_emit(jitdata *jd) M_ADD(REG_ITMP3, s1, REG_LSL(s2, 3)); /* REG_ITMP3 = s1 + 8 * s2 */ #if !defined(ENABLE_SOFTFLOAT) d = codegen_reg_of_dst(jd, iptr, REG_FTMP1); - M_DLD_INTERN(d, REG_ITMP3, OFFSET(java_doublearray, data[0])); + M_DLD_INTERN(d, REG_ITMP3, OFFSET(java_doublearray_t, data[0])); #else d = codegen_reg_of_dst(jd, iptr, REG_ITMP12_PACKED); - M_LLD_INTERN(d, REG_ITMP3, OFFSET(java_doublearray, data[0])); + M_LLD_INTERN(d, REG_ITMP3, OFFSET(java_doublearray_t, data[0])); #endif emit_store_dst(jd, iptr, d); break; @@ -1251,7 +1251,7 @@ bool codegen_emit(jitdata *jd) /* implicit null-pointer check */ emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); M_ADD(REG_ITMP1, s1, REG_LSL(s2, 2)); /* REG_ITMP1 = s1 + 4 * s2 */ - M_LDR_INTERN(d, REG_ITMP1, OFFSET(java_objectarray, data[0])); + M_LDR_INTERN(d, REG_ITMP1, OFFSET(java_objectarray_t, data[0])); emit_store_dst(jd, iptr, d); break; @@ -1263,7 +1263,7 @@ bool codegen_emit(jitdata *jd) emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); s3 = emit_load_s3(jd, iptr, REG_ITMP3); M_ADD(REG_ITMP1, s1, s2); /* REG_ITMP1 = s1 + 1 * s2 */ - M_STRB(s3, REG_ITMP1, OFFSET(java_bytearray, data[0])); + M_STRB(s3, REG_ITMP1, OFFSET(java_bytearray_t, data[0])); break; case ICMD_CASTORE: /* ..., arrayref, index, value ==> ... */ @@ -1274,7 +1274,7 @@ bool codegen_emit(jitdata *jd) emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); s3 = emit_load_s3(jd, iptr, REG_ITMP3); M_ADD(REG_ITMP1, s1, REG_LSL(s2, 1)); /* REG_ITMP1 = s1 + 2 * s2 */ - M_STRH(s3, REG_ITMP1, OFFSET(java_chararray, data[0])); + M_STRH(s3, REG_ITMP1, OFFSET(java_chararray_t, data[0])); break; case ICMD_SASTORE: /* ..., arrayref, index, value ==> ... */ @@ -1285,7 +1285,7 @@ bool codegen_emit(jitdata *jd) emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); s3 = emit_load_s3(jd, iptr, REG_ITMP3); M_ADD(REG_ITMP1, s1, REG_LSL(s2, 1)); /* REG_ITMP1 = s1 + 2 * s2 */ - M_STRH(s3, REG_ITMP1, OFFSET(java_shortarray, data[0])); + M_STRH(s3, REG_ITMP1, OFFSET(java_shortarray_t, data[0])); break; case ICMD_IASTORE: /* ..., arrayref, index, value ==> ... */ @@ -1296,7 +1296,7 @@ bool codegen_emit(jitdata *jd) emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); s3 = emit_load_s3(jd, iptr, REG_ITMP3); M_ADD(REG_ITMP1, s1, REG_LSL(s2, 2)); /* REG_ITMP1 = s1 + 4 * s2 */ - M_IST_INTERN(s3, REG_ITMP1, OFFSET(java_intarray, data[0])); + M_IST_INTERN(s3, REG_ITMP1, OFFSET(java_intarray_t, data[0])); break; case ICMD_LASTORE: /* ..., arrayref, index, value ==> ... */ @@ -1307,7 +1307,7 @@ bool codegen_emit(jitdata *jd) emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); M_ADD(REG_ITMP3, s1, REG_LSL(s2, 3)); /* REG_ITMP3 = s1 + 8 * s2 */ s3 = emit_load_s3(jd, iptr, REG_ITMP12_PACKED); - M_LST_INTERN(s3, REG_ITMP3, OFFSET(java_longarray, data[0])); + M_LST_INTERN(s3, REG_ITMP3, OFFSET(java_longarray_t, data[0])); break; case ICMD_FASTORE: /* ..., arrayref, index, value ==> ... */ @@ -1319,10 +1319,10 @@ bool codegen_emit(jitdata *jd) M_ADD(REG_ITMP1, s1, REG_LSL(s2, 2)); /* REG_ITMP1 = s1 + 4 * s2 */ #if !defined(ENABLE_SOFTFLOAT) s3 = emit_load_s3(jd, iptr, REG_FTMP1); - M_FST_INTERN(s3, REG_ITMP1, OFFSET(java_floatarray, data[0])); + M_FST_INTERN(s3, REG_ITMP1, OFFSET(java_floatarray_t, data[0])); #else s3 = emit_load_s3(jd, iptr, REG_ITMP3); - M_IST_INTERN(s3, REG_ITMP1, OFFSET(java_floatarray, data[0])); + M_IST_INTERN(s3, REG_ITMP1, OFFSET(java_floatarray_t, data[0])); #endif break; @@ -1335,10 +1335,10 @@ bool codegen_emit(jitdata *jd) M_ADD(REG_ITMP1, s1, REG_LSL(s2, 3)); /* REG_ITMP1 = s1 + 8 * s2 */ #if !defined(ENABLE_SOFTFLOAT) s3 = emit_load_s3(jd, iptr, REG_FTMP1); - M_DST_INTERN(s3, REG_ITMP1, OFFSET(java_doublearray, data[0])); + M_DST_INTERN(s3, REG_ITMP1, OFFSET(java_doublearray_t, data[0])); #else s3 = emit_load_s3(jd, iptr, REG_ITMP23_PACKED); - M_LST_INTERN(s3, REG_ITMP1, OFFSET(java_doublearray, data[0])); + M_LST_INTERN(s3, REG_ITMP1, OFFSET(java_doublearray_t, data[0])); #endif break; @@ -1371,7 +1371,7 @@ bool codegen_emit(jitdata *jd) s2 = emit_load_s2(jd, iptr, REG_ITMP2); s3 = emit_load_s3(jd, iptr, REG_ITMP3); M_ADD(REG_ITMP1, s1, REG_LSL(s2, 2)); /* REG_ITMP1 = s1 + 4 * s2 */ - M_STR_INTERN(s3, REG_ITMP1, OFFSET(java_objectarray, data[0])); + M_STR_INTERN(s3, REG_ITMP1, OFFSET(java_objectarray_t, data[0])); break; case ICMD_GETSTATIC: /* ... ==> ..., value */ diff --git a/src/vm/jit/arm/emit.c b/src/vm/jit/arm/emit.c index ccd5e7402..c238b9931 100644 --- a/src/vm/jit/arm/emit.c +++ b/src/vm/jit/arm/emit.c @@ -512,7 +512,7 @@ void emit_nullpointer_check_force(codegendata *cd, instruction *iptr, s4 reg) void emit_arrayindexoutofbounds_check(codegendata *cd, instruction *iptr, s4 s1, s4 s2) { if (INSTRUCTION_MUST_CHECK(iptr)) { - M_ILD_INTERN(REG_ITMP3, s1, OFFSET(java_arrayheader, size)); + M_ILD_INTERN(REG_ITMP3, s1, OFFSET(java_array_t, size)); M_CMP(s2, REG_ITMP3); M_TRAPHS(s2, EXCEPTION_HARDWARE_ARRAYINDEXOUTOFBOUNDS); } diff --git a/src/vm/jit/codegen-common.c b/src/vm/jit/codegen-common.c index adc2d1c5e..e03d57f4e 100644 --- a/src/vm/jit/codegen-common.c +++ b/src/vm/jit/codegen-common.c @@ -39,7 +39,7 @@ memory. All functions writing values into the data area return the offset relative the begin of the code area (start of procedure). - $Id: codegen-common.c 8299 2007-08-13 08:41:18Z michi $ + $Id: codegen-common.c 8321 2007-08-16 11:37:25Z michi $ */ @@ -63,6 +63,7 @@ #include "toolbox/logging.h" #include "native/jni.h" +#include "native/localref.h" #include "native/native.h" #include "threads/threads-common.h" diff --git a/src/vm/jit/i386/codegen.c b/src/vm/jit/i386/codegen.c index f8b72e3a0..be5f8fa88 100644 --- a/src/vm/jit/i386/codegen.c +++ b/src/vm/jit/i386/codegen.c @@ -22,7 +22,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - $Id: codegen.c 8299 2007-08-13 08:41:18Z michi $ + $Id: codegen.c 8321 2007-08-16 11:37:25Z michi $ */ @@ -1908,7 +1908,7 @@ bool codegen_emit(jitdata *jd) s1 = emit_load_s1(jd, iptr, REG_ITMP1); d = codegen_reg_of_dst(jd, iptr, REG_ITMP1); /* implicit null-pointer check */ - M_ILD(d, s1, OFFSET(java_arrayheader, size)); + M_ILD(d, s1, OFFSET(java_array_t, size)); emit_store_dst(jd, iptr, d); break; @@ -1919,7 +1919,7 @@ bool codegen_emit(jitdata *jd) d = codegen_reg_of_dst(jd, iptr, REG_ITMP1); /* implicit null-pointer check */ emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); - emit_movsbl_memindex_reg(cd, OFFSET(java_bytearray, data[0]), + emit_movsbl_memindex_reg(cd, OFFSET(java_bytearray_t, data[0]), s1, s2, 0, d); emit_store_dst(jd, iptr, d); break; @@ -1931,7 +1931,7 @@ bool codegen_emit(jitdata *jd) d = codegen_reg_of_dst(jd, iptr, REG_ITMP1); /* implicit null-pointer check */ emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); - emit_movzwl_memindex_reg(cd, OFFSET(java_chararray, data[0]), + emit_movzwl_memindex_reg(cd, OFFSET(java_chararray_t, data[0]), s1, s2, 1, d); emit_store_dst(jd, iptr, d); break; @@ -1943,7 +1943,7 @@ bool codegen_emit(jitdata *jd) d = codegen_reg_of_dst(jd, iptr, REG_ITMP1); /* implicit null-pointer check */ emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); - emit_movswl_memindex_reg(cd, OFFSET(java_shortarray, data[0]), + emit_movswl_memindex_reg(cd, OFFSET(java_shortarray_t, data[0]), s1, s2, 1, d); emit_store_dst(jd, iptr, d); break; @@ -1955,7 +1955,7 @@ bool codegen_emit(jitdata *jd) d = codegen_reg_of_dst(jd, iptr, REG_ITMP1); /* implicit null-pointer check */ emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); - emit_mov_memindex_reg(cd, OFFSET(java_intarray, data[0]), + emit_mov_memindex_reg(cd, OFFSET(java_intarray_t, data[0]), s1, s2, 2, d); emit_store_dst(jd, iptr, d); break; @@ -1971,10 +1971,10 @@ bool codegen_emit(jitdata *jd) var = VAROP(iptr->dst); assert(var->flags & INMEMORY); - emit_mov_memindex_reg(cd, OFFSET(java_longarray, data[0]), + emit_mov_memindex_reg(cd, OFFSET(java_longarray_t, data[0]), s1, s2, 3, REG_ITMP3); emit_mov_reg_membase(cd, REG_ITMP3, REG_SP, var->vv.regoff); - emit_mov_memindex_reg(cd, OFFSET(java_longarray, data[0]) + 4, + emit_mov_memindex_reg(cd, OFFSET(java_longarray_t, data[0]) + 4, s1, s2, 3, REG_ITMP3); emit_mov_reg_membase(cd, REG_ITMP3, REG_SP, var->vv.regoff + 4); break; @@ -1986,7 +1986,7 @@ bool codegen_emit(jitdata *jd) d = codegen_reg_of_dst(jd, iptr, REG_FTMP1); /* implicit null-pointer check */ emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); - emit_flds_memindex(cd, OFFSET(java_floatarray, data[0]), s1, s2, 2); + emit_flds_memindex(cd, OFFSET(java_floatarray_t, data[0]), s1, s2, 2); emit_store_dst(jd, iptr, d); break; @@ -1997,7 +1997,7 @@ bool codegen_emit(jitdata *jd) d = codegen_reg_of_dst(jd, iptr, REG_FTMP3); /* implicit null-pointer check */ emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); - emit_fldl_memindex(cd, OFFSET(java_doublearray, data[0]), s1, s2,3); + emit_fldl_memindex(cd, OFFSET(java_doublearray_t, data[0]), s1, s2,3); emit_store_dst(jd, iptr, d); break; @@ -2008,7 +2008,7 @@ bool codegen_emit(jitdata *jd) d = codegen_reg_of_dst(jd, iptr, REG_ITMP1); /* implicit null-pointer check */ emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); - emit_mov_memindex_reg(cd, OFFSET(java_objectarray, data[0]), + emit_mov_memindex_reg(cd, OFFSET(java_objectarray_t, data[0]), s1, s2, 2, d); emit_store_dst(jd, iptr, d); break; @@ -2026,7 +2026,7 @@ bool codegen_emit(jitdata *jd) M_INTMOVE(s3, REG_ITMP3); s3 = REG_ITMP3; } - emit_movb_reg_memindex(cd, s3, OFFSET(java_bytearray, data[0]), + emit_movb_reg_memindex(cd, s3, OFFSET(java_bytearray_t, data[0]), s1, s2, 0); break; @@ -2037,7 +2037,7 @@ bool codegen_emit(jitdata *jd) /* implicit null-pointer check */ emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); s3 = emit_load_s3(jd, iptr, REG_ITMP3); - emit_movw_reg_memindex(cd, s3, OFFSET(java_chararray, data[0]), + emit_movw_reg_memindex(cd, s3, OFFSET(java_chararray_t, data[0]), s1, s2, 1); break; @@ -2048,7 +2048,7 @@ bool codegen_emit(jitdata *jd) /* implicit null-pointer check */ emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); s3 = emit_load_s3(jd, iptr, REG_ITMP3); - emit_movw_reg_memindex(cd, s3, OFFSET(java_shortarray, data[0]), + emit_movw_reg_memindex(cd, s3, OFFSET(java_shortarray_t, data[0]), s1, s2, 1); break; @@ -2059,7 +2059,7 @@ bool codegen_emit(jitdata *jd) /* implicit null-pointer check */ emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); s3 = emit_load_s3(jd, iptr, REG_ITMP3); - emit_mov_reg_memindex(cd, s3, OFFSET(java_intarray, data[0]), + emit_mov_reg_memindex(cd, s3, OFFSET(java_intarray_t, data[0]), s1, s2, 2); break; @@ -2074,11 +2074,11 @@ bool codegen_emit(jitdata *jd) assert(var->flags & INMEMORY); emit_mov_membase_reg(cd, REG_SP, var->vv.regoff, REG_ITMP3); - emit_mov_reg_memindex(cd, REG_ITMP3, OFFSET(java_longarray, data[0]) + emit_mov_reg_memindex(cd, REG_ITMP3, OFFSET(java_longarray_t, data[0]) , s1, s2, 3); emit_mov_membase_reg(cd, REG_SP, var->vv.regoff + 4, REG_ITMP3); emit_mov_reg_memindex(cd, REG_ITMP3, - OFFSET(java_longarray, data[0]) + 4, s1, s2, 3); + OFFSET(java_longarray_t, data[0]) + 4, s1, s2, 3); break; case ICMD_FASTORE: /* ..., arrayref, index, value ==> ... */ @@ -2088,7 +2088,7 @@ bool codegen_emit(jitdata *jd) /* implicit null-pointer check */ emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); s3 = emit_load_s3(jd, iptr, REG_FTMP1); - emit_fstps_memindex(cd, OFFSET(java_floatarray, data[0]), s1, s2,2); + emit_fstps_memindex(cd, OFFSET(java_floatarray_t, data[0]), s1, s2,2); break; case ICMD_DASTORE: /* ..., arrayref, index, value ==> ... */ @@ -2098,7 +2098,7 @@ bool codegen_emit(jitdata *jd) /* implicit null-pointer check */ emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); s3 = emit_load_s3(jd, iptr, REG_FTMP1); - emit_fstpl_memindex(cd, OFFSET(java_doublearray, data[0]), + emit_fstpl_memindex(cd, OFFSET(java_doublearray_t, data[0]), s1, s2, 3); break; @@ -2119,7 +2119,7 @@ bool codegen_emit(jitdata *jd) s1 = emit_load_s1(jd, iptr, REG_ITMP1); s2 = emit_load_s2(jd, iptr, REG_ITMP2); s3 = emit_load_s3(jd, iptr, REG_ITMP3); - emit_mov_reg_memindex(cd, s3, OFFSET(java_objectarray, data[0]), + emit_mov_reg_memindex(cd, s3, OFFSET(java_objectarray_t, data[0]), s1, s2, 2); break; @@ -2130,7 +2130,7 @@ bool codegen_emit(jitdata *jd) /* implicit null-pointer check */ emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); emit_movb_imm_memindex(cd, iptr->sx.s23.s3.constval, - OFFSET(java_bytearray, data[0]), s1, s2, 0); + OFFSET(java_bytearray_t, data[0]), s1, s2, 0); break; case ICMD_CASTORECONST: /* ..., arrayref, index ==> ... */ @@ -2140,7 +2140,7 @@ bool codegen_emit(jitdata *jd) /* implicit null-pointer check */ emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); emit_movw_imm_memindex(cd, iptr->sx.s23.s3.constval, - OFFSET(java_chararray, data[0]), s1, s2, 1); + OFFSET(java_chararray_t, data[0]), s1, s2, 1); break; case ICMD_SASTORECONST: /* ..., arrayref, index ==> ... */ @@ -2150,7 +2150,7 @@ bool codegen_emit(jitdata *jd) /* implicit null-pointer check */ emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); emit_movw_imm_memindex(cd, iptr->sx.s23.s3.constval, - OFFSET(java_shortarray, data[0]), s1, s2, 1); + OFFSET(java_shortarray_t, data[0]), s1, s2, 1); break; case ICMD_IASTORECONST: /* ..., arrayref, index ==> ... */ @@ -2160,7 +2160,7 @@ bool codegen_emit(jitdata *jd) /* implicit null-pointer check */ emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); emit_mov_imm_memindex(cd, iptr->sx.s23.s3.constval, - OFFSET(java_intarray, data[0]), s1, s2, 2); + OFFSET(java_intarray_t, data[0]), s1, s2, 2); break; case ICMD_LASTORECONST: /* ..., arrayref, index ==> ... */ @@ -2171,10 +2171,10 @@ bool codegen_emit(jitdata *jd) emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); emit_mov_imm_memindex(cd, (u4) (iptr->sx.s23.s3.constval & 0x00000000ffffffff), - OFFSET(java_longarray, data[0]), s1, s2, 3); + OFFSET(java_longarray_t, data[0]), s1, s2, 3); emit_mov_imm_memindex(cd, ((s4)iptr->sx.s23.s3.constval) >> 31, - OFFSET(java_longarray, data[0]) + 4, s1, s2, 3); + OFFSET(java_longarray_t, data[0]) + 4, s1, s2, 3); break; case ICMD_AASTORECONST: /* ..., arrayref, index ==> ... */ @@ -2184,7 +2184,7 @@ bool codegen_emit(jitdata *jd) /* implicit null-pointer check */ emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); emit_mov_imm_memindex(cd, 0, - OFFSET(java_objectarray, data[0]), s1, s2, 2); + OFFSET(java_objectarray_t, data[0]), s1, s2, 2); break; diff --git a/src/vm/jit/i386/emit.c b/src/vm/jit/i386/emit.c index 9460875e4..b74a2959e 100644 --- a/src/vm/jit/i386/emit.c +++ b/src/vm/jit/i386/emit.c @@ -22,7 +22,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - $Id: emit.c 8267 2007-08-07 11:07:48Z twisti $ + $Id: emit.c 8318 2007-08-16 10:05:34Z michi $ */ @@ -425,7 +425,7 @@ void emit_arithmetic_check(codegendata *cd, instruction *iptr, s4 reg) void emit_arrayindexoutofbounds_check(codegendata *cd, instruction *iptr, s4 s1, s4 s2) { if (INSTRUCTION_MUST_CHECK(iptr)) { - M_ILD(REG_ITMP3, s1, OFFSET(java_arrayheader, size)); + M_ILD(REG_ITMP3, s1, OFFSET(java_array_t, size)); M_CMP(REG_ITMP3, s2); M_BB(6); M_ALD_MEM(s2, EXCEPTION_HARDWARE_ARRAYINDEXOUTOFBOUNDS); diff --git a/src/vm/jit/m68k/codegen.c b/src/vm/jit/m68k/codegen.c index d97fde5c8..1c18cf124 100644 --- a/src/vm/jit/m68k/codegen.c +++ b/src/vm/jit/m68k/codegen.c @@ -1339,7 +1339,7 @@ bool codegen_emit(jitdata *jd) s1 = emit_load_s1(jd, iptr, REG_ATMP1); d = codegen_reg_of_dst(jd, iptr, REG_ITMP2); /* implicit null-pointer check */ - M_ILD(d, s1, OFFSET(java_arrayheader, size)); + M_ILD(d, s1, OFFSET(java_array_t, size)); emit_store_dst(jd, iptr, d); break; @@ -1350,7 +1350,7 @@ bool codegen_emit(jitdata *jd) d = codegen_reg_of_dst(jd, iptr, REG_ITMP2); emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); M_INTMOVE(s2, REG_ITMP2); - M_IADD_IMM(OFFSET(java_bytearray, data[0]), REG_ITMP2); + M_IADD_IMM(OFFSET(java_bytearray_t, data[0]), REG_ITMP2); M_ADRMOVE(s1, REG_ATMP1); M_AADDINT(REG_ITMP2, REG_ATMP1); /* implicit null-pointer check */ @@ -1367,7 +1367,7 @@ bool codegen_emit(jitdata *jd) emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); M_INTMOVE(s2, REG_ITMP2); M_ISSL_IMM(1, REG_ITMP2); - M_IADD_IMM(OFFSET(java_chararray, data[0]), REG_ITMP2); + M_IADD_IMM(OFFSET(java_chararray_t, data[0]), REG_ITMP2); M_ADRMOVE(s1, REG_ATMP1); M_AADDINT(REG_ITMP2, REG_ATMP1); /* implicit null-pointer check */ @@ -1384,7 +1384,7 @@ bool codegen_emit(jitdata *jd) emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); M_INTMOVE(s2, REG_ITMP2); M_ISSL_IMM(1, REG_ITMP2); - M_IADD_IMM(OFFSET(java_shortarray, data[0]), REG_ITMP2); + M_IADD_IMM(OFFSET(java_shortarray_t, data[0]), REG_ITMP2); M_ADRMOVE(s1, REG_ATMP1); M_AADDINT(REG_ITMP2, REG_ATMP1); @@ -1402,7 +1402,7 @@ bool codegen_emit(jitdata *jd) emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); M_INTMOVE(s2, REG_ITMP2); M_ISSL_IMM(2, REG_ITMP2); - M_IADD_IMM(OFFSET(java_intarray, data[0]), REG_ITMP2); + M_IADD_IMM(OFFSET(java_intarray_t, data[0]), REG_ITMP2); M_ADRMOVE(s1, REG_ATMP1); M_AADDINT(REG_ITMP2, REG_ATMP1); /* implicit null-pointer check */ @@ -1418,7 +1418,7 @@ bool codegen_emit(jitdata *jd) emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); M_INTMOVE(s2, REG_ITMP1); M_ISSL_IMM(3, REG_ITMP1); - M_IADD_IMM(OFFSET(java_longarray, data[0]), REG_ITMP1); + M_IADD_IMM(OFFSET(java_longarray_t, data[0]), REG_ITMP1); M_ADRMOVE(s1, REG_ATMP1); M_AADDINT(REG_ITMP1, REG_ATMP1); /* implicit null-pointer check */ @@ -1432,7 +1432,7 @@ bool codegen_emit(jitdata *jd) emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); M_INTMOVE(s2, REG_ITMP2); M_ISSL_IMM(2, REG_ITMP2); - M_IADD_IMM(OFFSET(java_floatarray, data[0]), REG_ITMP2); + M_IADD_IMM(OFFSET(java_floatarray_t, data[0]), REG_ITMP2); M_ADRMOVE(s1, REG_ATMP1); M_AADDINT(REG_ITMP2, REG_ATMP1); /* implicit null-pointer check */ @@ -1452,7 +1452,7 @@ bool codegen_emit(jitdata *jd) emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); M_INTMOVE(s2, REG_ITMP2); M_ISSL_IMM(3, REG_ITMP2); - M_IADD_IMM(OFFSET(java_doublearray, data[0]), REG_ITMP2); + M_IADD_IMM(OFFSET(java_doublearray_t, data[0]), REG_ITMP2); M_ADRMOVE(s1, REG_ATMP1); M_AADDINT(REG_ITMP2, REG_ATMP1); /* implicit null-pointer check */ @@ -1473,7 +1473,7 @@ bool codegen_emit(jitdata *jd) emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); M_INTMOVE(s2, REG_ITMP2); M_ISSL_IMM(2, REG_ITMP2); - M_IADD_IMM(OFFSET(java_objectarray, data[0]), REG_ITMP2); + M_IADD_IMM(OFFSET(java_objectarray_t, data[0]), REG_ITMP2); M_ADRMOVE(s1, REG_ATMP1); M_AADDINT(REG_ITMP2, REG_ATMP1); @@ -1489,7 +1489,7 @@ bool codegen_emit(jitdata *jd) emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); s3 = emit_load_s3(jd, iptr, REG_ITMP3); M_INTMOVE(s2, REG_ITMP2); - M_IADD_IMM(OFFSET(java_bytearray, data[0]), REG_ITMP2); + M_IADD_IMM(OFFSET(java_bytearray_t, data[0]), REG_ITMP2); M_ADRMOVE(s1, REG_ATMP1); M_AADDINT(REG_ITMP2, REG_ATMP1); /* implicit null-pointer check */ @@ -1503,7 +1503,7 @@ bool codegen_emit(jitdata *jd) s3 = emit_load_s3(jd, iptr, REG_ITMP3); M_INTMOVE(s2, REG_ITMP2); M_ISSL_IMM(1, REG_ITMP2); - M_IADD_IMM(OFFSET(java_chararray, data[0]), REG_ITMP2); + M_IADD_IMM(OFFSET(java_chararray_t, data[0]), REG_ITMP2); M_ADRMOVE(s1, REG_ATMP1); M_AADDINT(REG_ITMP2, REG_ATMP1); /* implicit null-pointer check */ @@ -1517,7 +1517,7 @@ bool codegen_emit(jitdata *jd) s3 = emit_load_s3(jd, iptr, REG_ITMP3); M_INTMOVE(s2, REG_ITMP2); M_ISSL_IMM(1, REG_ITMP2); - M_IADD_IMM(OFFSET(java_shortarray, data[0]), REG_ITMP2); + M_IADD_IMM(OFFSET(java_shortarray_t, data[0]), REG_ITMP2); M_ADRMOVE(s1, REG_ATMP1); M_AADDINT(REG_ITMP2, REG_ATMP1); /* implicit null-pointer check */ @@ -1531,7 +1531,7 @@ bool codegen_emit(jitdata *jd) s3 = emit_load_s3(jd, iptr, REG_ITMP3); M_INTMOVE(s2, REG_ITMP2); M_ISSL_IMM(2, REG_ITMP2); - M_IADD_IMM(OFFSET(java_intarray, data[0]), REG_ITMP2); + M_IADD_IMM(OFFSET(java_intarray_t, data[0]), REG_ITMP2); M_ADRMOVE(s1, REG_ATMP1); M_AADDINT(REG_ITMP2, REG_ATMP1); /* implicit null-pointer check */ @@ -1545,7 +1545,7 @@ bool codegen_emit(jitdata *jd) M_INTMOVE(s2, REG_ITMP1); M_ISSL_IMM(3, REG_ITMP1); - M_IADD_IMM(OFFSET(java_longarray, data[0]), REG_ITMP1); + M_IADD_IMM(OFFSET(java_longarray_t, data[0]), REG_ITMP1); M_ADRMOVE(s1, REG_ATMP1); M_AADDINT(REG_ITMP1, REG_ATMP1); /* implicit null-pointer check */ @@ -1559,7 +1559,7 @@ bool codegen_emit(jitdata *jd) emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); M_INTMOVE(s2, REG_ITMP2); M_ISSL_IMM(2, REG_ITMP2); - M_IADD_IMM(OFFSET(java_floatarray, data[0]), REG_ITMP2); + M_IADD_IMM(OFFSET(java_floatarray_t, data[0]), REG_ITMP2); M_ADRMOVE(s1, REG_ATMP1); M_AADDINT(REG_ITMP2, REG_ATMP1); /* implicit null-pointer check */ @@ -1578,7 +1578,7 @@ bool codegen_emit(jitdata *jd) emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); M_INTMOVE(s2, REG_ITMP2); M_ISSL_IMM(3, REG_ITMP2); - M_IADD_IMM(OFFSET(java_doublearray, data[0]), REG_ITMP2); + M_IADD_IMM(OFFSET(java_doublearray_t, data[0]), REG_ITMP2); M_ADRMOVE(s1, REG_ATMP1); M_AADDINT(REG_ITMP2, REG_ATMP1); /* implicit null-pointer check */ @@ -1612,7 +1612,7 @@ bool codegen_emit(jitdata *jd) s3 = emit_load_s3(jd, iptr, REG_ATMP2); M_INTMOVE(s2, REG_ITMP1); M_ISSL_IMM(2, REG_ITMP1); - M_IADD_IMM(OFFSET(java_objectarray, data[0]), REG_ITMP1); + M_IADD_IMM(OFFSET(java_objectarray_t, data[0]), REG_ITMP1); M_ADRMOVE(s1, REG_ATMP1); M_AADDINT(REG_ITMP1, REG_ATMP1); /* implicit null-pointer check */ diff --git a/src/vm/jit/m68k/emit.c b/src/vm/jit/m68k/emit.c index dff441f7f..a35551be4 100644 --- a/src/vm/jit/m68k/emit.c +++ b/src/vm/jit/m68k/emit.c @@ -737,7 +737,7 @@ void emit_classcast_check(codegendata *cd, instruction *iptr, s4 condition, s4 r void emit_arrayindexoutofbounds_check(codegendata *cd, instruction *iptr, s4 s1, s4 s2) { if (INSTRUCTION_MUST_CHECK(iptr)) { - M_ILD(REG_ITMP3, s1, OFFSET(java_arrayheader, size)); + M_ILD(REG_ITMP3, s1, OFFSET(java_array_t, size)); M_ICMP(s2, REG_ITMP3); M_BHI(4); M_TRAP_SETREGISTER(s2); diff --git a/src/vm/jit/mips/codegen.c b/src/vm/jit/mips/codegen.c index c2e253122..d58e6b048 100644 --- a/src/vm/jit/mips/codegen.c +++ b/src/vm/jit/mips/codegen.c @@ -22,7 +22,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - $Id: codegen.c 8297 2007-08-12 00:02:48Z michi $ + $Id: codegen.c 8318 2007-08-16 10:05:34Z michi $ */ @@ -1708,7 +1708,7 @@ bool codegen_emit(jitdata *jd) s1 = emit_load_s1(jd, iptr, REG_ITMP1); d = codegen_reg_of_dst(jd, iptr, REG_ITMP2); /* implicit null-pointer check */ - M_ILD(d, s1, OFFSET(java_arrayheader, size)); + M_ILD(d, s1, OFFSET(java_array_t, size)); emit_store_dst(jd, iptr, d); break; @@ -1720,7 +1720,7 @@ bool codegen_emit(jitdata *jd) emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); M_AADD(s2, s1, REG_ITMP3); /* implicit null-pointer check */ - M_BLDS(d, REG_ITMP3, OFFSET(java_bytearray, data[0])); + M_BLDS(d, REG_ITMP3, OFFSET(java_bytearray_t, data[0])); emit_store_dst(jd, iptr, d); break; @@ -1733,7 +1733,7 @@ bool codegen_emit(jitdata *jd) M_AADD(s2, s1, REG_ITMP3); M_AADD(s2, REG_ITMP3, REG_ITMP3); /* implicit null-pointer check */ - M_SLDU(d, REG_ITMP3, OFFSET(java_chararray, data[0])); + M_SLDU(d, REG_ITMP3, OFFSET(java_chararray_t, data[0])); emit_store_dst(jd, iptr, d); break; @@ -1746,7 +1746,7 @@ bool codegen_emit(jitdata *jd) M_AADD(s2, s1, REG_ITMP3); M_AADD(s2, REG_ITMP3, REG_ITMP3); /* implicit null-pointer check */ - M_SLDS(d, REG_ITMP3, OFFSET(java_shortarray, data[0])); + M_SLDS(d, REG_ITMP3, OFFSET(java_shortarray_t, data[0])); emit_store_dst(jd, iptr, d); break; @@ -1759,7 +1759,7 @@ bool codegen_emit(jitdata *jd) M_ASLL_IMM(s2, 2, REG_ITMP3); M_AADD(REG_ITMP3, s1, REG_ITMP3); /* implicit null-pointer check */ - M_ILD_INTERN(d, REG_ITMP3, OFFSET(java_intarray, data[0])); + M_ILD_INTERN(d, REG_ITMP3, OFFSET(java_intarray_t, data[0])); emit_store_dst(jd, iptr, d); break; @@ -1776,7 +1776,7 @@ bool codegen_emit(jitdata *jd) M_ASLL_IMM(s2, 3, REG_ITMP3); M_AADD(REG_ITMP3, s1, REG_ITMP3); /* implicit null-pointer check */ - M_LLD_INTERN(d, REG_ITMP3, OFFSET(java_longarray, data[0])); + M_LLD_INTERN(d, REG_ITMP3, OFFSET(java_longarray_t, data[0])); emit_store_dst(jd, iptr, d); break; @@ -1789,7 +1789,7 @@ bool codegen_emit(jitdata *jd) M_ASLL_IMM(s2, 2, REG_ITMP3); M_AADD(REG_ITMP3, s1, REG_ITMP3); /* implicit null-pointer check */ - M_FLD_INTERN(d, REG_ITMP3, OFFSET(java_floatarray, data[0])); + M_FLD_INTERN(d, REG_ITMP3, OFFSET(java_floatarray_t, data[0])); emit_store_dst(jd, iptr, d); break; @@ -1802,7 +1802,7 @@ bool codegen_emit(jitdata *jd) M_ASLL_IMM(s2, 3, REG_ITMP3); M_AADD(REG_ITMP3, s1, REG_ITMP3); /* implicit null-pointer check */ - M_DLD_INTERN(d, REG_ITMP3, OFFSET(java_doublearray, data[0])); + M_DLD_INTERN(d, REG_ITMP3, OFFSET(java_doublearray_t, data[0])); emit_store_dst(jd, iptr, d); break; @@ -1815,7 +1815,7 @@ bool codegen_emit(jitdata *jd) M_ASLL_IMM(s2, POINTERSHIFT, REG_ITMP3); M_AADD(REG_ITMP3, s1, REG_ITMP3); /* implicit null-pointer check */ - M_ALD_INTERN(d, REG_ITMP3, OFFSET(java_objectarray, data[0])); + M_ALD_INTERN(d, REG_ITMP3, OFFSET(java_objectarray_t, data[0])); emit_store_dst(jd, iptr, d); break; @@ -1828,7 +1828,7 @@ bool codegen_emit(jitdata *jd) M_AADD(s2, s1, REG_ITMP1); s3 = emit_load_s3(jd, iptr, REG_ITMP3); /* implicit null-pointer check */ - M_BST(s3, REG_ITMP1, OFFSET(java_bytearray, data[0])); + M_BST(s3, REG_ITMP1, OFFSET(java_bytearray_t, data[0])); break; case ICMD_CASTORE: /* ..., arrayref, index, value ==> ... */ @@ -1841,7 +1841,7 @@ bool codegen_emit(jitdata *jd) M_AADD(s2, REG_ITMP1, REG_ITMP1); s3 = emit_load_s3(jd, iptr, REG_ITMP3); /* implicit null-pointer check */ - M_SST(s3, REG_ITMP1, OFFSET(java_chararray, data[0])); + M_SST(s3, REG_ITMP1, OFFSET(java_chararray_t, data[0])); break; case ICMD_IASTORE: /* ..., arrayref, index, value ==> ... */ @@ -1853,7 +1853,7 @@ bool codegen_emit(jitdata *jd) M_AADD(REG_ITMP2, s1, REG_ITMP1); s3 = emit_load_s3(jd, iptr, REG_ITMP3); /* implicit null-pointer check */ - M_IST_INTERN(s3, REG_ITMP1, OFFSET(java_intarray, data[0])); + M_IST_INTERN(s3, REG_ITMP1, OFFSET(java_intarray_t, data[0])); break; case ICMD_LASTORE: /* ..., arrayref, index, value ==> ... */ @@ -1869,7 +1869,7 @@ bool codegen_emit(jitdata *jd) s3 = emit_load_s3(jd, iptr, REG_ITMP23_PACKED); #endif /* implicit null-pointer check */ - M_LST_INTERN(s3, REG_ITMP1, OFFSET(java_longarray, data[0])); + M_LST_INTERN(s3, REG_ITMP1, OFFSET(java_longarray_t, data[0])); break; case ICMD_FASTORE: /* ..., arrayref, index, value ==> ... */ @@ -1881,7 +1881,7 @@ bool codegen_emit(jitdata *jd) M_AADD(REG_ITMP2, s1, REG_ITMP1); s3 = emit_load_s3(jd, iptr, REG_FTMP1); /* implicit null-pointer check */ - M_FST_INTERN(s3, REG_ITMP1, OFFSET(java_floatarray, data[0])); + M_FST_INTERN(s3, REG_ITMP1, OFFSET(java_floatarray_t, data[0])); break; case ICMD_DASTORE: /* ..., arrayref, index, value ==> ... */ @@ -1893,7 +1893,7 @@ bool codegen_emit(jitdata *jd) M_AADD(REG_ITMP2, s1, REG_ITMP1); s3 = emit_load_s3(jd, iptr, REG_FTMP1); /* implicit null-pointer check */ - M_DST_INTERN(s3, REG_ITMP1, OFFSET(java_doublearray, data[0])); + M_DST_INTERN(s3, REG_ITMP1, OFFSET(java_doublearray_t, data[0])); break; @@ -1918,7 +1918,7 @@ bool codegen_emit(jitdata *jd) M_AADD(REG_ITMP2, s1, REG_ITMP1); s3 = emit_load_s3(jd, iptr, REG_ITMP3); /* implicit null-pointer check */ - M_AST_INTERN(s3, REG_ITMP1, OFFSET(java_objectarray, data[0])); + M_AST_INTERN(s3, REG_ITMP1, OFFSET(java_objectarray_t, data[0])); break; @@ -1929,7 +1929,7 @@ bool codegen_emit(jitdata *jd) emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); M_AADD(s2, s1, REG_ITMP1); /* implicit null-pointer check */ - M_BST(REG_ZERO, REG_ITMP1, OFFSET(java_bytearray, data[0])); + M_BST(REG_ZERO, REG_ITMP1, OFFSET(java_bytearray_t, data[0])); break; case ICMD_CASTORECONST: /* ..., arrayref, index ==> ... */ @@ -1941,7 +1941,7 @@ bool codegen_emit(jitdata *jd) M_AADD(s2, s1, REG_ITMP1); M_AADD(s2, REG_ITMP1, REG_ITMP1); /* implicit null-pointer check */ - M_SST(REG_ZERO, REG_ITMP1, OFFSET(java_chararray, data[0])); + M_SST(REG_ZERO, REG_ITMP1, OFFSET(java_chararray_t, data[0])); break; case ICMD_IASTORECONST: /* ..., arrayref, index ==> ... */ @@ -1952,7 +1952,7 @@ bool codegen_emit(jitdata *jd) M_ASLL_IMM(s2, 2, REG_ITMP2); M_AADD(REG_ITMP2, s1, REG_ITMP1); /* implicit null-pointer check */ - M_IST_INTERN(REG_ZERO, REG_ITMP1, OFFSET(java_intarray, data[0])); + M_IST_INTERN(REG_ZERO, REG_ITMP1, OFFSET(java_intarray_t, data[0])); break; case ICMD_LASTORECONST: /* ..., arrayref, index ==> ... */ @@ -1964,9 +1964,9 @@ bool codegen_emit(jitdata *jd) M_AADD(REG_ITMP2, s1, REG_ITMP1); /* implicit null-pointer check */ #if SIZEOF_VOID_P == 8 - M_LST_INTERN(REG_ZERO, REG_ITMP1, OFFSET(java_longarray, data[0])); + M_LST_INTERN(REG_ZERO, REG_ITMP1, OFFSET(java_longarray_t, data[0])); #else - M_LST_INTERN(PACK_REGS(REG_ZERO, REG_ZERO), REG_ITMP1, OFFSET(java_longarray, data[0])); + M_LST_INTERN(PACK_REGS(REG_ZERO, REG_ZERO), REG_ITMP1, OFFSET(java_longarray_t, data[0])); #endif break; @@ -1978,7 +1978,7 @@ bool codegen_emit(jitdata *jd) M_ASLL_IMM(s2, POINTERSHIFT, REG_ITMP2); M_AADD(REG_ITMP2, s1, REG_ITMP1); /* implicit null-pointer check */ - M_AST_INTERN(REG_ZERO, REG_ITMP1, OFFSET(java_objectarray, data[0])); + M_AST_INTERN(REG_ZERO, REG_ITMP1, OFFSET(java_objectarray_t, data[0])); break; diff --git a/src/vm/jit/mips/emit.c b/src/vm/jit/mips/emit.c index e1c3b3d80..b41886371 100644 --- a/src/vm/jit/mips/emit.c +++ b/src/vm/jit/mips/emit.c @@ -512,7 +512,7 @@ void emit_arithmetic_check(codegendata *cd, instruction *iptr, s4 reg) void emit_arrayindexoutofbounds_check(codegendata *cd, instruction *iptr, s4 s1, s4 s2) { if (INSTRUCTION_MUST_CHECK(iptr)) { - M_ILD_INTERN(REG_ITMP3, s1, OFFSET(java_arrayheader, size)); + M_ILD_INTERN(REG_ITMP3, s1, OFFSET(java_array_t, size)); M_CMPULT(s2, REG_ITMP3, REG_ITMP3); M_BNEZ(REG_ITMP3, 2); M_NOP; diff --git a/src/vm/jit/powerpc/codegen.c b/src/vm/jit/powerpc/codegen.c index fda9c1bd3..1efb03229 100644 --- a/src/vm/jit/powerpc/codegen.c +++ b/src/vm/jit/powerpc/codegen.c @@ -22,7 +22,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - $Id: codegen.c 8299 2007-08-13 08:41:18Z michi $ + $Id: codegen.c 8321 2007-08-16 11:37:25Z michi $ */ @@ -1386,7 +1386,7 @@ bool codegen_emit(jitdata *jd) s1 = emit_load_s1(jd, iptr, REG_ITMP1); d = codegen_reg_of_dst(jd, iptr, REG_ITMP2); /* implicit null-pointer check */ - M_ILD(d, s1, OFFSET(java_arrayheader, size)); + M_ILD(d, s1, OFFSET(java_array_t, size)); emit_store_dst(jd, iptr, d); break; @@ -1396,7 +1396,7 @@ bool codegen_emit(jitdata *jd) s2 = emit_load_s2(jd, iptr, REG_ITMP2); d = codegen_reg_of_dst(jd, iptr, REG_ITMP2); emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); - M_IADD_IMM(s2, OFFSET(java_bytearray, data[0]), REG_ITMP2); + M_IADD_IMM(s2, OFFSET(java_bytearray_t, data[0]), REG_ITMP2); /* implicit null-pointer check */ M_LBZX(d, s1, REG_ITMP2); M_BSEXT(d, d); @@ -1410,7 +1410,7 @@ bool codegen_emit(jitdata *jd) d = codegen_reg_of_dst(jd, iptr, REG_ITMP2); emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); M_SLL_IMM(s2, 1, REG_ITMP2); - M_IADD_IMM(REG_ITMP2, OFFSET(java_chararray, data[0]), REG_ITMP2); + M_IADD_IMM(REG_ITMP2, OFFSET(java_chararray_t, data[0]), REG_ITMP2); /* implicit null-pointer check */ M_LHZX(d, s1, REG_ITMP2); emit_store_dst(jd, iptr, d); @@ -1423,7 +1423,7 @@ bool codegen_emit(jitdata *jd) d = codegen_reg_of_dst(jd, iptr, REG_ITMP2); emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); M_SLL_IMM(s2, 1, REG_ITMP2); - M_IADD_IMM(REG_ITMP2, OFFSET(java_shortarray, data[0]), REG_ITMP2); + M_IADD_IMM(REG_ITMP2, OFFSET(java_shortarray_t, data[0]), REG_ITMP2); /* implicit null-pointer check */ M_LHAX(d, s1, REG_ITMP2); emit_store_dst(jd, iptr, d); @@ -1436,7 +1436,7 @@ bool codegen_emit(jitdata *jd) d = codegen_reg_of_dst(jd, iptr, REG_ITMP2); emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); M_SLL_IMM(s2, 2, REG_ITMP2); - M_IADD_IMM(REG_ITMP2, OFFSET(java_intarray, data[0]), REG_ITMP2); + M_IADD_IMM(REG_ITMP2, OFFSET(java_intarray_t, data[0]), REG_ITMP2); /* implicit null-pointer check */ M_LWZX(d, s1, REG_ITMP2); emit_store_dst(jd, iptr, d); @@ -1451,7 +1451,7 @@ bool codegen_emit(jitdata *jd) emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); M_SLL_IMM(s2, 3, REG_ITMP2); M_IADD(s1, REG_ITMP2, REG_ITMP2); - M_LLD_INTERN(d, REG_ITMP2, OFFSET(java_longarray, data[0])); + M_LLD_INTERN(d, REG_ITMP2, OFFSET(java_longarray_t, data[0])); emit_store_dst(jd, iptr, d); break; @@ -1462,7 +1462,7 @@ bool codegen_emit(jitdata *jd) d = codegen_reg_of_dst(jd, iptr, REG_FTMP1); emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); M_SLL_IMM(s2, 2, REG_ITMP2); - M_IADD_IMM(REG_ITMP2, OFFSET(java_floatarray, data[0]), REG_ITMP2); + M_IADD_IMM(REG_ITMP2, OFFSET(java_floatarray_t, data[0]), REG_ITMP2); /* implicit null-pointer check */ M_LFSX(d, s1, REG_ITMP2); emit_store_dst(jd, iptr, d); @@ -1475,7 +1475,7 @@ bool codegen_emit(jitdata *jd) d = codegen_reg_of_dst(jd, iptr, REG_FTMP1); emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); M_SLL_IMM(s2, 3, REG_ITMP2); - M_IADD_IMM(REG_ITMP2, OFFSET(java_doublearray, data[0]), REG_ITMP2); + M_IADD_IMM(REG_ITMP2, OFFSET(java_doublearray_t, data[0]), REG_ITMP2); /* implicit null-pointer check */ M_LFDX(d, s1, REG_ITMP2); emit_store_dst(jd, iptr, d); @@ -1488,7 +1488,7 @@ bool codegen_emit(jitdata *jd) d = codegen_reg_of_dst(jd, iptr, REG_ITMP2); emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); M_SLL_IMM(s2, 2, REG_ITMP2); - M_IADD_IMM(REG_ITMP2, OFFSET(java_objectarray, data[0]), REG_ITMP2); + M_IADD_IMM(REG_ITMP2, OFFSET(java_objectarray_t, data[0]), REG_ITMP2); /* implicit null-pointer check */ M_LWZX(d, s1, REG_ITMP2); emit_store_dst(jd, iptr, d); @@ -1501,7 +1501,7 @@ bool codegen_emit(jitdata *jd) s2 = emit_load_s2(jd, iptr, REG_ITMP2); emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); s3 = emit_load_s3(jd, iptr, REG_ITMP3); - M_IADD_IMM(s2, OFFSET(java_bytearray, data[0]), REG_ITMP2); + M_IADD_IMM(s2, OFFSET(java_bytearray_t, data[0]), REG_ITMP2); /* implicit null-pointer check */ M_STBX(s3, s1, REG_ITMP2); break; @@ -1513,7 +1513,7 @@ bool codegen_emit(jitdata *jd) emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); s3 = emit_load_s3(jd, iptr, REG_ITMP3); M_SLL_IMM(s2, 1, REG_ITMP2); - M_IADD_IMM(REG_ITMP2, OFFSET(java_chararray, data[0]), REG_ITMP2); + M_IADD_IMM(REG_ITMP2, OFFSET(java_chararray_t, data[0]), REG_ITMP2); /* implicit null-pointer check */ M_STHX(s3, s1, REG_ITMP2); break; @@ -1525,7 +1525,7 @@ bool codegen_emit(jitdata *jd) emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); s3 = emit_load_s3(jd, iptr, REG_ITMP3); M_SLL_IMM(s2, 1, REG_ITMP2); - M_IADD_IMM(REG_ITMP2, OFFSET(java_shortarray, data[0]), REG_ITMP2); + M_IADD_IMM(REG_ITMP2, OFFSET(java_shortarray_t, data[0]), REG_ITMP2); /* implicit null-pointer check */ M_STHX(s3, s1, REG_ITMP2); break; @@ -1537,7 +1537,7 @@ bool codegen_emit(jitdata *jd) emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); s3 = emit_load_s3(jd, iptr, REG_ITMP3); M_SLL_IMM(s2, 2, REG_ITMP2); - M_IADD_IMM(REG_ITMP2, OFFSET(java_intarray, data[0]), REG_ITMP2); + M_IADD_IMM(REG_ITMP2, OFFSET(java_intarray_t, data[0]), REG_ITMP2); /* implicit null-pointer check */ M_STWX(s3, s1, REG_ITMP2); break; @@ -1549,7 +1549,7 @@ bool codegen_emit(jitdata *jd) emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); s3 = emit_load_s3_high(jd, iptr, REG_ITMP3); M_SLL_IMM(s2, 3, REG_ITMP2); - M_IADD_IMM(REG_ITMP2, OFFSET(java_longarray, data[0]), REG_ITMP2); + M_IADD_IMM(REG_ITMP2, OFFSET(java_longarray_t, data[0]), REG_ITMP2); /* implicit null-pointer check */ M_STWX(s3, s1, REG_ITMP2); M_IADD_IMM(REG_ITMP2, 4, REG_ITMP2); @@ -1564,7 +1564,7 @@ bool codegen_emit(jitdata *jd) emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); s3 = emit_load_s3(jd, iptr, REG_FTMP3); M_SLL_IMM(s2, 2, REG_ITMP2); - M_IADD_IMM(REG_ITMP2, OFFSET(java_floatarray, data[0]), REG_ITMP2); + M_IADD_IMM(REG_ITMP2, OFFSET(java_floatarray_t, data[0]), REG_ITMP2); /* implicit null-pointer check */ M_STFSX(s3, s1, REG_ITMP2); break; @@ -1576,7 +1576,7 @@ bool codegen_emit(jitdata *jd) emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); s3 = emit_load_s3(jd, iptr, REG_FTMP3); M_SLL_IMM(s2, 3, REG_ITMP2); - M_IADD_IMM(REG_ITMP2, OFFSET(java_doublearray, data[0]), REG_ITMP2); + M_IADD_IMM(REG_ITMP2, OFFSET(java_doublearray_t, data[0]), REG_ITMP2); /* implicit null-pointer check */ M_STFDX(s3, s1, REG_ITMP2); break; @@ -1603,7 +1603,7 @@ bool codegen_emit(jitdata *jd) s2 = emit_load_s2(jd, iptr, REG_ITMP2); s3 = emit_load_s3(jd, iptr, REG_ITMP3); M_SLL_IMM(s2, 2, REG_ITMP2); - M_IADD_IMM(REG_ITMP2, OFFSET(java_objectarray, data[0]), REG_ITMP2); + M_IADD_IMM(REG_ITMP2, OFFSET(java_objectarray_t, data[0]), REG_ITMP2); /* implicit null-pointer check */ M_STWX(s3, s1, REG_ITMP2); break; diff --git a/src/vm/jit/powerpc/emit.c b/src/vm/jit/powerpc/emit.c index d74b1dc99..85973a2f6 100644 --- a/src/vm/jit/powerpc/emit.c +++ b/src/vm/jit/powerpc/emit.c @@ -22,7 +22,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - $Id: emit.c 8270 2007-08-08 13:57:12Z twisti $ + $Id: emit.c 8318 2007-08-16 10:05:34Z michi $ */ @@ -437,7 +437,7 @@ void emit_arithmetic_check(codegendata *cd, instruction *iptr, s4 reg) void emit_arrayindexoutofbounds_check(codegendata *cd, instruction *iptr, s4 s1, s4 s2) { if (INSTRUCTION_MUST_CHECK(iptr)) { - M_ILD(REG_ITMP3, s1, OFFSET(java_arrayheader, size)); + M_ILD(REG_ITMP3, s1, OFFSET(java_array_t, size)); M_TRAPGEU(s2, REG_ITMP3); } } diff --git a/src/vm/jit/powerpc64/codegen.c b/src/vm/jit/powerpc64/codegen.c index a723753fb..96cebb8d0 100644 --- a/src/vm/jit/powerpc64/codegen.c +++ b/src/vm/jit/powerpc64/codegen.c @@ -22,7 +22,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - $Id: codegen.c 8297 2007-08-12 00:02:48Z michi $ + $Id: codegen.c 8318 2007-08-16 10:05:34Z michi $ */ @@ -1343,7 +1343,7 @@ bool codegen_emit(jitdata *jd) s1 = emit_load_s1(jd, iptr, REG_ITMP1); d = codegen_reg_of_dst(jd, iptr, REG_ITMP2); emit_nullpointer_check(cd, iptr, s1); - M_ILD(d, s1, OFFSET(java_arrayheader, size)); + M_ILD(d, s1, OFFSET(java_array_t, size)); emit_store_dst(jd, iptr, d); break; @@ -1353,7 +1353,7 @@ bool codegen_emit(jitdata *jd) s2 = emit_load_s2(jd, iptr, REG_ITMP2); d = codegen_reg_of_dst(jd, iptr, REG_ITMP2); emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); - M_IADD_IMM(s2, OFFSET(java_bytearray, data[0]), REG_ITMP2); + M_IADD_IMM(s2, OFFSET(java_bytearray_t, data[0]), REG_ITMP2); /* implicit null-pointer check */ M_LBZX(d, s1, REG_ITMP2); M_BSEXT(d, d); @@ -1367,7 +1367,7 @@ bool codegen_emit(jitdata *jd) d = codegen_reg_of_dst(jd, iptr, REG_ITMP2); emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); M_SLL_IMM(s2, 1, REG_ITMP2); - M_IADD_IMM(REG_ITMP2, OFFSET(java_chararray, data[0]), REG_ITMP2); + M_IADD_IMM(REG_ITMP2, OFFSET(java_chararray_t, data[0]), REG_ITMP2); /* implicit null-pointer check */ M_LHZX(d, s1, REG_ITMP2); emit_store_dst(jd, iptr, d); @@ -1380,7 +1380,7 @@ bool codegen_emit(jitdata *jd) d = codegen_reg_of_dst(jd, iptr, REG_ITMP2); emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); M_SLL_IMM(s2, 1, REG_ITMP2); - M_IADD_IMM(REG_ITMP2, OFFSET(java_shortarray, data[0]), REG_ITMP2); + M_IADD_IMM(REG_ITMP2, OFFSET(java_shortarray_t, data[0]), REG_ITMP2); /* implicit null-pointer check */ M_LHAX(d, s1, REG_ITMP2); emit_store_dst(jd, iptr, d); @@ -1393,7 +1393,7 @@ bool codegen_emit(jitdata *jd) d = codegen_reg_of_dst(jd, iptr, REG_ITMP2); emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); M_SLL_IMM(s2, 2, REG_ITMP2); - M_IADD_IMM(REG_ITMP2, OFFSET(java_intarray, data[0]), REG_ITMP2); + M_IADD_IMM(REG_ITMP2, OFFSET(java_intarray_t, data[0]), REG_ITMP2); /* implicit null-pointer check */ M_LWAX(d, s1, REG_ITMP2); emit_store_dst(jd, iptr, d); @@ -1408,7 +1408,7 @@ bool codegen_emit(jitdata *jd) M_SLL_IMM(s2, 3, REG_ITMP2); M_IADD(s1, REG_ITMP2, REG_ITMP2); /* implicit null-pointer check */ - M_LLD_INTERN(d, REG_ITMP2, OFFSET(java_longarray, data[0])); + M_LLD_INTERN(d, REG_ITMP2, OFFSET(java_longarray_t, data[0])); emit_store_dst(jd, iptr, d); break; @@ -1419,7 +1419,7 @@ bool codegen_emit(jitdata *jd) d = codegen_reg_of_dst(jd, iptr, REG_FTMP1); emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); M_SLL_IMM(s2, 2, REG_ITMP2); - M_IADD_IMM(REG_ITMP2, OFFSET(java_floatarray, data[0]), REG_ITMP2); + M_IADD_IMM(REG_ITMP2, OFFSET(java_floatarray_t, data[0]), REG_ITMP2); /* implicit null-pointer check */ M_LFSX(d, s1, REG_ITMP2); emit_store_dst(jd, iptr, d); @@ -1432,7 +1432,7 @@ bool codegen_emit(jitdata *jd) d = codegen_reg_of_dst(jd, iptr, REG_FTMP1); emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); M_SLL_IMM(s2, 3, REG_ITMP2); - M_IADD_IMM(REG_ITMP2, OFFSET(java_doublearray, data[0]), REG_ITMP2); + M_IADD_IMM(REG_ITMP2, OFFSET(java_doublearray_t, data[0]), REG_ITMP2); /* implicit null-pointer check */ M_LFDX(d, s1, REG_ITMP2); emit_store_dst(jd, iptr, d); @@ -1445,7 +1445,7 @@ bool codegen_emit(jitdata *jd) d = codegen_reg_of_dst(jd, iptr, REG_ITMP2); emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); M_SLL_IMM(s2, 3, REG_ITMP2); - M_IADD_IMM(REG_ITMP2, OFFSET(java_objectarray, data[0]), REG_ITMP2); + M_IADD_IMM(REG_ITMP2, OFFSET(java_objectarray_t, data[0]), REG_ITMP2); /* implicit null-pointer check */ M_ALDX(d, s1, REG_ITMP2); emit_store_dst(jd, iptr, d); @@ -1458,7 +1458,7 @@ bool codegen_emit(jitdata *jd) s2 = emit_load_s2(jd, iptr, REG_ITMP2); emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); s3 = emit_load_s3(jd, iptr, REG_ITMP3); - M_IADD_IMM(s2, OFFSET(java_bytearray, data[0]), REG_ITMP2); + M_IADD_IMM(s2, OFFSET(java_bytearray_t, data[0]), REG_ITMP2); /* implicit null-pointer check */ M_STBX(s3, s1, REG_ITMP2); break; @@ -1470,7 +1470,7 @@ bool codegen_emit(jitdata *jd) emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); s3 = emit_load_s3(jd, iptr, REG_ITMP3); M_SLL_IMM(s2, 1, REG_ITMP2); - M_IADD_IMM(REG_ITMP2, OFFSET(java_chararray, data[0]), REG_ITMP2); + M_IADD_IMM(REG_ITMP2, OFFSET(java_chararray_t, data[0]), REG_ITMP2); /* implicit null-pointer check */ M_STHX(s3, s1, REG_ITMP2); break; @@ -1482,7 +1482,7 @@ bool codegen_emit(jitdata *jd) emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); s3 = emit_load_s3(jd, iptr, REG_ITMP3); M_SLL_IMM(s2, 1, REG_ITMP2); - M_IADD_IMM(REG_ITMP2, OFFSET(java_shortarray, data[0]), REG_ITMP2); + M_IADD_IMM(REG_ITMP2, OFFSET(java_shortarray_t, data[0]), REG_ITMP2); M_STHX(s3, s1, REG_ITMP2); break; @@ -1493,7 +1493,7 @@ bool codegen_emit(jitdata *jd) emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); s3 = emit_load_s3(jd, iptr, REG_ITMP3); M_SLL_IMM(s2, 2, REG_ITMP2); - M_IADD_IMM(REG_ITMP2, OFFSET(java_intarray, data[0]), REG_ITMP2); + M_IADD_IMM(REG_ITMP2, OFFSET(java_intarray_t, data[0]), REG_ITMP2); /* implicit null-pointer check */ M_STWX(s3, s1, REG_ITMP2); break; @@ -1505,7 +1505,7 @@ bool codegen_emit(jitdata *jd) emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); s3 = emit_load_s3(jd, iptr, REG_ITMP3); M_SLL_IMM(s2, 3, REG_ITMP2); - M_IADD_IMM(REG_ITMP2, OFFSET(java_longarray, data[0]), REG_ITMP2); + M_IADD_IMM(REG_ITMP2, OFFSET(java_longarray_t, data[0]), REG_ITMP2); /* implicit null-pointer check */ M_LSTX(s3, s1, REG_ITMP2); break; @@ -1517,7 +1517,7 @@ bool codegen_emit(jitdata *jd) emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); s3 = emit_load_s3(jd, iptr, REG_FTMP3); M_SLL_IMM(s2, 2, REG_ITMP2); - M_IADD_IMM(REG_ITMP2, OFFSET(java_floatarray, data[0]), REG_ITMP2); + M_IADD_IMM(REG_ITMP2, OFFSET(java_floatarray_t, data[0]), REG_ITMP2); /* implicit null-pointer check */ M_STFSX(s3, s1, REG_ITMP2); break; @@ -1529,7 +1529,7 @@ bool codegen_emit(jitdata *jd) emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); s3 = emit_load_s3(jd, iptr, REG_FTMP3); M_SLL_IMM(s2, 3, REG_ITMP2); - M_IADD_IMM(REG_ITMP2, OFFSET(java_doublearray, data[0]), REG_ITMP2); + M_IADD_IMM(REG_ITMP2, OFFSET(java_doublearray_t, data[0]), REG_ITMP2); /* implicit null-pointer check */ M_STFDX(s3, s1, REG_ITMP2); break; @@ -1556,7 +1556,7 @@ bool codegen_emit(jitdata *jd) s2 = emit_load_s2(jd, iptr, REG_ITMP2); s3 = emit_load_s3(jd, iptr, REG_ITMP3); M_SLL_IMM(s2, 3, REG_ITMP2); - M_IADD_IMM(REG_ITMP2, OFFSET(java_objectarray, data[0]), REG_ITMP2); + M_IADD_IMM(REG_ITMP2, OFFSET(java_objectarray_t, data[0]), REG_ITMP2); /* implicit null-pointer check */ M_ASTX(s3, s1, REG_ITMP2); break; diff --git a/src/vm/jit/powerpc64/emit.c b/src/vm/jit/powerpc64/emit.c index b18d5c521..6c0bee647 100644 --- a/src/vm/jit/powerpc64/emit.c +++ b/src/vm/jit/powerpc64/emit.c @@ -527,12 +527,12 @@ void emit_arrayindexoutofbounds_check(codegendata *cd, instruction *iptr, s4 s1, if (checkbounds) { #define SOFTEX 0 #if SOFTEX - M_ILD(REG_ITMP3, s1, OFFSET(java_arrayheader, size)); + M_ILD(REG_ITMP3, s1, OFFSET(java_array_t, size)); M_CMPU(s2, REG_ITMP3); codegen_add_arrayindexoutofboundsexception_ref(cd, s2); BRANCH_NOPS; #else - M_ILD(REG_ITMP3, s1, OFFSET(java_arrayheader, size)); + M_ILD(REG_ITMP3, s1, OFFSET(java_array_t, size)); M_CMPU(s2, REG_ITMP3); M_BLT(1); /* ALD is 4 byte aligned, ILD 2, onyl LWZ is byte aligned */ diff --git a/src/vm/jit/s390/codegen.c b/src/vm/jit/s390/codegen.c index c2beb38af..943d374ab 100644 --- a/src/vm/jit/s390/codegen.c +++ b/src/vm/jit/s390/codegen.c @@ -22,7 +22,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - $Id: codegen.c 8297 2007-08-12 00:02:48Z michi $ + $Id: codegen.c 8318 2007-08-16 10:05:34Z michi $ */ @@ -1713,7 +1713,7 @@ bool codegen_emit(jitdata *jd) d = codegen_reg_of_dst(jd, iptr, REG_ITMP3); /* TODO softnull */ /* implicit null-pointer check */ - M_ILD(d, s1, OFFSET(java_arrayheader, size)); + M_ILD(d, s1, OFFSET(java_array_t, size)); emit_store_dst(jd, iptr, d); break; @@ -1726,7 +1726,7 @@ bool codegen_emit(jitdata *jd) /* implicit null-pointer check */ emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); - N_IC(d, OFFSET(java_bytearray, data[0]), s2, s1); + N_IC(d, OFFSET(java_bytearray_t, data[0]), s2, s1); M_SLL_IMM(24, d); M_SRA_IMM(24, d); @@ -1746,7 +1746,7 @@ bool codegen_emit(jitdata *jd) M_INTMOVE(s2, REG_ITMP2); M_SLL_IMM(1, REG_ITMP2); - N_LH(d, OFFSET(java_chararray, data[0]), REG_ITMP2, s1); + N_LH(d, OFFSET(java_chararray_t, data[0]), REG_ITMP2, s1); /* N_LH does sign extends, undo ! */ @@ -1767,7 +1767,7 @@ bool codegen_emit(jitdata *jd) M_INTMOVE(s2, REG_ITMP2); M_SLL_IMM(1, REG_ITMP2); - N_LH(d, OFFSET(java_shortarray, data[0]), REG_ITMP2, s1); + N_LH(d, OFFSET(java_shortarray_t, data[0]), REG_ITMP2, s1); emit_store_dst(jd, iptr, d); break; @@ -1781,7 +1781,7 @@ bool codegen_emit(jitdata *jd) M_INTMOVE(s2, REG_ITMP2); M_SLL_IMM(2, REG_ITMP2); /* scale index by 4 */ - N_L(d, OFFSET(java_intarray, data[0]), REG_ITMP2, s1); + N_L(d, OFFSET(java_intarray_t, data[0]), REG_ITMP2, s1); emit_store_dst(jd, iptr, d); break; @@ -1805,8 +1805,8 @@ bool codegen_emit(jitdata *jd) s1 = REG_ITMP3; } - N_L(GET_HIGH_REG(d) /* evntl. itmp1 */, OFFSET(java_intarray, data[0]), REG_ITMP2, s1); - N_L(GET_LOW_REG(d) /* evntl. itmp2 */, OFFSET(java_intarray, data[0]) + 4, REG_ITMP2, s1); + N_L(GET_HIGH_REG(d) /* evntl. itmp1 */, OFFSET(java_intarray_t, data[0]), REG_ITMP2, s1); + N_L(GET_LOW_REG(d) /* evntl. itmp2 */, OFFSET(java_intarray_t, data[0]) + 4, REG_ITMP2, s1); emit_store_dst(jd, iptr, d); break; @@ -1823,7 +1823,7 @@ bool codegen_emit(jitdata *jd) M_INTMOVE(s2, REG_ITMP2); M_SLL_IMM(2, REG_ITMP2); /* scale index by 4 */ - N_LE(d, OFFSET(java_floatarray, data[0]), REG_ITMP2, s1); + N_LE(d, OFFSET(java_floatarray_t, data[0]), REG_ITMP2, s1); emit_store_dst(jd, iptr, d); break; @@ -1839,7 +1839,7 @@ bool codegen_emit(jitdata *jd) M_INTMOVE(s2, REG_ITMP2); M_SLL_IMM(3, REG_ITMP2); /* scale index by 8 */ - N_LD(d, OFFSET(java_floatarray, data[0]), REG_ITMP2, s1); + N_LD(d, OFFSET(java_floatarray_t, data[0]), REG_ITMP2, s1); emit_store_dst(jd, iptr, d); break; @@ -1854,7 +1854,7 @@ bool codegen_emit(jitdata *jd) M_INTMOVE(s2, REG_ITMP2); M_SLL_IMM(2, REG_ITMP2); /* scale index by 4 */ - N_L(d, OFFSET(java_objectarray, data[0]), REG_ITMP2, s1); + N_L(d, OFFSET(java_objectarray_t, data[0]), REG_ITMP2, s1); emit_store_dst(jd, iptr, d); break; @@ -1865,7 +1865,7 @@ bool codegen_emit(jitdata *jd) emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); s3 = emit_load_s3(jd, iptr, REG_ITMP3); - N_STC(s3, OFFSET(java_bytearray, data[0]), s2, s1); + N_STC(s3, OFFSET(java_bytearray_t, data[0]), s2, s1); break; case ICMD_CASTORE: /* ..., arrayref, index, value ==> ... */ @@ -1879,7 +1879,7 @@ bool codegen_emit(jitdata *jd) M_INTMOVE(s2, REG_ITMP2); M_SLL_IMM(1, REG_ITMP2); - N_STH(s3, OFFSET(java_chararray, data[0]), REG_ITMP2, s1); + N_STH(s3, OFFSET(java_chararray_t, data[0]), REG_ITMP2, s1); break; @@ -1893,7 +1893,7 @@ bool codegen_emit(jitdata *jd) M_INTMOVE(s2, REG_ITMP2); M_SLL_IMM(1, REG_ITMP2); - N_STH(s3, OFFSET(java_shortarray, data[0]), REG_ITMP2, s1); + N_STH(s3, OFFSET(java_shortarray_t, data[0]), REG_ITMP2, s1); break; case ICMD_IASTORE: /* ..., arrayref, index, value ==> ... */ @@ -1908,7 +1908,7 @@ bool codegen_emit(jitdata *jd) M_INTMOVE(s2, REG_ITMP2); M_SLL_IMM(2, REG_ITMP2); - N_ST(s3, OFFSET(java_intarray, data[0]), REG_ITMP2, s1); + N_ST(s3, OFFSET(java_intarray_t, data[0]), REG_ITMP2, s1); break; case ICMD_LASTORE: /* ..., arrayref, index, value ==> ... */ @@ -1922,9 +1922,9 @@ bool codegen_emit(jitdata *jd) M_SLL_IMM(3, REG_ITMP2); s3 = emit_load_s3_high(jd, iptr, REG_ITMP3); - N_ST(s3, OFFSET(java_intarray, data[0]), REG_ITMP2, s1); + N_ST(s3, OFFSET(java_intarray_t, data[0]), REG_ITMP2, s1); s3 = emit_load_s3_low(jd, iptr, REG_ITMP3); - N_ST(s3, OFFSET(java_intarray, data[0]) + 4, REG_ITMP2, s1); + N_ST(s3, OFFSET(java_intarray_t, data[0]) + 4, REG_ITMP2, s1); break; case ICMD_FASTORE: /* ..., arrayref, index, value ==> ... */ @@ -1937,7 +1937,7 @@ bool codegen_emit(jitdata *jd) M_INTMOVE(s2, REG_ITMP2); M_SLL_IMM(2, REG_ITMP2); - N_STE(s3, OFFSET(java_floatarray, data[0]), REG_ITMP2, s1); + N_STE(s3, OFFSET(java_floatarray_t, data[0]), REG_ITMP2, s1); break; case ICMD_DASTORE: /* ..., arrayref, index, value ==> ... */ @@ -1950,7 +1950,7 @@ bool codegen_emit(jitdata *jd) M_INTMOVE(s2, REG_ITMP2); M_SLL_IMM(3, REG_ITMP2); - N_STD(s3, OFFSET(java_doublearray, data[0]), REG_ITMP2, s1); + N_STD(s3, OFFSET(java_doublearray_t, data[0]), REG_ITMP2, s1); break; case ICMD_AASTORE: /* ..., arrayref, index, value ==> ... */ @@ -1978,7 +1978,7 @@ bool codegen_emit(jitdata *jd) M_INTMOVE(s2, REG_ITMP2); M_SLL_IMM(2, REG_ITMP2); - N_ST(s3, OFFSET(java_objectarray, data[0]), REG_ITMP2, s1); + N_ST(s3, OFFSET(java_objectarray_t, data[0]), REG_ITMP2, s1); /* M_SAADDQ(s2, s1, REG_ITMP1); itmp1 := 4 * s2 + s1 diff --git a/src/vm/jit/s390/emit.c b/src/vm/jit/s390/emit.c index 8fa71c0d5..d1a70b9a8 100644 --- a/src/vm/jit/s390/emit.c +++ b/src/vm/jit/s390/emit.c @@ -22,7 +22,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - $Id: emit.c 8296 2007-08-11 22:38:38Z pm $ + $Id: emit.c 8318 2007-08-16 10:05:34Z michi $ */ @@ -234,9 +234,79 @@ uint32_t emit_trap(codegendata *cd) *******************************************************************************/ #if !defined(NDEBUG) +#include "vm/jit/trace.h" void emit_verbosecall_enter(jitdata *jd) { +#if 1 + methodinfo *m; + codegendata *cd; + s4 stackframesize; + s4 i, off, disp; + + m = jd->m; + cd = jd->cd; + + /* mark trace code */ + + M_NOP; + + /* allocate stack frame */ + + stackframesize = 96 + (ARG_CNT * 8); + M_ASUB_IMM(stackframesize, REG_SP); + + /* store argument registers in array */ + + off = 96; + + for (i = 0; i < INT_ARG_CNT; ++i, off += 8) { + M_IST(abi_registers_integer_argument[i], REG_SP, off + 4); + /* high bytes are sign extension */ + M_SRA_IMM(31, abi_registers_integer_argument[i]); + M_IST(abi_registers_integer_argument[i], REG_SP, off); + } + + for (i = 0; i < FLT_ARG_CNT; ++i, off += 8) { + M_DST(abi_registers_float_argument[i], REG_SP, off); + } + /* load arguments for trace_java_call_enter */ + + /* methodinfo */ + disp = dseg_add_address(cd, m); + M_ALD_DSEG(REG_A0, disp); + /* pointer to argument registers array */ + M_LDA(REG_A1, REG_SP, 96); + /* pointer to on stack arguments */ + M_LDA(REG_A2, REG_SP, stackframesize + (cd->stackframesize * 8)); + + /* call trace_java_call_enter */ + + disp = dseg_add_functionptr(cd, trace_java_call_enter); + M_ALD_DSEG(REG_ITMP3, disp); + M_CALL(REG_ITMP3); + + /* restore argument registers */ + + off = 96; + + for (i = 0; i < INT_ARG_CNT; ++i, off += 8) { + M_ILD(abi_registers_integer_argument[i], REG_SP, off + 4); + } + + for (i = 0; i < FLT_ARG_CNT; ++i, off += 8) { + M_DLD(abi_registers_float_argument[i], REG_SP, off); + } + + /* remove stack frame */ + + M_AADD_IMM(stackframesize, REG_SP); + + /* mark trace code */ + + M_NOP; + +#else methodinfo *m; codegendata *cd; methoddesc *md; @@ -410,6 +480,7 @@ void emit_verbosecall_enter(jitdata *jd) /* mark trace code */ M_NOP; +#endif } #endif /* !defined(NDEBUG) */ @@ -423,6 +494,61 @@ void emit_verbosecall_enter(jitdata *jd) #if !defined(NDEBUG) void emit_verbosecall_exit(jitdata *jd) { +#if 1 + methodinfo *m; + codegendata *cd; + s4 disp; + s4 stackframesize; + + m = jd->m; + cd = jd->cd; + + /* mark trace code */ + + M_NOP; + + /* allocate stackframe */ + + stackframesize = 96 + (3 * 8); + M_ASUB_IMM(stackframesize, REG_SP); + + /* store return values in array and sign extend them */ + + M_IST(REG_RESULT, REG_SP, 96 + (0 * 8) + 4); + M_SRA_IMM(31, REG_RESULT); + M_IST(REG_RESULT, REG_SP, 96 + (0 * 8)); + + M_IST(REG_RESULT2, REG_SP, 96 + (1 * 8) + 4); + M_SRA_IMM(31, REG_RESULT2); + M_IST(REG_RESULT2, REG_SP, 96 + (1 * 8)); + + M_DST(REG_FRESULT, REG_SP, 96 + (2 * 8)); + + /* call trace_java_call_exit */ + + disp = dseg_add_address(cd, m); + M_ALD_DSEG(REG_A0, disp); + M_LDA(REG_A1, REG_SP, 96); + disp = dseg_add_functionptr(cd, trace_java_call_exit); + M_ALD_DSEG(REG_ITMP3, disp); + M_CALL(REG_ITMP3); + + /* restore return values */ + + M_ILD(REG_RESULT, REG_SP, 96 + (0 * 8) + 4); + M_ILD(REG_RESULT2, REG_SP, 96 + (1 * 8) + 4); + M_DLD(REG_FRESULT, REG_SP, 96 + (2 * 8)); + + /* remove stackframe */ + + M_AADD_IMM(stackframesize, REG_SP); + + /* mark trace code */ + + M_NOP; + +#else + methodinfo *m; codegendata *cd; registerdata *rd; @@ -470,6 +596,7 @@ void emit_verbosecall_exit(jitdata *jd) /* mark trace code */ M_NOP; +#endif } #endif /* !defined(NDEBUG) */ @@ -823,7 +950,7 @@ void emit_arrayindexoutofbounds_check(codegendata *cd, instruction *iptr, s4 s1, /* Size is s4, >= 0 * Do unsigned comparison to catch negative indexes. */ - N_CL(s2, OFFSET(java_arrayheader, size), RN, s1); + N_CL(s2, OFFSET(java_array_t, size), RN, s1); M_BLT(SZ_BRC + SZ_ILL); M_ILL2(s2, EXCEPTION_HARDWARE_ARRAYINDEXOUTOFBOUNDS); } diff --git a/src/vm/jit/sparc64/codegen.c b/src/vm/jit/sparc64/codegen.c index c56421a99..3b6fc16e0 100644 --- a/src/vm/jit/sparc64/codegen.c +++ b/src/vm/jit/sparc64/codegen.c @@ -98,6 +98,18 @@ s4 get_lopart_disp(disp) return lodisp; } + +#ifndef NDEBUG +bool check_13bit_imm(s8 imm) +{ + s4 check = imm & ~0x1fff; + if (check == 0) return true; /* pos imm. */ + if (check + 0x1fff == -1) return true; /* neg imm. */ + + printf("immediate out-of-bounds: %d\n", imm); + return false; +} +#endif /* codegen_emit **************************************************************** @@ -145,6 +157,7 @@ bool codegen_emit(jitdata *jd) { s4 i, p, t, l; s4 savedregs_num; + s4 framesize_disp; #if 0 /* no leaf optimization yet */ savedregs_num = (jd->isleafmethod) ? 0 : 1; /* space to save the RA */ @@ -172,7 +185,7 @@ bool codegen_emit(jitdata *jd) /* create method header */ (void) dseg_add_unique_address(cd, code); /* CodeinfoPointer */ - (void) dseg_add_unique_s4(cd, cd->stackframesize * 8); /* FrameSize */ + framesize_disp = dseg_add_unique_s4(cd, cd->stackframesize * 8); /* FrameSize */ #if defined(ENABLE_THREADS) /* IsSync contains the offset relative to the stack pointer for the @@ -204,9 +217,15 @@ bool codegen_emit(jitdata *jd) /* save register window and create stack frame (if necessary) */ - if (cd->stackframesize) - M_SAVE(REG_SP, -cd->stackframesize * 8, REG_SP); - + if (cd->stackframesize) { + if (cd->stackframesize <= 4095) + M_SAVE(REG_SP, -cd->stackframesize * 8, REG_SP); + else { + M_ILD_INTERN(REG_ITMP3, REG_PV_CALLER, framesize_disp); + M_SUB(REG_ZERO, REG_ITMP3, REG_ITMP3); + M_SAVE_REG(REG_SP, REG_ITMP3, REG_SP); + } + } /* save callee saved float registers (none right now) */ #if 0 @@ -1340,7 +1359,7 @@ bool codegen_emit(jitdata *jd) s1 = emit_load_s1(jd, iptr, REG_ITMP1); d = codegen_reg_of_dst(jd, iptr, REG_ITMP2); emit_nullpointer_check(cd, iptr, s1); - M_ILD(d, s1, OFFSET(java_arrayheader, size)); + M_ILD(d, s1, OFFSET(java_array_t, size)); emit_store_dst(jd, iptr, d); break; @@ -1352,7 +1371,7 @@ bool codegen_emit(jitdata *jd) /* implicit null-pointer check */ emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); M_AADD(s2, s1, REG_ITMP3); - M_BLDS(d, REG_ITMP3, OFFSET(java_bytearray, data[0])); + M_BLDS(d, REG_ITMP3, OFFSET(java_bytearray_t, data[0])); emit_store_dst(jd, iptr, d); break; @@ -1365,7 +1384,7 @@ bool codegen_emit(jitdata *jd) emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); M_AADD(s2, s1, REG_ITMP3); M_AADD(s2, REG_ITMP3, REG_ITMP3); - M_SLDU(d, REG_ITMP3, OFFSET(java_chararray, data[0])); + M_SLDU(d, REG_ITMP3, OFFSET(java_chararray_t, data[0])); emit_store_dst(jd, iptr, d); break; @@ -1378,7 +1397,7 @@ bool codegen_emit(jitdata *jd) emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); M_AADD(s2, s1, REG_ITMP3); M_AADD(s2, REG_ITMP3, REG_ITMP3); - M_SLDS(d, REG_ITMP3, OFFSET(java_shortarray, data[0])); + M_SLDS(d, REG_ITMP3, OFFSET(java_shortarray_t, data[0])); emit_store_dst(jd, iptr, d); break; @@ -1391,7 +1410,7 @@ bool codegen_emit(jitdata *jd) emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); M_ASLL_IMM(s2, 2, REG_ITMP3); M_AADD(REG_ITMP3, s1, REG_ITMP3); - M_ILD(d, REG_ITMP3, OFFSET(java_intarray, data[0])); + M_ILD(d, REG_ITMP3, OFFSET(java_intarray_t, data[0])); emit_store_dst(jd, iptr, d); break; @@ -1404,7 +1423,7 @@ bool codegen_emit(jitdata *jd) emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); M_ASLL_IMM(s2, 3, REG_ITMP3); M_AADD(REG_ITMP3, s1, REG_ITMP3); - M_LDX(d, REG_ITMP3, OFFSET(java_longarray, data[0])); + M_LDX(d, REG_ITMP3, OFFSET(java_longarray_t, data[0])); emit_store_dst(jd, iptr, d); break; @@ -1417,7 +1436,7 @@ bool codegen_emit(jitdata *jd) emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); M_ASLL_IMM(s2, 2, REG_ITMP3); M_AADD(REG_ITMP3, s1, REG_ITMP3); - M_FLD(d, REG_ITMP3, OFFSET(java_floatarray, data[0])); + M_FLD(d, REG_ITMP3, OFFSET(java_floatarray_t, data[0])); emit_store_dst(jd, iptr, d); break; @@ -1430,7 +1449,7 @@ bool codegen_emit(jitdata *jd) emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); M_ASLL_IMM(s2, 3, REG_ITMP3); M_AADD(REG_ITMP3, s1, REG_ITMP3); - M_DLD(d, REG_ITMP3, OFFSET(java_doublearray, data[0])); + M_DLD(d, REG_ITMP3, OFFSET(java_doublearray_t, data[0])); emit_store_dst(jd, iptr, d); break; @@ -1443,7 +1462,7 @@ bool codegen_emit(jitdata *jd) emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); M_ASLL_IMM(s2, POINTERSHIFT, REG_ITMP3); M_AADD(REG_ITMP3, s1, REG_ITMP3); - M_ALD(d, REG_ITMP3, OFFSET(java_objectarray, data[0])); + M_ALD(d, REG_ITMP3, OFFSET(java_objectarray_t, data[0])); emit_store_dst(jd, iptr, d); break; @@ -1456,7 +1475,7 @@ bool codegen_emit(jitdata *jd) emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); M_AADD(s2, s1, REG_ITMP1); s3 = emit_load_s3(jd, iptr, REG_ITMP3); - M_BST(s3, REG_ITMP1, OFFSET(java_bytearray, data[0])); + M_BST(s3, REG_ITMP1, OFFSET(java_bytearray_t, data[0])); break; case ICMD_CASTORE: /* ..., arrayref, index, value ==> ... */ @@ -1469,7 +1488,7 @@ bool codegen_emit(jitdata *jd) M_AADD(s2, s1, REG_ITMP1); M_AADD(s2, REG_ITMP1, REG_ITMP1); s3 = emit_load_s3(jd, iptr, REG_ITMP3); - M_SST(s3, REG_ITMP1, OFFSET(java_chararray, data[0])); + M_SST(s3, REG_ITMP1, OFFSET(java_chararray_t, data[0])); break; case ICMD_IASTORE: /* ..., arrayref, index, value ==> ... */ @@ -1481,7 +1500,7 @@ bool codegen_emit(jitdata *jd) M_ASLL_IMM(s2, 2, REG_ITMP2); M_AADD(REG_ITMP2, s1, REG_ITMP1); s3 = emit_load_s3(jd, iptr, REG_ITMP3); - M_IST_INTERN(s3, REG_ITMP1, OFFSET(java_intarray, data[0])); + M_IST_INTERN(s3, REG_ITMP1, OFFSET(java_intarray_t, data[0])); break; case ICMD_LASTORE: /* ..., arrayref, index, value ==> ... */ @@ -1493,7 +1512,7 @@ bool codegen_emit(jitdata *jd) M_ASLL_IMM(s2, 3, REG_ITMP2); M_AADD(REG_ITMP2, s1, REG_ITMP1); s3 = emit_load_s3(jd, iptr, REG_ITMP3); - M_STX_INTERN(s3, REG_ITMP1, OFFSET(java_longarray, data[0])); + M_STX_INTERN(s3, REG_ITMP1, OFFSET(java_longarray_t, data[0])); break; case ICMD_FASTORE: /* ..., arrayref, index, value ==> ... */ @@ -1505,7 +1524,7 @@ bool codegen_emit(jitdata *jd) M_ASLL_IMM(s2, 2, REG_ITMP2); M_AADD(REG_ITMP2, s1, REG_ITMP1); s3 = emit_load_s3(jd, iptr, REG_FTMP1); - M_FST_INTERN(s3, REG_ITMP1, OFFSET(java_floatarray, data[0])); + M_FST_INTERN(s3, REG_ITMP1, OFFSET(java_floatarray_t, data[0])); break; case ICMD_DASTORE: /* ..., arrayref, index, value ==> ... */ @@ -1517,7 +1536,7 @@ bool codegen_emit(jitdata *jd) M_ASLL_IMM(s2, 3, REG_ITMP2); M_AADD(REG_ITMP2, s1, REG_ITMP1); s3 = emit_load_s3(jd, iptr, REG_FTMP1); - M_DST_INTERN(s3, REG_ITMP1, OFFSET(java_doublearray, data[0])); + M_DST_INTERN(s3, REG_ITMP1, OFFSET(java_doublearray_t, data[0])); break; @@ -1543,7 +1562,7 @@ bool codegen_emit(jitdata *jd) M_AADD(REG_ITMP2, s1, REG_ITMP1); s3 = emit_load_s3(jd, iptr, REG_ITMP3); /* implicit null-pointer check */ - M_AST_INTERN(s3, REG_ITMP1, OFFSET(java_objectarray, data[0])); + M_AST_INTERN(s3, REG_ITMP1, OFFSET(java_objectarray_t, data[0])); break; @@ -1554,7 +1573,7 @@ bool codegen_emit(jitdata *jd) /* implicit null-pointer check */ emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); M_AADD(s2, s1, REG_ITMP1); - M_BST(REG_ZERO, REG_ITMP1, OFFSET(java_bytearray, data[0])); + M_BST(REG_ZERO, REG_ITMP1, OFFSET(java_bytearray_t, data[0])); break; case ICMD_CASTORECONST: /* ..., arrayref, index ==> ... */ @@ -1566,7 +1585,7 @@ bool codegen_emit(jitdata *jd) emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); M_AADD(s2, s1, REG_ITMP1); M_AADD(s2, REG_ITMP1, REG_ITMP1); - M_SST(REG_ZERO, REG_ITMP1, OFFSET(java_chararray, data[0])); + M_SST(REG_ZERO, REG_ITMP1, OFFSET(java_chararray_t, data[0])); break; case ICMD_IASTORECONST: /* ..., arrayref, index ==> ... */ @@ -1577,7 +1596,7 @@ bool codegen_emit(jitdata *jd) emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); M_ASLL_IMM(s2, 2, REG_ITMP2); M_AADD(REG_ITMP2, s1, REG_ITMP1); - M_IST_INTERN(REG_ZERO, REG_ITMP1, OFFSET(java_intarray, data[0])); + M_IST_INTERN(REG_ZERO, REG_ITMP1, OFFSET(java_intarray_t, data[0])); break; case ICMD_LASTORECONST: /* ..., arrayref, index ==> ... */ @@ -1588,7 +1607,7 @@ bool codegen_emit(jitdata *jd) emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); M_ASLL_IMM(s2, 3, REG_ITMP2); M_AADD(REG_ITMP2, s1, REG_ITMP1); - M_STX_INTERN(REG_ZERO, REG_ITMP1, OFFSET(java_longarray, data[0])); + M_STX_INTERN(REG_ZERO, REG_ITMP1, OFFSET(java_longarray_t, data[0])); break; case ICMD_AASTORECONST: /* ..., arrayref, index ==> ... */ @@ -1599,7 +1618,7 @@ bool codegen_emit(jitdata *jd) emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); M_ASLL_IMM(s2, POINTERSHIFT, REG_ITMP2); M_AADD(REG_ITMP2, s1, REG_ITMP1); - M_AST_INTERN(REG_ZERO, REG_ITMP1, OFFSET(java_objectarray, data[0])); + M_AST_INTERN(REG_ZERO, REG_ITMP1, OFFSET(java_objectarray_t, data[0])); break; diff --git a/src/vm/jit/sparc64/codegen.h b/src/vm/jit/sparc64/codegen.h index 9acf13b8b..6686a772b 100644 --- a/src/vm/jit/sparc64/codegen.h +++ b/src/vm/jit/sparc64/codegen.h @@ -39,6 +39,14 @@ #include +/* debug defines **************************************************************/ +#ifndef NDEBUG +# define PASS13BIT(imm) (imm) & 0x1fff +#else +# define PASS13BIT(imm) +#endif + + /* from md-abi.c */ s4 nat_argintregs[INT_NATARG_CNT]; @@ -142,6 +150,7 @@ s4 nat_argintregs[INT_NATARG_CNT]; */ #define M_OP3(op,op3,rd,rs1,rs2,imm) \ do { \ + assert(check_13bit_imm(rs2)); \ *((u4 *) cd->mcodeptr) = ((((s4) (op)) << 30) | ((rd) << 25) | ((op3) << 19) | ((rs1) << 14) | ((imm)<<13) | (imm?((rs2)&0x1fff):(rs2)) ); \ cd->mcodeptr += 4; \ } while (0) @@ -415,7 +424,7 @@ s4 get_lopart_disp(s4 disp); } \ else { \ M_SETHI(sethi_part(~c), rd); \ - M_XOR_IMM(rd, setlo_part(c) | 0xffffffffffff1c00, rd); \ + M_XOR_IMM(rd, PASS13BIT(setlo_part(c) | 0xffffffffffff1c00), rd); \ } \ } while (0) @@ -561,6 +570,7 @@ s4 get_lopart_disp(s4 disp); #define M_SAVE(rs1,rs2,rd) M_OP3(0x02,0x3c,rd,rs1,rs2,IMM) +#define M_SAVE_REG(rs1,rs2,rd) M_OP3(0x02,0x3c,rd,rs1,rs2,REG) #define M_RESTORE(rs1,rs2,rd) M_OP3(0x02,0x3d,rd,rs1,rs2,IMM) @@ -625,7 +635,7 @@ s4 get_lopart_disp(s4 disp); } else { \ M_SETHI(hi&0x3ffff8,rd); \ M_AADD(rs,rd,rd); \ - M_DLD_INTERN(rd,rd,lo); \ + M_DLD_INTERN(rd,rd,PASS13BIT(lo)); \ } \ } while (0) /* Note for SETHI: sethi has a 22bit imm, only set upper 19 bits */ @@ -640,7 +650,7 @@ s4 get_lopart_disp(s4 disp); } else { \ M_SETHI(hi&0x3ffff8,rd); \ M_AADD(rs,rd,rd); \ - M_FLD_INTERN(rd,rd,lo); \ + M_FLD_INTERN(rd,rd,PASS13BIT(lo)); \ } \ } while (0) @@ -655,7 +665,7 @@ s4 get_lopart_disp(s4 disp); } else { \ M_SETHI(hi&0x3ffff8,REG_ITMP3); \ M_AADD(rs,REG_ITMP3,REG_ITMP3); \ - M_FST_INTERN(rd,REG_ITMP3,lo); \ + M_FST_INTERN(rd,REG_ITMP3,PASS13BIT(lo)); \ } \ } while (0) @@ -670,7 +680,7 @@ s4 get_lopart_disp(s4 disp); } else { \ M_SETHI(hi&0x3ffff8,REG_ITMP3); \ M_AADD(rs,REG_ITMP3,REG_ITMP3); \ - M_DST_INTERN(rd,REG_ITMP3,lo); \ + M_DST_INTERN(rd,REG_ITMP3,PASS13BIT(lo)); \ } \ } while (0) diff --git a/src/vm/jit/sparc64/emit.c b/src/vm/jit/sparc64/emit.c index 9ce83232d..187dc8a71 100644 --- a/src/vm/jit/sparc64/emit.c +++ b/src/vm/jit/sparc64/emit.c @@ -477,7 +477,7 @@ void emit_arithmetic_check(codegendata *cd, instruction *iptr, s4 reg) void emit_arrayindexoutofbounds_check(codegendata *cd, instruction *iptr, s4 s1, s4 s2) { if (INSTRUCTION_MUST_CHECK(iptr)) { - M_ILD(REG_ITMP3, s1, OFFSET(java_arrayheader, size)); + M_ILD(REG_ITMP3, s1, OFFSET(java_array_t, size)); M_CMP(s2, REG_ITMP3); M_XBULT(3); M_NOP; diff --git a/src/vm/jit/stacktrace.c b/src/vm/jit/stacktrace.c index 91a25d18d..2eaa5089a 100644 --- a/src/vm/jit/stacktrace.c +++ b/src/vm/jit/stacktrace.c @@ -22,7 +22,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - $Id: stacktrace.c 8295 2007-08-11 17:57:24Z michi $ + $Id: stacktrace.c 8318 2007-08-16 10:05:34Z michi $ */ @@ -734,14 +734,14 @@ return_NULL: *******************************************************************************/ -java_objectarray *stacktrace_getClassContext(void) +java_handle_objectarray_t *stacktrace_getClassContext(void) { - stacktracebuffer *stb; - stacktrace_entry *ste; - java_objectarray *oa; - s4 oalength; - s4 i; - s4 dumpsize; + stacktracebuffer *stb; + stacktrace_entry *ste; + java_handle_objectarray_t *oa; + s4 oalength; + s4 i; + s4 dumpsize; CYCLES_STATS_DECLARE_AND_START /* mark start of dump memory area */ @@ -884,17 +884,17 @@ return_NULL: *******************************************************************************/ #if defined(ENABLE_JAVASE) -java_objectarray *stacktrace_getStack(void) +java_handle_objectarray_t *stacktrace_getStack(void) { - stacktracebuffer *stb; - stacktrace_entry *ste; - java_objectarray *oa; - java_objectarray *classes; - java_objectarray *methodnames; - classinfo *c; - java_handle_t *string; - s4 i; - s4 dumpsize; + stacktracebuffer *stb; + stacktrace_entry *ste; + java_handle_objectarray_t *oa; + java_handle_objectarray_t *classes; + java_handle_objectarray_t *methodnames; + classinfo *c; + java_handle_t *string; + s4 i; + s4 dumpsize; CYCLES_STATS_DECLARE_AND_START /* mark start of dump memory area */ diff --git a/src/vm/jit/stacktrace.h b/src/vm/jit/stacktrace.h index ddf276232..e2e993cbe 100644 --- a/src/vm/jit/stacktrace.h +++ b/src/vm/jit/stacktrace.h @@ -22,7 +22,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - $Id: stacktrace.h 8299 2007-08-13 08:41:18Z michi $ + $Id: stacktrace.h 8321 2007-08-16 11:37:25Z michi $ */ @@ -105,7 +105,7 @@ struct stacktracebuffer { *******************************************************************************/ typedef struct stacktracecontainer { - java_arrayheader header; /* default array header for the GC */ + java_array_t header; /* default array header for the GC */ struct stacktracebuffer stb; /* let entries point to data below */ stacktrace_entry data[1]; /* the actual array of entries */ } stacktracecontainer; @@ -132,9 +132,9 @@ stacktracebuffer *stacktrace_create(stackframeinfo *sfi); stacktracecontainer *stacktrace_fillInStackTrace(void); #if defined(ENABLE_JAVASE) -java_objectarray *stacktrace_getClassContext(void); -classinfo *stacktrace_getCurrentClass(void); -java_objectarray *stacktrace_getStack(void); +java_handle_objectarray_t *stacktrace_getClassContext(void); +classinfo *stacktrace_getCurrentClass(void); +java_handle_objectarray_t *stacktrace_getStack(void); #endif void stacktrace_print_trace_from_buffer(stacktracebuffer *stb); diff --git a/src/vm/jit/x86_64/codegen.c b/src/vm/jit/x86_64/codegen.c index e538a50e3..1b25eef14 100644 --- a/src/vm/jit/x86_64/codegen.c +++ b/src/vm/jit/x86_64/codegen.c @@ -22,7 +22,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - $Id: codegen.c 8299 2007-08-13 08:41:18Z michi $ + $Id: codegen.c 8321 2007-08-16 11:37:25Z michi $ */ @@ -1501,7 +1501,7 @@ bool codegen_emit(jitdata *jd) s1 = emit_load_s1(jd, iptr, REG_ITMP1); d = codegen_reg_of_dst(jd, iptr, REG_ITMP3); /* implicit null-pointer check */ - M_ILD(d, s1, OFFSET(java_arrayheader, size)); + M_ILD(d, s1, OFFSET(java_array_t, size)); emit_store_dst(jd, iptr, d); break; @@ -1512,7 +1512,7 @@ bool codegen_emit(jitdata *jd) d = codegen_reg_of_dst(jd, iptr, REG_ITMP3); /* implicit null-pointer check */ emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); - emit_movsbq_memindex_reg(cd, OFFSET(java_bytearray, data[0]), s1, s2, 0, d); + emit_movsbq_memindex_reg(cd, OFFSET(java_bytearray_t, data[0]), s1, s2, 0, d); emit_store_dst(jd, iptr, d); break; @@ -1523,7 +1523,7 @@ bool codegen_emit(jitdata *jd) d = codegen_reg_of_dst(jd, iptr, REG_ITMP3); /* implicit null-pointer check */ emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); - emit_movzwq_memindex_reg(cd, OFFSET(java_chararray, data[0]), s1, s2, 1, d); + emit_movzwq_memindex_reg(cd, OFFSET(java_chararray_t, data[0]), s1, s2, 1, d); emit_store_dst(jd, iptr, d); break; @@ -1534,7 +1534,7 @@ bool codegen_emit(jitdata *jd) d = codegen_reg_of_dst(jd, iptr, REG_ITMP3); /* implicit null-pointer check */ emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); - emit_movswq_memindex_reg(cd, OFFSET(java_shortarray, data[0]), s1, s2, 1, d); + emit_movswq_memindex_reg(cd, OFFSET(java_shortarray_t, data[0]), s1, s2, 1, d); emit_store_dst(jd, iptr, d); break; @@ -1545,7 +1545,7 @@ bool codegen_emit(jitdata *jd) d = codegen_reg_of_dst(jd, iptr, REG_ITMP3); /* implicit null-pointer check */ emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); - emit_movl_memindex_reg(cd, OFFSET(java_intarray, data[0]), s1, s2, 2, d); + emit_movl_memindex_reg(cd, OFFSET(java_intarray_t, data[0]), s1, s2, 2, d); emit_store_dst(jd, iptr, d); break; @@ -1556,7 +1556,7 @@ bool codegen_emit(jitdata *jd) d = codegen_reg_of_dst(jd, iptr, REG_ITMP3); /* implicit null-pointer check */ emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); - emit_mov_memindex_reg(cd, OFFSET(java_longarray, data[0]), s1, s2, 3, d); + emit_mov_memindex_reg(cd, OFFSET(java_longarray_t, data[0]), s1, s2, 3, d); emit_store_dst(jd, iptr, d); break; @@ -1567,7 +1567,7 @@ bool codegen_emit(jitdata *jd) d = codegen_reg_of_dst(jd, iptr, REG_FTMP3); /* implicit null-pointer check */ emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); - emit_movss_memindex_reg(cd, OFFSET(java_floatarray, data[0]), s1, s2, 2, d); + emit_movss_memindex_reg(cd, OFFSET(java_floatarray_t, data[0]), s1, s2, 2, d); emit_store_dst(jd, iptr, d); break; @@ -1578,7 +1578,7 @@ bool codegen_emit(jitdata *jd) d = codegen_reg_of_dst(jd, iptr, REG_FTMP3); /* implicit null-pointer check */ emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); - emit_movsd_memindex_reg(cd, OFFSET(java_doublearray, data[0]), s1, s2, 3, d); + emit_movsd_memindex_reg(cd, OFFSET(java_doublearray_t, data[0]), s1, s2, 3, d); emit_store_dst(jd, iptr, d); break; @@ -1589,7 +1589,7 @@ bool codegen_emit(jitdata *jd) d = codegen_reg_of_dst(jd, iptr, REG_ITMP3); /* implicit null-pointer check */ emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); - emit_mov_memindex_reg(cd, OFFSET(java_objectarray, data[0]), s1, s2, 3, d); + emit_mov_memindex_reg(cd, OFFSET(java_objectarray_t, data[0]), s1, s2, 3, d); emit_store_dst(jd, iptr, d); break; @@ -1601,7 +1601,7 @@ bool codegen_emit(jitdata *jd) /* implicit null-pointer check */ emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); s3 = emit_load_s3(jd, iptr, REG_ITMP3); - emit_movb_reg_memindex(cd, s3, OFFSET(java_bytearray, data[0]), s1, s2, 0); + emit_movb_reg_memindex(cd, s3, OFFSET(java_bytearray_t, data[0]), s1, s2, 0); break; case ICMD_CASTORE: /* ..., arrayref, index, value ==> ... */ @@ -1611,7 +1611,7 @@ bool codegen_emit(jitdata *jd) /* implicit null-pointer check */ emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); s3 = emit_load_s3(jd, iptr, REG_ITMP3); - emit_movw_reg_memindex(cd, s3, OFFSET(java_chararray, data[0]), s1, s2, 1); + emit_movw_reg_memindex(cd, s3, OFFSET(java_chararray_t, data[0]), s1, s2, 1); break; case ICMD_SASTORE: /* ..., arrayref, index, value ==> ... */ @@ -1621,7 +1621,7 @@ bool codegen_emit(jitdata *jd) /* implicit null-pointer check */ emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); s3 = emit_load_s3(jd, iptr, REG_ITMP3); - emit_movw_reg_memindex(cd, s3, OFFSET(java_shortarray, data[0]), s1, s2, 1); + emit_movw_reg_memindex(cd, s3, OFFSET(java_shortarray_t, data[0]), s1, s2, 1); break; case ICMD_IASTORE: /* ..., arrayref, index, value ==> ... */ @@ -1631,7 +1631,7 @@ bool codegen_emit(jitdata *jd) /* implicit null-pointer check */ emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); s3 = emit_load_s3(jd, iptr, REG_ITMP3); - emit_movl_reg_memindex(cd, s3, OFFSET(java_intarray, data[0]), s1, s2, 2); + emit_movl_reg_memindex(cd, s3, OFFSET(java_intarray_t, data[0]), s1, s2, 2); break; case ICMD_LASTORE: /* ..., arrayref, index, value ==> ... */ @@ -1641,7 +1641,7 @@ bool codegen_emit(jitdata *jd) /* implicit null-pointer check */ emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); s3 = emit_load_s3(jd, iptr, REG_ITMP3); - emit_mov_reg_memindex(cd, s3, OFFSET(java_longarray, data[0]), s1, s2, 3); + emit_mov_reg_memindex(cd, s3, OFFSET(java_longarray_t, data[0]), s1, s2, 3); break; case ICMD_FASTORE: /* ..., arrayref, index, value ==> ... */ @@ -1651,7 +1651,7 @@ bool codegen_emit(jitdata *jd) /* implicit null-pointer check */ emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); s3 = emit_load_s3(jd, iptr, REG_FTMP3); - emit_movss_reg_memindex(cd, s3, OFFSET(java_floatarray, data[0]), s1, s2, 2); + emit_movss_reg_memindex(cd, s3, OFFSET(java_floatarray_t, data[0]), s1, s2, 2); break; case ICMD_DASTORE: /* ..., arrayref, index, value ==> ... */ @@ -1661,7 +1661,7 @@ bool codegen_emit(jitdata *jd) /* implicit null-pointer check */ emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); s3 = emit_load_s3(jd, iptr, REG_FTMP3); - emit_movsd_reg_memindex(cd, s3, OFFSET(java_doublearray, data[0]), s1, s2, 3); + emit_movsd_reg_memindex(cd, s3, OFFSET(java_doublearray_t, data[0]), s1, s2, 3); break; case ICMD_AASTORE: /* ..., arrayref, index, value ==> ... */ @@ -1681,7 +1681,7 @@ bool codegen_emit(jitdata *jd) s1 = emit_load_s1(jd, iptr, REG_ITMP1); s2 = emit_load_s2(jd, iptr, REG_ITMP2); s3 = emit_load_s3(jd, iptr, REG_ITMP3); - emit_mov_reg_memindex(cd, s3, OFFSET(java_objectarray, data[0]), s1, s2, 3); + emit_mov_reg_memindex(cd, s3, OFFSET(java_objectarray_t, data[0]), s1, s2, 3); break; @@ -1691,7 +1691,7 @@ bool codegen_emit(jitdata *jd) s2 = emit_load_s2(jd, iptr, REG_ITMP2); /* implicit null-pointer check */ emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); - emit_movb_imm_memindex(cd, iptr->sx.s23.s3.constval, OFFSET(java_bytearray, data[0]), s1, s2, 0); + emit_movb_imm_memindex(cd, iptr->sx.s23.s3.constval, OFFSET(java_bytearray_t, data[0]), s1, s2, 0); break; case ICMD_CASTORECONST: /* ..., arrayref, index ==> ... */ @@ -1700,7 +1700,7 @@ bool codegen_emit(jitdata *jd) s2 = emit_load_s2(jd, iptr, REG_ITMP2); /* implicit null-pointer check */ emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); - emit_movw_imm_memindex(cd, iptr->sx.s23.s3.constval, OFFSET(java_chararray, data[0]), s1, s2, 1); + emit_movw_imm_memindex(cd, iptr->sx.s23.s3.constval, OFFSET(java_chararray_t, data[0]), s1, s2, 1); break; case ICMD_SASTORECONST: /* ..., arrayref, index ==> ... */ @@ -1709,7 +1709,7 @@ bool codegen_emit(jitdata *jd) s2 = emit_load_s2(jd, iptr, REG_ITMP2); /* implicit null-pointer check */ emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); - emit_movw_imm_memindex(cd, iptr->sx.s23.s3.constval, OFFSET(java_shortarray, data[0]), s1, s2, 1); + emit_movw_imm_memindex(cd, iptr->sx.s23.s3.constval, OFFSET(java_shortarray_t, data[0]), s1, s2, 1); break; case ICMD_IASTORECONST: /* ..., arrayref, index ==> ... */ @@ -1718,7 +1718,7 @@ bool codegen_emit(jitdata *jd) s2 = emit_load_s2(jd, iptr, REG_ITMP2); /* implicit null-pointer check */ emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); - emit_movl_imm_memindex(cd, iptr->sx.s23.s3.constval, OFFSET(java_intarray, data[0]), s1, s2, 2); + emit_movl_imm_memindex(cd, iptr->sx.s23.s3.constval, OFFSET(java_intarray_t, data[0]), s1, s2, 2); break; case ICMD_LASTORECONST: /* ..., arrayref, index ==> ... */ @@ -1729,11 +1729,11 @@ bool codegen_emit(jitdata *jd) emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); if (IS_IMM32(iptr->sx.s23.s3.constval)) { - emit_mov_imm_memindex(cd, (u4) (iptr->sx.s23.s3.constval & 0x00000000ffffffff), OFFSET(java_longarray, data[0]), s1, s2, 3); + emit_mov_imm_memindex(cd, (u4) (iptr->sx.s23.s3.constval & 0x00000000ffffffff), OFFSET(java_longarray_t, data[0]), s1, s2, 3); } else { - emit_movl_imm_memindex(cd, (u4) (iptr->sx.s23.s3.constval & 0x00000000ffffffff), OFFSET(java_longarray, data[0]), s1, s2, 3); - emit_movl_imm_memindex(cd, (u4) (iptr->sx.s23.s3.constval >> 32), OFFSET(java_longarray, data[0]) + 4, s1, s2, 3); + emit_movl_imm_memindex(cd, (u4) (iptr->sx.s23.s3.constval & 0x00000000ffffffff), OFFSET(java_longarray_t, data[0]), s1, s2, 3); + emit_movl_imm_memindex(cd, (u4) (iptr->sx.s23.s3.constval >> 32), OFFSET(java_longarray_t, data[0]) + 4, s1, s2, 3); } break; @@ -1743,7 +1743,7 @@ bool codegen_emit(jitdata *jd) s2 = emit_load_s2(jd, iptr, REG_ITMP2); /* implicit null-pointer check */ emit_arrayindexoutofbounds_check(cd, iptr, s1, s2); - emit_mov_imm_memindex(cd, 0, OFFSET(java_objectarray, data[0]), s1, s2, 3); + emit_mov_imm_memindex(cd, 0, OFFSET(java_objectarray_t, data[0]), s1, s2, 3); break; diff --git a/src/vm/jit/x86_64/emit.c b/src/vm/jit/x86_64/emit.c index 68242346a..bc2eb4ca7 100644 --- a/src/vm/jit/x86_64/emit.c +++ b/src/vm/jit/x86_64/emit.c @@ -22,7 +22,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - $Id: emit.c 8267 2007-08-07 11:07:48Z twisti $ + $Id: emit.c 8318 2007-08-16 10:05:34Z michi $ */ @@ -353,7 +353,7 @@ void emit_arithmetic_check(codegendata *cd, instruction *iptr, s4 reg) void emit_arrayindexoutofbounds_check(codegendata *cd, instruction *iptr, s4 s1, s4 s2) { if (INSTRUCTION_MUST_CHECK(iptr)) { - M_ILD(REG_ITMP3, s1, OFFSET(java_arrayheader, size)); + M_ILD(REG_ITMP3, s1, OFFSET(java_array_t, size)); M_ICMP(REG_ITMP3, s2); M_BULT(8); M_ALD_MEM(s2, EXCEPTION_HARDWARE_ARRAYINDEXOUTOFBOUNDS); diff --git a/src/vm/signal.c b/src/vm/signal.c index a0348a03c..7f0230980 100644 --- a/src/vm/signal.c +++ b/src/vm/signal.c @@ -22,7 +22,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - $Id: signal.c 8299 2007-08-13 08:41:18Z michi $ + $Id: signal.c 8321 2007-08-16 11:37:25Z michi $ */ @@ -128,18 +128,18 @@ bool signal_init(void) # endif /* SIGSEGV handler */ - signal_register_signal(SIGSEGV, (void *) md_signal_handler_sigsegv, + signal_register_signal(SIGSEGV, (functionptr) md_signal_handler_sigsegv, SA_NODEFER | SA_SIGINFO); # if defined(SIGBUS) - signal_register_signal(SIGBUS, (void *) md_signal_handler_sigsegv, + signal_register_signal(SIGBUS, (functionptr) md_signal_handler_sigsegv, SA_NODEFER | SA_SIGINFO); # endif # if SUPPORT_HARDWARE_DIVIDE_BY_ZERO /* SIGFPE handler */ - signal_register_signal(SIGFPE, (void *) md_signal_handler_sigfpe, + signal_register_signal(SIGFPE, (functionptr) md_signal_handler_sigfpe, SA_NODEFER | SA_SIGINFO); # endif @@ -147,7 +147,7 @@ bool signal_init(void) /* XXX use better defines for that (in arch.h) */ /* SIGILL handler */ - signal_register_signal(SIGILL, (void *) md_signal_handler_sigill, + signal_register_signal(SIGILL, (functionptr) md_signal_handler_sigill, SA_NODEFER | SA_SIGINFO); # endif @@ -155,7 +155,7 @@ bool signal_init(void) /* XXX use better defines for that (in arch.h) */ /* SIGTRAP handler */ - signal_register_signal(SIGTRAP, (void *) md_signal_handler_sigtrap, + signal_register_signal(SIGTRAP, (functionptr) md_signal_handler_sigtrap, SA_NODEFER | SA_SIGINFO); # endif # if defined(ENABLE_INTRP) @@ -166,7 +166,7 @@ bool signal_init(void) #if defined(ENABLE_THREADS) /* SIGHUP handler for threads_thread_interrupt */ - signal_register_signal(SIGHUP, (void *) signal_handler_sighup, 0); + signal_register_signal(SIGHUP, (functionptr) signal_handler_sighup, 0); #endif #if defined(ENABLE_THREADS) && defined(ENABLE_GC_CACAO) @@ -180,7 +180,7 @@ bool signal_init(void) #if defined(ENABLE_THREADS) && defined(ENABLE_PROFILING) /* SIGUSR2 handler for profiling sampling */ - signal_register_signal(SIGUSR2, (void *) md_signal_handler_sigusr2, + signal_register_signal(SIGUSR2, (functionptr) md_signal_handler_sigusr2, SA_SIGINFO); #endif @@ -196,7 +196,7 @@ bool signal_init(void) *******************************************************************************/ -void signal_register_signal(int signum, void *handler, int flags) +void signal_register_signal(int signum, functionptr handler, int flags) { struct sigaction act; void (*function)(int, siginfo_t *, void *); diff --git a/src/vm/signallocal.h b/src/vm/signallocal.h index 24a144800..aa4e05f46 100644 --- a/src/vm/signallocal.h +++ b/src/vm/signallocal.h @@ -22,7 +22,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - $Id: signallocal.h 8299 2007-08-13 08:41:18Z michi $ + $Id: signallocal.h 8321 2007-08-16 11:37:25Z michi $ */ @@ -40,7 +40,7 @@ /* function prototypes ********************************************************/ bool signal_init(void); -void signal_register_signal(int signum, void *handler, int flags); +void signal_register_signal(int signum, functionptr handler, int flags); void *signal_handle(void *xpc, int type, intptr_t val); bool signal_start_thread(void); diff --git a/src/vm/string.c b/src/vm/string.c index 8f13e685e..b34e0ad9e 100644 --- a/src/vm/string.c +++ b/src/vm/string.c @@ -22,7 +22,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - $Id: string.c 8295 2007-08-11 17:57:24Z michi $ + $Id: string.c 8318 2007-08-16 10:05:34Z michi $ */ @@ -104,9 +104,9 @@ bool string_init(void) void stringtable_update(void) { - java_lang_String *js; - java_chararray *a; - literalstring *s; /* hashtable entry */ + java_lang_String *js; + java_chararray_t *a; + literalstring *s; /* hashtable entry */ int i; for (i = 0; i < hashtable_string.size; i++) { @@ -162,7 +162,7 @@ static java_handle_t *javastring_new_from_utf_buffer(const char *buffer, u4 utflength; /* length of utf-string if uncompressed */ java_handle_t *o; java_lang_String *s; /* result-string */ - java_chararray *a; + java_handle_chararray_t *a; u4 i; assert(buffer); @@ -182,7 +182,7 @@ static java_handle_t *javastring_new_from_utf_buffer(const char *buffer, utf_ptr = buffer; for (i = 0; i < utflength; i++) - a->data[i] = utf_nextu2((char **) &utf_ptr); + LLNI_array_direct(a, i) = utf_nextu2((char **) &utf_ptr); /* set fields of the javastring-object */ @@ -213,9 +213,9 @@ static java_handle_t *javastring_new_from_utf_buffer(const char *buffer, java_handle_t *javastring_safe_new_from_utf8(const char *text) { - java_handle_t *o; - java_chararray *a; - java_lang_String *s; + java_handle_t *o; + java_handle_chararray_t *a; + java_lang_String *s; s4 nbytes; s4 len; @@ -292,9 +292,9 @@ java_handle_t *javastring_new(utf *u) { char *utf_ptr; /* current utf character in utf string */ u4 utflength; /* length of utf-string if uncompressed */ - java_handle_t *o; - java_chararray *a; - java_lang_String *s; + java_handle_t *o; + java_handle_chararray_t *a; + java_lang_String *s; s4 i; if (u == NULL) { @@ -316,7 +316,7 @@ java_handle_t *javastring_new(utf *u) /* decompress utf-string */ for (i = 0; i < utflength; i++) - a->data[i] = utf_nextu2(&utf_ptr); + LLNI_array_direct(a, i) = utf_nextu2(&utf_ptr); /* set fields of the javastring-object */ @@ -343,9 +343,9 @@ java_handle_t *javastring_new_slash_to_dot(utf *u) { char *utf_ptr; /* current utf character in utf string */ u4 utflength; /* length of utf-string if uncompressed */ - java_handle_t *o; - java_chararray *a; - java_lang_String *s; + java_handle_t *o; + java_handle_chararray_t *a; + java_lang_String *s; s4 i; u2 ch; @@ -370,7 +370,7 @@ java_handle_t *javastring_new_slash_to_dot(utf *u) ch = utf_nextu2(&utf_ptr); if (ch == '/') ch = '.'; - a->data[i] = ch; + LLNI_array_direct(a, i) = ch; } /* set fields of the javastring-object */ @@ -403,9 +403,9 @@ java_handle_t *javastring_new_from_ascii(const char *text) { s4 i; s4 len; /* length of the string */ - java_handle_t *o; - java_lang_String *s; - java_chararray *a; + java_handle_t *o; + java_lang_String *s; + java_handle_chararray_t *a; if (text == NULL) { exceptions_throw_nullpointerexception(); @@ -425,7 +425,7 @@ java_handle_t *javastring_new_from_ascii(const char *text) /* copy text */ for (i = 0; i < len; i++) - a->data[i] = text[i]; + LLNI_array_direct(a, i) = text[i]; /* set fields of the javastring-object */ @@ -451,8 +451,8 @@ java_handle_t *javastring_new_from_ascii(const char *text) char *javastring_tochar(java_handle_t *so) { - java_lang_String *s = (java_lang_String *) so; - java_chararray *a; + java_lang_String *s = (java_lang_String *) so; + java_handle_chararray_t *a; char *buf; s4 i; @@ -503,12 +503,12 @@ utf *javastring_toutf(java_handle_t *string, bool isclassname) *******************************************************************************/ -java_object_t *literalstring_u2(java_chararray *a, u4 length, u4 offset, - bool copymode) +java_object_t *literalstring_u2(java_chararray_t *a, u4 length, u4 offset, + bool copymode) { literalstring *s; /* hashtable element */ java_lang_String *js; /* u2-array wrapped in javastring */ - java_chararray *ca; /* copy of u2-array */ + java_chararray_t *ca; /* copy of u2-array */ u4 key; u4 slot; u2 i; @@ -534,7 +534,7 @@ java_object_t *literalstring_u2(java_chararray *a, u4 length, u4 offset, /* string already in hashtable, free memory */ if (!copymode) - mem_free(a, sizeof(java_chararray) + sizeof(u2) * (length - 1) + 10); + mem_free(a, sizeof(java_chararray_t) + sizeof(u2) * (length - 1) + 10); LOCK_MONITOR_EXIT(lock_hashtable_string); @@ -548,10 +548,10 @@ java_object_t *literalstring_u2(java_chararray *a, u4 length, u4 offset, if (copymode) { /* create copy of u2-array for new javastring */ - u4 arraysize = sizeof(java_chararray) + sizeof(u2) * (length - 1) + 10; + u4 arraysize = sizeof(java_chararray_t) + sizeof(u2) * (length - 1) + 10; ca = mem_alloc(arraysize); /* memcpy(ca, a, arraysize); */ - memcpy(&(ca->header), &(a->header), sizeof(java_arrayheader)); + memcpy(&(ca->header), &(a->header), sizeof(java_array_t)); memcpy(&(ca->data), &(a->data) + offset, sizeof(u2) * (length - 1) + 10); } else { @@ -658,17 +658,17 @@ java_object_t *literalstring_u2(java_chararray *a, u4 length, u4 offset, java_object_t *literalstring_new(utf *u) { - char *utf_ptr; /* pointer to current unicode character */ + char *utf_ptr; /* pointer to current unicode character */ /* utf string */ - u4 utflength; /* length of utf-string if uncompressed */ - java_chararray *a; /* u2-array constructed from utf string */ - u4 i; + u4 utflength; /* length of utf-string if uncompressed */ + java_chararray_t *a; /* u2-array constructed from utf string */ + u4 i; utf_ptr = u->text; utflength = utf_get_number_of_u2s(u); /* allocate memory */ - a = mem_alloc(sizeof(java_chararray) + sizeof(u2) * (utflength - 1) + 10); + a = mem_alloc(sizeof(java_chararray_t) + sizeof(u2) * (utflength - 1) + 10); /* convert utf-string to u2-array */ for (i = 0; i < utflength; i++) @@ -687,7 +687,7 @@ java_object_t *literalstring_new(utf *u) void literalstring_free(java_object_t* string) { java_lang_String *s; - java_chararray *a; + java_chararray_t *a; s = (java_lang_String *) string; a = s->value; @@ -696,7 +696,7 @@ void literalstring_free(java_object_t* string) FREE(s, java_lang_String); /* dispose memory of java-characterarray */ - FREE(a, sizeof(java_chararray) + sizeof(u2) * (a->header.size - 1)); /* +10 ?? */ + FREE(a, sizeof(java_chararray_t) + sizeof(u2) * (a->header.size - 1)); /* +10 ?? */ } diff --git a/src/vm/stringlocal.h b/src/vm/stringlocal.h index 88b09d74d..64c68cb96 100644 --- a/src/vm/stringlocal.h +++ b/src/vm/stringlocal.h @@ -22,7 +22,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - $Id: stringlocal.h 8295 2007-08-11 17:57:24Z michi $ + $Id: stringlocal.h 8318 2007-08-16 10:05:34Z michi $ */ @@ -84,8 +84,8 @@ char *javastring_tochar(java_handle_t *string); utf *javastring_toutf(java_handle_t *string, bool isclassname); /* creates a new javastring with the text of the u2-array */ -java_object_t *literalstring_u2(java_chararray *a, u4 length, u4 offset, - bool copymode); +java_object_t *literalstring_u2(java_chararray_t *a, u4 length, u4 offset, + bool copymode); /* creates a new javastring with the text of the utf-symbol */ java_object_t *literalstring_new(utf *u); diff --git a/src/vm/vm.c b/src/vm/vm.c index 7438df189..0dbe62b71 100644 --- a/src/vm/vm.c +++ b/src/vm/vm.c @@ -22,7 +22,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - $Id: vm.c 8299 2007-08-13 08:41:18Z michi $ + $Id: vm.c 8321 2007-08-16 11:37:25Z michi $ */ @@ -1812,16 +1812,16 @@ bool vm_create(JavaVMInitArgs *vm_args) void vm_run(JavaVM *vm, JavaVMInitArgs *vm_args) { - utf *mainutf; - classinfo *mainclass; - java_handle_t *e; - methodinfo *m; - java_objectarray *oa; - s4 oalength; - utf *u; - java_handle_t *s; - s4 status; - s4 i; + utf *mainutf; + classinfo *mainclass; + java_handle_t *e; + methodinfo *m; + java_handle_objectarray_t *oa; + s4 oalength; + utf *u; + java_handle_t *s; + s4 status; + s4 i; #if !defined(NDEBUG) if (compileall) { @@ -1913,7 +1913,7 @@ void vm_run(JavaVM *vm, JavaVMInitArgs *vm_args) u = utf_new_char(vm_args->options[opt_index + i].optionString); s = javastring_new(u); - oa->data[i] = s; + LLNI_objectarray_element_set(oa, i, s); } #ifdef TYPEINFO_DEBUG_TEST @@ -2712,13 +2712,13 @@ static uint64_t *vm_array_from_jvalue(methodinfo *m, java_object_t *o, *******************************************************************************/ uint64_t *vm_array_from_objectarray(methodinfo *m, java_object_t *o, - java_objectarray *params) + java_handle_objectarray_t *params) { methoddesc *md; paramdesc *pd; typedesc *td; uint64_t *array; - java_object_t *param; + java_handle_t *param; classinfo *c; int32_t i; int32_t j; @@ -2748,7 +2748,7 @@ uint64_t *vm_array_from_objectarray(methodinfo *m, java_object_t *o, } for (j = 0; i < md->paramcount; i++, j++, pd++, td++) { - param = params->data[j]; + LLNI_objectarray_element_get(params, j, param); switch (td->type) { case TYPE_INT: diff --git a/src/vm/vm.h b/src/vm/vm.h index 1c78bd6df..8e2a1a810 100644 --- a/src/vm/vm.h +++ b/src/vm/vm.h @@ -22,7 +22,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - $Id: vm.h 8295 2007-08-11 17:57:24Z michi $ + $Id: vm.h 8318 2007-08-16 10:05:34Z michi $ */ @@ -87,7 +87,7 @@ void vm_abort(const char *text, ...); /* Java method calling functions */ uint64_t *vm_array_from_objectarray(methodinfo *m, java_handle_t *o, - java_objectarray *params); + java_handle_objectarray_t *params); java_handle_t *vm_call_method(methodinfo *m, java_handle_t *o, ...); java_handle_t *vm_call_method_valist(methodinfo *m, java_handle_t *o, diff --git a/src/vmcore/class.c b/src/vmcore/class.c index eedf0bc98..d00a40953 100644 --- a/src/vmcore/class.c +++ b/src/vmcore/class.c @@ -22,7 +22,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - $Id: class.c 8299 2007-08-13 08:41:18Z michi $ + $Id: class.c 8321 2007-08-16 11:37:25Z michi $ */ @@ -40,10 +40,13 @@ #include "mm/memory.h" +#include "native/llni.h" + #include "threads/lock-common.h" #include "toolbox/logging.h" +#include "vm/builtin.h" #include "vm/exceptions.h" #include "vm/global.h" #include "vm/resolve.h" @@ -1666,6 +1669,82 @@ classinfo *class_get_superclass(classinfo *c) } +/* class_get_declaredclasses *************************************************** + + Return an array of declared classes of the given class. + +*******************************************************************************/ + +java_handle_objectarray_t *class_get_declaredclasses(classinfo *c, bool publicOnly) +{ + classref_or_classinfo inner; + classref_or_classinfo outer; + utf *outername; + int declaredclasscount; /* number of declared classes */ + int pos; /* current declared class */ + java_handle_objectarray_t *oa; /* array of declared classes */ + int i; + classinfo *ic; + + declaredclasscount = 0; + + if (!class_is_primitive(c) && !class_is_array(c)) { + /* Determine number of declared classes. */ + + for (i = 0; i < c->innerclasscount; i++) { + outer = c->innerclass[i].outer_class; + + /* Check if outer_class is a classref or a real class and + get the class name from the structure. */ + + outername = IS_CLASSREF(outer) ? outer.ref->name : outer.cls->name; + + /* Outer class is this class. */ + + if ((outername == c->name) && + ((publicOnly == 0) || (c->innerclass[i].flags & ACC_PUBLIC))) + declaredclasscount++; + } + } + + /* Allocate Class[] and check for OOM. */ + + oa = builtin_anewarray(declaredclasscount, class_java_lang_Class); + + if (oa == NULL) + return NULL; + + for (i = 0, pos = 0; i < c->innerclasscount; i++) { + inner = c->innerclass[i].inner_class; + outer = c->innerclass[i].outer_class; + + /* Check if outer_class is a classref or a real class and get + the class name from the structure. */ + + outername = IS_CLASSREF(outer) ? outer.ref->name : outer.cls->name; + + /* Outer class is this class. */ + + if ((outername == c->name) && + ((publicOnly == 0) || (c->innerclass[i].flags & ACC_PUBLIC))) { + + ic = resolve_classref_or_classinfo_eager(inner, false); + + if (ic == NULL) + return NULL; + + if (!(ic->state & CLASS_LINKED)) + if (!link_class(ic)) + return NULL; + + LLNI_array_direct(oa, pos++) = (java_object_t *) ic; + } + } + + return oa; +} + + /* class_get_declaringclass **************************************************** If the class or interface given is a member of another class, @@ -1725,6 +1804,37 @@ classinfo *class_get_declaringclass(classinfo *c) } +/* class_get_interfaces ******************************************************** + + Return an array of interfaces of the given class. + +*******************************************************************************/ + +java_handle_objectarray_t *class_get_interfaces(classinfo *c) +{ + classinfo *ic; + java_handle_objectarray_t *oa; + u4 i; + + if (!(c->state & CLASS_LINKED)) + if (!link_class(c)) + return NULL; + + oa = builtin_anewarray(c->interfacescount, class_java_lang_Class); + + if (oa == NULL) + return NULL; + + for (i = 0; i < c->interfacescount; i++) { + ic = c->interfaces[i].cls; + + LLNI_array_direct(oa, i) = (java_object_t *) ic; + } + + return oa; +} + + /* class_get_signature ********************************************************* Return the signature of the given class. For array and primitive diff --git a/src/vmcore/class.h b/src/vmcore/class.h index ac24cd1e8..3b038ac0d 100644 --- a/src/vmcore/class.h +++ b/src/vmcore/class.h @@ -22,7 +22,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - $Id: class.h 8299 2007-08-13 08:41:18Z michi $ + $Id: class.h 8321 2007-08-16 11:37:25Z michi $ */ @@ -356,16 +356,19 @@ methodinfo *class_resolvemethod(classinfo *c, utf *name, utf *dest); methodinfo *class_resolveclassmethod(classinfo *c, utf *name, utf *dest, classinfo *referer, bool throwexception); methodinfo *class_resolveinterfacemethod(classinfo *c, utf *name, utf *dest, classinfo *referer, bool throwexception); -bool class_issubclass(classinfo *sub, classinfo *super); -bool class_isanysubclass(classinfo *sub, classinfo *super); -bool class_is_primitive(classinfo *c); -bool class_is_array(classinfo *c); -bool class_is_interface(classinfo *c); -classinfo *class_get_superclass(classinfo *c); -classinfo *class_get_declaringclass(classinfo *c); +bool class_issubclass(classinfo *sub, classinfo *super); +bool class_isanysubclass(classinfo *sub, classinfo *super); +bool class_is_primitive(classinfo *c); +bool class_is_array(classinfo *c); +bool class_is_interface(classinfo *c); + +classinfo *class_get_superclass(classinfo *c); +java_handle_objectarray_t *class_get_declaredclasses(classinfo *c, bool publicOnly); +classinfo *class_get_declaringclass(classinfo *c); +java_handle_objectarray_t *class_get_interfaces(classinfo *c); #if defined(ENABLE_JAVASE) -utf *class_get_signature(classinfo *c); +utf *class_get_signature(classinfo *c); #endif /* some debugging functions */ diff --git a/src/vmcore/field.c b/src/vmcore/field.c index 98e29f2a6..5cd1a6e6c 100644 --- a/src/vmcore/field.c +++ b/src/vmcore/field.c @@ -22,7 +22,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - $Id: field.c 8288 2007-08-10 15:12:00Z twisti $ + $Id: field.c 8315 2007-08-15 22:49:20Z panzi $ */ @@ -39,6 +39,7 @@ #include "mm/memory.h" +#include "vm/builtin.h" #include "vm/exceptions.h" #include "vm/global.h" #include "vm/primitive.h" @@ -392,17 +393,26 @@ void field_free(fieldinfo *f) *******************************************************************************/ -annotation_bytearray_t *field_get_annotations(fieldinfo *f) +java_bytearray *field_get_annotations(fieldinfo *f) { - classinfo *c = f->class; - int slot = f - c->fields; - - if (c->field_annotations != NULL && - c->field_annotations->size > slot) { - return c->field_annotations->data[slot]; + classinfo *c = f->class; + int slot = f - c->fields; + annotation_bytearray_t *ba = NULL; + java_bytearray *annotations = NULL; + + if (c->field_annotations != NULL && c->field_annotations->size > slot) { + ba = c->field_annotations->data[slot]; + + if (ba != NULL) { + annotations = builtin_newarray_byte(ba->size); + + if (annotations != NULL) { + MCOPY(annotations->data, ba->data, uint8_t, ba->size); + } + } } - - return NULL; + + return annotations; } #endif diff --git a/src/vmcore/field.h b/src/vmcore/field.h index dce84cefe..7eb3df5a1 100644 --- a/src/vmcore/field.h +++ b/src/vmcore/field.h @@ -22,7 +22,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - $Id: field.h 8268 2007-08-07 13:24:43Z twisti $ + $Id: field.h 8315 2007-08-15 22:49:20Z panzi $ */ @@ -77,7 +77,7 @@ classinfo *field_get_type(fieldinfo *f); void field_free(fieldinfo *f); #if defined(ENABLE_ANNOTATIONS) -annotation_bytearray_t *field_get_annotations(fieldinfo *f); +java_bytearray *field_get_annotations(fieldinfo *f); #endif #if !defined(NDEBUG) diff --git a/src/vmcore/linker.c b/src/vmcore/linker.c index 2d9d9bd3e..6c8d2d81c 100644 --- a/src/vmcore/linker.c +++ b/src/vmcore/linker.c @@ -22,7 +22,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - $Id: linker.c 8299 2007-08-13 08:41:18Z michi $ + $Id: linker.c 8321 2007-08-16 11:37:25Z michi $ */ @@ -1039,7 +1039,7 @@ static arraydescriptor *link_array(classinfo *c) /* c is an array of references */ desc->arraytype = ARRAYTYPE_OBJECT; desc->componentsize = sizeof(void*); - desc->dataoffset = OFFSET(java_objectarray, data); + desc->dataoffset = OFFSET(java_objectarray_t, data); compvftbl = comp->vftbl; @@ -1072,49 +1072,49 @@ static arraydescriptor *link_array(classinfo *c) switch (c->name->text[1]) { case 'Z': desc->arraytype = ARRAYTYPE_BOOLEAN; - desc->dataoffset = OFFSET(java_booleanarray,data); + desc->dataoffset = OFFSET(java_booleanarray_t,data); desc->componentsize = sizeof(u1); break; case 'B': desc->arraytype = ARRAYTYPE_BYTE; - desc->dataoffset = OFFSET(java_bytearray,data); + desc->dataoffset = OFFSET(java_bytearray_t,data); desc->componentsize = sizeof(u1); break; case 'C': desc->arraytype = ARRAYTYPE_CHAR; - desc->dataoffset = OFFSET(java_chararray,data); + desc->dataoffset = OFFSET(java_chararray_t,data); desc->componentsize = sizeof(u2); break; case 'D': desc->arraytype = ARRAYTYPE_DOUBLE; - desc->dataoffset = OFFSET(java_doublearray,data); + desc->dataoffset = OFFSET(java_doublearray_t,data); desc->componentsize = sizeof(double); break; case 'F': desc->arraytype = ARRAYTYPE_FLOAT; - desc->dataoffset = OFFSET(java_floatarray,data); + desc->dataoffset = OFFSET(java_floatarray_t,data); desc->componentsize = sizeof(float); break; case 'I': desc->arraytype = ARRAYTYPE_INT; - desc->dataoffset = OFFSET(java_intarray,data); + desc->dataoffset = OFFSET(java_intarray_t,data); desc->componentsize = sizeof(s4); break; case 'J': desc->arraytype = ARRAYTYPE_LONG; - desc->dataoffset = OFFSET(java_longarray,data); + desc->dataoffset = OFFSET(java_longarray_t,data); desc->componentsize = sizeof(s8); break; case 'S': desc->arraytype = ARRAYTYPE_SHORT; - desc->dataoffset = OFFSET(java_shortarray,data); + desc->dataoffset = OFFSET(java_shortarray_t,data); desc->componentsize = sizeof(s2); break; diff --git a/src/vmcore/method.c b/src/vmcore/method.c index 87715ad96..d4ff6655b 100644 --- a/src/vmcore/method.c +++ b/src/vmcore/method.c @@ -22,7 +22,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - $Id: method.c 8295 2007-08-11 17:57:24Z michi $ + $Id: method.c 8318 2007-08-16 10:05:34Z michi $ */ @@ -37,6 +37,8 @@ #include "mm/memory.h" +#include "native/llni.h" + #include "threads/lock-common.h" #include "vm/builtin.h" @@ -624,14 +626,14 @@ int32_t method_get_parametercount(methodinfo *m) *******************************************************************************/ -java_objectarray *method_get_parametertypearray(methodinfo *m) +java_handle_objectarray_t *method_get_parametertypearray(methodinfo *m) { - methoddesc *md; - typedesc *paramtypes; - int32_t paramcount; - java_objectarray *oa; - int32_t i; - classinfo *c; + methoddesc *md; + typedesc *paramtypes; + int32_t paramcount; + java_handle_objectarray_t *oa; + int32_t i; + classinfo *c; md = m->parseddesc; @@ -664,7 +666,7 @@ java_objectarray *method_get_parametertypearray(methodinfo *m) if (!resolve_class_from_typedesc(¶mtypes[i], true, false, &c)) return NULL; - oa->data[i] = c; + LLNI_array_direct(oa, i) = (java_object_t *) c; } return oa; @@ -677,11 +679,11 @@ java_objectarray *method_get_parametertypearray(methodinfo *m) *******************************************************************************/ -java_objectarray *method_get_exceptionarray(methodinfo *m) +java_handle_objectarray_t *method_get_exceptionarray(methodinfo *m) { - java_objectarray *oa; - classinfo *c; - s4 i; + java_handle_objectarray_t *oa; + classinfo *c; + s4 i; /* create class-array */ @@ -698,7 +700,7 @@ java_objectarray *method_get_exceptionarray(methodinfo *m) if (c == NULL) return NULL; - oa->data[i] = c; + LLNI_array_direct(oa, i) = (java_object_t *) c; } return oa; @@ -781,16 +783,26 @@ s4 method_count_implementations(methodinfo *m, classinfo *c, methodinfo **found) *******************************************************************************/ -annotation_bytearray_t *method_get_annotations(methodinfo *m) +java_bytearray *method_get_annotations(methodinfo *m) { - classinfo *c = m->class; - int slot = m - c->methods; - + classinfo *c = m->class; + int slot = m - c->methods; + annotation_bytearray_t *ba = NULL; + java_bytearray *annotations = NULL; + if (c->method_annotations != NULL && c->method_annotations->size > slot) { - return c->method_annotations->data[slot]; + ba = c->method_annotations->data[slot]; + + if (ba != NULL) { + annotations = builtin_newarray_byte(ba->size); + + if (annotations != NULL) { + MCOPY(annotations->data, ba->data, uint8_t, ba->size); + } + } } - - return NULL; + + return annotations; } @@ -800,17 +812,27 @@ annotation_bytearray_t *method_get_annotations(methodinfo *m) *******************************************************************************/ -annotation_bytearray_t *method_get_parameterannotations(methodinfo *m) +java_bytearray *method_get_parameterannotations(methodinfo *m) { - classinfo *c = m->class; - int slot = m - c->methods; + classinfo *c = m->class; + int slot = m - c->methods; + annotation_bytearray_t *ba = NULL; + java_bytearray *parameterAnnotations = NULL; if (c->method_parameterannotations != NULL && c->method_parameterannotations->size > slot) { - return c->method_parameterannotations->data[slot]; + ba = c->method_parameterannotations->data[slot]; + + if (ba != NULL) { + parameterAnnotations = builtin_newarray_byte(ba->size); + + if (parameterAnnotations != NULL) { + MCOPY(parameterAnnotations->data, ba->data, uint8_t, ba->size); + } + } } - - return NULL; + + return parameterAnnotations; } @@ -820,17 +842,27 @@ annotation_bytearray_t *method_get_parameterannotations(methodinfo *m) *******************************************************************************/ -annotation_bytearray_t *method_get_annotationdefault(methodinfo *m) +java_bytearray *method_get_annotationdefault(methodinfo *m) { - classinfo *c = m->class; - int slot = m - c->methods; + classinfo *c = m->class; + int slot = m - c->methods; + annotation_bytearray_t *ba = NULL; + java_bytearray *annotationDefault = NULL; if (c->method_annotationdefaults != NULL && c->method_annotationdefaults->size > slot) { - return c->method_annotationdefaults->data[slot]; + ba = c->method_annotationdefaults->data[slot]; + + if (ba != NULL) { + annotationDefault = builtin_newarray_byte(ba->size); + + if (annotationDefault != NULL) { + MCOPY(annotationDefault->data, ba->data, uint8_t, ba->size); + } + } } - - return NULL; + + return annotationDefault; } #endif diff --git a/src/vmcore/method.h b/src/vmcore/method.h index af9930d54..5c505cf66 100644 --- a/src/vmcore/method.h +++ b/src/vmcore/method.h @@ -22,7 +22,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - $Id: method.h 8295 2007-08-11 17:57:24Z michi $ + $Id: method.h 8318 2007-08-16 10:05:34Z michi $ */ @@ -164,10 +164,10 @@ bool method_canoverwrite(methodinfo *m, methodinfo *old); methodinfo *method_vftbl_lookup(vftbl_t *vftbl, methodinfo* m); -int32_t method_get_parametercount(methodinfo *m); -java_objectarray *method_get_parametertypearray(methodinfo *m); -java_objectarray *method_get_exceptionarray(methodinfo *m); -classinfo *method_returntype_get(methodinfo *m); +int32_t method_get_parametercount(methodinfo *m); +java_handle_objectarray_t *method_get_parametertypearray(methodinfo *m); +java_handle_objectarray_t *method_get_exceptionarray(methodinfo *m); +classinfo *method_returntype_get(methodinfo *m); void method_add_assumption_monomorphic(methodinfo *m, methodinfo *caller); void method_break_assumption_monomorphic(methodinfo *m, method_worklist **wl); @@ -175,9 +175,9 @@ void method_break_assumption_monomorphic(methodinfo *m, method_worklist **wl); s4 method_count_implementations(methodinfo *m, classinfo *c, methodinfo **found); #if defined(ENABLE_ANNOTATIONS) -annotation_bytearray_t *method_get_annotations(methodinfo *m); -annotation_bytearray_t *method_get_parameterannotations(methodinfo *m); -annotation_bytearray_t *method_get_annotationdefault(methodinfo *m); +java_bytearray *method_get_annotations(methodinfo *m); +java_bytearray *method_get_parameterannotations(methodinfo *m); +java_bytearray *method_get_annotationdefault(methodinfo *m); #endif #if !defined(NDEBUG)