Our development platforms were FreeBSD and SunOS 4.1.x systems. While non-stand-alone versions of Nachos/486 can be generated and debugged under either environment, FreeBSD is currently the only fully supported development platform capable of generating the stand-alone binaries and bootable disks. Accordingly, we worked primarily on two Intel 486 PC clones running FreeBSD Release 2.0. These PCs are able to run the normal nachos simulation, the stand-alone version, and generate our bootable disks. Cross-compilation of stand-alone binaries from another architecture to the Intel platform or creating a boot environment from another architecture is not presently feasible.
We used the stock gcc compiler
that comes
with FreeBSD, along with the latest releases of the GNU
binutils for object code manipulation. The availability of the
source code for the compiler was invaluable, because it allowed us to
see exactly what C/C++ runtime support we needed to provide in our
code, and how it was done in gcc. It is worth noting that while this
was a tremendous help in comprehending the internal processes of
putting a C/C++ program into execution, it was also the source of a
number of difficulties and often much confusion. A representative
example is that in building stand-alone binaries, our special linking
rules by-pass the built-in mechanisms for invoking the constructors
for global objects.