[kaffe] Linux/x86 (GCC 4.1.1) and Cygwin

Kazuyuki Shudo 2006 at shudo.net
Mon Jul 3 20:41:11 PDT 2006


Hi all,

I could succeessfully compile Kaffe with GCC 4.1.1 and it seems to run
correctly on Linux/x86. The platform is the development version toward
Fedora Core 6.

See the patch attached to this message. The patch is for around CVS
HEAD as of June 27.

With the patch, we can also build and run Kaffe on Cygwin. Note that
GTK+ in the current Cygwin is not new enough to support GTK peers of
Kaffe. The configure script requires the --disable-gtk-peer option.

On Cygwin, Kaffe can be compiled but it is not very stable. Small
programs run but medium-scale ones will not. Additionally, Jikes has
to be patched. Jikes 1.22 tweaks inode values returned by Cygwin but
the tweak is harmful today.

With GCC 4.1.1 on Linux/x86, the most serious problem was the return
value of __builtin_frame_address(0). The intrinsic function of GCC
4.1.1 returns %ebp - 12, not the very value of %ebp. This behaviour
seems to be specific to the argument 0. The argument 1 is also proper
for Kaffe and works fine.

The patch is not well sorted out and it contains over 10 tweaks and
printf lines for debugging. I hope someone digests the patch and
incorporates the changes into Kaffe.

Cheers,

  Kazuyuki Shudo	2006 at shudo.net		http://www.shudo.net/
-------------- next part --------------
--- ./m4/libtool.m4.orig	2005-12-19 12:54:22.000000000 +0900
+++ ./m4/libtool.m4	2006-07-02 20:43:43.000000000 +0900
@@ -1312,7 +1312,7 @@
     # DLL is installed to $(libdir)/../bin by postinstall_cmds
     postinstall_cmds='base_file=`basename \${file}`~
       dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~
-      dldir=$destdir/`dirname \$dlpath`~
+      dldir=$destdir/~
       test -d \$dldir || mkdir -p \$dldir~
       $install_prog $dir/$dlname \$dldir/$dlname~
       chmod a+x \$dldir/$dlname'
--- ./libraries/clib/native/gnu_classpath_VMStackWalker.c.orig	2005-05-31 06:16:04.000000000 +0900
+++ ./libraries/clib/native/gnu_classpath_VMStackWalker.c	2006-07-02 20:43:43.000000000 +0900
@@ -74,11 +74,26 @@
 	/* skip VMStackWalker; since we're only called from java code,
 	 * we cannot reach the end of the stack here.
 	 */
+#if 1
 	while ( (info[ret].meth == NULL) ||
 		(strcmp(CLASS_CNAME(info[ret].meth->class), "gnu/classpath/VMStackWalker") == 0))
 	{
 		ret++;
 	}
