diff options
Diffstat (limited to 'lang')
-rw-r--r-- | lang/sml-nj/Makefile | 7 | ||||
-rw-r--r-- | lang/sml-nj/files/patch-global-names | 241 | ||||
-rw-r--r-- | lang/sml-nj/files/patch-sum | 5 | ||||
-rw-r--r-- | lang/sml-nj/patches/patch-ac | 13 |
4 files changed, 259 insertions, 7 deletions
diff --git a/lang/sml-nj/Makefile b/lang/sml-nj/Makefile index 8c0f041c232..725c268f225 100644 --- a/lang/sml-nj/Makefile +++ b/lang/sml-nj/Makefile @@ -1,4 +1,4 @@ -# $NetBSD: Makefile,v 1.7 2001/02/25 04:17:56 hubertf Exp $ +# $NetBSD: Makefile,v 1.8 2001/03/20 09:43:21 wiz Exp $ # FreeBSD Id: ports/lang/sml-nj/Makefile,v 1.9 1999/08/25 06:35:27 obrien Exp DISTNAME= ${SML_VERSION}-bin.${BOX}-unix @@ -23,7 +23,7 @@ SML_VERSION= 110.9.1 # sml-nj also supports hppa, sparc, ppc, mlrisc & alpha # pkg support for those platforms, and say, solaris-x86 # is left as an (easy) exercise for the reader. -ONLY_FOR_PLATFORM= NetBSD-*-i386 SunOS-*-sparc +ONLY_FOR_PLATFORM= NetBSD-*-i386 SunOS-*-sparc NetBSD-*-sparc # Other mirror sites that generally carry only released versions of SML # ftp://rodin.stanford.edu/pub/smlnj/release/ @@ -51,6 +51,9 @@ OS= ${LOWER_OPSYS} .elif ${OPSYS} == "NetBSD" && ${MACHINE_ARCH} == "i386" BOX= x86 OS= bsd +.elif ${OPSYS} == "NetBSD" && ${MACHINE_ARCH} == "sparc" +BOX= sparc +OS= bsd .endif PLIST_SUBST+= BOX=${BOX} OS=${OS} diff --git a/lang/sml-nj/files/patch-global-names b/lang/sml-nj/files/patch-global-names index 0fd10a9a6f1..3c2f845881e 100644 --- a/lang/sml-nj/files/patch-global-names +++ b/lang/sml-nj/files/patch-global-names @@ -1,11 +1,246 @@ ---- src/runtime/include/asm-base.h.orig Thu Aug 6 15:40:30 1998 -+++ src/runtime/include/asm-base.h Tue Jan 4 11:13:08 2000 +--- src/runtime/include/asm-base.h.orig Fri Dec 3 20:59:31 1999 ++++ src/runtime/include/asm-base.h Fri Mar 9 14:53:40 2001 @@ -16,7 +16,7 @@ #define FALSE 0 #define TRUE 1 -#if (!defined(GLOBALS_HAVE_UNDERSCORE)) && (defined(OPSYS_SUNOS) || defined(OPSYS_FREEBSD) || defined(OPSYS_NETBSD) || defined(OPSYS_NEXTSTEP) || defined(OPSYS_WIN32)) -+#if (!defined(GLOBALS_HAVE_UNDERSCORE)) && (defined(OPSYS_SUNOS) || (defined(OPSYS_FREEBSD) && !defined(__ELF__)) || (defined(OPSYS_NETBSD) && !defined(__ELF__)) || defined(OPSYS_NEXTSTEP) || defined(OPSYS_WIN32)) ++#if (!defined(GLOBALS_HAVE_UNDERSCORE)) && (defined(OPSYS_SUNOS) || (defined(OPSYS_FREEBSD) && !defined(__ELF__)) || (defined(OPSYS_NETBSD) && !defined(__ELF__))|| defined(OPSYS_NEXTSTEP) || defined(OPSYS_WIN32)) # define GLOBALS_HAVE_UNDERSCORE #endif +@@ -36,6 +36,11 @@ + # define _ASM + # include <sys/stack.h> + # include <sys/trap.h> ++# elif defined(OPSYS_NETBSD) ++# include <machine/trap.h> ++# define WINDOWSIZE (16*4) ++# define SA(x) (((x)+7)&~7) ++# define ST_INT_OVERFLOW 0x87 + # endif + # define GLOBAL(ID) .global CSYM(ID) + # define LABEL(ID) ID: +--- src/runtime/mach-dep/SPARC.prim.asm.orig Fri Dec 3 20:59:32 1999 ++++ src/runtime/mach-dep/SPARC.prim.asm Wed Mar 14 18:39:43 2001 +@@ -462,7 +462,7 @@ + mov ALLOCPTR,LIMITPTR /* (delay slot) */ + + +-#if defined(OPSYS_SUNOS) || defined(OPSYS_NEXTSTEP) ++#if defined(OPSYS_SUNOS) || defined(OPSYS_NEXTSTEP) || defined(OPSYS_NETBSD) + /* ZeroLimitPtr: + * + * Zero the heap limit pointer so that a trap will be generated on the next limit +@@ -731,13 +731,62 @@ + mov %g1,%l1 /* save %g1 which may get trashed */ + mov %g2,%l2 + mov %g3,%l3 ++#ifdef OPSYS_NETBSD ++ /* NetBSDs .mul trashes these */ ++ mov %i4,%l4 ++ mov %i5,%l5 ++ mov %i0,%l6 ++ mov %i1,%l7 ++#endif + mov %i2,%o0 + call .mul + mov %i3,%o1 /* (delay slot) */ + mov %l1,%g1 /* restore %g1 */ + mov %l2,%g2 + mov %l3,%g3 ++#ifdef OPSYS_NETBSD ++ mov %l4,%i4 ++ mov %l5,%i5 ++ mov %l6,%i0 ++ mov %l7,%i1 ++ /* the code below is a hack: ++ * NetBSDs .mul does a 32x32->64 bit signed multiply ++ * The SML code assumes that the multiply ++ * overflowed (over 32bit) if the Z flag is ++ * clear on return from .mul ++ * NetBSDs .mul doesn't do that, so we have to check ++ * for overflow. This is done in the following way: ++ * - If the upper 32 bits are clear: ++ * + if bit 31 is set => overflow ++ * + if bit 31 is clear => OK ++ * - If the upper 32 bits are != -1 => overflow ++ * - If the upper 32 bits are == -1: ++ * + If bit 31 is clear => overflow ++ * + If bit 31 is set => OK ++ * ++ * I should be shot for this code ... ++ */ ++ cmp %o1,0 ++ bnz 4f ++ nop ++ /* is bit 31 of %o0 set ? */ ++ addcc %o0,%o0,%o1 ++ bcc 2f ++ nop ++5: restore %o0,0,%o2 /* result in %o2 (delay slot) */ ++ t ST_INT_OVERFLOW /* generate overflow trap */ ++ ++ ++4: cmp %o1,-1 /* upper 32 bits == -1 ? */ ++ bnz 5 ++ nop ++ addcc %o0,%o0,%o1 /* bit 31 clear ? */ ++ bcc 2f ++ nop ++#else + bnz 1f /* if z is clear, then overflow */ ++#endif ++2: + restore %o0,0,%o2 /* result in %o2 (delay slot) */ + retl + nop +@@ -751,7 +800,15 @@ + * locals of the new window, since .div is a leaf routine. + */ + _ml_div: +- save %sp,-SA(WINDOWSIZE),%sp ++#ifdef OPSYS_NETBSD ++ /* hack time again: NetBSDs .div trashes too many registers ++ * we have to store them in the stack frame, so make room ++ * for six registers (o0-o5) ++ */ ++ save %sp,-SA(WINDOWSIZE+24),%sp ++#else ++ save %sp,-SA(WINDOWSIZE+24),%sp ++#endif + addcc %i3,%g0,%o1 /* %o1 is divisor (and check for zero) */ + bz 1f + /* save %g1, %g2 and %g3 (using new window) */ +@@ -759,9 +816,30 @@ + mov %g1,%l1 /* (delay slot) */ + mov %g2,%l2 + mov %g3,%l3 ++#ifdef OPSYS_NETBSD ++ /* save g6,g7,o0-o5, they get trashed. ++ Note that %o0-%o5 are now %i0-%i5, since we did a 'save' ++ Since %g6 is the global AllocPtr for SML, this ++ is rather bad :-) ++ */ ++ mov %g6,%l4 ++ mov %g7,%l5 ++ std %i0,[%fp-16] ++ std %i2,[%fp-24] ++ std %i4,[%fp-32] ++#endif ++ + call .div + mov %i2,%o0 /* (delay slot) */ + /* restore %g1, %g2 and %g3 */ ++#ifdef OPSYS_NETBSD ++ mov %l4,%g6 ++ mov %l5,%g7 ++ ldd [%fp-32],%i4 ++ ldd [%fp-24],%i2 ++ ldd [%fp-16],%i0 ++#endif ++ + mov %l3,%g3 + mov %l2,%g2 + mov %l1,%g1 +@@ -788,11 +866,24 @@ + mov %g2,%l2 + mov %g3,%l3 + mov %i2,%o0 ++#ifdef OPSYS_NETBSD ++ /* Save what might be trashed by NetBSDs .umul */ ++ mov %i4,%l4 ++ mov %i5,%l5 ++ mov %i0,%l6 ++ mov %i1,%l7 ++#endif + call .umul + mov %i3,%o1 /* (delay slot) */ + mov %l1,%g1 /* restore %g1 */ + mov %l2,%g2 + mov %l3,%g3 ++#ifdef OPSYS_NETBSD ++ mov %l4,%i4 ++ mov %l5,%i5 ++ mov %l6,%i0 ++ mov %l7,%i1 ++#endif + ret + restore %o0,0,%o2 /* result in %o2 (delay slot) */ + +@@ -803,7 +894,12 @@ + * locals of the new window, since .div is a leaf routine. + */ + _ml_udiv: +- save %sp,-SA(WINDOWSIZE),%sp ++#ifdef OPSYS_NETBSD ++ /* see comment for _ml__div_ */ ++ save %sp,-SA(WINDOWSIZE+24),%sp ++#else ++ save %sp,-SA(WINDOWSIZE+24),%sp ++#endif + addcc %i3,%g0,%o1 /* %o1 is divisor (and check for zero) */ + bz 1f + /* save %g1, %g2 and %g3 (using new window) */ +@@ -811,9 +907,23 @@ + mov %g1,%l1 /* (delay slot) */ + mov %g2,%l2 + mov %g3,%l3 ++#ifdef OPSYS_NETBSD ++ mov %g6,%l4 ++ mov %g7,%l5 ++ std %i0,[%fp-16] ++ std %i2,[%fp-24] ++ std %i4,[%fp-32] ++#endif + call .udiv + mov %i2,%o0 /* (delay slot) */ + /* restore %g1, %g2 and %g3 */ ++#ifdef OPSYS_NETBSD ++ mov %l4,%g6 ++ mov %l5,%g7 ++ ldd [%fp-32],%i4 ++ ldd [%fp-24],%i2 ++ ldd [%fp-16],%i0 ++#endif + mov %l3,%g3 + mov %l2,%g2 + mov %l1,%g1 +--- src/runtime/mach-dep/signal-sysdep.h.orig Fri Dec 3 20:59:32 1999 ++++ src/runtime/mach-dep/signal-sysdep.h Mon Mar 12 15:23:01 2001 +@@ -151,7 +151,7 @@ + /* disable all FP exceptions */ + # define SIG_InitFPE() SetFSR(0) + +-# if defined(OPSYS_SUNOS) ++# if defined(OPSYS_SUNOS) || defined(OPSYS_NETBSD) + /** SPARC, SUNOS **/ + # define USE_ZERO_LIMIT_PTR_FN + # define SIG_FAULT1 SIGFPE +--- src/runtime/objs/mk.sparc-netbsd.orig Thu Jan 1 01:00:00 1970 ++++ src/runtime/objs/mk.sparc-netbsd Tue Mar 13 09:45:58 2001 +@@ -0,0 +1,24 @@ ++# mk.sparc-netbsd ++# ++ ++SHELL = /bin/sh ++ ++MAKE = gmake ++GCC = gcc ++ARFLAGS = Trcv ++CFLAGS = -O2 -Wall ++LDFLAGS= ++CPP = $(GCC) -x c -E -P ++ ++#XOBJS = xmonitor.o ++#LD_LIBS = -lX11 ++#BASE_DEFS = -DHEAP_MONITOR -DPOLL_DEBUG ++XOBJS = ++XLIBS = ++DEFS = $(BASE_DEFS) -DHOST_SPARC -DTARGET_SPARC -DOPSYS_UNIX -DOPSYS_NETBSD -DCALLEESAVE=3 -DUNBOXEDFLOAT=1 ++TARGET = SPARC ++VERSION = v-sparc-netbsd ++RUNTIME = run.sparc-netbsd ++ ++all: ++ ($(MAKE) RUNTIME="$(RUNTIME)" MAKE="$(MAKE)" VERSION="$(VERSION)" CC="$(CC)" CFLAGS="$(CFLAGS)" CPP="$(CPP)" AS="$(AS)" AR="$(AR)" RANLIB="$(RANLIB)" TARGET=$(TARGET) DEFS="$(DEFS)" XOBJS="$(XOBJS)" XLIBS="$(XLIBS)" LD_LIBS="$(LD_LIBS)" $(RUNTIME)) diff --git a/lang/sml-nj/files/patch-sum b/lang/sml-nj/files/patch-sum index d63648d3815..560f7309100 100644 --- a/lang/sml-nj/files/patch-sum +++ b/lang/sml-nj/files/patch-sum @@ -1,3 +1,4 @@ -$NetBSD: patch-sum,v 1.1 2000/01/09 14:53:11 wiz Exp $ +$NetBSD: patch-sum,v 1.2 2001/03/20 09:43:22 wiz Exp $ -MD5 (patch-ab) = 672b1c65fb0b2d4608252a1ace81cf4d +SHA1 (patch-ab) = c10fee1cd4b06a656d3d839bfe6435dd2573120d +SHA1 (patch-ac) = 1edf9fa2e20aae35c672f52363d44ba03282bfd2 diff --git a/lang/sml-nj/patches/patch-ac b/lang/sml-nj/patches/patch-ac new file mode 100644 index 00000000000..b6281d0ffb9 --- /dev/null +++ b/lang/sml-nj/patches/patch-ac @@ -0,0 +1,13 @@ +$NetBSD: patch-ac,v 1.1 2001/03/20 09:43:22 wiz Exp $ + +--- config/_arch-n-opsys.orig Fri Oct 20 18:02:25 2000 ++++ config/_arch-n-opsys Fri Mar 9 14:07:05 2001 +@@ -100,6 +100,7 @@ + i486) ARCH=x86;; + i586) ARCH=x86;; + i686) ARCH=x86;; ++ sparc) ARCH=sparc;; + *) exit 1;; + esac + ;; + |