[MLton] Re: exene example
Matthew Fluet
fluet@cs.cornell.edu
Wed, 31 Aug 2005 22:58:35 -0400 (EDT)
> My suggestion, if you need to modify the Basis Library and CML Library, would
> be to isolate your work in a directory:
>
> /homes/lziarek/stabalize/code/mlton.eXene
>
> with a full check-out of the MLton source tree. Make your modifications to
> the Basis Library and the CML Library in
>
> /homes/lziarek/stabalize/code/mlton.eXene/basis-library
> /homes/lziarek/stabalize/code/mlton.eXene/lib/cml-lib
>
> respectively. Build MLton (i.e., make all) in your mlton.eXene directory.
>
> Update your eXene port to use $(SML_LIB)/basis and $(SML_LIB)/cml-lib instead
> of absolute paths. When you want to compile and test an eXene example, make
> sure that you invoke:
> /homes/lziarek/stabalize/code/mlton.eXene/build/bin/mlton
> That will ensure that you are compiling with $(SML_LIB) pointing to your
> modified libraries.
>
> If you need to make further modifications to the Basis Library or the CML
> Library, you will need to do "make basis libraries" afterward to propagate
> your changes to the build/lib/sml directory, which is where $(SML_LIB) will
> be pointing. That will be much quicker than "make all".
I followed through on this approach, adding PackWord16 to the Basis
Library and rooting all paths at $(SML_LIB). I ended up making no changes
to the CML Library, as the only changes there appear to be to work around
the typing problems introduced by duplicating the Basis Library.
> To build a runable with
> exene, simply go to portExene/eXene/examples/triangle and build the
> sources.mlb there. To edit the triangles example edit mltontri.sml. This
> verion of exene dumps a lot of output to the screen, what you are looking for
> is:
>
> exenedebugphil: xio ending bc of SysErr txt=(Interrupted system call)
> msg=(Interrupted system call) name=intr) thrown in xio
[fluet@localhost triangle]$ ~/mlton/mlton.eXene/build/bin/mlton sources.mlb
Warning: ../../lib/protocol/xio.sml 559.10.
Function is not exhaustive.
...
[fluet@localhost triangle]$ ./sources
xshutdown.sml: removed RunCML.logChannel. might have been important -
seems OK for now LUKE
mltonTriPhil: host is ''
StubTraceCML:/:xspawn triangle [000001]
TriDebug: about to run triangle
TriDebug: opening cml and interact
TriDebug: alloc windows start
TriDebug: init dpy start
...
exenedebugphil:xio.getMsg start
exenedebugphil:xio.readVec start
exenedebugphil:xio.readVec before socket
exenedebugphil:xio.readVec n=32
exenedebugphil: check about to exec
At this point it just seems to hang. Running with strace yields:
[fluet@localhost triangle]$ strace ./sources
execve("./sources", ["./sources"], [/* 49 vars */]) = 0
[ Process PID=9908 runs in 32 bit mode. ]
brk(0) = 0x8206000
...
write(1, "eXeneDebugLuke: making screens\n", 31eXeneDebugLuke: making
screens
) = 31
--- SIGALRM (Alarm clock) @ 0 (0) ---
sigreturn() = 31
rt_sigprocmask(SIG_BLOCK, [], [], 8) = 0
rt_sigprocmask(SIG_BLOCK, [ALRM], [], 8) = 0
rt_sigprocmask(SIG_SETMASK, [], [ALRM], 8) = 0
write(1, "exenedebugphil:xio.getMsg start\n", 32exenedebugphil:xio.getMsg start
) = 32
write(1, "exenedebugphil:xio.readVec start"..., 33exenedebugphil:xio.readVec start
) = 33
write(1, "exenedebugphil:xio.readVec befor"..., 41exenedebugphil:xio.readVec before socket
) = 41
write(1, "exenedebugphil:xio.readVec n=32\n", 32exenedebugphil:xio.readVec n=32
) = 32
write(1, "exenedebugphil: check about to e"..., 36exenedebugphil: check about to exec
) = 36
socketcall(0xa, 0xffffd748) = ? ERESTARTSYS (To be restarted)
--- SIGALRM (Alarm clock) @ 0 (0) ---
sigreturn() = -1 EINTR (Interrupted system call)
rt_sigprocmask(SIG_BLOCK, [], [], 8) = 0
rt_sigprocmask(SIG_BLOCK, [ALRM], [], 8) = 0
socketcall(0xa, 0xffffd748
At this point it just seems to hang again.
I'm not quite sure whether or not this is the right behavior. I would
think that the socket call should succeed in some fashion, but it doesn't
appear to be making any progress.