Andreas Jaeger wrote: > > Jun Sun <jsun@mvista.com> writes: > > > Andreas Jaeger wrote: > > > > > > > > > saves/restores the FP registers in setjmp/longjmp, the > > > > > > Any ideas how this can be done? > > > > > > > model of "simply sending SIGILL/SIGFPE" will result > > > > in *all* processes being terminated with extreme prejudice, > > > > starting with init! > > > > > > > There is a patch for glibc2.0.7, which I think was done by Jay Carlson. It > > basically works for glibc2.0.6 as well. See the one for glibc2.0.6 attached > > below. > > > > I think the patch is not "clean", in the sense that you only want to apply it > > if you want to configure with "--without-fp". Otherwise the patch will break > > other configurations. > > > > Jun--- glibc-2.0.6/sysdeps/mips/__longjmp.c.orig-rpm Sat Sep 11 00:01:44 1999 > > +++ glibc-2.0.6/sysdeps/mips/__longjmp.c Sat Sep 11 00:02:36 1999 > > @@ -35,6 +35,7 @@ > > along the way. */ > > register int val asm ("a1"); > > > > +#ifdef __HAVE_FPU__ > > I looked through the whole of glibc and GCC and __HAVE_FPU__ is nowhere > defined for MIPS. __HAVE_FPU__ is defined for m68k in GCC but that's > the only platform. > You are right - it is not defined in glibc. Instead it is defined in egcs. For this particular build, I need to apply the mips patch for egcs 1.0.3a, which supplies __HAVE_FPU__. You can find it somewhere on oss.sgi site. There is an additional patch for softfloat which makes __HAVE_FPU__ conditional. See the attachement. > Therefore I don't think the patch makes any sense at all, Therefore, it does make sense. :-) Jun
--- egcs-1.0.3a/gcc/config/mips/t-linux.orig Mon Sep 6 21:38:16 1999 +++ egcs-1.0.3a/gcc/config/mips/t-linux Wed Sep 8 08:43:58 1999 @@ -9,8 +9,28 @@ LIBGCC1 = CROSS_LIBGCC1 = -MULTILIB_OPTIONS= EL/EB -MULTILIB_DIRNAMES= el eb +# These are really part of libgcc1, but this will cause them to be +# built correctly, so... [taken from t-sparclite] +LIB2FUNCS_EXTRA = fp-bit.c dp-bit.c + +dp-bit.c: $(srcdir)/config/fp-bit.c + echo '#ifdef __MIPSEL__' > dp-bit.c + echo '#define FLOAT_BIT_ORDER_MISMATCH' >> dp-bit.c + echo '#endif' >> dp-bit.c + echo '#define US_SOFTWARE_GOFAST' >> dp-bit.c + cat $(srcdir)/config/fp-bit.c >> dp-bit.c + +fp-bit.c: $(srcdir)/config/fp-bit.c + echo '#define FLOAT' > fp-bit.c + echo '#ifdef __MIPSEL__' >> fp-bit.c + echo '#define FLOAT_BIT_ORDER_MISMATCH' >> fp-bit.c + echo '#endif' >> fp-bit.c + echo '#define US_SOFTWARE_GOFAST' >> fp-bit.c + cat $(srcdir)/config/fp-bit.c >> fp-bit.c + + +MULTILIB_OPTIONS= EL/EB msoft-float +MULTILIB_DIRNAMES= el eb soft-float MULTILIB_MATCHES= MULTILIB_EXCEPTIONS= --- egcs-1.0.3a/gcc/config/mips/linux.h.orig Mon Sep 6 21:38:16 1999 +++ egcs-1.0.3a/gcc/config/mips/linux.h Wed Sep 8 08:43:40 1999 @@ -82,7 +82,7 @@ %{!mabi*: -U__mips64} \ %{fno-PIC:-U__PIC__ -U__pic__} %{fno-pic:-U__PIC__ -U__pic__} \ %{fPIC:-D__PIC__ -D__pic__} %{fpic:-D__PIC__ -D__pic__} \ -%{-D__HAVE_FPU__ } \ +%{!msoft-float: -D__HAVE_FPU__ } \ %{posix:-D_POSIX_SOURCE} \ %{pthread:-D_REENTRANT}" @@ -756,3 +756,7 @@ #undef MAX_WCHAR_TYPE_SIZE #define MAX_WCHAR_TYPE_SIZE MAX_LONG_TYPE_SIZE + +/* US Software GOFAST library support. */ +#include "gofast.h" +#define INIT_TARGET_OPTABS INIT_GOFAST_OPTABS