Partial MIPS support and debugging fixes.

Lee Iverson kaffe@rufus.w3.org
Mon, 20 Jul 1998 15:47:24 -0700


There are two pieces to this patch:

Part 1 enables Kaffe to be compiled with gcc using the MIPS N32
calling convention.  It includes the changes to config/mips and also a
fic for configure.in which makes sure that -lsocket and -lnsl are only
used when necessary.  With these patches, the Kaffe 1.0b1 release runs
HelloWorldApp on an SGI under Irix 6.x!  It doesn't quite get to a
complete javac run -- that's next.

Part 2 is a set of fixes to debug calls so that they use dprintf()
instead of printf().  This ensures that debugging traces aren;t being
printed to two different streams (stderr and stdout) so that they will
remain in proper order independent of tty/piped output.

-------------------------------------------------------------------------------
Lee Iverson     		SRI International
leei@ai.sri.com			333 Ravenswood Ave., Menlo Park CA 94025
http://www.ai.sri.com/~leei/	(650) 859-3307

=== PART 1 ===

*** config/mips/common.h.orig	Tue Mar 31 11:10:53 1998
--- config/mips/common.h	Mon Jul 20 15:23:51 1998
***************
*** 13,91 ****
  #define __mips_common_h
  
! /*
!  * Make a call to a native or Java (JIT) method.
!  *  This assembly code should build a standard C call using the passed
!  *  call information.  By its nature this is highly processor specific.
!  *  This function is mandatory for the JIT, but can be avoided for
!  *  the interpreter if you don't define NO_KAFFE_STUBS.  However, the
!  *  Kaffe stubs will be deprecated at some time in the future and
!  *  this function will be needed for JNI support when it comes.
!  */
! #define	NO_KAFFE_STUBS
! #define	sysdepCallMethod(CALL)						\
! 	asm volatile ("							\n\
! 	" :								\
! 	  : "r" ((CALL)->nrargs),					\
! 	    "r" ((CALL)->args),						\
! 	    "r" ((CALL)->callsize),					\
! 	    "m" ((CALL)->function),					\
! 	    "m" ((CALL)->rettype),					\
! 	    "m" ((CALL)->ret)						\
! 	  : "eax", "ebx", "ecx", "edx", "edi", "esi", "cc", "memory");	\
! 	asm volatile ("							\n\
! 	" : : "r" ((CALL)->argsize * sizeof(jint)) : "cc")
  
! #define	CALL_KAFFE_FUNCTION_VARARGS(meth, obj, nargs, argptr, retval)	\
! 	asm volatile ("							\n\
! 		addiu $sp, $sp, -96 					\n\
! 		sw $16, 8($sp)						\n\
! 		sw $17, 12($sp)						\n\
! 		sw $18, 16($sp)						\n\
! 		sw $19, 20($sp)						\n\
! 		sw $20, 24($sp)						\n\
! 		sw $21, 28($sp)						\n\
! 		sw $22, 32($sp)						\n\
! 		sw $23, 36($sp)						\n\
! 		swc1 $f20, 40($sp)					\n\
! 		swc1 $f21, 44($sp)					\n\
! 		swc1 $f22, 48($sp)					\n\
! 		swc1 $f23, 52($sp)					\n\
! 		swc1 $f24, 56($sp)					\n\
! 		swc1 $f25, 60($sp)					\n\
! 		swc1 $f26, 64($sp)					\n\
! 		swc1 $f27, 68($sp)					\n\
! 		swc1 $f28, 72($sp)					\n\
! 		swc1 $f29, 76($sp)					\n\
! 		swc1 $f30, 80($sp)					\n\
! 		swc1 $f31, 84($sp)					\n\
! 		lw $5, 0(%2)						\n\
! 		lw $6, 4(%2)						\n\
! 		lw $7, 8(%2)						\n\
!                 move $4, %0                                             \n\
!                 move $25, %1                                            \n\
!                 jal $25                                                 \n\
! 		lwc1 $f31, 84($sp)					\n\
! 		lwc1 $f30, 80($sp)					\n\
! 		lwc1 $f29, 76($sp)					\n\
! 		lwc1 $f28, 72($sp)					\n\
! 		lwc1 $f27, 68($sp)					\n\
! 		lwc1 $f26, 64($sp)					\n\
! 		lwc1 $f25, 60($sp)					\n\
! 		lwc1 $f24, 56($sp)					\n\
! 		lwc1 $f23, 52($sp)					\n\
! 		lwc1 $f22, 48($sp)					\n\
! 		lwc1 $f21, 44($sp)					\n\
! 		lwc1 $f20, 40($sp)					\n\
! 		lw $23, 8($sp)						\n\
! 		lw $22, 12($sp)						\n\
! 		lw $21, 16($sp)						\n\
! 		lw $20, 20($sp)						\n\
! 		lw $19, 24($sp)						\n\
! 		lw $18, 28($sp)						\n\
! 		lw $17, 32($sp)						\n\
! 		lw $16, 36($sp)						\n\
!                 addiu $sp, $sp, 96 					\n\
! 	" : : "r" (obj), "r" (meth->ncode), "r" (argptr) :		\
! 		"$4", "$5", "$6", "$7", "$25")
  
  #endif
--- 13,21 ----
  #define __mips_common_h
  
! #include <stddef.h>
  
