Merged revisions 8137-8178 via svnmerge from
authormichi <none@none>
Thu, 5 Jul 2007 11:21:08 +0000 (11:21 +0000)
committermichi <none@none>
Thu, 5 Jul 2007 11:21:08 +0000 (11:21 +0000)
svn+ssh://michi@c1.complang.tuwien.ac.at/ahome/cacao/svn/cacao/trunk

........
  r8139 | twisti | 2007-06-24 12:12:27 +0200 (Sun, 24 Jun 2007) | 3 lines

  * src/vm/jit/stacktrace.c (stacktrace_print_trace): Handle
  WITH_CLASSPATH_SUN properly.
........
  r8142 | pm | 2007-06-25 20:58:11 +0200 (Mon, 25 Jun 2007) | 3 lines

  * src/vm/jit/s390/tests/jasmin.status: Added.
........
  r8143 | twisti | 2007-06-26 17:47:43 +0200 (Tue, 26 Jun 2007) | 3 lines

  * src/vm/jit/i386/patcher.c (patcher_builtin_multianewarray): Dont'
  patch function address.
........
  r8144 | pm | 2007-06-26 23:16:35 +0200 (Tue, 26 Jun 2007) | 3 lines

  * src/vm/jit/s390/tests/dacapo.status: Added more dacapo eclipse results.
........
  r8145 | michi | 2007-06-27 10:54:10 +0200 (Wed, 27 Jun 2007) | 16 lines

  * src/vm/jit/patcher-common.h: Added.
  * src/vm/jit/patcher-common.t: Added.
  * src/vm/jit/Makefile.am: Added above two files.

  * src/vm/jit/code.h (codeinfo): Added patcher list.
  * src/vm/jit/code.c (code_codeinfo_new, code_codeinfo_free): Patcher list is
  created and freed together with codeinfo.

  * src/vm/jit/codegen-common.c (codegen_finish): Absolute PCs for patchers are
  resolved.

  * src/vm/jit/emit-common.h (emit_patcher_traps): Added prototype.

  * src/vm/exception.c (exceptions_new_hardware_exception): Patcher handler is
  called if needed.
........
  r8146 | michi | 2007-06-27 11:04:17 +0200 (Wed, 27 Jun 2007) | 3 lines

  * src/vm/exceptions.h: Added EXCEPTION_HARDWARE_COMPILER.
  * src/vm/exceptions.c (exceptions_init): Made check clearer.
........
  r8147 | twisti | 2007-06-27 11:23:24 +0200 (Wed, 27 Jun 2007) | 2 lines

  * src/native/vm/gnu/java_lang_VMRuntime.c (unistd.h): Added.
........
  r8149 | twisti | 2007-06-27 15:26:49 +0200 (Wed, 27 Jun 2007) | 3 lines

  * src/native/vm/sun_misc_Unsafe.c (putObject): New function.
  (park): New function, but not implemented.
........
  r8150 | twisti | 2007-06-27 20:35:40 +0200 (Wed, 27 Jun 2007) | 6 lines

  * src/mm/boehm.c (gc_init): Set GC_all_interior_pointers to 0 and call
  GC_INIT very late.

  * src/vm/vm.c (vm_create): Initialze the GC before all other
  subsystems.
........
  r8151 | pm | 2007-06-27 22:08:30 +0200 (Wed, 27 Jun 2007) | 2 lines

  * src/vm/jit/s390/codegen.c (codegen_emit): Replace some load/stores by a mvc.
........
  r8152 | pm | 2007-06-27 22:37:45 +0200 (Wed, 27 Jun 2007) | 2 lines

  * src/vm/jit/s390/codegen.c (codegen_emit): Fix profiling code.
........
  r8153 | ajordan | 2007-06-27 22:56:03 +0200 (Wed, 27 Jun 2007) | 12 lines

  * src/vm/jit/sparc64/md-abi.h: Removed faulty register offset
  multiplication from REG_WINDOW_TRANSPOSE.

  * src/vm/jit/sparc64/asmpart.S: fixed offsets.h include.

  * src/vm/jit/sparc64/solaris/macro_rename.h: Added include,
  which renames the REG_SP defined from Solaris sys headers to
  REG_SP_SOLARIS and defines mine.
  * src/vm/jit/sparc64/emit.c: Used here.
  * src/vm/jit/sparc64/codegen.c: Used here.
  * src/vm/jit/sparc64/patcher.c: Used here.
........
  r8154 | ajordan | 2007-06-27 22:56:57 +0200 (Wed, 27 Jun 2007) | 2 lines

  * configure.ac: Added librt for SPARC/Solaris.
........
  r8155 | ajordan | 2007-06-27 23:53:44 +0200 (Wed, 27 Jun 2007) | 6 lines

  * src/vm/builtin.c (builtin_f2l): Added for DISABLE_GC.
  (builtin_d2l): Likewise.

  * src/native/jni.c (_Jv_jni_invokeNative): Added SPARC to defines, corrected
  bitwise & for ARM.
........
  r8156 | ajordan | 2007-06-28 00:07:28 +0200 (Thu, 28 Jun 2007) | 2 lines

  * configure.ac: Check for librt should only be done on Solaris.
........
  r8157 | michi | 2007-06-28 00:12:32 +0200 (Thu, 28 Jun 2007) | 3 lines

  * src/vm/vm.c: Fixed messed up ifdefs introduced with M68K.
  * src/vm/vm.h: Likewise.
........
  r8158 | ajordan | 2007-06-28 02:01:34 +0200 (Thu, 28 Jun 2007) | 6 lines

  * src/vm/jit/sparc64/md-abi.c (md_param_alloc): Added absolute offsets for
  native arguments (reguse * 8).

  * src/vm/jit/sparc64/codegen.c (codegen_emit_stub_native): Adapted to
  change above.
........
  r8159 | michi | 2007-06-28 02:31:31 +0200 (Thu, 28 Jun 2007) | 5 lines

  * src/vm/jit/verify/typecheck-typeinferer.c: Removed patcher.h include.
  * src/vm/jit/verify/typecheck.c: Likewise.
  * src/vm/jit/parse.c: Likewise.
  * src/vm/builtin.c: Likewise.
........
  r8160 | michi | 2007-06-28 03:52:19 +0200 (Thu, 28 Jun 2007) | 26 lines

  * src/vm/jit/arm/emit.c (emit_patcher_traps): Formerly known
  as emit_patcher_stubs, now emits traps instead of stubs.

  * src/vm/jit/arm/codegen.c (codegen_emit, codegen_emit_stub_native): Call the
  new patcher functions and adapted to above change.

  * src/vm/jit/arm/patcher.c: Adapted patchers to new signature for traps.
  (patcher_get_putfield): Fixed severe bug for long values.
  (patcher_wrapper): Removed, this is obsolete.

  * src/vm/jit/arm/codegen.h (M_TRAP): Added.

  * src/vm/jit/arm/asmpart.S (asm_patcher_wrapper): Removed, this is obsolete.

  * src/vm/jit/arm/linux/md-os.c (md_signal_handler_sigill): Only calls the
  exception handling if exception object present.

  * src/vm/jit/patcher-common.c: Fixed includes.

  * src/vm/jit/patcher-common.h [__ARM__]: Added prototypes for patcher functions.
  (patchref_t): Added datap.

  * src/vm/jit/patcher.h [__ARM__]: Defined away old patcher stuff.

  * src/vm/jit/codegen-common.c (codegen_finish): Resolves pr->datap as well.
........
  r8161 | twisti | 2007-06-28 12:30:08 +0200 (Thu, 28 Jun 2007) | 11 lines

  * src/vm/global.h (ACC_CLASS_REFERENCE_MASK): Added.
  (ACC_CLASS_SOFT_REFERENCE): Renamed to ACC_CLASS_REFERENCE_SOFT.
  (ACC_CLASS_WEAK_REFERENCE): Renamed to ACC_CLASS_REFERENCE_WEAK.
  (ACC_CLASS_PHANTOM_REFERENCE): Renamed to ACC_CLASS_REFERENCE_PHANTOM.

  * src/vmcore/class.c (class_create_classinfo): Flag soft/weak/phantom
  reference classes.

  * src/vmcore/linker.c (link_class_intern): Inherit the reference
  flags.
........
  r8162 | twisti | 2007-06-28 15:40:37 +0200 (Thu, 28 Jun 2007) | 2 lines

  * src/native/vm/sun/jvm.c: Added copyright header.
........
  r8163 | twisti | 2007-06-29 20:53:55 +0200 (Fri, 29 Jun 2007) | 16 lines

  * configure.ac (AC_CHECK_HEADERS): Added netdb.h, ucontext.h.
  (AC_CHECK_FUNCS): Added gethostbyname, htons, malloc, recv, send.
  (AC_CHECK_ENABLE_ZLIB): Moved code to function.
  (AC_CHECK_ENABLE_LTDL): Likewise.

  * m4/zlib.m4: New file.
  * m4/ltdl.m4: Likewise.

  * src/native/native.c [ENABLE_LTDL && HAVE_LTDL_H] (ltdl.h): Added
  #ifdef.
  [ENABLE_LTDL] (hashtable_library): Likewise.
  (native_init) [ENABLE_LTDL]: Likewise.
  [ENABLE_LTDL] (native_library_open): Likewise.
  [ENABLE_LTDL] (native_library_add): Likewise.
  [ENABLE_LTLD] (native_library_find): Likewise.
........
  r8164 | twisti | 2007-06-29 20:56:08 +0200 (Fri, 29 Jun 2007) | 2 lines

  * src/native/native.c (native_library_find): Typo.
........
  r8165 | twisti | 2007-06-29 21:02:08 +0200 (Fri, 29 Jun 2007) | 4 lines

  * src/native/vm/java_lang_Runtime.c [ENABLE_LTDL && HAVE_LTDL_H]
  (ltdl.h): Added #ifdef.
  (loadLibrary) [ENABLE_LTDL]: Likewise.
........
  r8166 | twisti | 2007-06-29 21:45:17 +0200 (Fri, 29 Jun 2007) | 9 lines

  * src/native/native.c: Removed wrong comment.

  * src/native/native.h [ENABLE_LTDL && HAVE_LTDL_H] (ltdl.h): Added
  #ifdef.
  [ENABLE_LTDL] (hashtable_library_loader_entry): Likewise.
  [ENABLE_LTDL] (hashtable_library_name_entry): Likewise.
  [ENABLE_LTDL] (native_library_open, native_library_add)
  (native_library_find): Likewise.
........
  r8167 | twisti | 2007-06-29 22:27:41 +0200 (Fri, 29 Jun 2007) | 3 lines

  * src/native/native.h (hashtable_library_name_entry): Moved up, build
  fix.
........
  r8168 | twisti | 2007-06-30 14:20:48 +0200 (Sat, 30 Jun 2007) | 2 lines

  * src/mm/nogc.c (vm/vm.h): Added.
........
  r8169 | twisti | 2007-06-30 14:33:50 +0200 (Sat, 30 Jun 2007) | 18 lines

  * src/vmcore/class.c (class_is_array): New function.
  (class_is_interface): Likewise.
  * src/vmcore/class.h: Likewise.

  * src/native/vm/java_lang_Class.c (stdint.h): Added.
  (isInterface): Made JNI function, use class_is_interface.
  (isArray): Made JNI function, use class_is_array.
  * src/native/vm/java_lang_Class.h: Likewise.

  * src/native/vm/cldc1.1/java_lang_Class.c (methods): Register common
  methods for isInterface and isArray.
  (isInterface): Removed.
  (isArray): Likewise.

  * src/native/vm/gnu/java_lang_VMClass.c (isInterface): Changed to JNI
  call.
  (isArray): Likewise.
........
  r8170 | twisti | 2007-06-30 16:03:18 +0200 (Sat, 30 Jun 2007) | 23 lines

  * src/native/jni.c [ENABLE_JAVASE] (native/vm/reflect.h): Added.
  (_Jv_JNI_ToReflectedMethod): Implemented.

  * src/native/vm/java_lang_Class.c [ENABLE_JAVASE]
  (native/vm/reflect.h): Added.
  (getDeclaredFields): Use reflect_field_new.
  (getDeclaredMethods): Use reflect_method_new.
  (getDeclaredConstructors): Use reflect_constructor_new.
  (getEnclosingConstructor): Use reflect_constructor_new.
  (getEnclosingMethod): Use reflect_method_new.

  * src/native/vm/sun/jvm.c (jio_vsnprintf): Added count check.
  (jio_snprintf): Implemented.
  (JVM_IsInterface): Use class_is_interface.
  (JVM_IsArrayClass): Use class_is_array.
  (JVM_InvokeMethod): Disabled debug output.

  * src/native/vm/reflect.c: New file.
  * src/native/vm/reflect.h: Likewise.

  * src/native/vm/Makefile.am [ENABLE_JAVASE] (REFLECT_SOURCES): Added.
  (libnativevm_la_SOURCES): Added REFLECT_SOURCES.
........
  r8171 | twisti | 2007-06-30 16:13:58 +0200 (Sat, 30 Jun 2007) | 2 lines

  * src/native/vm/reflect.c: Fixed includes.
........
  r8172 | twisti | 2007-06-30 16:14:52 +0200 (Sat, 30 Jun 2007) | 3 lines

  * src/native/vm/reflect.c: Added Id keyword.
  * src/native/vm/reflect.h: Likewise.
........
  r8173 | twisti | 2007-06-30 19:40:09 +0200 (Sat, 30 Jun 2007) | 3 lines

  * src/native/vm/sun/jvm.c (JVM_Available): Fixed return value (seems
  it's a boolean value, 1 is OK, 0 is error).
........
  r8174 | twisti | 2007-07-01 19:49:25 +0200 (Sun, 01 Jul 2007) | 2 lines

  * src/vmcore/options.c (options_xx): Fixed warnings.
........
  r8175 | twisti | 2007-07-02 16:07:24 +0200 (Mon, 02 Jul 2007) | 3 lines

  * src/vm/exceptions.c (exceptions_init) [!(__ARM__ && __LINUX__)]:
  Don't mmap page 0x0 on arm-linux.
........
  r8176 | twisti | 2007-07-03 17:43:14 +0200 (Tue, 03 Jul 2007) | 3 lines

  * src/vm/jit/i386/darwin/Makefile.am (AM_CPPFLAGS): Added
  -I$(top_builddir)/src.
........
  r8177 | twisti | 2007-07-03 18:05:27 +0200 (Tue, 03 Jul 2007) | 3 lines

  * src/native/vm/sun_misc_Unsafe.c (methods): Added unpark.
  (unpark): New function, but unimplemented.
........
  r8178 | michi | 2007-07-05 13:13:20 +0200 (Thu, 05 Jul 2007) | 22 lines

  * src/vm/exceptions.c (exceptions_new_hardware_exception):  Stackframeinfo block
  is now on the stack of the signal handler function.

  * src/vm/exceptions.h (exceptions_new_hardware_exception): Changed signature.

  * src/vm/jit/arm/linux/md-os.c (md_signal_handler_sigsegv): Passes sfi to
  exceptions function.

  * src/vm/jit/powerpc/linux/md-os.c: Likewise.
  * src/vm/jit/powerpc/darwin/md-os.c: Likewise.
  * src/vm/jit/sparc64/linux/md-os.c: Likewise.
  * src/vm/jit/sparc64/solaris/md-os.c: Likewise.
  * src/vm/jit/alpha/linux/md-os.c: Likewise.
  * src/vm/jit/s390/md.c: Likewise.
  * src/vm/jit/mips/linux/md-os.c: Likewise.
  * src/vm/jit/mips/irix/md-os.c: Likewise.
  * src/vm/jit/m68k/linux/md-os.c: Likewise.
  * src/vm/jit/powerpc64/linux/md-os.c: Likewise.
  * src/vm/jit/i386/darwin/md-os.c: Likewise.
  * src/vm/jit/i386/linux/md-os.c: Likewise.
  * src/vm/jit/x86_64/linux/md-os.c: Likewise.
........

--HG--
branch : exact-gc

63 files changed:
configure.ac
src/mm/boehm.c
src/mm/nogc.c
src/native/jni.c
src/native/native.c
src/native/native.h
src/native/vm/Makefile.am
src/native/vm/cldc1.1/java_lang_Class.c
src/native/vm/gnu/java_lang_VMClass.c
src/native/vm/gnu/java_lang_VMRuntime.c
src/native/vm/java_lang_Class.c
src/native/vm/java_lang_Class.h
src/native/vm/java_lang_Runtime.c
src/native/vm/sun_misc_Unsafe.c
src/vm/builtin.c
src/vm/exceptions.c
src/vm/exceptions.h
src/vm/global.h
src/vm/jit/Makefile.am
src/vm/jit/alpha/linux/md-os.c
src/vm/jit/arm/asmpart.S
src/vm/jit/arm/codegen.c
src/vm/jit/arm/codegen.h
src/vm/jit/arm/emit.c
src/vm/jit/arm/linux/md-os.c
src/vm/jit/arm/patcher.c
src/vm/jit/code.c
src/vm/jit/code.h
src/vm/jit/codegen-common.c
src/vm/jit/emit-common.h
src/vm/jit/i386/darwin/Makefile.am
src/vm/jit/i386/darwin/md-os.c
src/vm/jit/i386/linux/md-os.c
src/vm/jit/i386/patcher.c
src/vm/jit/m68k/linux/md-os.c
src/vm/jit/mips/irix/md-os.c
src/vm/jit/mips/linux/md-os.c
src/vm/jit/parse.c
src/vm/jit/patcher.h
src/vm/jit/powerpc/darwin/md-os.c
src/vm/jit/powerpc/linux/md-os.c
src/vm/jit/powerpc64/linux/md-os.c
src/vm/jit/s390/codegen.c
src/vm/jit/s390/md.c
src/vm/jit/s390/tests/dacapo.status
src/vm/jit/sparc64/asmpart.S
src/vm/jit/sparc64/codegen.c
src/vm/jit/sparc64/emit.c
src/vm/jit/sparc64/linux/md-os.c
src/vm/jit/sparc64/md-abi.c
src/vm/jit/sparc64/md-abi.h
src/vm/jit/sparc64/patcher.c
src/vm/jit/sparc64/solaris/md-os.c
src/vm/jit/stacktrace.c
src/vm/jit/verify/typecheck-typeinferer.c
src/vm/jit/verify/typecheck.c
src/vm/jit/x86_64/linux/md-os.c
src/vm/vm.c
src/vm/vm.h
src/vmcore/class.c
src/vmcore/class.h
src/vmcore/linker.c
src/vmcore/options.c

index 3b57da342b20a528ca57ed2b13173ad7df33e8fd..076094b27af93e5ceb4f9fea5d8aec6cf00d81a7 100644 (file)
@@ -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 8132 2007-06-22 11:15:47Z twisti $
+dnl $Id: configure.ac 8163 2007-06-29 18:53:55Z twisti $
 
 dnl Process this file with autoconf to produce a configure script.
 
@@ -215,9 +215,11 @@ AC_HEADER_STDC
 
 dnl keep them alpha-sorted!
 AC_CHECK_HEADERS([fcntl.h])
+AC_CHECK_HEADERS([netdb.h])
 AC_CHECK_HEADERS([stdlib.h])
 AC_CHECK_HEADERS([string.h])
 AC_CHECK_HEADERS([time.h])
+AC_CHECK_HEADERS([ucontext.h])
 AC_CHECK_HEADERS([unistd.h])
 AC_CHECK_HEADERS([sys/ioctl.h])
 AC_CHECK_HEADERS([sys/mman.h])
@@ -267,22 +269,27 @@ AC_CHECK_FUNCS([fprintf])
 AC_CHECK_FUNCS([free])
 AC_CHECK_FUNCS([fstat])
 AC_CHECK_FUNCS([getcwd])
+AC_CHECK_FUNCS([gethostbyname])
 AC_CHECK_FUNCS([gethostname])
 AC_CHECK_FUNCS([getpagesize])
 AC_CHECK_FUNCS([getrusage])
 AC_CHECK_FUNCS([getsockname])
 AC_CHECK_FUNCS([gettimeofday])
+AC_CHECK_FUNCS([htons])
 AC_CHECK_FUNCS([ioctl])
 AC_CHECK_FUNCS([isnan])
 AC_CHECK_FUNCS([listen])
 AC_CHECK_FUNCS([localtime])
 AC_CHECK_FUNCS([localtime_r])
 AC_CHECK_FUNCS([lseek])
+AC_CHECK_FUNCS([malloc])
 AC_CHECK_FUNCS([mmap])
 AC_CHECK_FUNCS([mprotect])
 AC_CHECK_FUNCS([open])
+AC_CHECK_FUNCS([recv])
 AC_CHECK_FUNCS([scandir])
 AC_CHECK_FUNCS([select])
+AC_CHECK_FUNCS([send])
 AC_CHECK_FUNCS([setsockopt])
 AC_CHECK_FUNCS([shutdown])
 AC_CHECK_FUNCS([socket])
@@ -517,6 +524,13 @@ if test x"${ENABLE_DISASSEMBLER}" = "xyes"; then
                      ;;
             esac
 
+            case "${OS_DIR}" in
+                solaris)
+                                        AC_CHECK_LIB(rt, sem_init,, [AC_MSG_ERROR(cannot find librt)])
+                     ;;
+            esac
+
+
             AC_CHECK_LIB(iberty, xstrerror,, [AC_MSG_ERROR(cannot find libiberty (from binutils))])
             AC_CHECK_LIB(bfd, bfd_get_arch,, [AC_MSG_ERROR(cannot find libbfd (from binutils))])
             AC_CHECK_LIB(opcodes, disassembler,, [AC_MSG_ERROR(cannot find libopcodes (from binutils))])
@@ -785,25 +799,7 @@ else
 fi
 
 
