[kaffe] PS2/Linux patch take 3

Dylan Schell dylans@xs4all.nl
Sun, 16 Jun 2002 20:41:06 +0200


There is a linux crosscompiler on the www.playstation2-linux.com site

http://playstation2-linux.com/projects/ps2stuff

Hope this helps

I'm trying to figure this one out myself as well since config.guess
comes up with mipsel-pc-linux-gnu, BUT it does not conform to the
standard O32 ABI. the PS2 passes doubles in 2 general purpose registers.

It might be possible to check for PS2 specific header files though. I'd
much prefer it would work without a switch as well. And if you want me
to try something on my machine, let me know.

Greetings,
Dylan Schell
dylans@xs4all.nl

Jim Pick wrote:
> Thanks,
> 
> I'll put your changes in, but I want to play around with it a bit more
> before I put it in.
> 
> I'd like to take a look at the toolchain for the PS2 to see if perhaps
> the configure script can figure out for itself that it needs these
> changes, without having to do the --enable-ps2linux switch.  Where can I
> download it?
> 
> Cheers,
> 
>  - Jim
> 
> On Sun, 2002-06-16 at 03:44, Dylan Schell wrote:
> 
>>Grrr, in order to keep my patch clean I removed some of the
>>code that I thought was not needed. So here is version 3
>>
>>tested this time :-)
>>
>>Notes:
>>
>>- Is the #include <sigcontext.h> in config/mips/linux/md.h correct?
>>On all the systems where I tried this, (i386/2.2.1, i386/2.4.18)
>><sigcontext.h> stops compilation and complains sigcontext should never
>>be included directly, and that I should include <signal.h> instead.
>>
>>- I added maxArgs and isStatic to config/mips/mips.c to keep the
>>linker happy, is there some header file i should be including instead?
>>----
>>
> 
> 
>>diff -r -c3 kaffe-1.0.7-rc1/config/mips/common.h kaffe-1.0.7-rc1-ps2/config/mips/common.h
>>*** kaffe-1.0.7-rc1/config/mips/common.h	Wed Mar  7 11:38:17 2001
>>--- kaffe-1.0.7-rc1-ps2/config/mips/common.h	Sun Jun 16 11:09:29 2002
>>***************
>>*** 40,45 ****
>>--- 40,48 ----
>>  #endif /* NEED_sysdepCallMethod */
>>  
>>  
>>+ #ifdef HAVE_PS2_LINUX
>>+ #undef HAVE_MIPSII_INSTRUCTIONS
>>+ #endif
>>  #if defined(HAVE_MIPSII_INSTRUCTIONS)
>>  /*
>>   * Do an atomic compare and exchange.  The address 'A' is checked against
>>diff -r -c3 kaffe-1.0.7-rc1/config/mips/linux/md.h kaffe-1.0.7-rc1-ps2/config/mips/linux/md.h
>>*** kaffe-1.0.7-rc1/config/mips/linux/md.h	Mon Sep  6 23:44:39 1999
>>--- kaffe-1.0.7-rc1-ps2/config/mips/linux/md.h	Sun Jun 16 11:06:05 2002
>>***************
>>*** 21,26 ****
>>--- 21,31 ----
>>  #define	SP_OFFSET	1
>>  #define	FP_OFFSET	10
>>  
>>+ #ifdef HAVE_PS2_LINUX
>>+ #undef	FP_OFFSET
>>+ #define	FP_OFFSET	36
>>+ #endif
>>+ 
>>  #if defined(TRANSLATOR)
>>  #include "jit-md.h"
>>  #endif
>>***************
>>*** 28,34 ****
>>--- 33,43 ----
>>  /**/
>>  /* Signal handling */
>>  /**/
>>+ #ifdef HAVE_PS2_LINUX
>>+ #include <signal.h>
>>+ #else
>>  #include <sigcontext.h>
>>+ #endif
>>  
>>  /* Define the entry into a signal handler */
>>  #define EXCEPTIONPROTO  int sig, int c1, int c2, int c3, int c4, int c5, int c6, int c7, struct sigcontext ctx
>>diff -r -c3 kaffe-1.0.7-rc1/config/mips/mips.c kaffe-1.0.7-rc1-ps2/config/mips/mips.c
>>*** kaffe-1.0.7-rc1/config/mips/mips.c	Fri Oct 15 03:38:46 1999
>>--- kaffe-1.0.7-rc1-ps2/config/mips/mips.c	Sun Jun 16 12:29:00 2002
>>***************
>>*** 20,25 ****
>>--- 20,30 ----
>>  #include "support.h"
>>  #include "../../kaffe/kaffevm/thread.h"
>>  
>>+ #ifdef HAVE_PS2_LINUX
>>+ #  include "jit.h"
>>+ int maxArgs;
>>+ int isStatic;
>>+ #endif
>>  extern int maxArgs;
>>  extern int isStatic;
>>  
>>diff -r -c3 kaffe-1.0.7-rc1/config/mips/o32-sysdepCallMethod.h kaffe-1.0.7-rc1-ps2/config/mips/o32-sysdepCallMethod.h
>>*** kaffe-1.0.7-rc1/config/mips/o32-sysdepCallMethod.h	Thu Apr 15 20:19:31 1999
>>--- kaffe-1.0.7-rc1-ps2/config/mips/o32-sysdepCallMethod.h	Sun Jun 16 11:06:05 2002
>>***************
>>*** 103,110 ****
>>--- 103,120 ----
>>      register ARG_TYPE a2 asm("$6");
>>      register ARG_TYPE a3 asm("$7");
>>  
>>+ #ifdef HAVE_PS2_LINUX
>>+     union {
>>+         double d;
>>+         struct {
>>+             int hi;
>>+             int lo;
>>+         } fake_double;
>>+     } split;
>>+ #else
>>      register double d0 asm("$f12");
>>      register double d2 asm("$f14");
>>+ #endif
>>  
>>      register float f0 asm("$f12");
>>      register float f2 asm("$f14");
>>***************
>>*** 129,135 ****
>>--- 139,151 ----
>>        }
>>        
>>        if (calltype[2] == D) {
>>+ #ifdef HAVE_PS2_LINUX
>>+           split.d = callargs[2].d;
>>+           a2 = split.fake_double.hi;
>>+           a3 = split.fake_double.lo;
>>+ #else
>>  	  d2 = callargs[2].d;
>>+ #endif
>>  	  goto alldouble_2;
>>        }
>>  
>>***************
>>*** 154,160 ****
>>--- 170,183 ----
>>    case 2:
>>        if (calltype[0] == D) {
>>        alldouble_2:
>>+ #ifdef HAVE_PS2_LINUX
>>+           /* move double into a0/a1 */
>>+           split.d = callargs[0].d;
>>+           a0 = split.fake_double.hi;
>>+           a1 = split.fake_double.lo;
>>+ #else
>>  	  d0=callargs[0].d;
>>+ #endif
>>        } else {
>>        testfloat_2:
>>  	  if (calltype[0] != F) {
>>***************
>>*** 183,189 ****
>>--- 206,216 ----
>>    noargs:
>>  #endif
>>      /* Ensure that the assignments to f* registers won't be optimized away. */
>>+ #ifdef HAVE_PS2_LINUX
>>+     asm ("" :: "f" (f0), "f" (f2));
>>+ #else
>>      asm ("" :: "f" (f0), "f" (f2), "f" (d0), "f" (d2));
>>+ #endif
>>  
>>      switch(call->retsize) {
>>      case 0:
>>diff -r -c3 kaffe-1.0.7-rc1/config/mips/threads.h kaffe-1.0.7-rc1-ps2/config/mips/threads.h
>>*** kaffe-1.0.7-rc1/config/mips/threads.h	Mon Mar 12 13:50:47 2001
>>--- kaffe-1.0.7-rc1-ps2/config/mips/threads.h	Sun Jun 16 11:06:05 2002
>>***************
>>*** 27,32 ****
>>--- 27,37 ----
>>  #define	THREADSTACKSIZE		(32 * 1024)
>>  #endif
>>  
>>+ #ifdef HAVE_PS2_LINUX
>>+ #undef THREADSTACKSIZE
>>+ #define THREADSTACKSIZE		(128 * 1024)
>>+ #endif
>>+ 
>>  /*
>>   * Stack offset.
>>   * This is the offset into the setjmp buffer where the stack pointer is
>>diff -r -c3 kaffe-1.0.7-rc1/configure.in kaffe-1.0.7-rc1-ps2/configure.in
>>*** kaffe-1.0.7-rc1/configure.in	Sun Jun  2 07:03:49 2002
>>--- kaffe-1.0.7-rc1-ps2/configure.in	Sun Jun 16 11:06:05 2002
>>***************
>>*** 831,836 ****
>>--- 831,849 ----
>>  dnl -------------------------------------------------------------------------
>>  
>>  dnl =========================================================================
>>+ dnl Compile specifically for PS2/Linux
>>+ dnl -------------------------------------------------------------------------
>>+ 
>>+ AC_ARG_ENABLE(ps2linux, [  --enable-ps2linux       Compile Specifically For PS2])
>>+ AC_MSG_CHECKING([whether to enable PS2/Linux Specific patches])
>>+ AC_MSG_RESULT($enable_ps2linux)
>>+ if test "x$enable_ps2linux" = "xyes"; then
>>+     AC_DEFINE([HAVE_PS2_LINUX], 1, [Enable PS2 Linux patches])
>>+ fi
>>+ 
>>+ dnl -------------------------------------------------------------------------
>>+ 
>>+ dnl =========================================================================
>>  dnl Checks for typedefs, structures, and compiler characteristics.
>>  dnl -------------------------------------------------------------------------
>>  
> 
> 
> 
> 
> _______________________________________________
> kaffe mailing list
> kaffe@kaffe.org
> http://kaffe.org/cgi-bin/mailman/listinfo/kaffe
> 
>