Return to BSD News archive
Newsgroups: comp.os.386bsd.apps
Path: sserve!newshost.anu.edu.au!munnari.oz.au!news.Hawaii.Edu!ames!haven.umd.edu!uunet!math.fu-berlin.de!fub!abraxas!luthien!wagner
From: wagner@luthien.in-berlin.de (Olaf Wagner)
Subject: SML of New Jersey for 386bsd
Organization: 'Holistic Computing Services'
Message-ID: <1993Apr14.223106.3708@luthien.in-berlin.de>
X-Newsreader: Tin 1.1 PL4
Date: Wed, 14 Apr 93 22:31:06 GMT
Lines: 121
Since SML of New Jersey had been ported to BSD/386 I attempted
to get it running on 386bsd as well, and with some minor additions
I succeeded.
After finding and reading the paper `A Runtime System (Draft)' I
decided that the only thing that was going wrong was the writing
of an executable image in function exportML. So I dived somewhat
deeper into the matter, studied the structures and macros in a.out.h
and made some minor additions to export.c and makeml.
SML now runs without any problem (so far). I was able to build the
interactive compiler, the batch compiler, the cml system, and run some
(small) example programs. I haven't done thorough and exhaustive
tests, though. The changes I made to the BSD386 port are really tiny,
and I am not able to guarantee that everything will work as expected.
SML-NJ is available via anonymous ftp from
princeton.edu (128.112.128.1) /pub/ml
research.att.com (192.20.255.2) /dist/ml
In order to build executables under 386bsd, you will need the following
files:
93.src.tar.Z (source code for runtime support and compiler)
93.mo..i386.tar.Z (Intel i386 object files)
You might also want to get the following files:
93.release-notes.ps
93.release-notes.txt
93.doc.tar.Z (documentation of the compiler and various papers)
93.tools.tar.Z (various tools, including debugger, profiler,
lexical analyser, parser generator, ...)
smlnj-lib.0.1.tar.Z (Standard ML of New Jersey Library)
CML-0.9.8.tar.Z (Concurrent ML - threads, events, channels, ...)
eXene-0.4.tar.Z (X11 interface (not tested yet on 386bsd))
You will need to patch the file src/makeml and src/runtime/export.c.
To build a working sml executable just type
makeml -i386 386bsd ... (any other options you deem appropriate)
^^^^^^
Here are the diffs:
------------- aditions to export.c -----------------------------------
*** runtime/export.c Mon Mar 22 19:40:59 1993
--- ../save/runtime/export.c Wed Apr 14 16:51:29 1993
***************
*** 26,31 ****
--- 26,35 ----
#define CEIL(x,quantum) ((((int)(x))+(quantum)-1)&~((quantum)-1))
+ #ifdef i386BSD
+ #undef BSD386
+ #endif
+
#ifdef MIPS
#define N_DATADDR 0x10000000
#define N_TXTADDR 0x400000 /* start of headers; text segment follows */
***************
*** 240,245 ****
--- 244,256 ----
}
#endif
+ #ifdef i386BSD
+ {int i, nzeros = getpagesize()-sizeof(E);
+ char zeros[4096];
+ for(i=0;i<nzeros;i++) zeros[i]=0;
+ bulletproofWrite(filid,zeros,nzeros);
+ }
+ #endif
#if sony_news || MORE
{int i, nzeros = getpagesize()-bytcount;
char zeros[4096];
***************
--------------- additions to makeml ----------------------------------
*** makeml Mon Mar 22 00:03:43 1993
--- ../save/makeml Wed Apr 14 16:50:27 1993
***************
*** 204,212 ****
case $1 in
bsd) OPSYS=BSD ;;
bsd386) OPSYS=BSD; DEFS="$DEFS -DBSD386";;
mach) OPSYS=MACH; DEFS="$DEFS -DBSD";;
*)
! echo "$CMD must specify opsys arg for i386/i486 (bsd, bsd386 or mach)"
exit 1
;;
esac
--- 204,213 ----
case $1 in
bsd) OPSYS=BSD ;;
bsd386) OPSYS=BSD; DEFS="$DEFS -DBSD386";;
+ 386bsd) OPSYS=BSD; DEFS="$DEFS -DBSD386 -Di386BSD";;
mach) OPSYS=MACH; DEFS="$DEFS -DBSD";;
*)
! echo "$CMD must specify opsys arg for i386/i486 (bsd, bsd386, 386bsd or mach)"
exit 1
;;
esac
-----------------------------------
That's all. I hope this will be useful.
Olaf
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
| Olaf Wagner | wagner@luthien.in-berlin.de (private) |
| Hobrechtstrasse 80 | owagner@cs.tu-berlin.de (work) |
| 1000 Berlin 44 | phone: 49 30 624 99 48 |
| Germany / Deutschland | please don't call before 9 o'clock |
/////////////////////////////////////////////////////////////////