summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorwiz <wiz>2001-03-20 09:43:21 +0000
committerwiz <wiz>2001-03-20 09:43:21 +0000
commite6a0d250f0d35cbce243449d7b0edcdf63f2e49b (patch)
treef5cc16434b722ba295d333ceb7819567b584178d
parent1b12b8321a01abd00e04e05d0eff389eface89d8 (diff)
downloadpkgsrc-e6a0d250f0d35cbce243449d7b0edcdf63f2e49b.tar.gz
Add NetBSD-sparc support, supplied by Stephan Thesing in pkg/12411.
-rw-r--r--lang/sml-nj/Makefile7
-rw-r--r--lang/sml-nj/files/patch-global-names241
-rw-r--r--lang/sml-nj/files/patch-sum5
-rw-r--r--lang/sml-nj/patches/patch-ac13
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
+ ;;
+