+#else
+	while (1) {
+		if (info[ret].meth == ENDOFSTACK) {
+			return NULL;
+		}
+
+		if ((info[ret].meth != NULL) &&
+			(!strcmp(CLASS_CNAME(info[ret].meth->class), "gnu/classpath/VMStackWalker") == 0)) {
+			break;
+		}
+
+		ret++;
+	}
+#endif
 
 	/* since the VMStackWalker methods are not called from native code,
 	 * we can assume that info[ret] is the frame of a java method.
--- ./libraries/javalib/external/classpath/native/Makefile.am.orig	2006-05-23 00:22:29.000000000 +0900
+++ ./libraries/javalib/external/classpath/native/Makefile.am	2006-07-02 20:43:43.000000000 +0900
@@ -12,6 +12,6 @@
   PLUGINDIR = plugin
 endif
 
-SUBDIRS = fdlibm $(JNIDIR) $(JAWTDIR) $(PLUGINDIR) target
-DIST_SUBDIRS = fdlibm jni jawt plugin target
+SUBDIRS = fdlibm $(JNIDIR) $(JAWTDIR) target
+DIST_SUBDIRS = fdlibm jni jawt target
 
--- ./libraries/javalib/external/classpath/native/Makefile.in.orig	2006-06-05 08:52:10.000000000 +0900
+++ ./libraries/javalib/external/classpath/native/Makefile.in	2006-07-02 20:43:43.000000000 +0900
@@ -284,8 +284,8 @@
 @CREATE_JNI_LIBRARIES_TRUE at JNIDIR = jni
 @CREATE_GTK_PEER_LIBRARIES_TRUE at JAWTDIR = jawt
 @CREATE_PLUGIN_TRUE at PLUGINDIR = plugin
-SUBDIRS = fdlibm $(JNIDIR) $(JAWTDIR) $(PLUGINDIR) target
-DIST_SUBDIRS = fdlibm jni jawt plugin target
+SUBDIRS = fdlibm $(JNIDIR) $(JAWTDIR) target
+DIST_SUBDIRS = fdlibm jni jawt target
 all: all-recursive
 
 .SUFFIXES:
--- ./libraries/javalib/external/classpath/java/io/PrintStream.java.orig	2006-04-03 09:51:03.000000000 +0900
+++ ./libraries/javalib/external/classpath/java/io/PrintStream.java	2006-07-02 20:43:43.000000000 +0900
@@ -117,12 +117,17 @@
     try {
 	this.encoding = SystemProperties.getProperty("file.encoding");
     } catch (SecurityException e){
-	this.encoding = "ISO8859_1";
+	this.encoding = "ISO_8859_1";
     } catch (IllegalArgumentException e){
-	this.encoding = "ISO8859_1";
+	this.encoding = "ISO_8859_1";
     } catch (NullPointerException e){
-	this.encoding = "ISO8859_1";
+	this.encoding = "ISO_8859_1";
     }
+
+    if (this.encoding == null) {
+	this.encoding = "ISO_8859_1";
+    }
+
     this.auto_flush = auto_flush;
   }
 
--- ./libraries/javalib/external/classpath/gnu/classpath/SystemProperties.java.orig	2006-04-18 22:32:58.000000000 +0900
+++ ./libraries/javalib/external/classpath/gnu/classpath/SystemProperties.java	2006-07-02 20:43:43.000000000 +0900
@@ -66,6 +66,9 @@
 
   static
   {
+    // temporally set
+    properties = defaultProperties;
+
     VMSystemProperties.preInit(defaultProperties);
 
     defaultProperties.put("gnu.classpath.home", Configuration.CLASSPATH_HOME);
@@ -104,7 +107,7 @@
 
     // 8859_1 is a safe default encoding to use when not explicitly set
     if (defaultProperties.get("file.encoding") == null)
-      defaultProperties.put("file.encoding", "8859_1");
+      defaultProperties.put("file.encoding", "ISO_8859_1");
 
     // XXX FIXME - Temp hack for old systems that set the wrong property
     if (defaultProperties.get("java.io.tmpdir") == null)
--- ./libraries/javalib/vmspecific/gnu/classpath/VMSystemProperties.java.orig	2006-05-23 00:22:53.000000000 +0900
+++ ./libraries/javalib/vmspecific/gnu/classpath/VMSystemProperties.java	2006-07-02 20:43:43.000000000 +0900
@@ -230,7 +230,7 @@
      * a good idea to process the properties specified on the command
      * line here.
      */
-    static native void postInit(Properties properties);
+  static void postInit(Properties properties) {}
 
 
   static native String getLocale();
--- ./config/i386/jit.h.orig	2006-03-24 05:00:19.000000000 +0900
+++ ./config/i386/jit.h	2006-07-02 20:43:43.000000000 +0900
@@ -41,7 +41,7 @@
 
 /* Get the first exception frame from a subroutine call */
 #define	FIRSTFRAME(f, o)						\
-	((f) = *(exceptionFrame*)__builtin_frame_address(0))
+	((f) = *(exceptionFrame*)__builtin_frame_address(1))
 
 /**/
 /* Method dispatch.  */
--- ./config/i386/cygwin32/jit-md.h.orig	2006-07-03 13:08:32.000000000 +0900
+++ ./config/i386/cygwin32/jit-md.h	2006-07-03 13:10:16.000000000 +0900
@@ -25,10 +25,10 @@
  * No signal handler support yet!!
  */
 #define	EXCEPTIONPROTO							\
-	int sig
+	int sig, siginfo_t *ctx, void *uc0
 
 #define	EXCEPTIONFRAME(f, c)						\
 	(f).retbp = 0;							\
-	(f).retpc = 0
+	(f).retpc = c->si_addr + 1
 
 #endif
--- ./config/i386/cygwin32/md.h.orig	2006-07-03 13:08:29.000000000 +0900
+++ ./config/i386/cygwin32/md.h	2006-07-03 13:09:26.000000000 +0900
@@ -31,8 +31,8 @@
 #undef SP_OFFSET
 #define	SP_OFFSET	7
 
