Subject: Re: ezm3 for alpha and sgimips (mipseb)
To: None <Pavel.Cahyna@st.mff.cuni.cz>
From: Havard Eidnes <he@NetBSD.org>
List: port-alpha
Date: 12/17/2005 12:29:27
> > I'm pleased to announce the initial result of porting of John
> > Polstra's ezm3 Modula-3 compiler, version 1.2, to two new NetBSD
> > targets: alpha and big-endian MIPS.
>
> I'm succesfully using the resulting CVSup 16.1h on alpha for
> some time and it is working well, thanks!
>
> Did you consider submitting your changes upstream or to pkgsrc?
>
> (I looked at pkgsrc and ezm3 and CVSup are at older versions,
> so they would have to be updated first.)

Yes, I have considered it, and I have been in touch with John
Polstra about it as well.  There's nothing definite yet on that,
although there seemed to be at least some interest on the part of
John.

In the mean time I've suffered a slight setback in my ezm3
porting efforts when I discovered that I had probably taken a
route which was a bit simplistic, in that simply using setjmp() /
longjmp() as the context swap functions is not completely safe,
at least not on all platforms, since those calls do not
necessarily save all required state, such as e.g. floating point
registers on i386.  Since the thread switching is driven by a
virtual timer and signal delivery, a context swap can happen at
any time, so more state needs to be saved and restored, and I
didn't particularly fancy having to revert to assembly code
specific for each NetBSD platform.  I've started looking at
converting the code to use the getcontext() / setcontext() /
swapcontext() set of functions, but have struck a (probably
self-inflicted) bug, and have not had time to debug this further
yet.

On the "good news" side, before trying to move away from setjmp()
/ longjmp() I have had cvsup up and running on NetBSD/arm (shark)
and NetBSD/m68k (hp300).  In order to get the NetBSD/arm version
building, a new version of gcc had to be re-integrated into ezm3,
which took a bit of work figuring out.

Best regards,

- H=E5vard