! #if _MIPS_SIM == _MIPS_SIM_NABI32
! #define sysdepCallMethod(CALL) mipsN32CallMethod(CALL)
! #endif /* _MIPS_SIM == _MIPS_SIM_NABI32 */
  
  #endif
*** config/mips/irix5/md.c.orig	Tue Mar 31 11:10:53 1998
--- config/mips/irix5/md.c	Thu Jul 16 11:57:26 1998
***************
*** 9,10 ****
--- 9,12 ----
   * of this file. 
   */
+ 
+ #include "mips/mips.c"
*** config/mips/irix5/md.h.orig	Mon Apr  6 23:41:15 1998
--- config/mips/irix5/md.h	Thu Jul 16 11:32:28 1998
***************
*** 14,29 ****
  
  #include "mips/threads.h"
! 
! #ifdef SP_OFFSET
! #undef SP_OFFSET
! #endif
! 
! #ifdef FP_OFFSET
! #undef FP_OFFSET
! #endif
! 
! /* Determined on a SGI running IRIX 6.2 */ 
! #define SP_OFFSET               2
! #define FP_OFFSET               13
  
  #endif
--- 14,18 ----
  
  #include "mips/threads.h"
! #include "mips/common.h"
  
  #endif
*** config/mips/mips.c.orig	Tue Mar 31 11:10:53 1998
--- config/mips/mips.c	Mon Jul 20 15:24:46 1998
***************
*** 10,13 ****
--- 10,20 ----
   */
  
+ #include "config.h"
+ #include "config-std.h"
+ #include "config-mem.h"
+ #include "jtypes.h"
+ #include "object.h"
+ #include "support.h"
+ 
  #ifndef inline
  # define inline
***************
*** 20,21 ****
--- 27,204 ----
    return 2;
  }
