SYSVR2 ns32000 cross-tools

Author: Alexander Voropai
Oct 2017
Main page: NS32K Software: GENIX

It is possible to build a sort-of “crosstools” under SYSVR2 system (i.e. SYSVR2 VAX) from the ns32000 SYSVR2 sources.

NOTE! It will break a native build system, make a backup before installation.

You can build some ns32000 utilities in the /usr/src/cmd/sgs/ : as, ar, ld, size, strip, nm e.t.c. . Some sgs (SGS - Software Generation System) utilities has no ns32000 ports i.e. disassembler dis.

It is possible also to build a cc compiler for the ns32000.

Short “crossbuild” HOWTO:

  • get a working SYSVR2 i.e. VAX
  • rename /usr/src to /usr/src.VAX
  • import ns32000 SYSVR2 sources into /usr/src (i.e. via tar/tape)
  • rename /usr/include to /usr/include.VAX
  • mkdir /usr/include /usr/include/sys
  • cd /usr/src (NEW!) and execute “:mkhead” and “:mksyshead”
  • modify shell script /bin/vax: it should return error, add a “exit 255”
  • create a shell script /bin/ns32000 and make it executable: it should return success, add a line “exit 0”
  • define shell variables:
  • $ CC=“cc -Uvax -Dns32000”
  • $ export CC

You can now build “sgs” and “cc” for ns32000 :

cd /usr/src/cmd/sgs/
make -f

cd /usr/src/cmd/cc
make -f

This will build VAX SYSVR2 execulables which accept ns32000 syntax and emit ns32000 instructions and work with 32000 COFF object files (crosstools).

Full build logs: ns32000_sgs.txt, ns32000_cc.txt

To make a backup, rename native utilities with .VAX extension:
mv /bin/cc /bin/cc.VAX
mv /lib/c2 /lib/c2.VAX
mv /lib/ccom /lib/ccom.VAX
mv /lib/cpp /lib/cpp.VAX

mv /bin/convert /bin/convert.VAX
mv /bin/lorder /bin/lorder.VAX
mv /bin/strip /bin/strip.VAX
mv /bin/size /bin/size.VAX
mv /bin/dump /bin/dump.VAX
mv /bin/nm /bin/nm.VAX
mv /bin/as /bin/as.VAX
mv /bin/ld /bin/ld.VAX
mv /bin/ar /bin/ar.VAX

Copy new compiler:
cp /usr/src/cmd/cc/pcc/cc /bin/cc
cp /usr/src/cmd/cc/pcc/ns32000/comp /lib/ccom
cp /usr/src/cmd/cc/pci/ns32000/c2 /lib/c2
cp /usr/src/cmd/cpp/cpp /lib/cpp

Copy new binutils:
cp /usr/src/cmd/sgs/unix_conv/ns32000/convert /bin/convert
cp /usr/src/cmd/sgs/lorder/ns32000/lorder /bin/lorder
cp /usr/src/cmd/sgs/strip/ns32000/strip /bin/strip
cp /usr/src/cmd/sgs/size/ns32000/size /bin/size
cp /usr/src/cmd/sgs/dump/ns32000/dump /bin/dump
cp /usr/src/cmd/sgs/nm/ns32000/nm /bin/nm
cp /usr/src/cmd/sgs/as/ns32000/as /bin/as
cp /usr/src/cmd/sgs/ld/ns32000/ld /bin/ld
cp /usr/src/cmd/sgs/ar/ns32000/ar /bin/ar

Note! Command options are slightly different on the VAX and on the ns320000. Use a ns32000 manpages.

To create a ns32000 binaries you need /lib/crt0.o and /lib/libc.a (TODO. Compilator creates incorrect assembly floating point directives for /usr/src/lib/libc/port/gen/atof.c). As a temporary solution take it from the Opus5 SYSV system.

The resulting tools will produce ns32000 binaries compatible with Opus5 SYSV COFF and GENIX 2 (based on the SYSVR2).

Note1 Seems there is more correct way to cleate a “crosstools” on the SYSVR2 with cc -B option (add a “base” prefix to as, ld and other tools i.e. /usr/lib/n). Not tested.

Note2 There is also a working SYSVR3 system under 3B2 SIMH emulator. Not tested yet.