-#define SIGNAL_ARGS(sig, sc) int sig
-#define SIGNAL_CONTEXT_POINTER(scp) int scp
+#define SIGNAL_ARGS(sig, sc) int sig, siginfo_t *sc, void *uc0
+#define SIGNAL_CONTEXT_POINTER(scp) siginfo_t **scp
 #define GET_SIGNAL_CONTEXT_POINTER(sc) (NULL)
 #define SIGNAL_PC(scp) (0)
 
--- ./config/i386/trampolines.S.orig	2005-09-14 20:53:16.000000000 +0900
+++ ./config/i386/trampolines.S	2006-07-02 20:43:43.000000000 +0900
@@ -39,7 +39,7 @@
         popl	%eax
 	push	%ebp
 	mov	%esp,%ebp
-#if defined(PIC)
+#if defined(PIC) && !defined(__CYGWIN__)
 	pushl	%ebx
 	call	.L2
      .L2:
--- ./kaffe/kaffevm/stackTrace.c.orig	2006-02-12 23:31:57.000000000 +0900
+++ ./kaffe/kaffevm/stackTrace.c	2006-07-03 14:39:03.000000000 +0900
@@ -56,19 +56,86 @@
 	struct _stackTrace trace;
 	stackTraceInfo* info;
 	struct _exceptionFrame orig;
+#ifdef __CYGWIN__
+	uintp excpc;
+	struct _jmethodID *excmeth = NULL;
+#endif
+
+#if 0
+cnt = 0x1234;
+printf("%d (0x%x) at %x\n", cnt, cnt, &cnt);
+{
+  unsigned int *p;
+  int i;
+
+  p = __builtin_frame_address(0);
+  for (i = 0; i <= 1; i++) {
+    printf("%p: %08x\n", p+i, p[i]);
+  }
+  p = __builtin_frame_address(1);
+  for (i = 0; i <= 1; i++) {
+    printf("%p: %08x\n", p+i, p[i]);
+  }
+  p = __builtin_frame_address(2);
+  for (i = 0; i <= 1; i++) {
+    printf("%p: %08x\n", p+i, p[i]);
+  }
+  p = __builtin_frame_address(3);
+  for (i = 0; i <= 1; i++) {
+    printf("%p: %08x\n", p+i, p[i]);
+  }
+}
+
+printf("__builtin_frame_address(0): %x\n", __builtin_frame_address(0));
+printf("__builtin_frame_address(1): %x\n", __builtin_frame_address(1));
+printf("__builtin_frame_address(2): %x\n", __builtin_frame_address(2));
+#endif
 
 	(void) orig;			/* avoid compiler warning in intrp */
 	DBG(STACKTRACE,
 	    dprintf("STACKTRACEINIT(trace, %p, %p, orig);\n", base, base); );
+#if 0
+printf("STACKTRACEINIT: base %p\n", base);
+#endif
 	STACKTRACEINIT(trace, base, base, orig);
 	cnt = 0;
+#if 0
+printf("  frame: %p\n", STACKTRACEFRAME(trace));
+printf("  fp:    %p\n", STACKTRACEFP(trace));
+printf("  on_current_stack: %s\n", (KTHREAD(on_current_stack)((void *)STACKTRACEFP(trace)) ? "true" : "false"));
+#endif
 	while(STACKTRACEFRAME(trace) && KTHREAD(on_current_stack) ((void *)STACKTRACEFP(trace))) {
 		cnt++;
 		STACKTRACESTEP(trace);
 	}
+#if 0
+printf("cnt: %d\n", cnt);
+#endif
+
+#ifdef __CYGWIN__
+	if (base != NULL) {
+		excpc = base->retpc;
+		excmeth = stacktraceFindMethod((uintp)NULL, excpc);
+#if 0
+		printf("  excpc: 0x%x\n", excpc);
+		printf("  method: %p", excmeth);
+		if (excmeth != NULL) {
+			printf(" %s#%s", excmeth->class->name->data,
+				excmeth->name->data);
+		}
+		printf("\n");
+#endif
+	}
+#endif
 
 	/* Build an array of stackTraceInfo */