+ 
+ #if _MIPS_SIM == _MIPS_SIM_NABI32
+ void
+ mipsN32CallMethod (callMethodInfo *CALL)
+ {
+   typedef long long regword;
+   int i, nrargs;
+   for (i = 0, nrargs = 0; i < (CALL)->nrargs; ++i) {
+     if ((CALL)->callsize[i] != 0) {
+       if (i > nrargs) {
+ 	(CALL)->args[nrargs] = (CALL)->args[i];
+ 	(CALL)->callsize[nrargs] = (CALL)->callsize[i];
+ 	(CALL)->calltype[nrargs] = (CALL)->calltype[i];
+       }
+       ++nrargs;
+     }
+   }
+   {
+     register int	iret	__asm__("$2");
+     register regword	jret	__asm__("$2");
+     register float	fret	__asm__("$f0");
+     register double	dret	__asm__("$f0");
+     register int	i0	__asm__("$4");
+     register regword	j0	__asm__("$4");
+     register int	i1	__asm__("$5");
+     register regword	j1	__asm__("$5");
+     register int	i2	__asm__("$6");
+     register regword	j2	__asm__("$6");
+     register int	i3	__asm__("$7");
+     register regword	j3	__asm__("$7");
+     register int	i4	__asm__("$8");
+     register regword	j4	__asm__("$8");
+     register int	i5	__asm__("$9");
+     register regword	j5	__asm__("$9");
+     register int	i6	__asm__("$10");
+     register regword	j6	__asm__("$10");
+     register int	i7	__asm__("$11");
+     register regword	j7	__asm__("$11");
+     register regword*	sp	__asm__("sp");
+     register regword*	gp	__asm__("gp");
+     register regword*	ra	__asm__("ra");
+     register regword	(*t9)()	__asm__("$25");
+     regword* curr_sp = sp;
+     regword* curr_gp = gp;
+     regword* curr_ra = ra;
+ 
+     switch (nrargs) {
+     default:
+     {
+       regword *argspace = __builtin_alloca((nrargs-8)*sizeof (regword));
+       regword *argframe = (regword *)sp;
+       regword *args = argframe;
+       int argidx = 8;
+       for (; argidx < nrargs; ++argidx, ++args) {
+ 	if ((CALL)->calltype[argidx] == 'F')
+ 	  *(float*)args = (CALL)->args[argidx].f;
+ 	else if ((CALL)->calltype[argidx] == 'D')
+ 	  *(double*)args = (CALL)->args[argidx].d;
+ 	else if ((CALL)->callsize[argidx] == 2)
+ 	  *args = (CALL)->args[argidx].j;
+ 	else
+ 	  *args = (CALL)->args[argidx].i;
+       }
+     }
+     case 8:
+       if ((CALL)->calltype[7] == 'D')
+         asm volatile ("l.d $f19,%0" : : "m" ((CALL)->args[7].d));
+       else if ((CALL)->calltype[7] == 'F')
+         asm volatile ("l.s $f19,%0" : : "m" ((CALL)->args[7].f));
+       if ((CALL)->callsize[7] == 2)
+ 	j7 = (CALL)->args[7].j;
+       else
+ 	i7 = (CALL)->args[7].i;
+     case 7:
+       if ((CALL)->calltype[6] == 'D')
+         asm volatile ("l.d $f18,%0" : : "m" ((CALL)->args[6].d));
+       else if ((CALL)->calltype[6] == 'F')
+         asm volatile ("l.s $f18,%0" : : "m" ((CALL)->args[6].f));
+       if ((CALL)->callsize[6] == 2)
+ 	j6 = (CALL)->args[6].j;
+       else
+ 	i6 = (CALL)->args[6].i;
+     case 6:
+       if ((CALL)->calltype[5] == 'D')
+         asm volatile ("l.d $f17,%0" : : "m" ((CALL)->args[5].d));
+       else if ((CALL)->calltype[5] == 'F')
+         asm volatile ("l.s $f17,%0" : : "m" ((CALL)->args[5].f));
+       if ((CALL)->callsize[5] == 2)
+ 	j5 = (CALL)->args[5].j;
+       else
+ 	i5 = (CALL)->args[5].i;
+     case 5:
+       if ((CALL)->calltype[4] == 'D')
+         asm volatile ("l.d $f16,%0" : : "m" ((CALL)->args[4].d));
+       else if ((CALL)->calltype[4] == 'F')
+         asm volatile ("l.s $f16,%0" : : "m" ((CALL)->args[4].f));
+       if ((CALL)->callsize[4] == 2)
+ 	j4 = (CALL)->args[4].j;
+       else
+ 	i4 = (CALL)->args[4].i;
+     case 4:
+       if ((CALL)->calltype[3] == 'D')
+         asm volatile ("l.d $f15,%0" : : "m" ((CALL)->args[3].d));
+       else if ((CALL)->calltype[3] == 'F')
+         asm volatile ("l.s $f15,%0" : : "m" ((CALL)->args[3].f));
+       if ((CALL)->callsize[3] == 2)
+ 	j3 = (CALL)->args[3].j;
+       else
+ 	i3 = (CALL)->args[3].i;
+     case 3:
+       if ((CALL)->calltype[2] == 'D')
+         asm volatile ("l.d $f14,%0" : : "m" ((CALL)->args[2].d));
+       else if ((CALL)->calltype[2] == 'F')
+         asm volatile ("l.s $f14,%0" : : "m" ((CALL)->args[2].f));
+       if ((CALL)->callsize[2] == 2)
+ 	j2 = (CALL)->args[2].j;
+       else
+ 	i2 = (CALL)->args[2].i;
+     case 2:
+       if ((CALL)->calltype[1] == 'D')
+         asm volatile ("l.d $f13,%0" : : "m" ((CALL)->args[1].d));
+       else if ((CALL)->calltype[1] == 'F')
+         asm volatile ("l.s $f13,%0" : : "m" ((CALL)->args[1].f));
+       if ((CALL)->callsize[1] == 2)
+ 	j1 = (CALL)->args[1].j;
+       else
+ 	i1 = (CALL)->args[1].i;
+     case 1:
+       if ((CALL)->calltype[0] == 'D')
+         asm volatile ("l.d $f12,%0" : : "m" ((CALL)->args[0].d));
+       else if ((CALL)->calltype[0] == 'F')
+         asm volatile ("l.s $f12,%0" : : "m" ((CALL)->args[0].f));
+       if ((CALL)->callsize[0] == 2)
+ 	j0 = (CALL)->args[0].j;
+       else
+ 	i0 = (CALL)->args[0].i;
+     case 0:
+       /* call function with 1st 8 args */
+       asm ("" : :
+ 	   "r" (i0), "r" (i1), "r" (i2), "r" (i3),
+ 	   "r" (i4), "r" (i5), "r" (i6), "r" (i7));
+       asm ("" : :
+ 	   "r" (j0), "r" (j1), "r" (j2), "r" (j3),
+ 	   "r" (j4), "r" (j5), "r" (j6), "r" (j7));
+ 
+       (*(t9 = (CALL)->function))();
+ 
+       asm ("lw $31,%0" : : "m" (curr_ra));
+       asm ("lw $gp,%0" : : "m" (curr_gp));
+       asm ("lw $sp,%0" : : "m" (curr_sp));
+ 
+       if ((CALL)->retsize != 0) {
+ 	switch((CALL)->retsize) {
+ 	case 2:
+ 	  if ((CALL)->rettype == 'D')
+ 	    (CALL)->ret->d = dret;
+ 	  else {
+ 	    (CALL)->ret->j = jret;
+ 	  }
+ 	  break;
+ 	case 1:
+ 	  if ((CALL)->rettype == 'F')
+ 	    (CALL)->ret->f = fret;
+ 	  else
+ 	    (CALL)->ret->i = iret;
+ 	  break;
+ 	default:
+ 	  ABORT();
+ 	  break;
+ 	}
+       }
+       break;
+     }
+   }
+ }
+ #endif /* _MIPS_SIM == _MIPS_SIM_NABI32 */
*** config/mips/threads.h.orig	Wed Jul 15 20:43:48 1998
--- config/mips/threads.h	Thu Jul 16 11:38:54 1998
***************
*** 25,29 ****
   * stored.  This may be different with different OSes.
   */
! #define	SP_OFFSET		?
  
  #endif
--- 25,42 ----
   * stored.  This may be different with different OSes.
   */
! /*
!  * Stack offset.
!  * This is the offset into the setjmp buffer where the stack pointer is
!  * stored.  This may be different with different OSes.
!  */
! #if (_MIPS_SIM == _MIPS_SIM_ABI32)
! #define SP_OFFSET               2
! #define FP_OFFSET               13
! #endif
! 
! #if (_MIPS_SIM == _MIPS_SIM_ABI64 || _MIPS_SIM == _MIPS_SIM_NABI32)
! #define SP_OFFSET               1
! #define FP_OFFSET               23
! #endif
  
  #endif
*** configure.in.orig	Wed Jul 15 21:01:45 1998
--- configure.in	Wed Jul 15 21:12:44 1998
***************
*** 397,402 ****
  
  dnl Check for libraries for net library.