-dnl check if zlib should be used
-AC_MSG_CHECKING(whether ZIP/JAR archives should be supported)
-AC_ARG_ENABLE([zlib],
-              [AS_HELP_STRING(--disable-zlib,disable ZIP/JAR archive support (needs zlib) [[default=yes]])],
-              [case "${enableval}" in
-                  no) ENABLE_ZLIB=no;;
-                  *) ENABLE_ZLIB=yes;;
-               esac],
-              [ENABLE_ZLIB=yes])
-AC_MSG_RESULT(${ENABLE_ZLIB})
-
-if test x"${ENABLE_ZLIB}" = "xyes"; then
-    AC_CHECK_HEADERS([zconf.h],, [AC_MSG_ERROR(cannot find zconf.h)])
-    AC_CHECK_HEADERS([zlib.h],, [AC_MSG_ERROR(cannot find zlib.h)])
-    AC_CHECK_LIB(z, inflate,, [AC_MSG_ERROR(cannot find libz)])
-    AC_DEFINE([ENABLE_ZLIB], 1, [use zlib])
-fi
-AM_CONDITIONAL([ENABLE_ZLIB], test x"${ENABLE_ZLIB}" = "xyes")
-
+AC_CHECK_ENABLE_ZLIB
 
 dnl check for stuff to be built
 AC_CHECK_ENABLE_JNI
@@ -903,13 +899,7 @@ if test x"${WITH_STATIC_CLASSPATH}" = "xyes"; then
     dnl check for some classpath related stuff when we link statically
     AM_ICONV_LINK
 else
-    dnl we need this check for --enable-staticvm, otherwise ltdl can't find dlopen
-    if test x"${ENABLE_STATICVM}" = "xyes"; then
-        AC_CHECK_LIB(dl, dlopen,, [AC_MSG_ERROR(cannot find libdl)])
-    fi
-
-    AC_CHECK_HEADERS([ltdl.h],, [AC_MSG_ERROR(cannot find ltdl.h)])
-    AC_CHECK_LIB(ltdl, lt_dlopen,, [AC_MSG_ERROR(cannot find libltdl)])
+    AC_CHECK_ENABLE_LTDL
 fi
 AM_CONDITIONAL([WITH_STATIC_CLASSPATH], test x"${WITH_STATIC_CLASSPATH}" = "xyes")
 AC_SUBST(WITH_STATIC_CLASSPATH)
index 7874228fd97d8550b6d63c330004b983b283d022..ebb9952ef75e395c19adc0a3d5808508ea9a2ced 100644 (file)
@@ -22,7 +22,7 @@
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
    02110-1301, USA.
 
-   $Id: boehm.c 7615 2007-03-29 23:10:59Z michi $
+   $Id: boehm.c 8179 2007-07-05 11:21:08Z michi $
 
 */
 
@@ -75,36 +75,39 @@ void gc_init(u4 heapmaxsize, u4 heapstartsize)
 {
        size_t heapcurrentsize;
 
-       GC_INIT();
+       /* just to be sure (should be set to 1 by JAVA_FINALIZATION macro) */
 
-       /* set the maximal heap size */
+       GC_java_finalization = 1;
 
-       GC_set_max_heap_size(heapmaxsize);
+       /* Ignore pointers that do not point to the start of an object. */
 
-       /* set the initial heap size */
+       GC_all_interior_pointers = 0;
 
-       heapcurrentsize = GC_get_heap_size();
+       /* suppress warnings */
 
-       if (heapstartsize > heapcurrentsize) {
-               GC_expand_hp(heapstartsize - heapcurrentsize);
-       }
+       GC_set_warn_proc(gc_ignore_warnings);
+
+       /* install a GC notifier */
+
+       GC_finalize_on_demand = 1;
+       GC_finalizer_notifier = finalizer_notify;
 
        /* define OOM function */
 
        GC_oom_fn = gc_out_of_memory;
 
-       /* just to be sure (should be set to 1 by JAVA_FINALIZATION macro) */
+       GC_INIT();
 
-       GC_java_finalization = 1;
+       /* set the maximal heap size */
 
-       /* suppress warnings */
+       GC_set_max_heap_size(heapmaxsize);
 
-       GC_set_warn_proc(gc_ignore_warnings);
+       /* set the initial heap size */
 
-       /* install a GC notifier */
+       heapcurrentsize = GC_get_heap_size();
 
-       GC_finalize_on_demand = 1;
-       GC_finalizer_notifier = finalizer_notify;
+       if (heapstartsize > heapcurrentsize)
+               GC_expand_hp(heapstartsize - heapcurrentsize);
 }
 
 
index 4d4d1aaf4f7251ce8e741c2e8c77aac3a0da57fd..3203e9c05a07f0db3ba25fa1960f4c28706158f7 100644 (file)
@@ -22,7 +22,7 @@
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
    02110-1301, USA.
 
-   $Id: nogc.c 7615 2007-03-29 23:10:59Z michi $
+   $Id: nogc.c 8179 2007-07-05 11:21:08Z michi $
 
 */
 
@@ -45,6 +45,7 @@
 #include "vm/exceptions.h"
 #include "vm/global.h"
 #include "vm/stringlocal.h"
+#include "vm/vm.h"
 
 #include "vmcore/loader.h"
 #include "vmcore/options.h"
index 6889b57345dfd0d6e14cb196d8b55db6856f768c..17e5ff528a92fbd6057732e664b3eae8a07b4fe0 100644 (file)
@@ -22,7 +22,7 @@
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
    02110-1301, USA.
 
-   $Id: jni.c 8137 2007-06-22 16:41:36Z michi $
+   $Id: jni.c 8179 2007-07-05 11:21:08Z michi $
 
 */
 
@@ -90,6 +90,7 @@
 
 #if defined(ENABLE_JAVASE)
 # include "native/vm/java_lang_ClassLoader.h"
+# include "native/vm/reflect.h"
 #endif
 
 #include "threads/lock-common.h"