-	info = gc_malloc(sizeof(stackTraceInfo) * (cnt+1), KGC_ALLOC_NOWALK);
+	{
+		int c = cnt + 1;
+#ifdef __CYGWIN__
+		if (excmeth != NULL) c++;
+#endif
+		info = gc_malloc(sizeof(stackTraceInfo) * c, KGC_ALLOC_NOWALK);
+	}
 	if (!info) {
 	    dprintf("buildStackTrace(%p): can't allocate stackTraceInfo\n",
 		    base);
@@ -81,10 +148,48 @@
 	    dprintf("STACKTRACEINIT(trace, &orig, %p, orig);\n", base); );
 	STACKTRACEINIT(trace, &orig, base, orig);
 
+#ifdef __CYGWIN__
+	int insertTried = 0;
+#endif
 	while (STACKTRACEFRAME(trace) && KTHREAD(on_current_stack) ((void *)STACKTRACEFP(trace))) {
 		info[cnt].pc = STACKTRACEPC(trace);
 		info[cnt].fp = STACKTRACEFP(trace);
+#if 0
+printf("%d: %p %p: ", cnt, info[cnt].fp, info[cnt].pc);
+#endif
 		info[cnt].meth = stacktraceFindMethod (info[cnt].fp, info[cnt].pc);
+#if 0
+if (info[cnt].meth != NULL)
+printf("%s#%s\n", info[cnt].meth->class->name->data, info[cnt].meth->name->data);
+else
+printf("null#null\n");
+#endif
+
+#ifdef __CYGWIN__
+		if (!insertTried
+		    && info[cnt].meth != NULL
+		    && excmeth != NULL
+		    && excmeth != info[cnt].meth) {
+#if 0
+printf("  insert %s#%s\n", excmeth->class->name->data, excmeth->name->data);
+#endif
+			/* insert */
+			info[cnt + 1] = info[cnt];
+
+			info[cnt].pc = excpc;
+#if 0
+printf("    fp: %p -> ", info[cnt].fp);
+#endif
+			info[cnt].fp = info[cnt - 1].fp;
+#if 0
+printf("%p\n", info[cnt].fp);
+#endif
+			 info[cnt].meth = excmeth;
+
+			 cnt++;
+		}
+#endif
+
 		cnt++;
 		STACKTRACESTEP(trace);
 	}
@@ -307,7 +412,11 @@
 	    }
 
 	    nextCause = unhand(o)->cause;
-	    if (nextCause != o)
+#if 0
+printf("printStackTrace(): o: %p, nextCause: %p\n", o, nextCause);
+fflush(stdout);
+#endif
+	    if (nextCause != NULL && nextCause != o)
 	      {
 		const char *className = CLASS_CNAME(OBJECT_CLASS((struct Hjava_lang_Object*)nextCause));
 		buf = checkPtr(KMALLOC(strlen(className) + 64));
@@ -334,7 +443,7 @@
 		  } else {
 		    throwError(&einfo);
 		  }
-		}
+                }
 		cptr = (jchar*)OBJARRAY_DATA(str);
 		for (j = len;  --j >= 0; ) {
 		  cptr[j] = (unsigned char)buf[j];
@@ -350,8 +459,8 @@
 		  }
 
 		KFREE(buf);
-	      }
-	  } while (nextCause != o);
+              }
+	  } while (nextCause != NULL && nextCause != o);
 	if (p != NULL || !nullOK) {
 	  do_execute_java_method(NULL, p, "flush", "()V", NULL, 0);
 	}
--- ./kaffe/kaffevm/jit/stackTrace-impl.h.orig	2006-07-03 13:12:32.000000000 +0900
+++ ./kaffe/kaffevm/jit/stackTrace-impl.h	2006-07-03 13:51:51.000000000 +0900
@@ -8,6 +8,14 @@
         struct _exceptionFrame* frame;
 } stackTrace;
 
+#ifdef __CYGWIN__
+#define STACKTRACEINIT(S, I, O, R)         \
+        {                                  \
+                FIRSTFRAME((S).nframe, O); \
+                (S).frame = &((S).nframe); \
+                (R) = *(S).frame;          \
+        }
+#else
 #define STACKTRACEINIT(S, I, O, R)                      \
         {                                               \
                 if ((I) == NULL) {                      \
@@ -18,6 +26,7 @@
                 }                                       \
                 (R) = *(S).frame;                       \
         }
+#endif
 
 #ifdef STACK_NEXT_FRAME
 #define STACKTRACESTEP(S)       (STACK_NEXT_FRAME((S).frame))