! AC_CHECK_LIBRARY(nsl,dial,NET_LIBRARIES)
! AC_CHECK_LIBRARY(socket,socket,NET_LIBRARIES)
  AC_SUBST(NET_LIBRARIES)
  
--- 397,408 ----
  
  dnl Check for libraries for net library.
! AC_CHECK_FUNC(gethostbyname)
! if test $ac_cv_func_gethostbyname = no; then
!       AC_CHECK_LIBRARY(nsl, gethostbyname, NET_LIBRARIES)
! fi
! AC_CHECK_FUNC(connect)
! if test $ac_cv_func_connect = no; then
!   AC_CHECK_LIBRARY(socket, connect, NET_LIBRARIES)
! fi
  AC_SUBST(NET_LIBRARIES)
  

=== PART 2 ===

*** kaffe/kaffevm/baseClasses.c.orig	Tue Jul 14 07:02:08 1998
--- kaffe/kaffevm/baseClasses.c	Mon Jul 20 11:57:40 1998
***************
*** 174,178 ****
  initExceptions(void)
  {
! DBG(INIT,	printf("initExceptions()\n");			)
  	if (DBGEXPR(EXCEPTION, false, true)) {
  	/* Catch signals we need to convert to exceptions */
--- 174,178 ----
  initExceptions(void)
  {
! DBG(INIT,	dprintf("initExceptions()\n");			)
  	if (DBGEXPR(EXCEPTION, false, true)) {
  	/* Catch signals we need to convert to exceptions */
*** kaffe/kaffevm/classMethod.c.orig	Sat Jul 11 23:29:04 1998
--- kaffe/kaffevm/classMethod.c	Mon Jul 20 11:57:40 1998
***************
*** 269,273 ****
  	/* Find the name of the class */
  	if (pool->tags[c] != CONSTANT_Class) {
! CDBG(		printf("setupClass: not a class.\n");			)
  		return (0);
  	}
--- 269,273 ----
  	/* Find the name of the class */
  	if (pool->tags[c] != CONSTANT_Class) {
! CDBG(		dprintf("setupClass: not a class.\n");			)
  		return (0);
  	}
***************
*** 347,356 ****
  	nc = m->name_index;
  	if (pool->tags[nc] != CONSTANT_Utf8) {
! MDBG(		printf("addMethod: no method name.\n");			)
  		return (0);
  	}
  	sc = m->signature_index;
  	if (pool->tags[sc] != CONSTANT_Utf8) {
! MDBG(		printf("addMethod: no signature name.\n");		)
  		return (0);
  	}
--- 347,356 ----
  	nc = m->name_index;
  	if (pool->tags[nc] != CONSTANT_Utf8) {
! MDBG(		dprintf("addMethod: no method name.\n");		)
  		return (0);
  	}
  	sc = m->signature_index;
  	if (pool->tags[sc] != CONSTANT_Utf8) {
! MDBG(		dprintf("addMethod: no signature name.\n");		)
  		return (0);
  	}
***************
*** 371,375 ****
  #endif
  
! MDBG(	printf("Adding method %s:%s%s (%x)\n", c->name->data, WORD2UTF(pool->data[nc])->data, WORD2UTF(pool->data[sc])->data, m->access_flags);	)
  
  	mt = &c->methods[c->nmethods++];
--- 371,375 ----
  #endif
  
! MDBG(	dprintf("Adding method %s:%s%s (%x)\n", c->name->data, WORD2UTF(pool->data[nc])->data, WORD2UTF(pool->data[sc])->data, m->access_flags);	)
  
  	mt = &c->methods[c->nmethods++];
***************
*** 406,410 ****
  	nc = f->name_index;
  	if (pool->tags[nc] != CONSTANT_Utf8) {
! FDBG(		printf("addField: no field name.\n");			)
  		return (0);
  	}
--- 406,410 ----
  	nc = f->name_index;
  	if (pool->tags[nc] != CONSTANT_Utf8) {
! FDBG(		dprintf("addField: no field name.\n");			)
  		return (0);
  	}
***************
*** 419,427 ****
  	ft = &CLASS_FIELDS(c)[index];
  
! FDBG(	printf("Adding field %s:%s\n", c->name, pool->data[nc].v.tstr);	)
  
  	sc = f->signature_index;
  	if (pool->tags[sc] != CONSTANT_Utf8) {
! FDBG(		printf("addField: no signature name.\n");		)
  		return (0);
  	}
--- 419,427 ----
  	ft = &CLASS_FIELDS(c)[index];
  
! FDBG(	dprintf("Adding field %s:%s\n", c->name, pool->data[nc].v.tstr);)
  
  	sc = f->signature_index;
  	if (pool->tags[sc] != CONSTANT_Utf8) {
! FDBG(		dprintf("addField: no signature name.\n");		)
  		return (0);
  	}
***************
*** 516,520 ****
  		Hjava_lang_String* str;
  
! LDBG(		printf("classLoader: loading %s\n", name->data); )
  		str = makeReplaceJavaStringFromUtf8(name->data, name->length, '/', '.');
  		clazz = (Hjava_lang_Class*)do_execute_java_method((Hjava_lang_Object*)loader, "loadClass", "(Ljava/lang/String;Z)Ljava/lang/Class;", 0, false, str, true).l;
--- 516,520 ----
  		Hjava_lang_String* str;
  
! LDBG(		dprintf("classLoader: loading %s\n", name->data); )
  		str = makeReplaceJavaStringFromUtf8(name->data, name->length, '/', '.');
  		clazz = (Hjava_lang_Class*)do_execute_java_method((Hjava_lang_Object*)loader, "loadClass", "(Ljava/lang/String;Z)Ljava/lang/Class;", 0, false, str, true).l;
***************
*** 523,527 ****
  		}
  		clazz->centry = centry;
! LDBG(		printf("classLoader: done\n");			)
  	} 
  
--- 523,527 ----
  		}
  		clazz->centry = centry;
! LDBG(		dprintf("classLoader: done\n");			)
  	} 
  