@@ -812,7 +813,8 @@ static void _Jv_jni_CallVoidMethodA(java_objectheader *o, vftbl_t *vftbl,
 
 *******************************************************************************/
 
-#if !defined(__MIPS__) && !defined(__X86_64__) && !defined(__POWERPC64__) && !defined(__M68K__) & !defined(__ARM__)
+#if !defined(__MIPS__) && !defined(__X86_64__) && !defined(__POWERPC64__) \
+ && !defined(__M68K__) && !defined(__ARM__) && !defined(__SPARC_64__)
 java_objectheader *_Jv_jni_invokeNative(methodinfo *m, java_objectheader *o,
                                                                                java_objectarray *params)
 {
@@ -2128,11 +2130,36 @@ jfieldID _Jv_JNI_FromReflectedField(JNIEnv* env, jobject field)
 jobject _Jv_JNI_ToReflectedMethod(JNIEnv* env, jclass cls, jmethodID methodID,
                                                                  jboolean isStatic)
 {
+#if defined(ENABLE_JAVASE)
+       methodinfo                    *m;
+       java_lang_reflect_Constructor *rc;
+       java_lang_reflect_Method      *rm;
+
        STATISTICS(jniinvokation());
 
-       log_text("JNI-Call: ToReflectedMethod: IMPLEMENT ME!");
+       m = (methodinfo *) methodID;
+
+       /* HotSpot does the same assert. */
+
+       assert(((m->flags & ACC_STATIC) != 0) == (isStatic != 0));
+
+       if (m->name == utf_init) {
+               rc = reflect_constructor_new(m);
+
+               return (jobject) rc;
+       }
+       else {
+               rm = reflect_method_new(m);
+
+               return (jobject) rm;
+       }
+#else
+       vm_abort("_Jv_JNI_ToReflectedMethod: not implemented in this configuration");
+
+       /* keep compiler happy */
 
        return NULL;
+#endif
 }
 
 
index 77e9e249ccbd32d17ea25431f0ebfe96cfa890ab..813ec3e2c10fdec37cb7d40fddc2f2c905bafed1 100644 (file)
@@ -22,7 +22,7 @@
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
    02110-1301, USA.
 
-   $Id: native.c 8137 2007-06-22 16:41:36Z michi $
+   $Id: native.c 8179 2007-07-05 11:21:08Z michi $
 
 */
 
@@ -32,7 +32,7 @@
 #include <assert.h>
 #include <ctype.h>
 
-#if !defined(WITH_STATIC_CLASSPATH)
+#if defined(ENABLE_LTDL) && defined(HAVE_LTDL_H)
 # include <ltdl.h>
 #endif
 
@@ -94,7 +94,10 @@ static bool nativecompdone = false;
 /* global variables ***********************************************************/
 
 static avl_tree_t *tree_native_methods;
+
+#if defined(ENABLE_LTDL)
 static hashtable *hashtable_library;
+#endif
 
 
 /* prototypes *****************************************************************/
@@ -110,7 +113,7 @@ static s4 native_tree_native_methods_comparator(const void *treenode, const void
 
 bool native_init(void)
 {
-#if !defined(WITH_STATIC_CLASSPATH)
+#if defined(ENABLE_LTDL)
        /* initialize libltdl */
 
        if (lt_dlinit())
@@ -516,7 +519,7 @@ static functionptr native_method_find(methodinfo *m)
 
 *******************************************************************************/
 
-#if !defined(WITH_STATIC_CLASSPATH)
+#if defined(ENABLE_LTDL)
 lt_dlhandle native_library_open(utf *filename)
 {
        lt_dlhandle handle;
@@ -553,7 +556,7 @@ lt_dlhandle native_library_open(utf *filename)
 
 *******************************************************************************/
 
-#if !defined(WITH_STATIC_CLASSPATH)
+#if defined(ENABLE_LTDL)
 void native_library_add(utf *filename, java_objectheader *loader,
                                                lt_dlhandle handle)
 {
@@ -632,7 +635,7 @@ void native_library_add(utf *filename, java_objectheader *loader,
 
        LOCK_MONITOR_EXIT(hashtable_library->header);
 }
-#endif /* !defined(WITH_STATIC_CLASSPATH) */
+#endif
 
 
 /* native_library_find *********************************************************
@@ -641,7 +644,7 @@ void native_library_add(utf *filename, java_objectheader *loader,
 
 *******************************************************************************/
 
-#if !defined(WITH_STATIC_CLASSPATH)
+#if defined(ENABLE_LTDL)
 hashtable_library_name_entry *native_library_find(utf *filename,
                                                                                                  java_objectheader *loader)
 {
@@ -764,10 +767,12 @@ functionptr native_resolve_function(methodinfo *m)
        utf                            *name;
        utf                            *newname;
        functionptr                     f;
+#if defined(ENABLE_LTDL)
        hashtable_library_loader_entry *le;
        hashtable_library_name_entry   *ne;
        u4                              key;    /* hashkey                        */
        u4                              slot;   /* slot in hashtable              */
+#endif
 #if defined(WITH_CLASSPATH_SUN)
        methodinfo                     *method_findNative;
        java_objectheader              *s;
@@ -798,6 +803,7 @@ functionptr native_resolve_function(methodinfo *m)
 
        f = NULL;
 
+#if defined(ENABLE_LTDL)
        /* normally addresses are aligned to 4, 8 or 16 bytes */
 
        key  = ((u4) (ptrint) cl) >> 4;                       /* align to 16-byte */
@@ -823,7 +829,7 @@ functionptr native_resolve_function(methodinfo *m)
                le = le->hashlink;
        }
 
-#if defined(WITH_CLASSPATH_SUN)
+# if defined(WITH_CLASSPATH_SUN)
        if (f == NULL) {
                /* We can resolve the function directly from
                   java.lang.ClassLoader as it's a static function. */
@@ -855,11 +861,12 @@ functionptr native_resolve_function(methodinfo *m)
                                                                                                                         NULL, cl, s);
                }
        }
-#endif
+# endif
 
        if (f != NULL)
                if (opt_verbosejni)
                        printf("JNI ]\n");
+#endif
 
        /* If not found, try to find the native function symbol in the
           main program. */
index 4b64fb5ed646d422329797699e87d6a035868a1e..b88668af0eef4a9530548c9f0a1b25b6eca39cca 100644 (file)
@@ -22,7 +22,7 @@
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
    02110-1301, USA.
 
-   $Id: native.h 8137 2007-06-22 16:41:36Z michi $
+   $Id: native.h 8179 2007-07-05 11:21:08Z michi $
 
 */
 
@@ -32,7 +32,7 @@
 
 #include "config.h"
 
-#if !defined(WITH_STATIC_CLASSPATH)
+#if defined(ENABLE_LTDL) && defined(HAVE_LTDL_H)
 # include <ltdl.h>
 #endif
 
 
 /* table for locating native methods */
 
+#if defined(WITH_STATIC_CLASSPATH)
 typedef struct nativeref nativeref;
 typedef struct nativecompref nativecompref;
-
-
-#if !defined(WITH_STATIC_CLASSPATH)
-typedef struct hashtable_library_loader_entry hashtable_library_loader_entry;
-typedef struct hashtable_library_name_entry hashtable_library_name_entry;
+#endif
 
 
 /* native_methods_node_t ******************************************************/
@@ -78,15 +75,21 @@ struct native_methods_node_t {
 
 /* hashtable_library_loader_entry *********************************************/
 
+#if defined(ENABLE_LTDL)
+typedef struct hashtable_library_loader_entry hashtable_library_loader_entry;
+typedef struct hashtable_library_name_entry   hashtable_library_name_entry;
+
 struct hashtable_library_loader_entry {
        hashtable_classloader_entry    *cle;     /* class loader                  */
        hashtable_library_name_entry   *namelink;/* libs loaded by this loader    */
        hashtable_library_loader_entry *hashlink;/* link for external chaining    */
 };
+#endif
 
 
 /* hashtable_library_name_entry ***********************************************/
 
+#if defined(ENABLE_LTDL)
 struct hashtable_library_name_entry {
        utf                          *name;      /* library name                  */
        lt_dlhandle                   handle;    /* libtool library handle        */
@@ -128,12 +131,13 @@ functionptr native_findfunction(utf *cname, utf *mname, utf *desc,
 
 #else /* defined(WITH_STATIC_CLASSPATH) */
 
+# if defined(ENABLE_LTDL)
 lt_dlhandle native_library_open(utf *filename);
 void        native_library_add(utf *filename, java_objectheader *loader,
                                                           lt_dlhandle handle);
-
 hashtable_library_name_entry *native_library_find(utf *filename,
                                                                                                  java_objectheader *loader);
+# endif
 
 functionptr native_resolve_function(methodinfo *m);
 
index 12c3aa9451913a3b62a66aa94137e99ead3e6f5a..bcb5b5faadb2ab1eba6423f1fe6e6baa7b29f824 100644 (file)
@@ -60,6 +60,10 @@ NATIVEVM_LIB = \
 endif
 
 if ENABLE_JAVASE
+REFLECT_SOURCES = \
+       reflect.c \
+       reflect.h
+
 CLASSLOADER_SOURCES = \
        java_lang_ClassLoader.c \
        java_lang_ClassLoader.h
@@ -86,6 +90,7 @@ noinst_LTLIBRARIES = \
 libnativevm_la_SOURCES = \
        nativevm.c \
        nativevm.h \
+       $(REFLECT_SOURCES) \
        \
        java_lang_Class.c \
        java_lang_Class.h \
index 07b0ab6f764c765e70fef6a35a4ecbc61cd3fe43..dd4ff460c867d088b1c1f9fcaba3f0601e89f147 100644 (file)
@@ -48,8 +48,8 @@ static JNINativeMethod methods[] = {
        { "newInstance",      "()Ljava/lang/Object;",                 (void *) (ptrint) &Java_java_lang_Class_newInstance      },
        { "isInstance",       "(Ljava/lang/Object;)Z",                (void *) (ptrint) &Java_java_lang_Class_isInstance       },
        { "isAssignableFrom", "(Ljava/lang/Class;)Z",                 (void *) (ptrint) &Java_java_lang_Class_isAssignableFrom },
-       { "isInterface",      "()Z",                                  (void *) (ptrint) &Java_java_lang_Class_isInterface      },
-       { "isArray",          "()Z",                                  (void *) (ptrint) &Java_java_lang_Class_isArray          },
+       { "isInterface",      "()Z",                                  (void *) (ptrint) &_Jv_java_lang_Class_isInterface       },
+       { "isArray",          "()Z",                                  (void *) (ptrint) &_Jv_java_lang_Class_isArray           },
        { "getName",          "()Ljava/lang/String;",                 (void *) (ptrint) &Java_java_lang_Class_getName          },
 };
 
@@ -120,28 +120,6 @@ JNIEXPORT s4 JNICALL Java_java_lang_Class_isAssignableFrom(JNIEnv *env, java_lan
 }
 
 
-/*
- * Class:     java/lang/Class
- * Method:    isInterface
- * Signature: ()Z
- */
-JNIEXPORT s4 JNICALL Java_java_lang_Class_isInterface(JNIEnv *env, java_lang_Class *this)
-{
-       return _Jv_java_lang_Class_isInterface(this);
-}
-
-
-/*
- * Class:     java/lang/Class
- * Method:    isArray
- * Signature: ()Z
- */
-JNIEXPORT s4 JNICALL Java_java_lang_Class_isArray(JNIEnv *env, java_lang_Class *this)
-{
-       return _Jv_java_lang_Class_isArray(this);
-}
-
-
 /*
  * Class:     java/lang/Class
  * Method:    getName
index 98253103dc635d228edb36fd3beb83d674fbb610..ced8cc112d45a6ff94401bdcc79dc933ec61fbb5 100644 (file)
@@ -22,7 +22,7 @@
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
    02110-1301, USA.
 
-   $Id: java_lang_VMClass.c 7912 2007-05-18 13:12:09Z twisti $
+   $Id: java_lang_VMClass.c 8169 2007-06-30 12:33:50Z twisti $
 
 */
 
@@ -126,7 +126,7 @@ JNIEXPORT s4 JNICALL Java_java_lang_VMClass_isAssignableFrom(JNIEnv *env, jclass
  */
 JNIEXPORT s4 JNICALL Java_java_lang_VMClass_isInterface(JNIEnv *env, jclass clazz, java_lang_Class *klass)
 {
-       return _Jv_java_lang_Class_isInterface(klass);
+       return _Jv_java_lang_Class_isInterface(env, klass);
 }
 
 
@@ -280,7 +280,7 @@ JNIEXPORT java_lang_Class* JNICALL Java_java_lang_VMClass_forName(JNIEnv *env, j
  */
 JNIEXPORT s4 JNICALL Java_java_lang_VMClass_isArray(JNIEnv *env, jclass clazz, java_lang_Class *klass)
 {
-       return _Jv_java_lang_Class_isArray(klass);
+       return _Jv_java_lang_Class_isArray(env, klass);
 }
 
 
index ce872606fecb7cb38a9c3295b8bbe36281440be7..202ada6f4b8b6833335fda8c92130c03b4b3d3e0 100644 (file)
@@ -22,7 +22,7 @@
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
    02110-1301, USA.
 
-   $Id: java_lang_VMRuntime.c 8123 2007-06-20 23:50:55Z michi $
+   $Id: java_lang_VMRuntime.c 8147 2007-06-27 09:23:24Z twisti $
 
 */
 
@@ -33,6 +33,7 @@
 #include <string.h>
 #include <stdint.h>
 #include <stdlib.h>
+#include <unistd.h>
 #include <sys/utsname.h>
 
 #if defined(__DARWIN__)
index 57f4d5ad14a79c42204438e944d32ff954e26aca..ec22506c552ddd9becea714ebca26edad2f1b24f 100644 (file)
@@ -22,7 +22,7 @@
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
    02110-1301, USA.
 
-   $Id: java_lang_Class.c 8137 2007-06-22 16:41:36Z michi $
+   $Id: java_lang_Class.c 8179 2007-07-05 11:21:08Z michi $
 
 */
 
@@ -30,6 +30,7 @@
 #include "config.h"
 
 #include <assert.h>
+#include <stdint.h>
 #include <string.h>
 
 #include "vm/types.h"
 #include "native/vm/java_lang_Class.h"
 #include "native/vm/java_lang_String.h"
 
+#if defined(ENABLE_JAVASE)
+# include "native/vm/reflect.h"
+#endif
+
 #include "toolbox/logging.h"
 
 #include "vm/builtin.h"
@@ -236,16 +241,13 @@ s4 _Jv_java_lang_Class_isAssignableFrom(java_lang_Class *klass, java_lang_Class
  * Method:    isInterface
  * Signature: ()Z
  */
-s4 _Jv_java_lang_Class_isInterface(java_lang_Class *klass)
+JNIEXPORT int32_t JNICALL _Jv_java_lang_Class_isInterface(JNIEnv *env, java_lang_Class *this)
 {
        classinfo *c;
 
-       c = (classinfo *) klass;
-
-       if (c->flags & ACC_INTERFACE)
-               return true;
+       c = (classinfo *) this;
 
-       return false;
+       return class_is_interface(c);
 }
 
 
@@ -555,7 +557,6 @@ java_objectarray *_Jv_java_lang_Class_getDeclaredFields(java_lang_Class *klass,
        classinfo               *c;
        java_objectarray        *oa;            /* result: array of field-objects */
        fieldinfo               *f;
-       java_objectheader       *o;
        java_lang_reflect_Field *rf;
        s4 public_fields;                    /* number of elements in field-array */
        s4 pos;
@@ -584,45 +585,11 @@ java_objectarray *_Jv_java_lang_Class_getDeclaredFields(java_lang_Class *klass,
                if ((f->flags & ACC_PUBLIC) || (publicOnly == 0)) {
                        /* create Field object */
 
-                       o = native_new_and_init(class_java_lang_reflect_Field);
-
-                       if (o == NULL)
-                               return NULL;
-
-                       /* initialize instance fields */
-
-                       rf = (java_lang_reflect_Field *) o;
-
-#if defined(WITH_CLASSPATH_GNU)
-
-                       rf->clazz = (java_lang_Class *) c;
-
-                       /* The name needs to be interned */
-                       /* XXX implement me better! */
-
-                       rf->name           = _Jv_java_lang_String_intern((java_lang_String *) javastring_new(f->name));
-                       rf->slot           = i;
-
-#elif defined(WITH_CLASSPATH_SUN)
-
-                       rf->clazz          = (java_lang_Class *) c;
-
-                       /* The name needs to be interned */
-                       /* XXX implement me better! */
-
-                       rf->name           = _Jv_java_lang_String_intern((java_lang_String *) javastring_new(f->name));
-                       rf->type           = (java_lang_Class *) field_get_type(f);
-                       rf->modifiers      = f->flags;
-                       rf->slot           = i;
-                       rf->signature      = f->signature ? (java_lang_String *) javastring_new(f->signature) : NULL;
-                       rf->annotations    = NULL;
-#else
-# error unknown classpath configuration
-#endif
+                       rf = reflect_field_new(f);
 
                        /* store object into array */
 
-                       oa->data[pos++] = o;
+                       oa->data[pos++] = (java_objectheader *) rf;
                }
        }
 
@@ -638,7 +605,6 @@ java_objectarray *_Jv_java_lang_Class_getDeclaredFields(java_lang_Class *klass,
 java_objectarray *_Jv_java_lang_Class_getDeclaredMethods(java_lang_Class *klass, s4 publicOnly)
 {
        classinfo                *c;
-       java_objectheader        *o;
        java_lang_reflect_Method *rm;
        java_objectarray         *oa;          /* result: array of Method-objects */
        methodinfo               *m;      /* the current method to be represented */
@@ -646,7 +612,8 @@ java_objectarray *_Jv_java_lang_Class_getDeclaredMethods(java_lang_Class *klass,
        s4 pos;
        s4 i;
 
-       c = (classinfo *) klass;    
+       c = (classinfo *) klass;
+
        public_methods = 0;
 
        /* JOWENN: array classes do not declare methods according to mauve
@@ -654,7 +621,7 @@ java_objectarray *_Jv_java_lang_Class_getDeclaredMethods(java_lang_Class *klass,
           clone method overriding instead of declaring it as a member
           function. */
 
-       if (_Jv_java_lang_Class_isArray(klass))
+       if (class_is_array(c))
                return builtin_anewarray(0, class_java_lang_reflect_Method);
 
        /* determine number of methods */
@@ -679,51 +646,13 @@ java_objectarray *_Jv_java_lang_Class_getDeclaredMethods(java_lang_Class *klass,
                if (((m->flags & ACC_PUBLIC) || (publicOnly == false)) && 
                        ((m->name != utf_init) && (m->name != utf_clinit)) &&
                        !(m->flags & ACC_MIRANDA)) {
+                       /* create Method object */
 
-                       o = native_new_and_init(class_java_lang_reflect_Method);
-
-                       if (o == NULL)
-                               return NULL;
-
-                       /* initialize instance fields */
-
-                       rm = (java_lang_reflect_Method *) o;
-
-#if defined(WITH_CLASSPATH_GNU)
-
-                       rm->clazz       = (java_lang_Class *) m->class;
-
-                       /* The name needs to be interned */
-                       /* XXX implement me better! */
-
-                       rm->name                 = _Jv_java_lang_String_intern((java_lang_String *) javastring_new(m->name));
-                       rm->slot                 = i;
-
-#elif defined(WITH_CLASSPATH_SUN)
-
-                       rm->clazz                = (java_lang_Class *) m->class;
-
-                       /* The name needs to be interned */
-                       /* XXX implement me better! */
-
-                       rm->name                 = _Jv_java_lang_String_intern((java_lang_String *) javastring_new(m->name));
-                       rm->parameterTypes       = method_get_parametertypearray(m);
-                       rm->returnType           = (java_lang_Class *) method_returntype_get(m);
-                       rm->exceptionTypes       = method_get_exceptionarray(m);
-                       rm->modifiers            = m->flags & ACC_CLASS_REFLECT_MASK;
-                       rm->slot                 = i;
-                       rm->signature            = m->signature ? (java_lang_String *) javastring_new(m->signature) : NULL;
-                       rm->annotations          = NULL;
-                       rm->parameterAnnotations = NULL;
-                       rm->annotationDefault    = NULL;
-
-#else
-# error unknown classpath configuration
-#endif
+                       rm = reflect_method_new(m);
 
                        /* store object into array */
 
-                       oa->data[pos++] = o;
+                       oa->data[pos++] = (java_objectheader *) rm;
                }
        }
 
@@ -741,7 +670,6 @@ java_objectarray *_Jv_java_lang_Class_getDeclaredConstructors(java_lang_Class *k
        classinfo                     *c;
        methodinfo                    *m; /* the current method to be represented */
        java_objectarray              *oa;     /* result: array of Method-objects */
-       java_objectheader             *o;
        java_lang_reflect_Constructor *rc;
        s4 public_methods;               /* number of public methods of the class */
        s4 pos;
@@ -769,39 +697,13 @@ java_objectarray *_Jv_java_lang_Class_getDeclaredConstructors(java_lang_Class *k
 
                if (((m->flags & ACC_PUBLIC) || (publicOnly == 0)) &&
                        (m->name == utf_init)) {
+                       /* create Constructor object */
 
-                       o = native_new_and_init(class_java_lang_reflect_Constructor);
-
-                       if (o == NULL)
-                               return NULL;
-
-                       /* initialize instance fields */
-
-                       rc = (java_lang_reflect_Constructor *) o;
-
-#if defined(WITH_CLASSPATH_GNU)
-
-                       rc->clazz                = (java_lang_Class *) c;
-                       rc->slot                 = i;
-
-#elif defined(WITH_CLASSPATH_SUN)
-
-                       rc->clazz                = (java_lang_Class *) c;
-                       rc->parameterTypes       = method_get_parametertypearray(m);
-                       rc->exceptionTypes       = method_get_exceptionarray(m);
-                       rc->modifiers            = m->flags & ACC_CLASS_REFLECT_MASK;
-                       rc->slot                 = i;
-                       rc->signature            = m->signature ? (java_lang_String *) javastring_new(m->signature) : NULL;
-                       rc->annotations          = NULL;
-                       rc->parameterAnnotations = NULL;
-
-#else
-# error unknown classpath configuration
-#endif
+                       rc = reflect_constructor_new(m);
 
                        /* store object into array */
 
-                       oa->data[pos++] = o;
+                       oa->data[pos++] = (java_objectheader *) rc;
                }
        }
 
@@ -834,17 +736,13 @@ java_lang_ClassLoader *_Jv_java_lang_Class_getClassLoader(java_lang_Class *klass
  * Method:    isArray
  * Signature: ()Z
  */
-s4 _Jv_java_lang_Class_isArray(java_lang_Class *klass)
+JNIEXPORT int32_t JNICALL _Jv_java_lang_Class_isArray(JNIEnv *env, java_lang_Class *this)
 {
        classinfo *c;
 
-       c = (classinfo *) klass;
+       c = (classinfo *) this;
 
-       if (!(c->state & CLASS_LINKED))
-               if (!link_class(c))
-                       return 0;
-
-       return (c->vftbl->arraydesc != NULL);
+       return class_is_array(c);
 }
 
 
@@ -972,7 +870,6 @@ java_lang_reflect_Constructor *_Jv_java_lang_Class_getEnclosingConstructor(java_
 {
        classinfo                     *c;
        methodinfo                    *m;
-       java_objectheader             *o;
        java_lang_reflect_Constructor *rc;
 
        c = (classinfo *) klass;
@@ -989,19 +886,9 @@ java_lang_reflect_Constructor *_Jv_java_lang_Class_getEnclosingConstructor(java_
        if (m->name != utf_init)
                return NULL;
 
-       /* create java.lang.reflect.Constructor object */
-
-       o = native_new_and_init(class_java_lang_reflect_Constructor);
-
-       if (o == NULL)
-               return NULL;
-
-       /* initialize instance fields */
-
-       rc = (java_lang_reflect_Constructor *) o;
+       /* create Constructor object */
 
-       rc->clazz = (java_lang_Class *) m->class;
-       rc->slot  = m - m->class->methods;               /* calculate method slot */
+       rc = reflect_constructor_new(m);
 
        return rc;
 }
@@ -1016,7 +903,6 @@ java_lang_reflect_Method *_Jv_java_lang_Class_getEnclosingMethod(java_lang_Class
 {
        classinfo                *c;
        methodinfo               *m;
-       java_objectheader        *o;
        java_lang_reflect_Method *rm;
 
        c = (classinfo *) klass;
@@ -1035,25 +921,7 @@ java_lang_reflect_Method *_Jv_java_lang_Class_getEnclosingMethod(java_lang_Class
 
        /* create java.lang.reflect.Method object */
 
-       o = native_new_and_init(class_java_lang_reflect_Method);
-
-       if (o == NULL)
-               return NULL;
-
-       /* initialize instance fields */
-
-       rm = (java_lang_reflect_Method *) o;
-
-#if defined(WITH_CLASSPATH_GNU)
-       rm->clazz          = (java_lang_Class *) m->class;
-#elif defined(WITH_CLASSPATH_SUN)
-       rm->clazz          = (java_lang_Class *) m->class;
-#else
-# error unknown classpath configuration
-#endif
-
-       rm->name           = (java_lang_String *) javastring_new(m->name);
-       rm->slot           = m - m->class->methods;      /* calculate method slot */
+       rm = reflect_method_new(m);
 
        return rm;
 }
index 04f36d24e8f9d8a4cb65237ac975a2af8b3934c2..758974791de4f4afd08f9ed213da7e5dd58f9eb1 100644 (file)
@@ -31,6 +31,9 @@
 #define _JV_JAVA_LANG_CLASS_H
 
 #include "config.h"
+
+#include <stdint.h>
+
 #include "vm/types.h"
 
 #include "native/jni.h"
@@ -59,7 +62,7 @@ java_lang_Class               *_Jv_java_lang_Class_forName(java_lang_String *nam
 
 s4                             _Jv_java_lang_Class_isInstance(java_lang_Class *klass, java_lang_Object *o);
 s4                             _Jv_java_lang_Class_isAssignableFrom(java_lang_Class *klass, java_lang_Class *c);
-s4                             _Jv_java_lang_Class_isInterface(java_lang_Class *klass);
+JNIEXPORT int32_t JNICALL      _Jv_java_lang_Class_isInterface(JNIEnv *env, java_lang_Class *this);
 
 #if defined(ENABLE_JAVASE)
 s4                             _Jv_java_lang_Class_isPrimitive(java_lang_Class *klass);
@@ -75,7 +78,7 @@ java_objectarray              *_Jv_java_lang_Class_getDeclaredConstructors(java_
 java_lang_ClassLoader         *_Jv_java_lang_Class_getClassLoader(java_lang_Class *klass);
 #endif
 
-s4                             _Jv_java_lang_Class_isArray(java_lang_Class *klass);
+JNIEXPORT int32_t JNICALL      _Jv_java_lang_Class_isArray(JNIEnv *env, java_lang_Class *this);
 
 #if defined(ENABLE_JAVASE)
 void                           _Jv_java_lang_Class_throwException(java_lang_Throwable *t);
index 0447d448a5817c2620e747ff20e3a28686c793a6..daa4bf0f265b95ffb9e727632c6d917cf8cab06a 100644 (file)
@@ -29,7 +29,7 @@
 
 #include "config.h"
 
-#if !defined(WITH_STATIC_CLASSPATH)
+#if defined(ENABLE_LTDL) && defined(HAVE_LTDL_H)
 # include <ltdl.h>
 #endif
 
@@ -113,23 +113,19 @@ s4 _Jv_java_lang_Runtime_loadLibrary(JNIEnv *env, java_lang_String *libname, jav
 s4 _Jv_java_lang_Runtime_loadLibrary(java_lang_String *libname, java_objectheader *cl)
 #endif
 {
-#if !defined(WITH_STATIC_CLASSPATH)
+#if defined(ENABLE_LTDL)
        utf               *name;
        lt_dlhandle        handle;
 # if defined(ENABLE_JNI)
        lt_ptr             onload;
        s4                 version;
 # endif
-#endif
 
        if (libname == NULL) {
                exceptions_throw_nullpointerexception();
                return 0;
        }
 
-#if defined(WITH_STATIC_CLASSPATH)
-       return 1;
-#else /* defined(WITH_STATIC_CLASSPATH) */
        name = javastring_toutf((java_objectheader *) libname, false);
 
        /* is the library already loaded? */
@@ -174,7 +170,13 @@ s4 _Jv_java_lang_Runtime_loadLibrary(java_lang_String *libname, java_objectheade
        native_library_add(name, cl, handle);
 
        return 1;
-#endif /* defined(WITH_STATIC_CLASSPATH) */
+#else
+       vm_abort("_Jv_java_lang_Runtime_loadLibrary: not available");
+
+       /* keep compiler happy */
+
+       return 0;
+#endif
 }
 
 
index 8854705b27dbed7ba68ed7c288b4498821b08ecc..78c21afc2e9665173e33f04742b250120266b00c 100644 (file)
@@ -66,6 +66,7 @@
 static JNINativeMethod methods[] = {
        { "registerNatives",        "()V",                                                        (void *) (intptr_t) &Java_sun_misc_Unsafe_registerNatives                },
        { "getInt",                 "(Ljava/lang/Object;J)I",                                     (void *) (intptr_t) &Java_sun_misc_Unsafe_getInt__Ljava_lang_Object_2J   },
+       { "putObject",              "(Ljava/lang/Object;JLjava/lang/Object;)V",                   (void *) (intptr_t) &Java_sun_misc_Unsafe_putObject                      },
        { "getBoolean",             "(Ljava/lang/Object;J)Z",                                     (void *) (intptr_t) &Java_sun_misc_Unsafe_getBoolean                     },
        { "putBoolean",             "(Ljava/lang/Object;JZ)V",                                    (void *) (intptr_t) &Java_sun_misc_Unsafe_putBoolean                     },
        { "getByte",                "(Ljava/lang/Object;J)B",                                     (void *) (intptr_t) &Java_sun_misc_Unsafe_getByte__Ljava_lang_Object_2J  },
@@ -91,6 +92,8 @@ static JNINativeMethod methods[] = {
        { "compareAndSwapLong",     "(Ljava/lang/Object;JJJ)Z",                                   (void *) (intptr_t) &Java_sun_misc_Unsafe_compareAndSwapLong             },
        { "getObjectVolatile",      "(Ljava/lang/Object;J)Ljava/lang/Object;",                    (void *) (intptr_t) &Java_sun_misc_Unsafe_getObjectVolatile              },
        { "getIntVolatile",         "(Ljava/lang/Object;J)I",                                     (void *) (intptr_t) &Java_sun_misc_Unsafe_getIntVolatile                 },
+       { "unpark",                 "(Ljava/lang/Object;)V",                                      (void *) (intptr_t) &Java_sun_misc_Unsafe_unpark                         },
+       { "park",                   "(ZJ)V",                                                      (void *) (intptr_t) &Java_sun_misc_Unsafe_park                           },
 };
 
 
@@ -141,6 +144,21 @@ JNIEXPORT int32_t JNICALL Java_sun_misc_Unsafe_getInt__Ljava_lang_Object_2J(JNIE
 }
 
 
+/*
+ * Class:     sun/misc/Unsafe
+ * Method:    putObject
+ * Signature: (Ljava/lang/Object;JLjava/lang/Object;)V
+ */
+JNIEXPORT void JNICALL Java_sun_misc_Unsafe_putObject(JNIEnv *env, sun_misc_Unsafe *this, java_lang_Object *o, int64_t offset, java_lang_Object *x)
+{
+       void **p;
+
+       p = (void **) (((uint8_t *) o) + offset);
+
+       *p = (void *) x;
+}
+
+
 /*
  * Class:     sun/misc/Unsafe
  * Method:    getBoolean
@@ -601,6 +619,28 @@ JNIEXPORT int32_t JNICALL Java_sun_misc_Unsafe_getIntVolatile(JNIEnv *env, sun_m
 }
 
 
+/*
+ * Class:     sun/misc/Unsafe
+ * Method:    unpark
+ * Signature: (Ljava/lang/Object;)V
+ */
+JNIEXPORT void JNICALL Java_sun_misc_Unsafe_unpark(JNIEnv *env, sun_misc_Unsafe *this, java_lang_Object *thread)
+{
+       /* XXX IMPLEMENT ME */
+}
+
+
+/*
+ * Class:     sun/misc/Unsafe
+ * Method:    park
+ * Signature: (ZJ)V
+ */
+JNIEXPORT void JNICALL Java_sun_misc_Unsafe_park(JNIEnv *env, sun_misc_Unsafe *this, int32_t isAbsolute, int64_t time)
+{
+       /* XXX IMPLEMENT ME */
+}
+
+
 /*
  * These are local overrides for various environment variables in Emacs.
  * Please do not remove this and leave it at the end of the file, where
index bd776f0f2c72a1b5e5c9291308b8bd40b38855a0..8eff8b11f240389dcaae64d492e0408eb06fb1ea 100644 (file)
@@ -28,7 +28,7 @@
    calls instead of machine instructions, using the C calling
    convention.
 
-   $Id: builtin.c 8123 2007-06-20 23:50:55Z michi $
+   $Id: builtin.c 8179 2007-07-05 11:21:08Z michi $
 
 */
 
@@ -71,7 +71,6 @@
 #include "vm/stringlocal.h"
 
 #include "vm/jit/asmpart.h"
-#include "vm/jit/patcher.h"
 
 #include "vmcore/class.h"
 #include "vmcore/loader.h"
@@ -2505,7 +2504,7 @@ s4 builtin_f2i(float a)
 #endif /* !(SUPPORT_FLOAT && SUPPORT_F2I) || defined(ENABLE_INTRP) || defined(DISABLE_GC) */
 
 
-#if !(SUPPORT_FLOAT && SUPPORT_LONG && SUPPORT_F2L)
+#if !(SUPPORT_FLOAT && SUPPORT_LONG && SUPPORT_F2L) || defined(DISABLE_GC)
 s8 builtin_f2l(float a)
 {
        s8 l;
@@ -2555,7 +2554,7 @@ s4 builtin_d2i(double a)
 #endif /* !(SUPPORT_DOUBLE && SUPPORT_D2I) || defined(ENABLE_INTRP) || defined(DISABLE_GC) */
 
 
-#if !(SUPPORT_DOUBLE && SUPPORT_LONG && SUPPORT_D2L)
+#if !(SUPPORT_DOUBLE && SUPPORT_LONG && SUPPORT_D2L) || defined(DISABLE_GC)
 s8 builtin_d2l(double a)
 {
        double d;
index 981240d4fd113ac81311790f588619c7260ec9b8..51cb6ce9596ca00c6e37c28c310565768b3c0598 100644 (file)
@@ -22,7 +22,7 @@
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
    02110-1301, USA.
 
-   $Id: exceptions.c 8123 2007-06-20 23:50:55Z michi $
+   $Id: exceptions.c 8178 2007-07-05 11:13:20Z michi $
 
 */
 
@@ -64,6 +64,7 @@
 #include "vm/jit/disass.h"
 #include "vm/jit/jit.h"
 #include "vm/jit/methodheader.h"
+#include "vm/jit/patcher-common.h"
 #include "vm/jit/stacktrace.h"
 
 #include "vmcore/class.h"
@@ -91,6 +92,10 @@ java_objectheader *_no_threads_exceptionptr = NULL;
 
 bool exceptions_init(void)
 {
+#if !(defined(__ARM__) && defined(__LINUX__))
+       /* On arm-linux the first memory page can't be mmap'ed, as it
+          contains the exception vectors. */
+
        int pagesize;
 
        /* mmap a memory page at address 0x0, so our hardware-exceptions
@@ -99,11 +104,12 @@ bool exceptions_init(void)
        pagesize = getpagesize();
 
        (void) memory_mmap_anon(NULL, pagesize, PROT_NONE, MAP_PRIVATE | MAP_FIXED);
+#endif
 
        /* check if we get into trouble with our hardware-exceptions */
 
-       if (OFFSET(java_bytearray, data) <= EXCEPTION_HARDWARE_PATCHER)
-               vm_abort("signal_init: array-data offset is less or equal the maximum hardware-exception displacement: %d <= %d", OFFSET(java_bytearray, data), EXCEPTION_HARDWARE_PATCHER);
+       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);
 
        /* java/lang/Throwable */
 
@@ -1726,16 +1732,15 @@ java_objectheader *exceptions_fillinstacktrace(void)
 
 *******************************************************************************/
 
-java_objectheader *exceptions_new_hardware_exception(u1 *pv, u1 *sp, u1 *ra, u1 *xpc, s4 type, ptrint val)
+java_objectheader *exceptions_new_hardware_exception(u1 *pv, u1 *sp, u1 *ra, u1 *xpc, s4 type, ptrint val, stackframeinfo *sfi)
 {
-       stackframeinfo     sfi;
        java_objectheader *e;
        java_objectheader *o;
        s4                 index;
 
        /* create stackframeinfo */
 
-       stacktrace_create_extern_stackframeinfo(&sfi, pv, sp, ra, xpc);
+       stacktrace_create_extern_stackframeinfo(sfi, pv, sp, ra, xpc);
 
        switch (type) {
        case EXCEPTION_HARDWARE_NULLPOINTER:
@@ -1760,6 +1765,10 @@ java_objectheader *exceptions_new_hardware_exception(u1 *pv, u1 *sp, u1 *ra, u1
                e = exceptions_fillinstacktrace();
                break;
 
+       case EXCEPTION_HARDWARE_PATCHER:
+               e = patcher_handler(xpc);
+               break;
+
        default:
                /* let's try to get a backtrace */
 
@@ -1789,7 +1798,7 @@ java_objectheader *exceptions_new_hardware_exception(u1 *pv, u1 *sp, u1 *ra, u1
 
        /* remove stackframeinfo */
 
-       stacktrace_remove_stackframeinfo(&sfi);
+       stacktrace_remove_stackframeinfo(sfi);
 
        /* return the exception object */
 
index e9fc1e6db69a778e161777ecb372ac3b5b3e0f0f..9b7968307139866905f9ef81b22c4d9cf724e198 100644 (file)
@@ -22,7 +22,7 @@
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
    02110-1301, USA.
 
-   $Id: exceptions.h 8123 2007-06-20 23:50:55Z michi $
+   $Id: exceptions.h 8178 2007-07-05 11:13:20Z michi $
 
 */
 
@@ -37,6 +37,8 @@
 
 #include "vm/global.h"
 
+#include "vm/jit/stacktrace.h"
+
 #include "vmcore/references.h"
 #include "vmcore/method.h"
 
@@ -51,7 +53,7 @@
    8-byte boundaries, since normal loads could have such offsets with
    a base of NULL which should result in a NullPointerException.
 
-   NOTE: In signal_init() we have a check whether the offset of
+   NOTE: In exceptions_init() we have a check whether the offset of
    java_objectheader.data[0] is greater than the largest displacement
    defined below.  Otherwise normal array loads/stores could trigger
    an exception.
@@ -65,6 +67,9 @@
 
 #define EXCEPTION_HARDWARE_EXCEPTION                5
 #define EXCEPTION_HARDWARE_PATCHER                  6
+#define EXCEPTION_HARDWARE_COMPILER                 7
+
+#define EXCEPTION_HARDWARE_LARGEST                  7
 
 
 /* function prototypes ********************************************************/
@@ -133,7 +138,7 @@ void exceptions_classnotfoundexception_to_noclassdeffounderror(void);
 
 java_objectheader *exceptions_fillinstacktrace(void);
 
-java_objectheader *exceptions_new_hardware_exception(u1 *pv, u1 *sp, u1 *ra, u1 *xpc, s4 type, ptrint val);
+java_objectheader *exceptions_new_hardware_exception(u1 *pv, u1 *sp, u1 *ra, u1 *xpc, s4 type, ptrint val, stackframeinfo *sfi);
 
 void exceptions_print_exception(java_objectheader *xptr);
 void exceptions_print_current_exception(void);
index cc62ecce12c24ec64d1722547f947ffb3a508a14..6cee78a254626f7b9843d4372d9699fb1509a887 100644 (file)
@@ -22,7 +22,7 @@
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
    02110-1301, USA.
 
-   $Id: global.h 8123 2007-06-20 23:50:55Z michi $
+   $Id: global.h 8179 2007-07-05 11:21:08Z michi $
 
 */
 
@@ -175,10 +175,13 @@ typedef struct java_objectarray java_objectarray;
 #define ACC_CLASS_REFLECT_MASK      0x0000ffff/* flags reported by reflection */
 
 #define ACC_CLASS_PRIMITIVE         0x00010000/* class is a primitive class   */
+
 #define ACC_CLASS_HAS_POINTERS      0x00020000/* instance contains pointers   */
-#define ACC_CLASS_SOFT_REFERENCE    0x00040000
-#define ACC_CLASS_WEAK_REFERENCE    0x00080000
-#define ACC_CLASS_PHANTOM_REFERENCE 0x00100000
+
+#define ACC_CLASS_REFERENCE_MASK    0x001c0000
+#define ACC_CLASS_REFERENCE_SOFT    0x00040000
+#define ACC_CLASS_REFERENCE_WEAK    0x00080000
+#define ACC_CLASS_REFERENCE_PHANTOM 0x00100000
 
 
 /* special flags used in methodinfo *******************************************/
index 16f1664b9cc94b35ff798d4956dfaee69e8d46fc..bd8275b91f003ad23ae2aaf65d54e6ff210e439a 100644 (file)
@@ -22,7 +22,7 @@
 ## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
 ## 02110-1301, USA.
 ##
-## $Id: Makefile.am 7786 2007-04-21 12:37:47Z edwin $
+## $Id: Makefile.am 8145 2007-06-27 08:54:10Z michi $
 
 ## Process this file with automake to produce Makefile.in
 
@@ -159,6 +159,8 @@ libjit_la_SOURCES = \
        jit.h \
        parse.c \
        parse.h \
+       patcher-common.c \
+       patcher-common.h \
        $(RECOMPILE_SOURCES) \
        $(REG_SOURCES) \
        $(REPLACE_SOURCES) \
index f53bbc457e906b34ab8c3c859bb44bdd586dea11..ccd99ea2940e4c7f5fbf14401da5e5a491acd50a 100644 (file)
@@ -22,7 +22,7 @@
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
    02110-1301, USA.
 
-   $Id: md-os.c 7955 2007-05-23 18:05:26Z twisti $
+   $Id: md-os.c 8178 2007-07-05 11:13:20Z michi $
 
 */
 
@@ -57,6 +57,7 @@
 
 void md_signal_handler_sigsegv(int sig, siginfo_t *siginfo, void *_p)
 {
+       stackframeinfo     sfi;
        ucontext_t        *_uc;
        mcontext_t        *_mc;
        u1                *pv;
@@ -107,7 +108,7 @@ void md_signal_handler_sigsegv(int sig, siginfo_t *siginfo, void *_p)
 
        /* generate appropriate exception */
 
-       e = exceptions_new_hardware_exception(pv, sp, ra, xpc, type, val);
+       e = exceptions_new_hardware_exception(pv, sp, ra, xpc, type, val, &sfi);
 
        /* set registers */
 
index 99e16a9f3ea7ead2887203a86e5a1eebc3b8f97e..68c77517d0f34be9ac08822e1289cc86b4286aa9 100644 (file)
@@ -22,7 +22,7 @@
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
    02110-1301, USA.
 
-   $Id: asmpart.S 8127 2007-06-21 11:55:56Z michi $
+   $Id: asmpart.S 8160 2007-06-28 01:52:19Z michi $
 
 */
 
@@ -57,8 +57,6 @@
 
        .globl asm_abstractmethoderror
 
-       .globl asm_patcher_wrapper
-
        .globl asm_cacheflush
 
        .globl asm_getclassvalues_atomic
@@ -304,59 +302,6 @@ asm_handle_exception_not_catched:
        b     asm_handle_exception_loop
 
 
-/* asm_patcher_wrapper *********************************************************
-*                                                                              *
-*   TODO: document me                                                          *
-*                                                                              *
-*   Stack layout when calling patcher function:                                *
-*    28   empty because stack needs to be aligned                              *
-*    24   saved REG_ITMP3, should be restored                ( -8)             *
-*    20   data segment displacement from load instructions   (-12)             *
-*    16   return address into JIT code (patch position)      (-16)             *
-*    12   pointer to virtual java_objectheader                                 *
-*     8   machine code (which is patched back later)                           *
-*   [ 8   result of patcher function (indicates exception)  ]                  *
-*     4   unresolved class/method/field reference                              *
-*   [ 0   patcher function pointer to call                  ]                  *
-*     0   saved IP of caller (caller needs it!)                                *
-*                                                                              *
-*******************************************************************************/
-
-#define PATCHSTACKSIZE 8*4
-
-asm_patcher_wrapper:
-       mov   itmp3, sp                     /* preserve original SP in ITMP3      */
-
-       SAVE_ARGUMENT_REGISTERS_IP          /* save our argument registers & LR   */
-       SAVE_FLOAT_REGISTERS                /* save our float registers here      */
-
-       mov   a0, itmp3                     /* pass SP of patcher stub            */
-       mov   a1, ip                        /* pass PV                            */
-       mov   a2, lr                        /* pass RA (correct for leafs)        */
-       bl    patcher_wrapper
-       mov   itmp3, res1                   /* save return value                  */
-
-       RESTORE_FLOAT_REGISTERS             /* restore our float registers here   */
-       RESTORE_ARGUMENT_REGISTERS_IP       /* load our argument registers & LR   */
-
-       add   sp, sp, #PATCHSTACKSIZE       /* remove patcher stack frame         */
-
-       tst   itmp3, itmp3                  /* check for an exception             */
-       bne   L_asm_patcher_wrapper_exception
-
-       ldr   itmp3, [sp, #-8]              /* restore ITMP3 for calling method   */
-       ldr   pc, [sp, #-16]                /* jump to new patched code           */
-
-L_asm_patcher_wrapper_exception:
-       mov   xptr, itmp3                   /* get exception                      */
-       ldr   xpc, [sp, #-16]               /* RA is xpc                          */
-
-       /* Note: A normal branch instruction could modify the PV here,            */
-       /*       so we use this construct instead.                                */
-       ldr   pc, [pc, #-4]
-       .word asm_handle_exception
-
-
 /* asm_abstractmethoderror *****************************************************
 
    Creates and throws an AbstractMethodError.
index 7b9c15d1f560ca1e1c7e681805b48a27a67e2296..81e53ca561902761245b4da97bf37cef56c2d93b 100644 (file)
@@ -22,7 +22,7 @@
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
    02110-1301, USA.
 
-   $Id: codegen.c 8127 2007-06-21 11:55:56Z michi $
+   $Id: codegen.c 8160 2007-06-28 01:52:19Z michi $
 
 */
 
@@ -58,7 +58,7 @@
 #include "vm/jit/md.h"
 #include "vm/jit/methodheader.h"
 #include "vm/jit/parse.h"
-#include "vm/jit/patcher.h"
+#include "vm/jit/patcher-common.h"
 #include "vm/jit/reg.h"
 
 #if defined(ENABLE_LSRA)
@@ -408,9 +408,8 @@ bool codegen_emit(jitdata *jd)
                        if (INSTRUCTION_IS_UNRESOLVED(iptr)) {
                                disp = dseg_add_unique_address(cd, NULL);
 
-                               codegen_addpatchref(cd, PATCHER_aconst,
-                                                   iptr->sx.val.c.ref,
-                                                                       disp);
+                               patcher_add_patch_ref(jd, PATCHER_resolve_classref_to_classinfo,
+                                                   iptr->sx.val.c.ref, disp);
 
                                if (opt_showdisassemble)
                                        M_NOP;
@@ -1374,7 +1373,7 @@ bool codegen_emit(jitdata *jd)
 
                                disp = dseg_add_unique_address(cd, NULL);
 
-                               codegen_addpatchref(cd, PATCHER_get_putstatic, uf, disp);
+                               patcher_add_patch_ref(jd, PATCHER_get_putstatic, uf, disp);
 
                                if (opt_showdisassemble)
                                        M_NOP;
@@ -1385,7 +1384,8 @@ bool codegen_emit(jitdata *jd)
                                fieldtype = fi->type;
 
                                if (!CLASS_IS_OR_ALMOST_INITIALIZED(fi->class)) {
-                                       codegen_addpatchref(cd, PATCHER_clinit, fi->class, 0);
+                                       patcher_add_patch_ref(jd, PATCHER_initialize_class,
+                                                           fi->class, 0);
 
                                        if (opt_showdisassemble)
                                                M_NOP;
@@ -1436,7 +1436,7 @@ bool codegen_emit(jitdata *jd)
 
                                disp = dseg_add_unique_address(cd, NULL);
 
-                               codegen_addpatchref(cd, PATCHER_get_putstatic, uf, disp);
+                               patcher_add_patch_ref(jd, PATCHER_get_putstatic, uf, disp);
 
                                if (opt_showdisassemble)
                                        M_NOP;
@@ -1447,7 +1447,8 @@ bool codegen_emit(jitdata *jd)
                                fieldtype = fi->type;
 
                                if (!CLASS_IS_OR_ALMOST_INITIALIZED(fi->class)) {
-                                       codegen_addpatchref(cd, PATCHER_clinit, fi->class, 0);
+                                       patcher_add_patch_ref(jd, PATCHER_initialize_class,
+                                                           fi->class, 0);
 
                                        if (opt_showdisassemble)
                                                M_NOP;
@@ -1515,7 +1516,7 @@ bool codegen_emit(jitdata *jd)
                        if (INSTRUCTION_IS_UNRESOLVED(iptr)) {
                                unresolved_field *uf = iptr->sx.s23.s3.uf;
 
-                               codegen_addpatchref(cd, PATCHER_get_putfield, uf, 0);
+                               patcher_add_patch_ref(jd, PATCHER_get_putfield, uf, 0);
 
                                if (opt_showdisassemble)
                                        M_NOP;
@@ -1605,7 +1606,7 @@ bool codegen_emit(jitdata *jd)
                        if (INSTRUCTION_IS_UNRESOLVED(iptr)) {
                                unresolved_field *uf = iptr->sx.s23.s3.uf;
 
-                               codegen_addpatchref(cd, PATCHER_get_putfield, uf, 0);
+                               patcher_add_patch_ref(jd, PATCHER_get_putfield, uf, 0);
 
                                if (opt_showdisassemble)
                                        M_NOP;
@@ -1648,7 +1649,7 @@ bool codegen_emit(jitdata *jd)
                        s1 = emit_load_s1(jd, iptr, REG_ITMP1);
                        M_INTMOVE(s1, REG_ITMP1_XPTR);
                        if (INSTRUCTION_IS_UNRESOLVED(iptr)) {
-                               codegen_addpatchref(cd, PATCHER_athrow_areturn,
+                               patcher_add_patch_ref(jd, PATCHER_resolve_class,
                                                                        iptr->sx.s23.s2.uc, 0);
 
                                if (opt_showdisassemble)
@@ -2100,7 +2101,7 @@ bool codegen_emit(jitdata *jd)
                        s1 = emit_load_s1(jd, iptr, REG_RESULT);
                        M_INTMOVE(s1, REG_RESULT);
                        if (INSTRUCTION_IS_UNRESOLVED(iptr)) {
-                               codegen_addpatchref(cd, PATCHER_athrow_areturn,
+                               patcher_add_patch_ref(jd, PATCHER_resolve_class,
                                                                        iptr->sx.s23.s2.uc, 0);
 
                                if (opt_showdisassemble)
@@ -2278,7 +2279,7 @@ bool codegen_emit(jitdata *jd)
                                if (lm == NULL) {
                                        disp = dseg_add_unique_address(cd, NULL);
 
-                                       codegen_addpatchref(cd, PATCHER_invokestatic_special,
+                                       patcher_add_patch_ref(jd, PATCHER_invokestatic_special,
                                                                                um, disp);
 
                                        if (opt_showdisassemble)
@@ -2299,7 +2300,7 @@ bool codegen_emit(jitdata *jd)
 
                        case ICMD_INVOKEVIRTUAL:
                                if (lm == NULL) {
-                                       codegen_addpatchref(cd, PATCHER_invokevirtual, um, 0);
+                                       patcher_add_patch_ref(jd, PATCHER_invokevirtual, um, 0);
 
                                        if (opt_showdisassemble)
                                                M_NOP;
@@ -2325,7 +2326,7 @@ bool codegen_emit(jitdata *jd)
 
                        case ICMD_INVOKEINTERFACE:
                                if (lm == NULL) {
-                                       codegen_addpatchref(cd, PATCHER_invokeinterface, um, 0);
+                                       patcher_add_patch_ref(jd, PATCHER_invokeinterface, um, 0);
 
                                        if (opt_showdisassemble)
                                                M_NOP;
@@ -2432,7 +2433,7 @@ bool codegen_emit(jitdata *jd)
                                emit_label_beq(cd, BRANCH_LABEL_1);
 
                                disp = dseg_add_unique_s4(cd, 0); /* super->flags */
-                               codegen_addpatchref(cd, PATCHER_checkcast_instanceof_flags,
+                               patcher_add_patch_ref(jd, PATCHER_resolve_classref_to_flags,
                                                    iptr->sx.s23.s3.c.ref, disp);
 
                                if (opt_showdisassemble)
@@ -2452,8 +2453,7 @@ bool codegen_emit(jitdata *jd)
                                        disp = dseg_add_unique_s4(cd, superindex);
                                }
                                if (super == NULL) {
-                                       codegen_addpatchref(cd,
-                                                           PATCHER_checkcast_instanceof_interface,
+                                       patcher_add_patch_ref(jd, PATCHER_resolve_classref_to_index,
                                                            iptr->sx.s23.s3.c.ref, disp);
 
                                        if (opt_showdisassemble)
@@ -2519,7 +2519,7 @@ bool codegen_emit(jitdata *jd)
 
                                        disp = dseg_add_unique_address(cd, NULL);
 
-                                       codegen_addpatchref(cd, PATCHER_checkcast_instanceof_class,
+                                       patcher_add_patch_ref(jd, PATCHER_resolve_classref_to_vftbl,
                                                            iptr->sx.s23.s3.c.ref,
                                                                                disp);
 
@@ -2569,7 +2569,7 @@ bool codegen_emit(jitdata *jd)
                                if (INSTRUCTION_IS_UNRESOLVED(iptr)) {
                                        disp = dseg_add_unique_address(cd, NULL);
 
-                                       codegen_addpatchref(cd, PATCHER_builtin_arraycheckcast,
+                                       patcher_add_patch_ref(jd, PATCHER_resolve_classref_to_classinfo,
                                                                                iptr->sx.s23.s3.c.ref,
                                                                                disp);
 
@@ -2633,7 +2633,7 @@ bool codegen_emit(jitdata *jd)
                                emit_label_beq(cd, BRANCH_LABEL_1);
 
                                disp = dseg_add_unique_s4(cd, 0); /* super->flags */
-                               codegen_addpatchref(cd, PATCHER_checkcast_instanceof_flags,
+                               patcher_add_patch_ref(jd, PATCHER_resolve_classref_to_flags,
                                                    iptr->sx.s23.s3.c.ref, disp);
 
                                if (opt_showdisassemble)
@@ -2658,8 +2658,7 @@ bool codegen_emit(jitdata *jd)
                                        if (d == REG_ITMP2)
                                                M_EOR(d, d, d);
 
-                                       codegen_addpatchref(cd,
-                                                           PATCHER_checkcast_instanceof_interface,
+                                       patcher_add_patch_ref(jd, PATCHER_resolve_classref_to_index,
                                                            iptr->sx.s23.s3.c.ref, disp);
 
                                        if (opt_showdisassemble)
@@ -2731,9 +2730,8 @@ bool codegen_emit(jitdata *jd)
 
                                        disp = dseg_add_unique_address(cd, NULL);
 
-                                       codegen_addpatchref(cd, PATCHER_checkcast_instanceof_class,
-                                                           iptr->sx.s23.s3.c.ref,
-                                                                               disp);
+                                       patcher_add_patch_ref(jd, PATCHER_resolve_classref_to_vftbl,
+                                                           iptr->sx.s23.s3.c.ref, disp);
 
                                        if (opt_showdisassemble)
                                                M_NOP;
@@ -2806,7 +2804,7 @@ bool codegen_emit(jitdata *jd)
                        if (INSTRUCTION_IS_UNRESOLVED(iptr)) {
                                disp = dseg_add_unique_address(cd, NULL);
 
-                               codegen_addpatchref(cd, PATCHER_builtin_multianewarray,
+                               patcher_add_patch_ref(jd, PATCHER_resolve_classref_to_classinfo,
                                                                        iptr->sx.s23.s3.c.ref, disp);
 
                                if (opt_showdisassemble)
@@ -2865,7 +2863,7 @@ bool codegen_emit(jitdata *jd)
 
        /* generate stubs */
 
-       emit_patcher_stubs(jd);
+       emit_patcher_traps(jd);
 
        /* everything's ok */
 
@@ -2963,7 +2961,7 @@ void codegen_emit_stub_native(jitdata *jd, methoddesc *nmd, functionptr f)
 
 #if !defined(WITH_STATIC_CLASSPATH)
        if (f == NULL) {
-               codegen_addpatchref(cd, PATCHER_resolve_native, m, funcdisp);
+               patcher_add_patch_ref(jd, PATCHER_resolve_native_function, m, funcdisp);
 
                if (opt_showdisassemble)
                        M_NOP;
@@ -3124,7 +3122,7 @@ void codegen_emit_stub_native(jitdata *jd, methoddesc *nmd, functionptr f)
 
        /* generate patcher stubs */
 
-       emit_patcher_stubs(jd);
+       emit_patcher_traps(jd);
 }
 
 
index 3c72b7621312389dabbea0e14853d1f45336ae5d..073281110c63fea192c890827f98209327e26b14 100644 (file)
@@ -22,7 +22,7 @@
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
    02110-1301, USA.
 
-   $Id: codegen.h 7929 2007-05-21 11:45:31Z michi $
+   $Id: codegen.h 8160 2007-06-28 01:52:19Z michi $
 
 */
 
@@ -606,6 +606,7 @@ void asm_debug_intern(int a1, int a2, int a3, int a4);
 #define M_DMOV(a,b)        M_MVFD(b,a)
 
 
+#define M_TRAP(a,i)        M_UNDEFINED(UNCOND,i,a);
 #define M_TRAPEQ(a,i)      M_UNDEFINED(COND_EQ,i,a);
 #define M_TRAPLE(a,i)      M_UNDEFINED(COND_LE,i,a);
 #define M_TRAPHI(a,i)      M_UNDEFINED(COND_HI,i,a);
index fe099ad4d37ee0bd4b55c5e87c372baa7c688737..ae658a566124167cc4cece09f012133f042f1c6d 100644 (file)
@@ -49,6 +49,7 @@
 #include "vm/jit/asmpart.h"
 #include "vm/jit/emit-common.h"
 #include "vm/jit/jit.h"
+#include "vm/jit/patcher-common.h"
 #include "vm/jit/replace.h"
 
 #include "toolbox/logging.h" /* XXX for debugging only */
@@ -560,128 +561,45 @@ void emit_exception_check(codegendata *cd, instruction *iptr)
 }
 
 
-/* emit_patcher_stubs **********************************************************
+/* emit_patcher_traps **********************************************************
 
-   Generates the code for the patcher stubs.
+   Generates the code for the patcher traps.
 
 *******************************************************************************/
 
-void emit_patcher_stubs(jitdata *jd)
+void emit_patcher_traps(jitdata *jd)
 {
        codegendata *cd;
-       patchref    *pref;
-       u4           mcode;
+       codeinfo    *code;
+       patchref_t  *pr;
        u1          *savedmcodeptr;
        u1          *tmpmcodeptr;
-       s4           targetdisp;
-       s4           disp;
 
        /* get required compiler data */
 
-       cd = jd->cd;
-
-       /* generate patcher stub call code */
-
-       targetdisp = 0;
+       cd   = jd->cd;
+       code = jd->code;
 
-       for (pref = cd->patchrefs; pref != NULL; pref = pref->next) {
-               /* check code segment size */
+       /* generate patcher traps code */
 
-               MCODECHECK(100);
+       for (pr = list_first_unsynced(code->patchers); pr != NULL; pr = list_next_unsynced(code->patchers, pr)) {
 
                /* Get machine code which is patched back in later. The
-                  call is 1 instruction word long. */
+                  trap is 1 instruction word long. */
 
-               tmpmcodeptr = (u1 *) (cd->mcodebase + pref->branchpos);
+               tmpmcodeptr = (u1 *) (cd->mcodebase + pr->mpc);
 
-               mcode = *((u4 *) tmpmcodeptr);
+               pr->mcode = *((u4 *) tmpmcodeptr);
 
-               /* Patch in the call to call the following code (done at
+               /* Patch in the trap to call the signal handler (done at
                   compile time). */
 
                savedmcodeptr = cd->mcodeptr;   /* save current mcodeptr              */
                cd->mcodeptr  = tmpmcodeptr;    /* set mcodeptr to patch position     */
 
-               disp = ((u4 *) savedmcodeptr) - (((u4 *) tmpmcodeptr) + 2);
-               M_B(disp);
+               M_TRAP(0, EXCEPTION_HARDWARE_PATCHER);
 
                cd->mcodeptr = savedmcodeptr;   /* restore the current mcodeptr       */
-
-               /* create stack frame (align stack to 8-byte) */
-
-               M_SUB_IMM(REG_SP, REG_SP, 8 * 4);
-
-               /* save itmp3 onto stack */
-
-               M_STR_INTERN(REG_ITMP3, REG_SP, 6 * 4);
-
-               /* calculate return address and move it onto stack */
-               /* ATTENTION: we can not use BL to branch to patcher stub,        */
-               /* ATTENTION: because we need to preserve LR for leaf methods     */
-
-               disp = (s4) (((u4 *) cd->mcodeptr) - (((u4 *) tmpmcodeptr) + 1) + 2);
-
-               M_SUB_IMM_EXT_MUL4(REG_ITMP3, REG_PC, disp);
-               M_STR_INTERN(REG_ITMP3, REG_SP, 4 * 4);
-
-               /* move pointer to java_objectheader onto stack */
-
-#if defined(ENABLE_THREADS)
-               /* order reversed because of data segment layout */
-
-               (void) dseg_add_unique_address(cd, NULL);           /* flcword    */
-               (void) dseg_add_unique_address(cd, lock_get_initial_lock_word());
-               disp = dseg_add_unique_address(cd, NULL);           /* vftbl      */
-
-               M_SUB_IMM_EXT_MUL4(REG_ITMP3, REG_PV, -disp / 4);
-               M_STR_INTERN(REG_ITMP3, REG_SP, 3 * 4);
-#else
-               M_EOR(REG_ITMP3, REG_ITMP3, REG_ITMP3);
-               M_STR_INTERN(REG_ITMP3, REG_SP, 3 * 4);
-#endif
-
-               /* move machine code onto stack */
-
-               disp = dseg_add_unique_s4(cd, mcode);
-               M_DSEG_LOAD(REG_ITMP3, disp);
-               M_STR_INTERN(REG_ITMP3, REG_SP, 2 * 4);
-
-               /* move class/method/field reference onto stack */
-
-               disp = dseg_add_unique_address(cd, pref->ref);
-               M_DSEG_LOAD(REG_ITMP3, disp);
-               M_STR_INTERN(REG_ITMP3, REG_SP, 1 * 4);
-
-               /* move data segment displacement onto stack */
-
-               disp = dseg_add_unique_s4(cd, pref->disp);
-               M_DSEG_LOAD(REG_ITMP3, disp);
-               M_STR_INTERN(REG_ITMP3, REG_SP, 5 * 4);
-
-               /* move patcher function pointer onto stack */
-
-               disp = dseg_add_functionptr(cd, pref->patcher);
-               M_DSEG_LOAD(REG_ITMP3, disp);
-               M_STR_INTERN(REG_ITMP3, REG_SP, 0 * 4);
-
-               /* finally call the patcher via asm_patcher_wrapper */
-               /* ATTENTION: don't use REG_PV here, because some patchers need it */
-
-               if (targetdisp == 0) {
-                       targetdisp = ((u4 *) cd->mcodeptr) - ((u4 *) cd->mcodebase);
-
-                       disp = dseg_add_functionptr(cd, asm_patcher_wrapper);
-                       /*M_DSEG_BRANCH_NOLINK(REG_PC, REG_PV, a);*/
-                       /* TODO: this is only a hack */
-                       M_DSEG_LOAD(REG_ITMP3, disp);
-                       M_MOV(REG_PC, REG_ITMP3);
-               }
-               else {
-                       disp = (((u4 *) cd->mcodebase) + targetdisp) -
-                               (((u4 *) cd->mcodeptr) + 2);
-
-                       M_B(disp);
-               }
        }
 }
 
index c88d893b74755cc30cc08061a42407adfc0d92aa..e96cb74687adcfd7a9ddaeb646d99c1b3089c9bc 100644 (file)
@@ -71,6 +71,7 @@ typedef struct ucontext {
 
 void md_signal_handler_sigsegv(int sig, siginfo_t *siginfo, void *_p)
 {
+       stackframeinfo     sfi;
        ucontext_t        *_uc;
        scontext_t        *_sc;
        u1                *pv;
@@ -100,7 +101,6 @@ void md_signal_handler_sigsegv(int sig, siginfo_t *siginfo, void *_p)
 
        /* this is a NullPointerException */
 
-/*     addr = _mc->gregs[s1]; */
        addr = *((s4 *) _sc + OFFSET(scontext_t, arm_r0)/4 + ((mcode >> 16) & 0x0f));
        type = EXCEPTION_HARDWARE_NULLPOINTER;
        val  = 0;
@@ -110,7 +110,7 @@ void md_signal_handler_sigsegv(int sig, siginfo_t *siginfo, void *_p)
 
        /* generate appropriate exception */
 
-       o = exceptions_new_hardware_exception(pv, sp, ra, xpc, type, val);
+       o = exceptions_new_hardware_exception(pv, sp, ra, xpc, type, val, &sfi);
 
        /* set registers */
 
@@ -128,6 +128,7 @@ void md_signal_handler_sigsegv(int sig, siginfo_t *siginfo, void *_p)
 
 void md_signal_handler_sigill(int sig, siginfo_t *siginfo, void *_p)
 {
+       stackframeinfo     sfi;
        ucontext_t        *_uc;
        scontext_t        *_sc;
        u1                *pv;
@@ -164,13 +165,16 @@ void md_signal_handler_sigill(int sig, siginfo_t *siginfo, void *_p)
 
        /* generate appropriate exception */
 
-       o = exceptions_new_hardware_exception(pv, sp, ra, xpc, type, val);
+       o = exceptions_new_hardware_exception(pv, sp, ra, xpc, type, val, &sfi);
 
-       /* set registers */
+       /* set registers if we have an exception, return continue execution
+          otherwise (this is needed for patchers to work) */
 
-       _sc->arm_r10 = (ptrint) o;
-       _sc->arm_fp  = (ptrint) xpc;
-       _sc->arm_pc  = (ptrint) asm_handle_exception;
+       if (o != NULL) {
+               _sc->arm_r10 = (ptrint) o;
+               _sc->arm_fp  = (ptrint) xpc;
+               _sc->arm_pc  = (ptrint) asm_handle_exception;
+       }
 }
 
 
index 0512b75fe51274fb80e1b5d7c8b70d8ad577125e..600a553e0cd40da29262a4ccaa922a163ba8a8a1 100644 (file)
@@ -22,7 +22,7 @@
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
    02110-1301, USA.
 
-   $Id: patcher.c 7929 2007-05-21 11:45:31Z michi $
+   $Id: patcher.c 8160 2007-06-28 01:52:19Z michi $
 
 */
 
@@ -43,7 +43,7 @@
 
 #include "vm/jit/asmpart.h"
 #include "vm/jit/md.h"
-#include "vm/jit/patcher.h"
+#include "vm/jit/patcher-common.h"
 
 #include "vmcore/field.h"
 #include "vmcore/options.h"
 #include "vm/resolve.h"
 
 
+#define PATCH_BACK_ORIGINAL_MCODE \
+    *((u4 *) pr->mpc) = (u4) pr->mcode; \
+    md_icacheflush((u1 *) pr->mpc, 1 * 4);
+
 #define gen_resolveload(inst,offset) \
        assert((offset) >= -0x0fff && (offset) <= 0x0fff); \
        assert(!((inst) & 0x0fff)); \
        }
 
 
-/* patcher_wrapper *************************************************************
-
-   Wrapper for all patchers.  It also creates the stackframe info
-   structure.
-
-   If the return value of the patcher function is false, it gets the
-   exception object, clears the exception pointer and returns the
-   exception.
-
-*******************************************************************************/
-
-java_objectheader *patcher_wrapper(u1 *sp, u1 *pv, u1 *ra)
-{
-       stackframeinfo     sfi;
-       u1                *xpc;
-       java_objectheader *o;
-       u4                 mcode;
-       functionptr        f;
-       bool               result;
-       java_objectheader *e;
-
-       /* define the patcher function */
-
-       bool (*patcher_function)(u1 *);
-
-       assert(pv != NULL);
-
-       /* get stuff from the stack */
-
-       xpc = (u1 *)                *((ptrint *) (sp + 4 * 4));
-       o   = (java_objectheader *) *((ptrint *) (sp + 3 * 4));
-       f   = (functionptr)         *((ptrint *) (sp + 0 * 4));
-
-       /* calculate and set the new return address */
-
-       xpc = xpc - 1 * 4;
-
-       *((ptrint *) (sp + 4 * 4)) = (ptrint) xpc;
-
-       /* store PV into the patcher function position */
-
-       *((ptrint *) (sp + 0 * 4)) = (ptrint) pv;
-
-       /* cast the passed function to a patcher function */
-
-       patcher_function = (bool (*)(u1 *)) (ptrint) f;
-
-       /* enter a monitor on the patching position */
-
-       PATCHER_MONITORENTER;
-
-       /* create the stackframeinfo */
-
-       stacktrace_create_extern_stackframeinfo(&sfi, pv, sp + 8 * 4, ra, xpc);
-
-       /* call the proper patcher function */
-
-       result = (patcher_function)(sp);
-
-       /* remove the stackframeinfo */
-
-       stacktrace_remove_stackframeinfo(&sfi);
-
-       /* check for an error, get the exception and return it */
-
-       if (result == false) {
-               e = exceptions_get_and_clear_exception();
-
-               PATCHER_MONITOREXIT;
-
-               return e;
-       }
-
-       /* patch back original code */
-
-       mcode = *((u4 *) (sp + 2 * 4));
-
-       *((u4 *) xpc) = mcode;
-
-       /* synchronize instruction cache */
-
-       md_icacheflush(xpc, 1 * 4);
-
-       PATCHER_MARK_PATCHED_MONITOREXIT;
-
-       return NULL;
-}
-
-
 /* patcher_get_putstatic *******************************************************
 
    Machine code:
@@ -161,18 +76,16 @@ java_objectheader *patcher_wrapper(u1 *sp, u1 *pv, u1 *ra)
 
 *******************************************************************************/
 
-bool patcher_get_putstatic(u1 *sp)
+bool patcher_get_putstatic(patchref_t *pr)
 {
-       s4                disp;
        unresolved_field *uf;
-       u1               *pv;
+       u1               *datap;
        fieldinfo        *fi;
 
        /* get stuff from the stack */
 
-       disp =                      *((s4 *)     (sp + 5 * 4));
-       uf   = (unresolved_field *) *((ptrint *) (sp + 1 * 4));
-       pv   = (u1 *)               *((ptrint *) (sp + 0 * 4));
+       uf    = (unresolved_field *) pr->ref;
+       datap = (u1 *)               pr->datap;
 
        /* get the fieldinfo */
 
@@ -185,9 +98,11 @@ bool patcher_get_putstatic(u1 *sp)
                if (!initialize_class(fi->class))
                        return false;
 
+       PATCH_BACK_ORIGINAL_MCODE;
+
        /* patch the field value's address */
 
-       *((ptrint *) (pv + disp)) = (ptrint) &(fi->value);
+       *((ptrint *) datap) = (ptrint) &(fi->value);
 
        return true;
 }
@@ -202,91 +117,59 @@ bool patcher_get_putstatic(u1 *sp)
 
 *******************************************************************************/
 
-bool patcher_get_putfield(u1 *sp)
+bool patcher_get_putfield(patchref_t *pr)
 {
        u1                *ra;
        u4                 mcode;
        unresolved_field  *uf;
-       u1                *pv;
        fieldinfo         *fi;
 
        /* get stuff from the stack */
-       ra    = (u1*)                 *((ptrint *) (sp + 4 * 4));
-       mcode =                       *((u4 *)     (sp + 2 * 4));
-       uf    = (unresolved_field*)   *((ptrint *) (sp + 1 * 4));
-       pv    = (u1*)                 *((ptrint *) (sp + 0 * 4));
+       ra    = (u1*)                 pr->mpc;
+       mcode =                       pr->mcode;
+       uf    = (unresolved_field*)   pr->ref;
 
        /* get the fieldinfo */
 
        if (!(fi = resolve_field_eager(uf)))
                return false;
 
+       PATCH_BACK_ORIGINAL_MCODE;
+
        /* if we show disassembly, we have to skip the nop */
 
-       if (opt_showdisassemble) {
+       if (opt_showdisassemble)
                ra = ra + 1 * 4;
 
-               /* patch the field's offset into the instruction */
-
-               switch(fi->type) {
-               case TYPE_ADR:
-               case TYPE_INT:
-#if defined(ENABLE_SOFTFLOAT)
-               case TYPE_FLT:
-#endif
-                       assert(fi->offset <= 0x0fff);
-                       *((u4 *) (ra + 0 * 4)) |= (fi->offset & 0x0fff);
-                       break;
-
-               case TYPE_LNG:
-#if defined(ENABLE_SOFTFLOAT)
-               case TYPE_DBL:
-#endif
-                       assert((fi->offset + 4) <= 0x0fff);
-                       *((u4 *) (ra + 0 * 4)) |= ((fi->offset + 0) & 0x0fff);
-                       *((u4 *) (ra + 1 * 4)) |= ((fi->offset + 4) & 0x0fff);
-                       break;
-
-#if !defined(ENABLE_SOFTFLOAT)
-               case TYPE_FLT:
-               case TYPE_DBL:
-                       assert(fi->offset <= 0x03ff);
-                       *((u4 *) (ra + 0 * 4)) |= ((fi->offset >> 2) & 0x00ff);
-                       break;
-#endif
-               }
-       }
-       else {
-               /* patch the field's offset into the instruction stored on the
-                  stack and the next instruction in the code */
+       /* patch the field's offset into the instruction */
 
-               switch(fi->type) {
-               case TYPE_ADR:
-               case TYPE_INT:
+       switch(fi->type) {
+       case TYPE_ADR:
+       case TYPE_INT:
 #if defined(ENABLE_SOFTFLOAT)
-               case TYPE_FLT:
+       case TYPE_FLT:
 #endif
-                       assert(fi->offset <= 0x0fff);
-                       *((u4 *) (sp + 2 * 4)) |= (fi->offset & 0x0fff);
-                       break;
+               assert(fi->offset <= 0x0fff);
+               *((u4 *) (ra + 0 * 4)) |= (fi->offset & 0x0fff);
+               break;
 
-               case TYPE_LNG:
+       case TYPE_LNG:
 #if defined(ENABLE_SOFTFLOAT)
-               case TYPE_DBL:
+       case TYPE_DBL:
 #endif
-                       assert((fi->offset + 4) <= 0x0fff);
-                       *((u4 *) (sp + 2 * 4)) |= ((fi->offset + 0) & 0x0fff);
-                       *((u4 *) (ra + 1 * 4)) |= ((fi->offset + 4) & 0x0fff);
-                       break;
+               assert((fi->offset + 4) <= 0x0fff);
+               *((u4 *) (ra + 0 * 4)) |= ((fi->offset + 0) & 0x0fff);
+               *((u4 *) (ra + 1 * 4)) &= 0xfffff000;
+               *((u4 *) (ra + 1 * 4)) |= ((fi->offset + 4) & 0x0fff);
+               break;
 
 #if !defined(ENABLE_SOFTFLOAT)
-               case TYPE_FLT:
-               case TYPE_DBL:
-                       assert(fi->offset <= 0x03ff);
-                       *((u4 *) (sp + 2 * 4)) |= ((fi->offset >> 2) & 0x00ff);
-                       break;
+       case TYPE_FLT:
+       case TYPE_DBL:
+               assert(fi->offset <= 0x03ff);
+               *((u4 *) (ra + 0 * 4)) |= ((fi->offset >> 2) & 0x00ff);
+               break;
 #endif
-               }
        }
 
        /* synchronize instruction cache */
@@ -297,45 +180,15 @@ bool patcher_get_putfield(u1 *sp)
 }
 
 
-/* patcher_aconst **************************************************************
+/* patcher_resolve_classref_to_classinfo ***************************************
 
-   Machine code:
+   ACONST - Machine code:
 
    <patched call postition>
    e51cc030    ldr   r0, [ip, #-48]
 
-*******************************************************************************/
-
-bool patcher_aconst(u1 *sp)
-{
-       s4                 disp;
-       constant_classref *cr;
-       u1                *pv;
-       classinfo         *c;
-
-       /* get stuff from the stack */
-
-       disp =                       *((s4 *)     (sp + 5 * 4));
-       cr   = (constant_classref *) *((ptrint *) (sp + 1 * 4));
-       pv   = (u1 *)                *((ptrint *) (sp + 0 * 4));
-
-       /* get the classinfo */
-
-       if (!(c = resolve_classref_eager(cr)))
-               return false;
-
-       /* patch the classinfo pointer */
-
-       *((ptrint *) (pv + disp)) = (ptrint) c;
-
-       return true;
-}
-
-
-/* patcher_builtin_multianewarray **********************************************
-
-   Machine code:
-
+   MULTIANEWARRAY - Machine code:
+    
    <patched call position>
    e3a00002    mov   r0, #2  ; 0x2
    e51c1064    ldr   r1, [ip, #-100]
@@ -343,37 +196,7 @@ bool patcher_aconst(u1 *sp)
    e1a0e00f    mov   lr, pc
    e51cf068    ldr   pc, [ip, #-104]
 
-*******************************************************************************/
-
-bool patcher_builtin_multianewarray(u1 *sp)
-{
-       s4                 disp;
-       constant_classref *cr;
-       u1                *pv;
-       classinfo         *c;
-
-       /* get stuff from the stack */
-
-       disp =                       *((s4 *)     (sp + 5 * 4));
-       cr   = (constant_classref *) *((ptrint *) (sp + 1 * 4));
-       pv   = (u1 *)                *((ptrint *) (sp + 0 * 4));
-
-       /* get the classinfo */
-
-       if (!(c = resolve_classref_eager(cr)))
-               return false;
-
-       /* patch the classinfo pointer */
-
-       *((ptrint *) (pv + disp)) = (ptrint) c;
-
-       return true;
-}
-
-
-/* patcher_builtin_arraycheckcast **********************************************
-
-   Machine code:
+   ARRAYCHECKCAST - Machine code:
 
    <patched call position>
    e51c1120    ldr   r1, [ip, #-288]
@@ -382,27 +205,27 @@ bool patcher_builtin_multianewarray(u1 *sp)
 
 *******************************************************************************/
 
-bool patcher_builtin_arraycheckcast(u1 *sp)
+bool patcher_resolve_classref_to_classinfo(patchref_t *pr)
 {
-       s4                 disp;
        constant_classref *cr;
-       u1                *pv;
+       u1                *datap;
        classinfo         *c;
 
        /* get stuff from the stack */
 
-       disp =                       *((s4 *)     (sp + 5 * 4));
-       cr   = (constant_classref *) *((ptrint *) (sp + 1 * 4));
-       pv   = (u1 *)                *((ptrint *) (sp + 0 * 4));
+       cr    = (constant_classref *) pr->ref;
+       datap = (u1 *)                pr->datap;
 
        /* get the classinfo */
 
        if (!(c = resolve_classref_eager(cr)))
                return false;
 
+       PATCH_BACK_ORIGINAL_MCODE;
+
        /* patch the classinfo pointer */
 
-       *((ptrint *) (pv + disp)) = (ptrint) c;
+       *((ptrint *) datap) = (ptrint) c;
 
        return true;
 }
@@ -419,27 +242,27 @@ bool patcher_builtin_arraycheckcast(u1 *sp)
 
 ******************************************************************************/
 
-bool patcher_invokestatic_special(u1 *sp)
+bool patcher_invokestatic_special(patchref_t *pr)
 {
-       s4                 disp;
        unresolved_method *um;
-       u1                *pv;
+       u1                *datap;
        methodinfo        *m;
 
        /* get stuff from the stack */
 
-       disp  =                       *((s4 *)     (sp + 5 * 4));
-       um    = (unresolved_method*)  *((ptrint *) (sp + 1 * 4));
-       pv    = (u1*)                 *((ptrint *) (sp + 0 * 4));
+       um    = (unresolved_method*) pr->ref;
+       datap = (u1 *)               pr->datap;
 
        /* get the methodinfo */
 
        if (!(m = resolve_method_eager(um)))
                return false;
 
+       PATCH_BACK_ORIGINAL_MCODE;
+
        /* patch stubroutine */
 
-       *((ptrint *) (pv + disp)) = (ptrint) m->stubroutine;
+       *((ptrint *) datap) = (ptrint) m->stubroutine;
 
        return true;
 }
@@ -457,7 +280,7 @@ bool patcher_invokestatic_special(u1 *sp)
 
 *******************************************************************************/
 
-bool patcher_invokevirtual(u1 *sp)
+bool patcher_invokevirtual(patchref_t *pr)
 {
        u1                *ra;
        unresolved_method *um;
@@ -465,14 +288,16 @@ bool patcher_invokevirtual(u1 *sp)
 
        /* get stuff from the stack */
 
-       ra = (u1 *)                *((ptrint *) (sp + 4 * 4));
-       um = (unresolved_method *) *((ptrint *) (sp + 1 * 4));
+       ra = (u1 *)                pr->mpc;
+       um = (unresolved_method *) pr->ref;
 
        /* get the methodinfo */
 
        if (!(m = resolve_method_eager(um)))
                return false;
 
+       PATCH_BACK_ORIGINAL_MCODE;
+
        /* if we show disassembly, we have to skip the nop */
 
        if (opt_showdisassemble)
@@ -504,7 +329,7 @@ bool patcher_invokevirtual(u1 *sp)
 
 *******************************************************************************/
 
-bool patcher_invokeinterface(u1 *sp)
+bool patcher_invokeinterface(patchref_t *pr)
 {
        u1                *ra;
        unresolved_method *um;
@@ -512,14 +337,16 @@ bool patcher_invokeinterface(u1 *sp)
 
        /* get stuff from the stack */
 
-       ra = (u1 *)                *((ptrint *) (sp + 4 * 4));
-       um = (unresolved_method *) *((ptrint *) (sp + 1 * 4));
+       ra = (u1 *)                pr->mpc;
+       um = (unresolved_method *) pr->ref;
 
        /* get the methodinfo */
 
        if (!(m = resolve_method_eager(um)))
                return false;
 
+       PATCH_BACK_ORIGINAL_MCODE;
+
        /* if we show disassembly, we have to skip the nop */
 
        if (opt_showdisassemble)
@@ -549,33 +376,33 @@ bool patcher_invokeinterface(u1 *sp)
 
 *******************************************************************************/
 
-bool patcher_checkcast_instanceof_flags(u1 *sp)
+bool patcher_resolve_classref_to_flags(patchref_t *pr)
 {
-       s4                 disp;
        constant_classref *cr;
-       u1                *pv;
+       u1                *datap;
        classinfo         *c;
 
        /* get stuff from the stack */
 
-       disp  =                       *((s4 *)     (sp + 5 * 4));
-       cr    = (constant_classref *) *((ptrint *) (sp + 1 * 4));
-       pv    = (u1 *)                *((ptrint *) (sp + 0 * 4));
+       cr    = (constant_classref *) pr->ref;
+       datap = (u1 *)                pr->datap;
 
        /* get the classinfo */
 
        if (!(c = resolve_classref_eager(cr)))
                return false;
 
+       PATCH_BACK_ORIGINAL_MCODE;
+
        /* patch class flags */
 
-       *((s4 *) (pv + disp)) = (s4) c->flags;
+       *((s4 *) datap) = (s4) c->flags;
 
        return true;
 }
 
 
-/* patcher_checkcast_instanceof_interface **************************************
+/* patcher_resolve_classref_to_index *******************************************
 
    Machine code:
 
@@ -583,33 +410,33 @@ bool patcher_checkcast_instanceof_flags(u1 *sp)
 
 *******************************************************************************/
 
-bool patcher_checkcast_instanceof_interface(u1 *sp)
+bool patcher_resolve_classref_to_index(patchref_t *pr)
 {
-       s4                 disp;
        constant_classref *cr;
-       u1                *pv;
+       u1                *datap;
        classinfo         *c;
 
        /* get stuff from the stack */
 
-       disp =                       *((s4 *)     (sp + 5 * 4));
-       cr   = (constant_classref *) *((ptrint *) (sp + 1 * 4));
-       pv   = (u1 *)                *((ptrint *) (sp + 0 * 4));
+       cr    = (constant_classref *) pr->ref;
+       datap = (u1 *)                pr->datap;
 
        /* get the classinfo */
 
        if (!(c = resolve_classref_eager(cr)))
                return false;
 
+       PATCH_BACK_ORIGINAL_MCODE;
+
        /* patch super class index */
 
-       *((s4 *) (pv + disp)) = (s4) c->index;
+       *((s4 *) datap) = (s4) c->index;
 
        return true;
 }
 
 
-/* patcher_checkcast_instanceof_class ******************************************
+/* patcher_resolve_classref_to_vftbl *******************************************
 
    Machine code:
 
@@ -617,45 +444,45 @@ bool patcher_checkcast_instanceof_interface(u1 *sp)
 
 *******************************************************************************/
 
-bool patcher_checkcast_instanceof_class(u1 *sp)
+bool patcher_resolve_classref_to_vftbl(patchref_t *pr)
 {
-       s4                 disp;
        constant_classref *cr;
-       u1                *pv;
+       u1                *datap;
        classinfo         *c;
 
        /* get stuff from the stack */
 
-       disp =                       *((s4 *)     (sp + 5 * 4));
-       cr   = (constant_classref *) *((ptrint *) (sp + 1 * 4));
-       pv   = (u1 *)                *((ptrint *) (sp + 0 * 4));
+       cr    = (constant_classref *) pr->ref;
+       datap = (u1 *)                pr->datap;
 
        /* get the classinfo */
 
        if (!(c = resolve_classref_eager(cr)))
                return false;
 
+       PATCH_BACK_ORIGINAL_MCODE;
+
        /* patch super class' vftbl */
 
-       *((ptrint *) (pv + disp)) = (ptrint) c->vftbl;
+       *((ptrint *) datap) = (ptrint) c->vftbl;
 
        return true;
 }
 
 
-/* patcher_clinit **************************************************************
+/* patcher_initialize_class ****************************************************
 
    XXX
 
 *******************************************************************************/
 
-bool patcher_clinit(u1 *sp)
+bool patcher_initialize_class(patchref_t *pr)
 {
        classinfo *c;
 
        /* get stuff from the stack */
 
-       c = (classinfo *) *((ptrint *) (sp + 1 * 4));
+       c = (classinfo *) pr->ref;
 
        /* check if the class is initialized */
 
@@ -663,11 +490,13 @@ bool patcher_clinit(u1 *sp)
                if (!initialize_class(c))
                        return false;
 
+       PATCH_BACK_ORIGINAL_MCODE;
+
        return true;
 }
 
 
-/* patcher_athrow_areturn ******************************************************
+/* patcher_resolve_class *******************************************************
 
    Machine code:
 
@@ -676,52 +505,54 @@ bool patcher_clinit(u1 *sp)
 *******************************************************************************/
 
 #ifdef ENABLE_VERIFIER
-bool patcher_athrow_areturn(u1 *sp)
+bool patcher_resolve_class(patchref_t *pr)
 {
        unresolved_class *uc;
 
        /* get stuff from the stack */
 
-       uc = (unresolved_class *) *((ptrint *) (sp + 1 * 4));
+       uc = (unresolved_class *) pr->ref;
 
        /* resolve the class and check subtype constraints */
 
        if (!resolve_class_eager_no_access_check(uc))
                return false;
 
+       PATCH_BACK_ORIGINAL_MCODE;
+
        return true;
 }
 #endif /* ENABLE_VERIFIER */
 
 
-/* patcher_resolve_native ******************************************************
+/* patcher_resolve_native_function *********************************************
 
    XXX
 
 *******************************************************************************/
 
 #if !defined(WITH_STATIC_CLASSPATH)
-bool patcher_resolve_native(u1 *sp)
+bool patcher_resolve_native_function(patchref_t *pr)
 {
-       s4           disp;
        methodinfo  *m;
-       u1          *pv;
+       u1          *datap;
        functionptr  f;
 
        /* get stuff from the stack */
 
-       disp =                *((s4 *)     (sp + 5 * 4));
-       m    = (methodinfo *) *((ptrint *) (sp + 1 * 4));
-       pv   = (u1 *)         *((ptrint *) (sp + 0 * 4));
+       m     = (methodinfo *) pr->ref;
+       datap = (u1 *)         pr->datap;
 
        /* resolve native function */
 
        if (!(f = native_resolve_function(m)))
                return false;
 
+       PATCH_BACK_ORIGINAL_MCODE;
+
        /* patch native function pointer */
 
-       *((ptrint *) (pv + disp)) = (ptrint) f;
+       *((ptrint *) datap) = (ptrint) f;
 
        return true;
 }
index 82c6ff64a6a9b35e896ff76896ce63b7c4529ae3..429263b795f1a10ec20c75c72751d367d8c3cf1d 100644 (file)
@@ -44,6 +44,7 @@
 #include "vm/jit/code.h"
 #include "vm/jit/codegen-common.h"
 #include "vm/jit/methodheader.h"
+#include "vm/jit/patcher-common.h"
 
 #include "vmcore/options.h"
 
@@ -75,8 +76,7 @@ bool code_init(void)
 
    The following fields are set in codeinfo:
        m
-          isleafmethod
-   all other fields are zeroed
+       patchers
 
    RETURN VALUE:
        a new, initialized codeinfo, or
@@ -92,6 +92,8 @@ codeinfo *code_codeinfo_new(methodinfo *m)
 
        code->m = m;
 
+       patcher_list_create(code);
+
 #if defined(ENABLE_STATISTICS)
        if (opt_stat)
                size_codeinfo += sizeof(codeinfo);
@@ -316,6 +318,8 @@ void code_codeinfo_free(codeinfo *code)
        if (code->mcode != NULL)
                CFREE((void *) (ptrint) code->mcode, code->mcodelength);
 
+       patcher_list_free(code);
+
 #if defined(ENABLE_REPLACEMENT)
        replace_free_replacement_points(code);
 #endif
index 15e41a79a6a80ed4355ded8c3ff899475dbf3b8f..30c2e5ca6e5d95f84f4550945678e570a6371aee 100644 (file)
@@ -35,6 +35,8 @@
 #include "config.h"
 #include "vm/types.h"
 
+#include "toolbox/list.h"
+
 #include "vm/global.h"
 
 #include "vm/jit/replace.h"
@@ -73,6 +75,9 @@ struct codeinfo {
        u1           *entrypoint;           /* machine code entry point           */
        s4            mcodelength;          /* length of generated machine code   */
 
+       /* patcher list */
+       list_t       *patchers;
+
        /* replacement */                                   
 #if defined(ENABLE_REPLACEMENT)
        rplpoint     *rplpoints;            /* replacement points                 */
index bb0c42166e2bd5c4754466156dd27182c2c4aa60..c675edd19416a5931f37a18396abf077052ff1d8 100644 (file)
@@ -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 8123 2007-06-20 23:50:55Z michi $
+   $Id: codegen-common.c 8179 2007-07-05 11:21:08Z michi $
 
 */
 
@@ -83,6 +83,7 @@
 #include "vm/jit/emit-common.h"
 #include "vm/jit/jit.h"
 #include "vm/jit/md.h"
+#include "vm/jit/patcher-common.h"
 #include "vm/jit/replace.h"
 #if defined(ENABLE_SSA)
 # include "vm/jit/optimizing/lsra.h"
@@ -946,6 +947,7 @@ void codegen_finish(jitdata *jd)
 #endif
        s4           alignedmcodelen;
        jumpref     *jr;
+       patchref_t  *pr;
        u1          *epoint;
        s4           alignedlen;
 
@@ -1065,6 +1067,15 @@ void codegen_finish(jitdata *jd)
                *((ptrint *) ((ptrint) epoint + cd->linenumbertablesizepos)) = lrtlen;
        }
 
+       /* patcher resolving */
+
+       pr = list_first_unsynced(code->patchers);
+       while (pr) {
+               pr->mpc += (ptrint) epoint;
+               pr->datap = (ptrint) (pr->disp + epoint);
+               pr = list_next_unsynced(code->patchers, pr);
+       }
+
 #if defined(ENABLE_REPLACEMENT)
        /* replacement point resolving */
        {
index 5d39dc3481066fc8d114c36a713838cd9d06874e..2749d8ebf757fe276357feae6200b2e9cdb1fa64 100644 (file)
@@ -179,6 +179,7 @@ void emit_nullpointer_check(codegendata *cd, instruction *iptr, s4 reg);
 void emit_exception_check(codegendata *cd, instruction *iptr);
 
 void emit_patcher_stubs(jitdata *jd);
+void emit_patcher_traps(jitdata *jd);
 #if defined(ENABLE_REPLACEMENT)
 void emit_replacement_stubs(jitdata *jd);
 #endif
index 27d1704bdb2019c88a54c4a5b784373efe7f8de1..3480c2d15fbfb1ae1957472b65d0a3fcf9aa6797 100644 (file)
@@ -1,6 +1,6 @@
-## src/vm/jit/i386/linux/Makefile.am
+## src/vm/jit/i386/darwin/Makefile.am
 ##
-## Copyright (C) 1996-2005, 2006 R. Grafl, A. Krall, C. Kruegel,
+## Copyright (C) 2006, 2007 R. Grafl, A. Krall, C. Kruegel,
 ## C. Oates, R. Obermaisser, M. Platter, M. Probst, S. Ring,
 ## E. Steiner, C. Thalinger, D. Thuernbeck, P. Tomsich, C. Ullrich,
 ## J. Wenninger, Institut f. Computersprachen - TU Wien
 ## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
 ## 02110-1301, USA.
 ##
-## Contact: cacao@cacaojvm.org
-##
-## Authors: Christian Thalinger
-##
-## Changes:
-##
 ## $Id: Makefile.am 4563 2006-03-06 13:03:05Z twisti $
 
 ## Process this file with automake to produce Makefile.in
 
-AM_CPPFLAGS = -I$(top_srcdir)/src -I$(top_srcdir)/src/vm/jit/$(ARCH_DIR)
+AM_CPPFLAGS = -I$(top_srcdir)/src -I$(top_srcdir)/src/vm/jit/$(ARCH_DIR) -I$(top_builddir)/src
 
 LIBS =
 
index 07cd00491c2ef069efefe56c7e32290c39652a6c..dd9672c96382bc6065768d83ec65868ed57cb722 100644 (file)
@@ -63,6 +63,7 @@
 
 void md_signal_handler_sigsegv(int sig, siginfo_t *siginfo, void *_p)
 {
+       stackframeinfo       sfi;
        ucontext_t          *_uc;
        mcontext_t           _mc;
        u1                  *pv;
@@ -122,7 +123,7 @@ void md_signal_handler_sigsegv(int sig, siginfo_t *siginfo, void *_p)
 
     /* generate appropriate exception */
 
-    o = exceptions_new_hardware_exception(pv, sp, ra, xpc, type, val);
+    o = exceptions_new_hardware_exception(pv, sp, ra, xpc, type, val, &sfi);
 
     /* set registers */
 
@@ -141,6 +142,7 @@ void md_signal_handler_sigsegv(int sig, siginfo_t *siginfo, void *_p)
 
 void md_signal_handler_sigfpe(int sig, siginfo_t *siginfo, void *_p)
 {
+       stackframeinfo       sfi;
        ucontext_t          *_uc;
        mcontext_t           _mc;
     u1                  *pv;
@@ -169,7 +171,7 @@ void md_signal_handler_sigfpe(int sig, siginfo_t *siginfo, void *_p)
 
     /* generate appropriate exception */
 
-    o = exceptions_new_hardware_exception(pv, sp, ra, xpc, type, val);
+    o = exceptions_new_hardware_exception(pv, sp, ra, xpc, type, val, &sfi);
 
     _ss->eax = (ptrint) o;
        _ss->ecx = (ptrint) xpc;
index 0a6c24fe4bac2af133a3cbe8f1387ceb13b3dd0e..e2ce9025a7315e4ed30ed6b1a1920bac627a4c93 100644 (file)
@@ -22,7 +22,7 @@
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
    02110-1301, USA.
 
-   $Id: md-os.c 8027 2007-06-07 10:30:33Z michi $
+   $Id: md-os.c 8179 2007-07-05 11:21:08Z michi $
 
 */
 
@@ -55,6 +55,7 @@
 
 void md_signal_handler_sigsegv(int sig, siginfo_t *siginfo, void *_p)
 {
+       stackframeinfo     sfi;
        ucontext_t        *_uc;
        mcontext_t        *_mc;
        u1                *pv;
@@ -112,7 +113,7 @@ void md_signal_handler_sigsegv(int sig, siginfo_t *siginfo, void *_p)
 
        /* generate appropriate exception */
 
-       o = exceptions_new_hardware_exception(pv, sp, ra, xpc, type, val);
+       o = exceptions_new_hardware_exception(pv, sp, ra, xpc, type, val, &sfi);
 
        /* set registers */
 
@@ -131,6 +132,7 @@ void md_signal_handler_sigsegv(int sig, siginfo_t *siginfo, void *_p)
 
 void md_signal_handler_sigfpe(int sig, siginfo_t *siginfo, void *_p)
 {
+       stackframeinfo     sfi;
        ucontext_t        *_uc;
        mcontext_t        *_mc;
        u1                *pv;
@@ -156,7 +158,7 @@ void md_signal_handler_sigfpe(int sig, siginfo_t *siginfo, void *_p)
 
        /* generate appropriate exception */
 
-       o = exceptions_new_hardware_exception(pv, sp, ra, xpc, type, val);
+       o = exceptions_new_hardware_exception(pv, sp, ra, xpc, type, val, &sfi);
 
        _mc->gregs[REG_EAX] = (ptrint) o;
        _mc->gregs[REG_ECX] = (ptrint) xpc;                      /* REG_ITMP2_XPC */
index db1c9a8315d91de91c82111d13c24ba480dabfc6..bf8a6fdd60fa60796d14dabbde7768d3df30d919 100644 (file)
@@ -22,7 +22,7 @@
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
    02110-1301, USA.
 
-   $Id: patcher.c 7596 2007-03-28 21:05:53Z twisti $
+   $Id: patcher.c 8143 2007-06-26 15:47:43Z twisti $
 
 */
 
@@ -434,11 +434,6 @@ bool patcher_builtin_multianewarray(u1 *sp)
 
        *((ptrint *) (ra + 7 + 4)) = (ptrint) c;
 
-       /* patch new function address */
-
-       *((ptrint *) (ra + 7 + 8 + 2 + 3 + 4 + 1)) =
-               (ptrint) BUILTIN_multianewarray;
-
        return true;
 }
 
index ebe62f4989ded276374e08195078a6394054699e..dcaabd058a67c4ef2df6f64224684ece49a2f26c 100644 (file)
@@ -90,6 +90,7 @@ void md_init_linux()
  **********************************************************************/
 void md_signal_handler_sigsegv(int sig, siginfo_t *siginfo, actual_ucontext_t *_uc) 
 {      
+       stackframeinfo sfi;
        uint32_t        xpc, sp;
        uint16_t        opc;
        uint32_t        val, regval, off;
@@ -140,7 +141,7 @@ void md_signal_handler_sigsegv(int sig, siginfo_t *siginfo, actual_ucontext_t *_
 
        /*fprintf(stderr, "SEGV: sp=%x, xpc=%x, regval=%x\n", sp, xpc, regval);
        */
-       e = exceptions_new_hardware_exception(0, sp, xpc, xpc, EXCEPTION_HARDWARE_NULLPOINTER, regval);
+       e = exceptions_new_hardware_exception(0, sp, xpc, xpc, EXCEPTION_HARDWARE_NULLPOINTER, regval, &sfi);
 
        _mc->gregs[GREGS_ADRREG_OFF + REG_ATMP1]     = (ptrint) e;
        _mc->gregs[GREGS_ADRREG_OFF + REG_ATMP2_XPC] = (ptrint) xpc;
@@ -157,6 +158,7 @@ void md_signal_handler_sigsegv(int sig, siginfo_t *siginfo, actual_ucontext_t *_
  **********************************************************************/
 void md_signal_handler_sigill(int sig, siginfo_t *siginfo, actual_ucontext_t *_uc) 
 {
+       stackframeinfo sfi;
        uint32_t        xpc, sp;
        uint16_t        opc;
        uint32_t        type;
@@ -209,7 +211,7 @@ void md_signal_handler_sigill(int sig, siginfo_t *siginfo, actual_ucontext_t *_u
 
        /*fprintf(stderr, "NEW HWE: sp=%x, xpc=%x, tpye=%x, regval=%x\n", sp, xpc, type, regval);
        */
-       e = exceptions_new_hardware_exception(0, sp, xpc, xpc, type, regval);
+       e = exceptions_new_hardware_exception(0, sp, xpc, xpc, type, regval, &sfi);
 
        _mc->gregs[GREGS_ADRREG_OFF + REG_ATMP1]     = (ptrint) e;
        _mc->gregs[GREGS_ADRREG_OFF + REG_ATMP2_XPC] = (ptrint) xpc;
index ee99bae04cea1a5dde02ff3f2b9c8eec978dd139..327a9b9e7fe4eccc4a6dbaeb66070d9e07313dda 100644 (file)
@@ -22,7 +22,7 @@
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
    02110-1301, USA.
 
-   $Id: md-os.c 8027 2007-06-07 10:30:33Z michi $
+   $Id: md-os.c 8179 2007-07-05 11:21:08Z michi $
 
 */
 
@@ -85,6 +85,7 @@ void md_init(void)
 
 void md_signal_handler_sigsegv(int sig, siginfo_t *siginfo, void *_p)
 {
+       stackframeinfo     sfi;
        ucontext_t        *_uc;
        mcontext_t        *_mc;
        u1                *pv;
@@ -135,7 +136,7 @@ void md_signal_handler_sigsegv(int sig, siginfo_t *siginfo, void *_p)
 
        /* generate appropriate exception */
 
-       o = exceptions_new_hardware_exception(pv, sp, ra, xpc, type, val);
+       o = exceptions_new_hardware_exception(pv, sp, ra, xpc, type, val, &sfi);
 
        /* set registers */
 
index 8461616a35fe7c323668ed969f4a6ef5ab832b4e..d6231b9da0e80638d90e431eed8d7308b448a7eb 100644 (file)
@@ -22,7 +22,7 @@
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
    02110-1301, USA.
 
-   $Id: md-os.c 7918 2007-05-20 20:42:18Z michi $
+   $Id: md-os.c 8179 2007-07-05 11:21:08Z michi $
 
 */
 
@@ -85,6 +85,7 @@ void md_init(void)
 
 void md_signal_handler_sigsegv(int sig, siginfo_t *siginfo, void *_p)
 {
+       stackframeinfo     sfi;
        ucontext_t        *_uc;
        mcontext_t        *_mc;
        greg_t            *_gregs;
@@ -173,7 +174,7 @@ void md_signal_handler_sigsegv(int sig, siginfo_t *siginfo, void *_p)
 
        /* generate appropriate exception */
 
-       o = exceptions_new_hardware_exception(pv, sp, ra, xpc, type, val);
+       o = exceptions_new_hardware_exception(pv, sp, ra, xpc, type, val, &sfi);
 
        /* set registers */
 
index 49655c68cbbc4fc9e371de3c33c3064601a97757..75074bc0cde6241d5f2b2ca03b2b2c8ea342c60a 100644 (file)
@@ -22,7 +22,7 @@
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
    02110-1301, USA.
 
-   $Id: parse.c 7813 2007-04-25 19:20:13Z twisti $
+   $Id: parse.c 8159 2007-06-28 00:31:31Z michi $
 
 */
 
@@ -50,7 +50,6 @@
 #include "vm/jit/asmpart.h"
 #include "vm/jit/jit.h"
 #include "vm/jit/parse.h"
-#include "vm/jit/patcher.h"
 #include "vm/jit/loop/loop.h"
 
 #include "vmcore/linker.h"
index a321ce7fe2c4a19597b1efb49626de6f99f72d56..5e9288371f429c0717b13b881ae74c9357c6a94f 100644 (file)
@@ -22,7 +22,7 @@
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
    02110-1301, USA.
 
-   $Id: patcher.h 7813 2007-04-25 19:20:13Z twisti $
+   $Id: patcher.h 8160 2007-06-28 01:52:19Z michi $
 
 */
 
 #include "vm/global.h"
 
 
+#if defined(__ARM__)
+# error "you should no longer include this file"
+#else
+
+
 /* patcher macros *************************************************************/
 
 #define PATCHER_FLAG_PATCHED    (vftbl_t *) 0xdeadbeef
@@ -216,6 +221,8 @@ bool intrp_patcher_checkcast_instanceof(u1 *sp);
 bool intrp_patcher_resolve_native(u1 *sp);
 #endif /* defined(ENABLE_INTRP) */
 
+#endif /* architecture list */
+
 #endif /* _PATCHER_H */
 
 
index f947e75981310929e81623b1b380ef17d5d0e205..d7749c4b9c732e34d84effc62c032c94ce058ae8 100644 (file)
@@ -22,7 +22,7 @@
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
    02110-1301, USA.
 
-   $Id: md-os.c 7990 2007-05-30 21:05:20Z twisti $
+   $Id: md-os.c 8178 2007-07-05 11:13:20Z michi $
 
 */
 
@@ -60,6 +60,7 @@
 
 void md_signal_handler_sigsegv(int sig, siginfo_t *siginfo, void *_p)
 {
+       stackframeinfo      sfi;
        ucontext_t         *_uc;
        mcontext_t          _mc;
        ppc_thread_state_t *_ss;
@@ -122,7 +123,7 @@ void md_signal_handler_sigsegv(int sig, siginfo_t *siginfo, void *_p)
 
        /* generate appropriate exception */
 
-       o = exceptions_new_hardware_exception(pv, sp, ra, xpc, type, val);
+       o = exceptions_new_hardware_exception(pv, sp, ra, xpc, type, val, &sfi);
 
        /* set registers */
 
@@ -140,6 +141,7 @@ void md_signal_handler_sigsegv(int sig, siginfo_t *siginfo, void *_p)
 
 void md_signal_handler_sigtrap(int sig, siginfo_t *siginfo, void *_p)
 {
+       stackframeinfo      sfi;
        ucontext_t         *_uc;
        mcontext_t          _mc;
        ppc_thread_state_t *_ss;
@@ -182,7 +184,7 @@ void md_signal_handler_sigtrap(int sig, siginfo_t *siginfo, void *_p)
 
        /* generate appropriate exception */
 
-       o = exceptions_new_hardware_exception(pv, sp, ra, xpc, type, val);
+       o = exceptions_new_hardware_exception(pv, sp, ra, xpc, type, val, &sfi);
 
        /* set registers */
 
index fc0e11ccd3bb8e69e03fbb8acf319200ac6c5c93..d5e90ef2fc2bb53bb66f2bb1b5f9edbc00c1afbd 100644 (file)
@@ -22,7 +22,7 @@
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
    02110-1301, USA.
 
-   $Id: md-os.c 7955 2007-05-23 18:05:26Z twisti $
+   $Id: md-os.c 8178 2007-07-05 11:13:20Z michi $
 
 */
 
@@ -61,6 +61,7 @@
 
 void md_signal_handler_sigsegv(int sig, siginfo_t *siginfo, void *_p)
 {
+       stackframeinfo     sfi;
        ucontext_t        *_uc;
        mcontext_t        *_mc;
        unsigned long     *_gregs;
@@ -122,7 +123,7 @@ void md_signal_handler_sigsegv(int sig, siginfo_t *siginfo, void *_p)
 
        /* generate appropriate exception */
 
-       o = exceptions_new_hardware_exception(pv, sp, ra, xpc, type, val);
+       o = exceptions_new_hardware_exception(pv, sp, ra, xpc, type, val, &sfi);
 
        /* set registers */
 
@@ -140,6 +141,7 @@ void md_signal_handler_sigsegv(int sig, siginfo_t *siginfo, void *_p)
 
 void md_signal_handler_sigtrap(int sig, siginfo_t *siginfo, void *_p)
 {
+       stackframeinfo     sfi;
        ucontext_t        *_uc;
        mcontext_t        *_mc;
        unsigned long     *_gregs;
@@ -181,7 +183,7 @@ void md_signal_handler_sigtrap(int sig, siginfo_t *siginfo, void *_p)
 
        /* generate appropriate exception */
 
-       o = exceptions_new_hardware_exception(pv, sp, ra, xpc, type, val);
+       o = exceptions_new_hardware_exception(pv, sp, ra, xpc, type, val, &sfi);
 
        /* set registers */
 
index 89a00576ce103e84e40f89ae828ba1631eb839a9..221548b2c0fb08dc1cdc806f465428b517fd5b23 100644 (file)
@@ -22,7 +22,7 @@
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
    02110-1301, USA.
 
-   $Id: md-os.c 7958 2007-05-23 19:11:10Z twisti $
+   $Id: md-os.c 8178 2007-07-05 11:13:20Z michi $
 
 */
 
@@ -61,6 +61,7 @@
 
 void md_signal_handler_sigsegv(int sig, siginfo_t *siginfo, void *_p)
 {
+       stackframeinfo   sfi;
        ucontext_t      *_uc;
        mcontext_t      *_mc;
        u1              *pv;
@@ -102,7 +103,7 @@ void md_signal_handler_sigsegv(int sig, siginfo_t *siginfo, void *_p)
                addr = _mc->gp_regs[s1];
                type = (s4) addr;
        }
-       e = exceptions_new_hardware_exception(pv, sp, ra, xpc, type, val);
+       e = exceptions_new_hardware_exception(pv, sp, ra, xpc, type, val, &sfi);
 
        _mc->gp_regs[REG_ITMP1]     = (ptrint) e;
        _mc->gp_regs[REG_ITMP2_XPC] = (ptrint) xpc;
index a012bc6a75b0c9e9d7591e50c7cf453fbc6bfc01..28340abaf88817c8a3432fb38129bceff337de68 100644 (file)
@@ -22,7 +22,7 @@
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
    02110-1301, USA.
 
-   $Id: codegen.c 8123 2007-06-20 23:50:55Z michi $
+   $Id: codegen.c 8152 2007-06-27 20:37:45Z pm $
 
 */
 
@@ -213,13 +213,10 @@ bool codegen_emit(jitdata *jd)
 #if defined(ENABLE_PROFILING)
        if (JITDATA_HAS_FLAG_INSTRUMENT(jd)) {
                /* count frequency */
-
-               M_ALD(REG_ITMP1, REG_PV, CodeinfoPointer);
-               M_ILD(REG_ITMP2, REG_ITMP1, OFFSET(codeinfo, frequency));
-               M_IADD_IMM(1, REG_ITMP2);
+               M_ALD_DSEG(REG_ITMP1, CodeinfoPointer);
+               ICONST(REG_ITMP2, 1);
+               N_AL(REG_ITMP2, OFFSET(codeinfo, frequency), RN, REG_ITMP1);
                M_IST(REG_ITMP2, REG_ITMP1, OFFSET(codeinfo, frequency));
-
-/*             PROFILE_CYCLE_START; */
        }
 #endif
 
@@ -289,11 +286,10 @@ bool codegen_emit(jitdata *jd)
                                                M_ILD(var->vv.regoff, REG_SP, cd->stackframesize * 4 + s1);
 
                                } else {                             /* stack arg -> spilled  */
-                                       M_ILD(REG_ITMP1, REG_SP, cd->stackframesize * 4 + s1);
-                                       M_IST(REG_ITMP1, REG_SP, var->vv.regoff);
                                        if (IS_2_WORD_TYPE(t)) {
-                                               M_ILD(REG_ITMP1, REG_SP, cd->stackframesize * 4 + s1 + 4);
-                                               M_IST(REG_ITMP1, REG_SP, var->vv.regoff + 4);
+                                               N_MVC(var->vv.regoff, 8, REG_SP, cd->stackframesize * 4 + s1, REG_SP);
+                                       } else {
+                                               N_MVC(var->vv.regoff, 4, REG_SP, cd->stackframesize * 4 + s1, REG_SP);
                                        }
                                }
                        }
@@ -321,13 +317,11 @@ bool codegen_emit(jitdata *jd)
 
                                } else {                             /* stack-arg -> spilled  */
                                        if (IS_2_WORD_TYPE(t)) {
-                                               M_DLD(REG_FTMP1, REG_SP, cd->stackframesize * 4 + s1);
-                                               M_DST(REG_FTMP1, REG_SP, var->vv.regoff);
+                                               N_MVC(var->vv.regoff, 8, REG_SP, cd->stackframesize * 4 + s1, REG_SP);
                                                var->vv.regoff = cd->stackframesize * 4 + s1;
 
                                        } else {
-                                               M_FLD(REG_FTMP1, REG_SP, cd->stackframesize * 4 + s1);
-                                               M_FST(REG_FTMP1, REG_SP, var->vv.regoff);
+                                               N_MVC(var->vv.regoff, 4, REG_SP, cd->stackframesize * 4 + s1, REG_SP);
                                        }
                                }
                        }
index 8ab9b2a227a45321f401df7a524e3fffca1428ec..23dedb80bb3ff26ff81556a0abf3b5a1e3a78766 100644 (file)
@@ -28,7 +28,7 @@
 
    Changes: Edwin Steiner
 
-   $Id: md.c 8123 2007-06-20 23:50:55Z michi $
+   $Id: md.c 8178 2007-07-05 11:13:20Z michi $
 
 */
 
@@ -145,6 +145,7 @@ void md_dump_context(u1 *pc, mcontext_t *mc) {
 
 void md_signal_handler_sigsegv(int sig, siginfo_t *siginfo, void *_p)
 {
+       stackframeinfo     sfi;
        ucontext_t        *_uc;
        mcontext_t        *_mc;
        u1                *pv;
@@ -191,7 +192,7 @@ void md_signal_handler_sigsegv(int sig, siginfo_t *siginfo, void *_p)
        type = EXCEPTION_HARDWARE_NULLPOINTER;
        val = 0;
 
-       e = exceptions_new_hardware_exception(pv, sp, ra, xpc, type, val);
+       e = exceptions_new_hardware_exception(pv, sp, ra, xpc, type, val, &sfi);
 
        _mc->gregs[REG_ITMP2_XPC] = (ptrint) xpc;
        _mc->gregs[REG_ITMP1_XPTR] = (ptrint) e;
@@ -199,6 +200,7 @@ void md_signal_handler_sigsegv(int sig, siginfo_t *siginfo, void *_p)
 }
 
 void md_signal_handler_sigill(int sig, siginfo_t *siginfo, void *_p) {
+       stackframeinfo     sfi;
        ucontext_t        *_uc;
        mcontext_t        *_mc;
        u1                *xpc;
@@ -228,7 +230,7 @@ void md_signal_handler_sigill(int sig, siginfo_t *siginfo, void *_p) {
                sp = (u1 *)_mc->gregs[REG_SP];
                val = (ptrint)_mc->gregs[reg];
 
-               e = exceptions_new_hardware_exception(pv, sp, ra, xpc, type, val);
+               e = exceptions_new_hardware_exception(pv, sp, ra, xpc, type, val, &sfi);
 
                _mc->gregs[REG_ITMP1_XPTR] = (ptrint)e;
                _mc->gregs[REG_ITMP2_XPC] = (ptrint)xpc;
@@ -251,6 +253,7 @@ void md_signal_handler_sigill(int sig, siginfo_t *siginfo, void *_p) {
 
 void md_signal_handler_sigfpe(int sig, siginfo_t *siginfo, void *_p)
 {
+       stackframeinfo      sfi;
        ucontext_t         *_uc;
        mcontext_t         *_mc;
        u1                 *pv;
@@ -302,7 +305,7 @@ void md_signal_handler_sigfpe(int sig, siginfo_t *siginfo, void *_p)
                        type = EXCEPTION_HARDWARE_ARITHMETIC;
                        val = 0;
 
-                       e = exceptions_new_hardware_exception(pv, sp, ra, xpc, type, val);
+                       e = exceptions_new_hardware_exception(pv, sp, ra, xpc, type, val, &sfi);
 
                        _mc->gregs[REG_ITMP1_XPTR] = (ptrint)e;
                        _mc->gregs[REG_ITMP2_XPC] = (ptrint)xpc;
index 82ce159db6e570bc08781f91c610c72f7ddd0403..3ff04bd7a23fc29954df71035746a57982a65b5e 100644 (file)
@@ -164,3 +164,106 @@ Digest validation failed for stderr.log, expecting 0xda39a3ee5e6b4b0d3255bfef956
 Validation FAILED for eclipse small
 
 <<<<<<<<<<<<<<<<<<<<<<< End Eclispe 10 runs  >>>>>>>>>>>>>>>>>>>>>>>
+
+<<<<<<<<<<<<<<<<<<<<<<< Eclispe 10 runs 26.06.2007 >>>>>>>>>>>>>>>>>>>>>>>
+
+=== 1 ===
+===== DaCapo eclipse starting =====
+<setting up workspace...>
+<creating projects..............................................................>
+<running tests at level 0...>
+<performing AST tests...>
+ AST creation: org.eclipse.jdt.internal.compiler.parser
+===== DaCapo eclipse PASSED in 1332477 msec =====
+=== 2 ===
+===== DaCapo eclipse starting =====
+<setting up workspace...>
+<creating projects..............................................................>
+<running tests at level 0...>
+<performing AST tests...>
+ AST creation: org.eclipse.jdt.internal.compiler.parser
+===== DaCapo eclipse PASSED in 1553188 msec =====
+=== 3 ===
+===== DaCapo eclipse starting =====
+<setting up workspace...>
+<creating projects..............................................................>
+<running tests at level 0...>
+<performing AST tests...>
+ AST creation: org.eclipse.jdt.internal.compiler.parser
+===== DaCapo eclipse PASSED in 1319232 msec =====
+=== 4 ===
+===== DaCapo eclipse starting =====
+<setting up workspace...>
+<creating projects..............................................................>
+<running tests at level 0...>
+<performing AST tests...>
+ AST creation: org.eclipse.jdt.internal.compiler.parser
+Exception in thread "Java indexing" java.lang.OutOfMemoryError
+   at org.eclipse.jdt.internal.compiler.util.Util.getInputStreamAsCharArray(Util.java:238)
+   at org.eclipse.jdt.internal.compiler.util.Util.getFileCharContent(Util.java)
+   at org.eclipse.jdt.internal.core.search.JavaSearchDocument.getCharContents(JavaSearchDocument.java:58)
+   at org.eclipse.jdt.internal.core.search.indexing.SourceIndexer.indexDocument(SourceIndexer.java:87)
+   at org.eclipse.jdt.internal.core.search.JavaSearchParticipant.indexDocument(JavaSearchParticipant.java:76)
+   at org.eclipse.jdt.internal.core.search.indexing.IndexManager.indexDocument(IndexManager.java)
+   at org.eclipse.jdt.internal.core.search.indexing.IndexManager$1.execute(IndexManager.java)
+   at org.eclipse.jdt.internal.core.search.processing.JobManager.run(JobManager.java)
+   at java.lang.Thread.run(Thread.java:744)
+   at java.lang.VMThread.run(VMThread.java:148)
+Digest validation failed for stderr.log, expecting 0xda39a3ee5e6b4b0d3255bfef95601890afd80709 found 0x93cd485dca7fd4d628bd98a043045ab4f0c0a0ef
+===== DaCapo eclipse FAILED =====
+Validation FAILED for eclipse small
+=== 5 ===
+===== DaCapo eclipse starting =====
+<setting up workspace...>
+<creating projects..............................................................>
+<running tests at level 0...>
+<performing AST tests...>
+ AST creation: org.eclipse.jdt.internal.compiler.parser
+
+===== DaCapo eclipse PASSED in 1278903 msec =====
+
+=== 6 ===
+
+===== DaCapo eclipse starting =====
+<setting up workspace...>
+<creating projects..............................................................>
+<running tests at level 0...>
+<performing AST tests...>
+ AST creation: org.eclipse.jdt.internal.compiler.parser
+
+
+===== DaCapo eclipse PASSED in 1361033 msec =====
+=== 7 ===
+===== DaCapo eclipse starting =====
+<setting up workspace...>
+<creating projects..............................................................>
+<running tests at level 0...>
+<performing AST tests...>
+ AST creation: org.eclipse.jdt.internal.compiler.parser
+===== DaCapo eclipse PASSED in 1308363 msec =====
+=== 8 ===
+===== DaCapo eclipse starting =====
+<setting up workspace...>
+<creating projects..............................................................>
+<running tests at level 0...>
+<performing AST tests...>
+ AST creation: org.eclipse.jdt.internal.compiler.parser
+===== DaCapo eclipse PASSED in 1325536 msec =====
+=== 9 ===
+===== DaCapo eclipse starting =====
+<setting up workspace...>
+<creating projects..............................................................>
+<running tests at level 0...>
+<performing AST tests...>
+ AST creation: org.eclipse.jdt.internal.compiler.parser
+===== DaCapo eclipse PASSED in 1281511 msec =====
+=== 10 ===
+===== DaCapo eclipse starting =====
+<setting up workspace...>
+<creating projects..............................................................>
+<running tests at level 0...>
+<performing AST tests...>
+ AST creation: org.eclipse.jdt.internal.compiler.parser
+===== DaCapo eclipse PASSED in 1363537 msec =====
+
+<<<<<<<<<<<<<<<<<<<<<<< End Eclispe 10 runs  >>>>>>>>>>>>>>>>>>>>>>>
index 301d7db714de03911b0a8b878ecbf4abf51934d6..9dd83903d501a61f9b49ef61f89ff68970a57435 100644 (file)
@@ -30,7 +30,7 @@
 #include "config.h"
 
 #include "vm/jit/sparc64/md-abi.h"
-#include "offsets.h"
+#include "vm/jit/sparc64/offsets.h"
 #include "md-asm.h"
 
        .register %g2,#scratch                         /* define as scratch       */
index 63106331f4b0b4fad17b80a7bd7a6810a518454d..15836d7f3acacc5ecda04e51faf91b41fb8873bb 100644 (file)
@@ -62,6 +62,7 @@
 #include "vmcore/loader.h"
 #include "vmcore/options.h"
 
+#include "vm/jit/sparc64/solaris/macro_rename.h"
 
 #define BUILTIN_FLOAT_ARGS 1
 
@@ -3354,8 +3355,9 @@ void codegen_emit_stub_native(jitdata *jd, methoddesc *nmd, functionptr f)
                                        s2 = nat_argintregs[nmd->params[j].regoff];
                                        M_INTMOVE(s1, s2);
                                } else {
-                                       s2 = nmd->params[j].regoff - 6 * 8;
-                                       M_AST(s1, REG_SP, CSTACK + s2);
+                                       /* nmd's regoff is relative to the start of the param array */
+                                       s2 = BIAS + WINSAVE_CNT * 8 + nmd->params[j].regoff;
+                                       M_AST(s1, REG_SP, s2);
                                }
 
                        } else {
@@ -3369,9 +3371,9 @@ void codegen_emit_stub_native(jitdata *jd, methoddesc *nmd, functionptr f)
                                }
 
                                s1 = md->params[i].regoff + cd->stackframesize * 8;
-                               s2 = nmd->params[j].regoff - 6 * 8;
+                               s2 = BIAS + WINSAVE_CNT + 8 + nmd->params[j].regoff;
                                M_ALD(REG_ITMP1, REG_SP, CSTACK + s1);
-                               M_AST(REG_ITMP1, REG_SP, CSTACK + s2);
+                               M_AST(REG_ITMP1, REG_SP, s2);
                        }
 
                } else {
@@ -3409,8 +3411,8 @@ void codegen_emit_stub_native(jitdata *jd, methoddesc *nmd, functionptr f)
 
                                        /* JIT stack -> NAT reg */
 
-                                       s2 = nmd->params[j].regoff; 
-                                       M_DLD(s2, REG_SP, CSTACK + s1);
+                                       s2 = BIAS + WINSAVE_CNT * 8 + nmd->params[j].regoff; 
+                                       M_DLD(s2, REG_SP, s1);
                                }
                                else {
 
index 2e9b22e050d00ea53ee1ed5696f82ac47df71917..376dcaa03184b6db297c73ec590148bf325f5307 100644 (file)
@@ -52,6 +52,8 @@
 
 #include "vmcore/options.h"
 
+#include "vm/jit/sparc64/solaris/macro_rename.h"
+
 /* how to leaf optimization in the emitted stubs?? */
 #define REG_PV REG_PV_CALLEE
 
index 8607b7fe87b71debcfa1a32dff7322de8d78b035..5784b0c6aa04f776cf97d1e052635b5b61f8e322 100644 (file)
@@ -87,6 +87,7 @@ ptrint md_get_reg_from_context(sigcontext *ctx, u4 rindex)
 
 void md_signal_handler_sigsegv(int sig, siginfo_t *info , void *_p)
 {
+       stackframeinfo     sfi;
        /*
        ucontext_t  *_uc;
        mcontext_t  *_mc;
@@ -141,7 +142,7 @@ void md_signal_handler_sigsegv(int sig, siginfo_t *info , void *_p)
        }
 
 
-       e = exceptions_new_hardware_exception(pv, sp, ra, xpc, type, val);
+       e = exceptions_new_hardware_exception(pv, sp, ra, xpc, type, val, &sfi);
 
        /* set registers */
 
index 3c56b6f942b8a47dde557a3c35ea747141ffee70..c359dcc8257c22064ea9e0adf1db89d5cc539bd7 100644 (file)
@@ -251,7 +251,7 @@ void md_param_alloc_native(methoddesc *md)
 
                        } else {
                                pd->inmemory = true;
-                               pd->regoff = reguse;
+                               pd->regoff = reguse * 8;
                                reguse++;
                        }
 
@@ -267,7 +267,7 @@ void md_param_alloc_native(methoddesc *md)
                                md->argfltreguse = reguse;
                        } else {
                                pd->inmemory = true;
-                               pd->regoff = reguse;
+                               pd->regoff = reguse * 8;
                                reguse++;
                        }
 
index 55c434a7e6300bb520e95d4a5a9b5eb4a4b6efdf..772b45ba8e576647054b955ea0ed81ce506e00ab 100644 (file)
 
 /* applies when the caller's window was saved */
 #define REG_WINDOW_TRANSPOSE(reg) \
-       (reg + 16 * 8)
+       (reg + 16)
 
 #endif /* _MD_ABI_H */
 
index c675e0e77aa6677e1e754d3c80ce5f6a09bb6630..634fe7f3d54205b19273a0e8055c9ad9394a0063 100644 (file)
@@ -55,6 +55,7 @@
 #include "vmcore/references.h"
 #include "vm/resolve.h"
 
+#include "vm/jit/sparc64/solaris/macro_rename.h"
 
 /* patcher_wrapper *************************************************************
 
index 546a850a584010ac7b4ad32cb9cb525a679f8712..6a995ac625367aab4d60e71e3275f0fcdda135f7 100644 (file)
@@ -92,6 +92,7 @@ ptrint md_get_reg_from_context(mcontext_t *_mc, u4 rindex)
 
 void md_signal_handler_sigsegv(int sig, siginfo_t *siginfo, void *_p)
 {
+       stackframeinfo     sfi;
        ucontext_t  *_uc;
        mcontext_t  *_mc;
        u4           instr;
@@ -144,7 +145,7 @@ void md_signal_handler_sigsegv(int sig, siginfo_t *siginfo, void *_p)
        }
 
 #endif
-       e = exceptions_new_hardware_exception(pv, sp, ra, xpc, type, val);
+       e = exceptions_new_hardware_exception(pv, sp, ra, xpc, type, val, &sfi);
 
        /* set registers */
 
index 8ad2b010b8d620b9abef75fe940c342564822c15..dc59d296e4a1f5aa7d65e4ef0fc8c10a330bb871 100644 (file)
@@ -22,7 +22,7 @@
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
    02110-1301, USA.
 
-   $Id: stacktrace.c 7918 2007-05-20 20:42:18Z michi $
+   $Id: stacktrace.c 8139 2007-06-24 10:12:27Z twisti $
 
 */
 
@@ -1033,12 +1033,14 @@ void stacktrace_print_trace(java_objectheader *xptr)
 #if defined(WITH_CLASSPATH_GNU)
        vmt = t->vmState;
        stc = (stacktracecontainer *) vmt->vmData;
-       stb = &(stc->stb);
-#elif defined(WITH_CLASSPATH_CLDC1_1)
+#elif defined(WITH_CLASSPATH_SUN) || defined(WITH_CLASSPATH_CLDC1_1)
        stc = (stacktracecontainer *) t->backtrace;
-       stb = &(stc->stb);
+#else
+# error unknown classpath configuration
 #endif
 
+       stb = &(stc->stb);
+
        stacktrace_print_trace_from_buffer(stb);
 }
 
index d1a690001df1ac94e1e2a297ab5c1563c5ce9c2f..e3620f9b94b5e0b1583f6a8ccded97d5ef4e3fe5 100644 (file)
@@ -45,7 +45,6 @@
 #include "vm/resolve.h"
 #include "vm/vm.h"
 
-#include "vm/jit/patcher.h"
 #include "vm/jit/jit.h"
 #include "vm/jit/show.h"
 #include "vm/jit/parse.h"
index 8767c35053871469c85f0f823f0383931d080f37..fab2c184d65958a4f6745e3f66844342c6a74e48 100644 (file)
@@ -22,7 +22,7 @@
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
    02110-1301, USA.
 
-   $Id: typecheck.c 8123 2007-06-20 23:50:55Z michi $
+   $Id: typecheck.c 8159 2007-06-28 00:31:31Z michi $
 
 */
 
@@ -159,7 +159,6 @@ error reporting.
 
 #include "vm/jit/jit.h"
 #include "vm/jit/parse.h"
-#include "vm/jit/patcher.h"
 #include "vm/jit/show.h"
 
 #include "vmcore/loader.h"
index d0b063cd9d976f5917076919b35d0caa436bd31a..6983aa2fd182489d17b6406c93f613480dbd0ea2 100644 (file)
@@ -58,6 +58,7 @@
 
 void md_signal_handler_sigsegv(int sig, siginfo_t *siginfo, void *_p)
 {
+       stackframeinfo     sfi;
        ucontext_t        *_uc;
        mcontext_t        *_mc;
        u1                *sp;
@@ -160,7 +161,7 @@ void md_signal_handler_sigsegv(int sig, siginfo_t *siginfo, void *_p)
 
        /* generate appropriate exception */
 
-       o = exceptions_new_hardware_exception(NULL, sp, ra, xpc, type, val);
+       o = exceptions_new_hardware_exception(NULL, sp, ra, xpc, type, vali, &sfi);
 
        /* set registers */
 
@@ -179,6 +180,7 @@ void md_signal_handler_sigsegv(int sig, siginfo_t *siginfo, void *_p)
 
 void md_signal_handler_sigfpe(int sig, siginfo_t *siginfo, void *_p)
 {
+       stackframeinfo     sfi;
        ucontext_t        *_uc;
        mcontext_t        *_mc;
        u1                *pv;
@@ -207,7 +209,7 @@ void md_signal_handler_sigfpe(int sig, siginfo_t *siginfo, void *_p)
 
        /* generate appropriate exception */
 
-       o = exceptions_new_hardware_exception(pv, sp, ra, xpc, type, val);
+       o = exceptions_new_hardware_exception(pv, sp, ra, xpc, type, val, &sfi);
 
        /* set registers */
 
index e68f36fb04d6ee1a2e758d88b89b80f57dac6bcc..9312994b5b80377b371f571f1a8edcfe567771c2 100644 (file)
@@ -22,7 +22,7 @@
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
    02110-1301, USA.
 
-   $Id: vm.c 8137 2007-06-22 16:41:36Z michi $
+   $Id: vm.c 8179 2007-07-05 11:21:08Z michi $
 
 */
 
@@ -1530,17 +1530,17 @@ bool vm_create(JavaVMInitArgs *vm_args)
 
        vm_initializing = true;
 
+       /* initialize the garbage collector */
+
+       gc_init(opt_heapmaxsize, opt_heapstartsize);
+
 #if defined(ENABLE_THREADS)
-       /* pre-initialize some core thread stuff, like the stopworldlock,
-          thus this has to happen _before_ gc_init()!!! */
+       /* AFTER: gc_init (directly after, as this initializes the
+          stopworldlock lock */
 
        threads_preinit();
 #endif
 
-       /* initialize the garbage collector */
-
-       gc_init(opt_heapmaxsize, opt_heapstartsize);
-
        /* install architecture dependent signal handlers */
 
        if (!signal_init())
@@ -2785,7 +2785,7 @@ static uint64_t *vm_array_from_jvalue(methodinfo *m, java_objectheader *o,
 
 *******************************************************************************/
 
-#if !defined(__MIPS__) && !defined(__X86_64__) && !defined(__POWERPC64__) && !defined(__SPARC_64__) && !defined(__M68K__) & !defined(__ARM__)
+#if !defined(__MIPS__) && !defined(__X86_64__) && !defined(__POWERPC64__) && !defined(__SPARC_64__) && !defined(__M68K__) && !defined(__ARM__)
 bool vm_vmargs_from_objectarray(methodinfo *m, java_objectheader *o,
                                                                vm_arg *vmargs, java_objectarray *params)
 {
@@ -3188,7 +3188,7 @@ java_objectheader *vm_call_method(methodinfo *m, java_objectheader *o, ...)
 java_objectheader *vm_call_method_valist(methodinfo *m, java_objectheader *o,
                                                                                 va_list ap)
 {
-#if !defined(__MIPS__) && !defined(__X86_64__) && !defined(__POWERPC64__) && !defined(__SPARC_64__) && !defined(__ARM__) & !defined(__M68K__)
+#if !defined(__MIPS__) && !defined(__X86_64__) && !defined(__POWERPC64__) && !defined(__SPARC_64__) && !defined(__M68K__) && !defined(__ARM__)
        s4                 vmargscount;
        vm_arg            *vmargs;
        java_objectheader *ro;
@@ -3255,7 +3255,7 @@ java_objectheader *vm_call_method_valist(methodinfo *m, java_objectheader *o,
 java_objectheader *vm_call_method_jvalue(methodinfo *m, java_objectheader *o,
                                                                                 const jvalue *args)
 {
-#if !defined(__MIPS__) && !defined(__X86_64__) && !defined(__POWERPC64__) && !defined(__SPARC_64__) && !defined(__M68K__) & !defined(__ARM__)
+#if !defined(__MIPS__) && !defined(__X86_64__) && !defined(__POWERPC64__) && !defined(__SPARC_64__) && !defined(__M68K__) && !defined(__ARM__)
        s4                 vmargscount;
        vm_arg            *vmargs;
        java_objectheader *ro;
@@ -3319,7 +3319,7 @@ java_objectheader *vm_call_method_jvalue(methodinfo *m, java_objectheader *o,
 
 *******************************************************************************/
 
-#if !defined(__MIPS__) && !defined(__X86_64__) && !defined(__POWERPC64__) && !defined(__SPARC_64__) && !defined(__M68K__) & !defined(__ARM__)
+#if !defined(__MIPS__) && !defined(__X86_64__) && !defined(__POWERPC64__) && !defined(__SPARC_64__) && !defined(__M68K__) && !defined(__ARM__)
 java_objectheader *vm_call_method_vmarg(methodinfo *m, s4 vmargscount,
                                                                                vm_arg *vmargs)
 {
@@ -3614,7 +3614,7 @@ int32_t vm_call_method_int_jvalue(methodinfo *m, java_objectheader *o,
 
 *******************************************************************************/
 
-#if !defined(__MIPS__) && !defined(__X86_64__) && !defined(__POWERPC64__) && !defined(__SPARC_64__) && !defined(__M68K__) & !defined(__ARM__)
+#if !defined(__MIPS__) && !defined(__X86_64__) && !defined(__POWERPC64__) && !defined(__SPARC_64__) && !defined(__M68K__) && !defined(__ARM__)
 s8 vm_call_method_long_vmarg(methodinfo *m, s4 vmargscount, vm_arg *vmargs)
 {
        s8 l;
@@ -3701,7 +3701,7 @@ s8 vm_call_method_long(methodinfo *m, java_objectheader *o, ...)
 
 *******************************************************************************/
 
-#if !defined(__MIPS__) && !defined(__X86_64__) && !defined(__POWERPC64__) && !defined(__SPARC_64__) && !defined(__M68K__) & !defined(__ARM__)
+#if !defined(__MIPS__) && !defined(__X86_64__) && !defined(__POWERPC64__) && !defined(__SPARC_64__) && !defined(__M68K__) && !defined(__ARM__)
 s8 vm_call_method_long_valist(methodinfo *m, java_objectheader *o, va_list ap)
 {
        s4      vmargscount;
@@ -3770,7 +3770,7 @@ int64_t vm_call_method_long_valist(methodinfo *m, java_objectheader *o, va_list
 
 *******************************************************************************/
 
-#if !defined(__MIPS__) && !defined(__X86_64__) && !defined(__POWERPC64__) && !defined(__SPARC_64__) && !defined(__M68K__) & !defined(__ARM__)
+#if !defined(__MIPS__) && !defined(__X86_64__) && !defined(__POWERPC64__) && !defined(__SPARC_64__) && !defined(__M68K__) && !defined(__ARM__)
 s8 vm_call_method_long_jvalue(methodinfo *m, java_objectheader *o,
                                                          const jvalue *args)
 {
@@ -3841,7 +3841,7 @@ int64_t vm_call_method_long_jvalue(methodinfo *m, java_objectheader *o,
 
 *******************************************************************************/
 
-#if !defined(__MIPS__) && !defined(__X86_64__) && !defined(__POWERPC64__) && !defined(__SPARC_64__) && !defined(__M68K__) & !defined(__ARM__)
+#if !defined(__MIPS__) && !defined(__X86_64__) && !defined(__POWERPC64__) && !defined(__SPARC_64__) && !defined(__M68K__) && !defined(__ARM__)
 float vm_call_method_float_vmarg(methodinfo *m, s4 vmargscount, vm_arg *vmargs)
 {
        float f;
@@ -3929,7 +3929,7 @@ float vm_call_method_float(methodinfo *m, java_objectheader *o, ...)
 
 *******************************************************************************/
 
-#if !defined(__MIPS__) && !defined(__X86_64__) && !defined(__POWERPC64__) && !defined(__SPARC_64__) && !defined(__M68K__) & !defined(__ARM__)
+#if !defined(__MIPS__) && !defined(__X86_64__) && !defined(__POWERPC64__) && !defined(__SPARC_64__) && !defined(__M68K__) && !defined(__ARM__)
 float vm_call_method_float_valist(methodinfo *m, java_objectheader *o,
                                                                  va_list ap)
 {
@@ -3998,7 +3998,7 @@ float vm_call_method_float_valist(methodinfo *m, java_objectheader *o, va_list a
 
 *******************************************************************************/
 
-#if !defined(__MIPS__) && !defined(__X86_64__) && !defined(__POWERPC64__) && !defined(__SPARC_64__) && !defined(__M68K__) & !defined(__ARM__)
+#if !defined(__MIPS__) && !defined(__X86_64__) && !defined(__POWERPC64__) && !defined(__SPARC_64__) && !defined(__M68K__) && !defined(__ARM__)
 float vm_call_method_float_jvalue(methodinfo *m, java_objectheader *o,
                                                                  const jvalue *args)
 {
@@ -4068,7 +4068,7 @@ float vm_call_method_float_jvalue(methodinfo *m, java_objectheader *o, const jva
 
 *******************************************************************************/
 
-#if !defined(__MIPS__) && !defined(__X86_64__) && !defined(__POWERPC64__) && !defined(__SPARC_64__) && !defined(__M68K__) & !defined(__ARM__)
+#if !defined(__MIPS__) && !defined(__X86_64__) && !defined(__POWERPC64__) && !defined(__SPARC_64__) && !defined(__M68K__) && !defined(__ARM__)
 double vm_call_method_double_vmarg(methodinfo *m, s4 vmargscount,
                                                                   vm_arg *vmargs)
 {
@@ -4158,7 +4158,7 @@ double vm_call_method_double(methodinfo *m, java_objectheader *o, ...)
 
 *******************************************************************************/
 
-#if !defined(__MIPS__) && !defined(__X86_64__) && !defined(__POWERPC64__) && !defined(__SPARC_64__) && !defined(__M68K__) & !defined(__ARM__)
+#if !defined(__MIPS__) && !defined(__X86_64__) && !defined(__POWERPC64__) && !defined(__SPARC_64__) && !defined(__M68K__) && !defined(__ARM__)
 double vm_call_method_double_valist(methodinfo *m, java_objectheader *o,
                                                                        va_list ap)
 {
@@ -4228,7 +4228,7 @@ double vm_call_method_double_valist(methodinfo *m, java_objectheader *o, va_list
 
 *******************************************************************************/
 
-#if !defined(__MIPS__) && !defined(__X86_64__) && !defined(__POWERPC64__) && !defined(__SPARC_64__) && !defined(__M68K__) & !defined(__ARM__)
+#if !defined(__MIPS__) && !defined(__X86_64__) && !defined(__POWERPC64__) && !defined(__SPARC_64__) && !defined(__M68K__) && !defined(__ARM__)
 double vm_call_method_double_jvalue(methodinfo *m, java_objectheader *o,
                                                                        const jvalue *args)
 {
index 93d0d89f812fdbf9f718bc113c1ab76e0c695a8e..fde0458bab9d57b9960c9870769d021fe8012a50 100644 (file)
@@ -104,7 +104,7 @@ void vm_exit_handler(void);
 void vm_abort(const char *text, ...);
 
 /* Java method calling functions */
-#if !defined(__MIPS__) && !defined(__X86_64__) && !defined(__POWERPC64__) && !defined(__SPARC_64__) && !defined(__M68K__) & !defined(__ARM__)
+#if !defined(__MIPS__) && !defined(__X86_64__) && !defined(__POWERPC64__) && !defined(__SPARC_64__) && !defined(__M68K__) && !defined(__ARM__)
 bool vm_vmargs_from_objectarray(methodinfo *m, java_objectheader *o,
                                                                vm_arg *vmargs, java_objectarray *params);
 #else
@@ -118,7 +118,7 @@ java_objectheader *vm_call_method_valist(methodinfo *m, java_objectheader *o,
 java_objectheader *vm_call_method_jvalue(methodinfo *m, java_objectheader *o,
                                                                                 const jvalue *args);
 
-#if !defined(__MIPS__) && !defined(__X86_64__) && !defined(__POWERPC64__) && !defined(__SPARC_64__) && !defined(__M68K__) & !defined(__ARM__)
+#if !defined(__MIPS__) && !defined(__X86_64__) && !defined(__POWERPC64__) && !defined(__SPARC_64__) && !defined(__M68K__) && !defined(__ARM__)
 java_objectheader *vm_call_method_vmarg(methodinfo *m, s4 vmargscount,
                                                                                vm_arg *vmargs);
 s4 vm_call_method_int_vmarg(methodinfo *m, s4 vmargscount, vm_arg *vmargs);
index f8604a31c49a1181af8ef1f8f979c96849f2f84c..aef6f648e4eb3c2e8e3f68ff53a6848d6413a840 100644 (file)
@@ -22,7 +22,7 @@
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
    02110-1301, USA.
 
-   $Id: class.c 8140 2007-06-25 13:26:23Z michi $
+   $Id: class.c 8179 2007-07-05 11:21:08Z michi $
 
 */
 
@@ -228,13 +228,13 @@ classinfo *class_create_classinfo(utf *classname)
        /* check if the class is a reference class and flag it */
 
        if (classname == utf_java_lang_ref_SoftReference) {
-               c->flags |= ACC_CLASS_SOFT_REFERENCE;
+               c->flags |= ACC_CLASS_REFERENCE_SOFT;
        }
        else if (classname == utf_java_lang_ref_WeakReference) {
-               c->flags |= ACC_CLASS_WEAK_REFERENCE;
+               c->flags |= ACC_CLASS_REFERENCE_WEAK;
        }
        else if (classname == utf_java_lang_ref_PhantomReference) {
-               c->flags |= ACC_CLASS_PHANTOM_REFERENCE;
+               c->flags |= ACC_CLASS_REFERENCE_PHANTOM;
        }
 #endif
 
@@ -1529,6 +1529,37 @@ bool class_isanysubclass(classinfo *sub, classinfo *super)
 }
 
 
+/* class_is_array **************************************************************
+
+   Checks if the given class is an array class.
+
+*******************************************************************************/
+
+bool class_is_array(classinfo *c)
+{
+       if (!(c->state & CLASS_LINKED))
+               if (!link_class(c))
+                       return false;
+
+       return (c->vftbl->arraydesc != NULL);
+}
+
+
+/* class_is_interface **********************************************************
+
+   Checks if the given class is an interface.
+
+*******************************************************************************/
+
+bool class_is_interface(classinfo *c)
+{
+       if (c->flags & ACC_INTERFACE)
+               return true;
+
+       return false;
+}
+
+
 /* class_printflags ************************************************************
 
    Prints flags of a class.
index f2eb87f2199c4ba3d68ea6f7d9d10d4f630f7f39..5d12c30c839f3ae31fb6184ee0b04f7283a36049 100644 (file)
@@ -22,7 +22,7 @@
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
    02110-1301, USA.
 
-   $Id: class.h 8140 2007-06-25 13:26:23Z michi $
+   $Id: class.h 8179 2007-07-05 11:21:08Z michi $
 
 */
 
@@ -352,6 +352,8 @@ methodinfo *class_resolveinterfacemethod(classinfo *c, utf *name, utf *dest, cla
 
 bool class_issubclass(classinfo *sub, classinfo *super);
 bool class_isanysubclass(classinfo *sub, classinfo *super);
+bool class_is_array(classinfo *c);
+bool class_is_interface(classinfo *c);
 
 /* some debugging functions */
 
index 14841d39b8d29d4c26687996bf542daa8a870b97..badd0ed20cc9782cbe33191405a79f662da70b76 100644 (file)
@@ -22,7 +22,7 @@
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
    02110-1301, USA.
 
-   $Id: linker.c 8123 2007-06-20 23:50:55Z michi $
+   $Id: linker.c 8179 2007-07-05 11:21:08Z michi $
 
 */
 
@@ -576,9 +576,11 @@ static classinfo *link_class_intern(classinfo *c)
                        if (!link_class(super))
                                return NULL;
 
-               /* OR the ACC_CLASS_HAS_POINTERS flag */
+               /* OR the ACC_CLASS_HAS_POINTERS and the ACC_CLASS_REFERENCE_*
+                  flags. */
 
-               c->flags |= (super->flags & ACC_CLASS_HAS_POINTERS);
+               c->flags |= (super->flags &
+                                        (ACC_CLASS_HAS_POINTERS | ACC_CLASS_REFERENCE_MASK));
 
                /* handle array classes */
 
index 09bc6723474b96c11fa16099d567662bcf104f14..f95286c2ff989f4cef76ec7ce115b618ec69d7e3 100644 (file)
@@ -22,7 +22,7 @@
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
    02110-1301, USA.
 
-   $Id: options.c 8134 2007-06-22 14:49:10Z twisti $
+   $Id: options.c 8174 2007-07-01 17:49:25Z twisti $
 
 */
 
@@ -307,15 +307,15 @@ s4 options_get(opt_struct *opts, JavaVMInitArgs *vm_args)
 
 void options_xx(const char *name)
 {
-       char    *start;
-       char    *end;
-       int32_t  length;
-       int32_t  enable;
-       char    *value;
-       int32_t  option;
-       char    *filename;
-       FILE    *file;
-       int32_t  i;
+       const char *start;
+       char       *end;
+       int32_t     length;
+       int32_t     enable;
+       char       *value;
+       int32_t     option;
+       char       *filename;
+       FILE       *file;
+       int32_t     i;
 
        /* Check if the option is a boolean option. */