--- ./kaffe/kaffevm/baseClasses.c.orig	2006-04-22 10:53:40.000000000 +0900
+++ ./kaffe/kaffevm/baseClasses.c	2006-07-02 20:43:43.000000000 +0900
@@ -292,12 +292,12 @@
 	/* Setup exceptions */
 	initExceptions();
 
-	/* Init stuff for the java security model */
-	initialiseSecurity();
-
 	/* Init thread support */
 	initThreads();
 
+	/* Init stuff for the java security model */
+	initialiseSecurity();
+
 	/* Now enable collector */
 	KGC_enable(main_collector);
 }
--- ./kaffe/kaffevm/systems/unix-pthreads/signal.c.orig	2006-04-16 16:20:16.000000000 +0900
+++ ./kaffe/kaffevm/systems/unix-pthreads/signal.c	2006-07-03 13:12:16.000000000 +0900
@@ -457,7 +457,12 @@
 	
 	if (JTHREAD_SETJMP(outOfLoop) == 0)
 	{
+#ifdef __CYGWIN__
+	  /* getpagesize() of Cygwin 1.5.19-4 returns 0x10000, not 0x1000 */
+	  uintp pageSize = 0x1000;
+#else
 	  uintp pageSize = getpagesize();
+#endif
 
 	  guessPointer = (char *)((uintp)(&jtid) & ~(pageSize-1));
 	  
@@ -471,6 +476,11 @@
 	    kaffeNoopFunc(*guessPointer);
 	  }
 	}