***************
*** 1052,1056 ****
  		fptr++;
  	}
! FDBG(	printf("Class:field lookup failed %s:%s\n", c, f);		)
  	return (0);
  }
--- 1052,1056 ----
  		fptr++;
  	}
! FDBG(	dprintf("Class:field lookup failed %s:%s\n", c, f);		)
  	return (0);
  }
*** kaffe/kaffevm/code-analyse.c.orig	Wed Jun 17 10:28:03 1998
--- kaffe/kaffevm/code-analyse.c	Mon Jul 20 11:57:40 1998
***************
*** 370,374 ****
  		if (sp < meth->localsz || sp > meth->localsz + meth->stacksz) {
  			failed = true;
! 			VDBG(printf("sp out of range: %d <%d> %d\n", meth->localsz, sp, meth->localsz + meth->stacksz);)
  			break;
  		}
--- 370,374 ----
  		if (sp < meth->localsz || sp > meth->localsz + meth->stacksz) {
  			failed = true;
! 			VDBG(dprintf("sp out of range: %d <%d> %d\n", meth->localsz, sp, meth->localsz + meth->stacksz);)
  			break;
  		}
***************
*** 390,394 ****
  		lclww = DWORD(pc+1);
  
! DBG(		printf("%d: %d\n", pc, INSN(pc));		)
  
  		switch (INSN(pc)) {
--- 390,394 ----
  		lclww = DWORD(pc+1);
  
! DBG(		dprintf("%d: %d\n", pc, INSN(pc));		)
  
  		switch (INSN(pc)) {
*** kaffe/kaffevm/constants.c.orig	Thu Jun  4 19:02:40 1998
--- kaffe/kaffevm/constants.c	Mon Jul 20 11:57:40 1998
***************
*** 49,53 ****
  
  	readu2(&info->size, fp);
! RDBG(	printf("constant_pool_count=%d\n", info->size);	)
  
  	/* Allocate space for tags and data */
--- 49,53 ----
  
  	readu2(&info->size, fp);
! RDBG(	dprintf("constant_pool_count=%d\n", info->size);	)
  
  	/* Allocate space for tags and data */
***************
*** 64,68 ****
  
  		readu1(&type, fp);
! RDBG(		printf("Constant type %d\n", type);			)
  		tags[i] = type;
  
--- 64,68 ----
  
  		readu1(&type, fp);
! RDBG(		dprintf("Constant type %d\n", type);			)
  		tags[i] = type;
  
*** kaffe/kaffevm/external.c.orig	Thu May 28 11:37:00 1998
--- kaffe/kaffevm/external.c	Mon Jul 20 11:57:40 1998
***************
*** 161,165 ****
  
  	if (libHandle[i].desc == 0) {
! LDBG(		printf("Library load failed: %s\n", LIBRARYERROR());	)
  		return (0);
  	}
--- 161,165 ----
  
  	if (libHandle[i].desc == 0) {
! LDBG(		dprintf("Library load failed: %s\n", LIBRARYERROR());	)
  		return (0);
  	}
***************
*** 209,214 ****
  	strcat(stub, STUB_POSTFIX);
  
! DBG(	printf("Method = %s.%s%s\n", m->class->name->data, m->name->data, m->signature->data);)
! DBG(	printf("Native stub = '%s'\n", stub);fflush(stdout);		)
  
  	/* Find the native method */
--- 209,214 ----
  	strcat(stub, STUB_POSTFIX);
  
! DBG(	dprintf("Method = %s.%s%s\n", m->class->name->data, m->name->data, m->signature->data);)
! DBG(	dprintf("Native stub = '%s'\n", stub);fflush(stdout);		)
  
  	/* Find the native method */
*** kaffe/kaffevm/findInJar.c.orig	Tue Jul 14 07:02:09 1998
--- kaffe/kaffevm/findInJar.c	Mon Jul 20 11:57:40 1998
***************
*** 86,90 ****
  
  	/* Look for the class */
! CDBG(	printf("Scanning for class %s\n", cname);		)
  
  	strcpy(buf, cname);
--- 86,90 ----
  
  	/* Look for the class */
! CDBG(	dprintf("Scanning for class %s\n", cname);		)
  
  	strcpy(buf, cname);
***************
*** 170,174 ****
  
  	/* Look for the class */
! CDBG(	printf("Scanning for element %s\n", cname);		)
  
  	/* One into the jar at once */
--- 170,174 ----
  
  	/* Look for the class */
! CDBG(	dprintf("Scanning for element %s\n", cname);		)
  
  	/* One into the jar at once */
***************
*** 179,183 ****
  		switch (ptr->type) {
  		case CP_ZIPFILE:
! ZDBG(			printf("Opening JAR file %s for %s\n", ptr->path, cname); )
  			if (ptr->u.jar == 0) {
  				ptr->u.jar = openJarFile(ptr->path);
--- 179,183 ----
  		switch (ptr->type) {
  		case CP_ZIPFILE:
! ZDBG(			dprintf("Opening JAR file %s for %s\n", ptr->path, cname); )
  			if (ptr->u.jar == 0) {
  				ptr->u.jar = openJarFile(ptr->path);
***************
*** 210,214 ****
  			strcat(buf, DIRSEP);
  			strcat(buf, cname);
! FDBG(			printf("Opening java file %s for %s\n", buf, cname); )
  			fp = open(buf, O_RDONLY|O_BINARY, 0);
  			if (fp < 0) {
--- 210,214 ----
  			strcat(buf, DIRSEP);
  			strcat(buf, cname);
! FDBG(			dprintf("Opening java file %s for %s\n", buf, cname); )
  			fp = open(buf, O_RDONLY|O_BINARY, 0);
  			if (fp < 0) {
***************
*** 355,359 ****
  	char* end;
  
! PDBG(	printf("initClasspath(): '%s'\n", cp);				)
  
  	for (;;) {
--- 355,359 ----
  	char* end;
  
! PDBG(	dprintf("initClasspath(): '%s'\n", cp);				)
  
  	for (;;) {
***************
*** 421,425 ****
  	classpathEntry* lptr;
  
! PDBG(	printf("addClasspath(): '%s'\n", cp);				)
  
  	lptr = 0;
--- 421,425 ----
  	classpathEntry* lptr;
  
! PDBG(	dprintf("addClasspath(): '%s'\n", cp);				)
  
  	lptr = 0;
*** kaffe/kaffevm/gc.c.orig	Tue Mar 31 11:10:53 1998
--- kaffe/kaffevm/gc.c	Thu Jul 16 17:10:50 1998
***************
*** 14,18 ****
  
  void*
! __malloc(size_t sz)
  {
  	return ((*Kaffe_GarbageCollectorInterface._malloc)(sz, GC_ALLOC_FIXED));
--- 14,18 ----
  
  void*
! __jmalloc(size_t sz)
  {
  	return ((*Kaffe_GarbageCollectorInterface._malloc)(sz, GC_ALLOC_FIXED));
***************
*** 20,24 ****
  
  void
! __free(void* mem)
  {
  	(*Kaffe_GarbageCollectorInterface._free)(mem);
--- 20,24 ----
  
  void
! __jfree(void* mem)
  {
  	(*Kaffe_GarbageCollectorInterface._free)(mem);
*** kaffe/kaffevm/intrp/checks.h.orig	Tue Mar 31 11:10:54 1998
--- kaffe/kaffevm/intrp/checks.h	Mon Jul 20 12:17:09 1998
***************
*** 13,42 ****
  #define	__checks_h
  
! #define	check_local_int(l)	CHDBG (printf ("- local %d: int %d\n", (l), local(l)->v.tint))
! #define	check_local_long(l)	CHDBG (printf ("- local %d: long %ld\n", (l), local_long(l)->v.tlong))
! #define	check_local_float(l)	CHDBG (printf ("- local %d: float %g\n", (l), local_float(l)->v.tfloat))
! #define	check_local_double(l)	CHDBG (printf ("- local %d: double %lg\n", (l), local_double(l)->v.tdouble))
! #define	check_local_ref(l)	CHDBG (printf ("- local %d: ref %p\n", (l), local(l)->v.taddr))
  
! #define	check_stack_int(l)	CHDBG (printf ("- stack %d: int %d\n", (l), stack(l)->v.tint))
! #define	check_stack_long(l)	CHDBG (printf ("- stack %d: long %ld\n", (l), stack(l)->v.tlong))
! #define	check_stack_float(l)	CHDBG (printf ("- stack %d: float %g\n", (l), stack(l)->v.tfloat))
! #define	check_stack_double(l)	CHDBG (printf ("- stack %d: double %lg\n", (l), stack(l)->v.tdouble))
! #define	check_stack_ref(l)	CHDBG (printf ("- stack %d: ref %p\n", (l), stack(l)->v.taddr))
  
! #define	check_stack_array(l)		CHDBG (printf ("- stack %d: array * %p[%d]\n", (l), stack(l)->v.taddr, *(uint32*)(object_array_length+(char*)stack(l)->v.taddr)))
! #define	check_stack_intarray(l)		CHDBG (printf ("- stack %d: array int %p[%d]\n", (l), stack(l)->v.taddr, *(uint32*)(object_array_length+(char*)stack(l)->v.taddr)))
! #define	check_stack_longarray(l)	CHDBG (printf ("- stack %d: array long %p[%d]\n", (l), stack(l)->v.taddr, *(uint32*)(object_array_length+(char*)stack(l)->v.taddr)))
! #define	check_stack_floatarray(l)	CHDBG (printf ("- stack %d: array float %p[%d]\n", (l), stack(l)->v.taddr, *(uint32*)(object_array_length+(char*)stack(l)->v.taddr)))
! #define	check_stack_doublearray(l)	CHDBG (printf ("- stack %d: array double %p[%d]\n", (l), stack(l)->v.taddr, *(uint32*)(object_array_length+(char*)stack(l)->v.taddr)))
! #define	check_stack_refarray(l)		CHDBG (printf ("- stack %d: array ref %p[%d]\n", (l), stack(l)->v.taddr, *(uint32*)(object_array_length+(char*)stack(l)->v.taddr)))
! #define	check_stack_bytearray(l)	CHDBG (printf ("- stack %d: array byte %p[%d]\n", (l), stack(l)->v.taddr, *(uint32*)(object_array_length+(char*)stack(l)->v.taddr)))
! #define	check_stack_chararray(l)	CHDBG (printf ("- stack %d: array char %p[%d]\n", (l), stack(l)->v.taddr, *(uint32*)(object_array_length+(char*)stack(l)->v.taddr)))
! #define	check_stack_shortarray(l)	CHDBG (printf ("- stack %d: array short %p[%d]\n", (l), stack(l)->v.taddr, *(uint32*)(object_array_length+(char*)stack(l)->v.taddr)))
  
! #define check_pc(l)		CHDBG (printf ("  ARG %d: %d\n", l, getpc(l)))
! #define check_pc_wide(l)	CHDBG (printf ("  ARG %d: %d = %d + %d[WIDE]\n", l, getpc(l)+wide, getpc(l), wide))
! #define check_pcidx(l)	CHDBG (printf ("  ARG %d-%d: %d\n", l, l+1, (int16)((getpc(l) << 8) | getpc(l+1))))
! #define check_pcwidx(l)	CHDBG (printf ("  ARG %d-%d: %d\n", l, l+3, (int32)((getpc(l) << 24) | (getpc(l+1) << 16) | (getpc(l+2) << 8) | getpc(l+3))))
  
  #endif
--- 13,42 ----
  #define	__checks_h
  
! #define	check_local_int(l)	CHDBG (dprintf ("- local %d: int %d\n", (l), local(l)->v.tint))
! #define	check_local_long(l)	CHDBG (dprintf ("- local %d: long %ld\n", (l), local_long(l)->v.tlong))
! #define	check_local_float(l)	CHDBG (dprintf ("- local %d: float %g\n", (l), local_float(l)->v.tfloat))
! #define	check_local_double(l)	CHDBG (dprintf ("- local %d: double %lg\n", (l), local_double(l)->v.tdouble))
! #define	check_local_ref(l)	CHDBG (dprintf ("- local %d: ref %p\n", (l), local(l)->v.taddr))
  
! #define	check_stack_int(l)	CHDBG (dprintf ("- stack %d: int %d\n", (l), stack(l)->v.tint))
! #define	check_stack_long(l)	CHDBG (dprintf ("- stack %d: long %ld\n", (l), stack(l)->v.tlong))
! #define	check_stack_float(l)	CHDBG (dprintf ("- stack %d: float %g\n", (l), stack(l)->v.tfloat))
! #define	check_stack_double(l)	CHDBG (dprintf ("- stack %d: double %lg\n", (l), stack(l)->v.tdouble))
! #define	check_stack_ref(l)	CHDBG (dprintf ("- stack %d: ref %p\n", (l), stack(l)->v.taddr))
  
! #define	check_stack_array(l)		CHDBG (dprintf ("- stack %d: array * %p[%d]\n", (l), stack(l)->v.taddr, *(uint32*)(object_array_length+(char*)stack(l)->v.taddr)))
! #define	check_stack_intarray(l)		CHDBG (dprintf ("- stack %d: array int %p[%d]\n", (l), stack(l)->v.taddr, *(uint32*)(object_array_length+(char*)stack(l)->v.taddr)))
! #define	check_stack_longarray(l)	CHDBG (dprintf ("- stack %d: array long %p[%d]\n", (l), stack(l)->v.taddr, *(uint32*)(object_array_length+(char*)stack(l)->v.taddr)))
! #define	check_stack_floatarray(l)	CHDBG (dprintf ("- stack %d: array float %p[%d]\n", (l), stack(l)->v.taddr, *(uint32*)(object_array_length+(char*)stack(l)->v.taddr)))
! #define	check_stack_doublearray(l)	CHDBG (dprintf ("- stack %d: array double %p[%d]\n", (l), stack(l)->v.taddr, *(uint32*)(object_array_length+(char*)stack(l)->v.taddr)))
! #define	check_stack_refarray(l)		CHDBG (dprintf ("- stack %d: array ref %p[%d]\n", (l), stack(l)->v.taddr, *(uint32*)(object_array_length+(char*)stack(l)->v.taddr)))
! #define	check_stack_bytearray(l)	CHDBG (dprintf ("- stack %d: array byte %p[%d]\n", (l), stack(l)->v.taddr, *(uint32*)(object_array_length+(char*)stack(l)->v.taddr)))
! #define	check_stack_chararray(l)	CHDBG (dprintf ("- stack %d: array char %p[%d]\n", (l), stack(l)->v.taddr, *(uint32*)(object_array_length+(char*)stack(l)->v.taddr)))
! #define	check_stack_shortarray(l)	CHDBG (dprintf ("- stack %d: array short %p[%d]\n", (l), stack(l)->v.taddr, *(uint32*)(object_array_length+(char*)stack(l)->v.taddr)))
  
! #define check_pc(l)		CHDBG (dprintf ("  ARG %d: %d\n", l, getpc(l)))
! #define check_pc_wide(l)	CHDBG (dprintf ("  ARG %d: %d = %d + %d[WIDE]\n", l, getpc(l)+wide, getpc(l), wide))
! #define check_pcidx(l)	CHDBG (dprintf ("  ARG %d-%d: %d\n", l, l+1, (int16)((getpc(l) << 8) | getpc(l+1))))
! #define check_pcwidx(l)	CHDBG (dprintf ("  ARG %d-%d: %d\n", l, l+3, (int32)((getpc(l) << 24) | (getpc(l+1) << 16) | (getpc(l+2) << 8) | getpc(l+3))))
  
  #endif
*** kaffe/kaffevm/lookup.c.orig	Tue Jun 16 17:04:22 1998
--- kaffe/kaffevm/lookup.c	Mon Jul 20 11:57:40 1998
***************
*** 177,181 ****
  	field = lookupClassField(class, WORD2UTF(pool->data[NAMEANDTYPE_NAME(ni, pool)]), isStatic);
  	if (field == 0) {
! DBG(FLOOKUP,	printf("Field not found\n");				)
                  throwException(NoSuchFieldError(WORD2UTF(pool->data[NAMEANDTYPE_NAME(ni, pool)])->data));
  	}
--- 177,181 ----
  	field = lookupClassField(class, WORD2UTF(pool->data[NAMEANDTYPE_NAME(ni, pool)]), isStatic);
  	if (field == 0) {
! DBG(FLOOKUP,	dprintf("Field not found\n");				)
                  throwException(NoSuchFieldError(WORD2UTF(pool->data[NAMEANDTYPE_NAME(ni, pool)])->data));
  	}
*** kaffe/kaffevm/mem/gc-mem.c.orig	Tue Jun 23 09:43:10 1998
--- kaffe/kaffevm/mem/gc-mem.c	Mon Jul 20 11:57:39 1998
***************
*** 179,185 ****
  DBG(GCSTAT,
  	for (i = 0; i < max_small_object_size; i++)
! 		printf("size %d list %d, list.size %d\n", i, sztable[i].list,
  			freelist[sztable[i].list].sz);
! 	printf("max smobjsize %d, max freelist %d\n", 
  		max_small_object_size, max_freelist);
      )
--- 179,185 ----
  DBG(GCSTAT,
  	for (i = 0; i < max_small_object_size; i++)
! 		dprintf("size %d list %d, list.size %d\n", i, sztable[i].list,
  			freelist[sztable[i].list].sz);
! 	dprintf("max smobjsize %d, max freelist %d\n", 
  		max_small_object_size, max_freelist);
      )
*** kaffe/kaffevm/object.c.orig	Tue Mar 31 11:10:54 1998
--- kaffe/kaffevm/object.c	Mon Jul 20 11:57:40 1998
***************
*** 64,68 ****
          obj->dtable = class->dtable;
  
! ADBG(	printf("newObject %x class %s\n", obj,
  		(class ? class->name->data : "<none>"));
  		fflush(stdout);						)
--- 64,68 ----
          obj->dtable = class->dtable;
  
! ADBG(	dprintf("newObject %x class %s\n", obj,
  		(class ? class->name->data : "<none>"));
  		fflush(stdout);						)
***************
*** 87,91 ****
  	cls->dtable = ClassClass->dtable;
  
! ADBG(	printf("newClass %x\n", cls);					)
  
          return (cls);
--- 87,91 ----
  	cls->dtable = ClassClass->dtable;
  
! ADBG(	dprintf("newClass %x\n", cls);					)
  
          return (cls);
*** kaffe/kaffevm/readClass.c.orig	Wed Jun 10 11:47:40 1998
--- kaffe/kaffevm/readClass.c	Mon Jul 20 11:57:40 1998
***************
*** 43,47 ****
  	readu2(&major_version, fp);
  
! DBG(	printf("major=%d, minor=%d\n", major_version, minor_version);	)
  
  	if (major_version != MAJOR_VERSION) {
--- 43,47 ----
  	readu2(&major_version, fp);
  
! DBG(	dprintf("major=%d, minor=%d\n", major_version, minor_version);	)
  
  	if (major_version != MAJOR_VERSION) {
***************
*** 77,81 ****
  
  	readu2(&interfaces_count, fp);
! DBG(	printf("interfaces_count=%d\n", interfaces_count);	)
  
  #ifdef READINTERFACES
--- 77,81 ----
  
  	readu2(&interfaces_count, fp);
! DBG(	dprintf("interfaces_count=%d\n", interfaces_count);	)
  
  #ifdef READINTERFACES
***************
*** 97,101 ****
  
  	readu2(&fields_count, fp);
! DBG(	printf("fields_count=%d\n", fields_count);		)
  	fieldThis = 0;
  
--- 97,101 ----
  
  	readu2(&fields_count, fp);
! DBG(	dprintf("fields_count=%d\n", fields_count);		)
  	fieldThis = 0;
  
***************
*** 130,134 ****
  
  	readu2(&cnt, fp);
! DBG(	printf("attributes_count=%d\n", cnt);				)
  
  	/* Skip attributes for the moment */
--- 130,134 ----
  
  	readu2(&cnt, fp);
! DBG(	dprintf("attributes_count=%d\n", cnt);				)
  
  	/* Skip attributes for the moment */
***************
*** 157,161 ****
  
  	readu2(&methods_count, fp);
! DBG(	printf("methods_count=%d\n", methods_count);		)
  	methodThis = 0;
  
--- 157,161 ----
  
  	readu2(&methods_count, fp);
! DBG(	dprintf("methods_count=%d\n", methods_count);		)
  	methodThis = 0;