+	else {
+#if defined(STACK_GROWS_UP)
+	  guessPointer += pageSize;
+#endif
+	}
 
 	/* Here we have detected one the boundary of the stack.
 	 * If stack grows up then it is the upper boundary. In the other
--- ./kaffe/kaffevm/systems/unix-pthreads/thread-impl.c.orig	2006-05-25 00:58:25.000000000 +0900
+++ ./kaffe/kaffevm/systems/unix-pthreads/thread-impl.c	2006-07-02 20:43:43.000000000 +0900
@@ -451,7 +451,7 @@
 
   if (SIGRTMAX - SIGRTMIN < 7)
     {
-#if defined(OLD_LINUXTHREADS)
+#if defined(OLD_LINUXTHREADS) && !defined(__CYGWIN__)
       sigSuspend = SIGURG;
       sigResume  = SIGTSTP;
       sigDump    = SIGXCPU;
@@ -474,8 +474,7 @@
 
 #endif
 
-      if (SIGRTMIN < 0)
-	sigInterrupt = SIGCONT;
+      sigInterrupt = SIGCONT;
     }
   else
     {
--- ./kaffe/kaffevm/findInJar.c.orig	2006-04-18 19:06:38.000000000 +0900
+++ ./kaffe/kaffevm/findInJar.c	2006-07-02 20:43:43.000000000 +0900
@@ -809,6 +809,11 @@
       const char* referenceName = "rt.jar";
       char *exeFilename = br_find_exe(NULL);
 
+#if 0
+printf("discoveredClassHome, ExeFilename: %s, %s\n",
+(discoveredClassHome == NULL ? "NULL" : discoveredClassHome),
+(exeFilename == NULL ? "NULL" : exeFilename));
+#endif
       strcpy(discoveredClassHome, exeFilename);
 
       while ((p = strrchr(discoveredClassHome, file_separator[0]))) {
--- ./kaffe/kaffevm/exception.c.orig	2006-07-03 13:26:13.000000000 +0900
+++ ./kaffe/kaffevm/exception.c	2006-07-03 13:26:52.000000000 +0900
@@ -94,7 +94,9 @@
 {
 	assert(eh != NULL);
 	assert(eh->meth == VMEXCEPTHANDLER_KAFFEJNI_HANDLER);
+#ifndef __CYGWIN__
 	assert(fp != (JNIFrameAddress)0);
+#endif
 
 	return (eh->frame.jni.fp == fp);
 }
--- ./kaffe/scripts/kaffe.in.orig	2005-12-06 05:54:03.000000000 +0900
+++ ./kaffe/scripts/kaffe.in	2006-07-02 20:43:43.000000000 +0900
@@ -84,7 +84,7 @@
 export KAFFELIBRARYPATH
 LD_LIBRARY_PATH="$KAFFE_LIBDIR"${LD_LIBRARY_PATH+"$PATHSEP$LD_LIBRARY_PATH"}
 export LD_LIBRARY_PATH
-PATH="$PATH:$KAFFE_LIBDIR" # MS-Windows DLLs must be in the PATH
+PATH="$PATH:$KAFFE_LIBDIR:$KAFFE_NATIVE_LIBRARY_DIR" # MS-Windows DLLs must be in the PATH
 export PATH
 
 # Slurp in system and user specific scripts
--- ./configure.orig	2006-06-06 00:21:22.000000000 +0900
+++ ./configure	2006-07-02 20:43:43.000000000 +0900
@@ -10014,7 +10014,7 @@
     # DLL is installed to $(libdir)/../bin by postinstall_cmds
     postinstall_cmds='base_file=`basename \${file}`~
       dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~
-      dldir=$destdir/`dirname \$dlpath`~
+      dldir=$destdir/~
       test -d \$dldir || mkdir -p \$dldir~
       $install_prog $dir/$dlname \$dldir/$dlname~
       chmod a+x \$dldir/$dlname'
@@ -13974,7 +13974,7 @@
     # DLL is installed to $(libdir)/../bin by postinstall_cmds
     postinstall_cmds='base_file=`basename \${file}`~
       dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~
-      dldir=$destdir/`dirname \$dlpath`~
+      dldir=$destdir/~
       test -d \$dldir || mkdir -p \$dldir~
       $install_prog $dir/$dlname \$dldir/$dlname~
       chmod a+x \$dldir/$dlname'
--- ./test/internal/Makefile.am.orig	2006-04-24 06:23:34.000000000 +0900
+++ ./test/internal/Makefile.am	2006-07-02 20:43:43.000000000 +0900
@@ -133,8 +133,9 @@
 MethodOptimizations.class: $(srcdir)/MethodOptimizations.java
 	$(JAVA_COMPILER) -g -classpath $(CPATH) -d . $(srcdir)/MethodOptimizations.java
 
-NativeMethodCall.class java/lang/System.class java/lang/VMSystem.class: $(srcdir)/NativeMethodCall.java   $(srcdir)/java/lang/VMSystem.java $(srcdir)/java/lang/System.java
-	$(JAVA_COMPILER) -g -classpath $(CPATH) -d . $(srcdir)/java/lang/VMSystem.java $(srcdir)/java/lang/System.java $(srcdir)/NativeMethodCall.java
+NativeMethodCall.class: $(srcdir)/NativeMethodCall.java
+	$(JAVA_COMPILER) -g -classpath $(CPATH) -d . $(srcdir)/NativeMethodCall.java
+	rm -f java/lang/*.class
 
 Exceptions.class: $(srcdir)/Exceptions.java
 	$(JAVA_COMPILER) -g -classpath $(CPATH) -d . $(srcdir)/Exceptions.java
@@ -142,7 +143,7 @@
 VirtualMethod.class: $(srcdir)/VirtualMethod.java
 	$(JAVA_COMPILER) -g -classpath $(CPATH) -d . $(srcdir)/VirtualMethod.java
 
-jit_stub.o: java/lang/System.class java/lang/VMSystem.class $(JAVA_CLASSES)
+jit_stub.o: $(JAVA_CLASSES)
 
 TESTS = $(check_PROGRAMS)
 
--- ./test/internal/Makefile.in.orig	2006-06-05 02:15:22.000000000 +0900
+++ ./test/internal/Makefile.in	2006-07-02 20:43:43.000000000 +0900
@@ -850,8 +850,9 @@
 MethodOptimizations.class: $(srcdir)/MethodOptimizations.java
 	$(JAVA_COMPILER) -g -classpath $(CPATH) -d . $(srcdir)/MethodOptimizations.java
 
-NativeMethodCall.class java/lang/System.class java/lang/VMSystem.class: $(srcdir)/NativeMethodCall.java   $(srcdir)/java/lang/VMSystem.java $(srcdir)/java/lang/System.java
-	$(JAVA_COMPILER) -g -classpath $(CPATH) -d . $(srcdir)/java/lang/VMSystem.java $(srcdir)/java/lang/System.java $(srcdir)/NativeMethodCall.java
+NativeMethodCall.class: $(srcdir)/NativeMethodCall.java
+	$(JAVA_COMPILER) -g -classpath $(CPATH) -d . $(srcdir)/NativeMethodCall.java
+	rm -f java/lang/*.class
 
 Exceptions.class: $(srcdir)/Exceptions.java
 	$(JAVA_COMPILER) -g -classpath $(CPATH) -d . $(srcdir)/Exceptions.java
@@ -859,7 +860,7 @@
 VirtualMethod.class: $(srcdir)/VirtualMethod.java
 	$(JAVA_COMPILER) -g -classpath $(CPATH) -d . $(srcdir)/VirtualMethod.java
 
-jit_stub.o: java/lang/System.class java/lang/VMSystem.class $(JAVA_CLASSES)
+jit_stub.o: $(JAVA_CLASSES)
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
 # Otherwise a system limit (for SysV at least) may be exceeded.
 .NOEXPORT:
--- ./test/internal/jit_stub.c.orig	2006-04-22 10:53:43.000000000 +0900
+++ ./test/internal/jit_stub.c	2006-07-02 20:43:43.000000000 +0900
@@ -94,76 +94,14 @@
 	}
 	vmargs.classpath = cp;
 
-	/* Machine specific initialisation first */
-#if defined(INIT_MD)
-	INIT_MD();
-#endif
-
 	Kaffe_JavaVMArgs = vmargs;
 	threadStackSize = Kaffe_JavaVMArgs.nativeStackSize;
-	
-	/* Register allocation types with gc subsystem */
-	main_collector = initCollector();
-	KGC_init(main_collector);
-
-	/* Initialise the (native) threading system */
-	initNativeThreads(threadStackSize);
-
-	/* Initialise the string and utf8 systems */
-	stringInit();
-	utf8ConstInit();
 
-#if defined(KAFFE_XDEBUGGING)
-	machine_debug_file = createDebugFile(machine_debug_filename);
-#endif
-	
-	/* Setup CLASSPATH */
-	initClasspath();
-
-	/* Init native support */
-	initNative();
-	
-	/* Create the initialise and finalize names and signatures. */
-	init_name = utf8ConstFromString("<clinit>");
-	final_name = utf8ConstFromString("finalize");
-	void_signature = utf8ConstFromString("()V");
-	constructor_name = utf8ConstFromString("<init>");
-	Code_name = utf8ConstFromString("Code");
-	LineNumberTable_name = utf8ConstFromString("LineNumberTable");
-	LocalVariableTable_name = utf8ConstFromString("LocalVariableTable");
-	ConstantValue_name = utf8ConstFromString("ConstantValue");
-	Exceptions_name = utf8ConstFromString("Exceptions");
-	SourceFile_name = utf8ConstFromString("SourceFile");
-	InnerClasses_name = utf8ConstFromString("InnerClasses");
-	Synthetic_name = utf8ConstFromString("Synthetic");
-	Signature_name = utf8ConstFromString("Signature");
-	EnclosingMethod_name = utf8ConstFromString("EnclosingMethod");
-
-	if (!(init_name && final_name && void_signature &&
-	      constructor_name && Code_name && LineNumberTable_name &&
-	      LocalVariableTable_name && ConstantValue_name &&
-	      Exceptions_name && SourceFile_name && InnerClasses_name &&
-	      Synthetic_name && Signature_name)) {
-		dprintf("not enough memory to run kaffe\n");
-		KAFFEVM_ABORT();
-	}
+	initialiseKaffe();
 
 	{
-		Hjava_lang_Thread mainThread;
 		parsedString testName;
 		char *tests;
-		int stackSize;
-		
-		initTypes();
-		loadStaticClass(&ObjectClass, "java/lang/Object");
-		loadStaticClass(&StringClass, "java/lang/String");
-		loadStaticClass(&SystemClass, "java/lang/System");
-		loadStaticClass(&javaLangFloatClass, "java/lang/Float");
-		loadStaticClass(&javaLangDoubleClass, "java/lang/Double");
-		loadStaticClass(&javaLangThrowable, "java/lang/Throwable");
-		loadStaticClass(&javaLangNullPointerException, "java/lang/NullPointerException");
-		loadStaticClass(&javaLangArrayIndexOutOfBoundsException, "java/lang/ArrayIndexOutOfBoundsException");
-		memset(&mainThread, 0, sizeof(mainThread));
 
 		if( (tests = getenv(TEST_CLASSES)) )
 		{
--- ./libltdl/ltmain.sh.orig	2005-12-19 12:54:20.000000000 +0900
+++ ./libltdl/ltmain.sh	2006-07-02 20:43:43.000000000 +0900
@@ -5658,7 +5658,8 @@
 	  # place dlname in correct position for cygwin
 	  tdlname=$dlname
 	  case $host,$output,$installed,$module,$dlname in
-	    *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;;
+	    *mingw*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;;
+#	    *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;;
 	  esac
 	  $echo > $output "\
 # $outputname - a libtool library file
-------------- next part --------------
--- ./doc/jikes.1.orig	2004-03-02 18:02:11.000000000 +0900
+++ ./doc/jikes.1	2006-06-29 12:06:24.000000000 +0900
@@ -185,7 +185,7 @@
 compatibility to older virtual machines, and some source constructs
 will be compiled to less efficient workarounds in order to avoid known
 virtual machine bugs or deficiencies.  However, a lower target may
-occaisionally produce incorrect semantic behavior.  Furthermore, some
+occasionally produce incorrect semantic behavior.  Furthermore, some
 language features require virtual machine support, where there are no
 known workarounds in earlier releases: the assert statement requires
 1.4 (unless you also use \fB\-noassert\fP), and the planned addition
--- ./src/platform.cpp.orig	2006-06-29 16:51:28.000000000 +0900
+++ ./src/platform.cpp	2006-06-29 16:51:56.000000000 +0900
@@ -201,6 +201,7 @@
 int SystemStat(const char* name, struct stat* stat_struct)
 {
     int result = ::stat(name, stat_struct);
+#if 0
 #ifdef HAVE_SYS_CYGWIN_H
     //
     // Up through cygwin 1.3.10, the hash function which determines inodes
@@ -210,6 +211,7 @@
     if (result == 0)
         stat_struct -> st_ino += name[strlen(name) - 1];
 #endif // HAVE_SYS_CYGWIN_H
+#endif
     return result;
 }
 
--- ./src/decl.cpp.orig	2004-09-27 07:40:41.000000000 +0900
+++ ./src/decl.cpp	2006-06-29 12:06:24.000000000 +0900
@@ -1,4 +1,4 @@
-// $Id: decl.cpp,v 1.144 2004/09/26 22:40:41 elliott-oss Exp $
+// $Id: decl.cpp,v 1.145 2004/10/09 18:04:50 elliott-oss Exp $
 //
 // This software is subject to the terms of the IBM Jikes Compiler
 // License Agreement available at the following URL:
@@ -2596,7 +2596,9 @@
     //
     if (control.option.deprecation &&
         hidden_method -> IsDeprecated() &&
-        ! method -> containing_type -> file_symbol -> IsClassOnly())
+        ! method -> containing_type -> file_symbol -> IsClassOnly() &&
+        ! method -> IsDeprecated() &&
+        ! InDeprecatedContext())
     {
         ReportSemError(SemanticError::DEPRECATED_METHOD_OVERRIDE,
                        left_tok, right_tok, method -> Header(),
--- ./src/error.cpp.orig	2004-09-27 07:40:41.000000000 +0900
+++ ./src/error.cpp	2006-06-29 12:06:24.000000000 +0900
@@ -1,4 +1,4 @@
-// $Id: error.cpp,v 1.159 2004/09/26 22:40:41 elliott-oss Exp $
+// $Id: error.cpp,v 1.160 2004/10/10 02:59:40 elliott-oss Exp $
 //
 // This software is subject to the terms of the IBM Jikes Compiler
 // License Agreement available at the following URL:
@@ -513,6 +513,7 @@
     warning[DEPRECATED_FIELD] = WEAK_WARNING;
     warning[DEPRECATED_METHOD] = WEAK_WARNING;
     warning[DEPRECATED_CONSTRUCTOR] = WEAK_WARNING;
+    warning[DEPRECATED_METHOD_OVERRIDE] = WEAK_WARNING;
 
     warning[UNNECESSARY_TYPE_IMPORT] = WEAK_WARNING;
     warning[MULTIPLE_PUBLIC_TYPES] = WEAK_WARNING;
--- ./src/symbol.h.orig	2006-06-29 12:10:55.000000000 +0900
+++ ./src/symbol.h	2006-06-29 14:28:56.000000000 +0900
@@ -1106,7 +1106,7 @@
     //
     bool IsInner() const
     {
-        assert((! IsLocal() && ! Anonymous()) ||
+        assert((! IsLocal()) ||
                (IsNested() && ! ACC_STATIC()));
         return IsNested() && ! ACC_STATIC();
     }


More information about the kaffe mailing list