NCC / K&R C compiler for the AMD64 platform

I saw this mentioned over at Hacker News, Charles Youse’s NCC and had to check it out! It really is a ‘tiny’ K&R C compiler that is targeting a proprietary a.out file format.

This is NCC, the “new” C compiler. It is intended to be used as the system compiler for BSD/64 (my port of pre-Reno 4.3BSD to Intel/AMD 64-bit desktops).

The dialect of C accepted by the compiler is basically pre-ANSI (K&R 1978) with some common extensions and a few minor “fixes”. (See the DIALECT file for specifics.) This is both a function of the compiler’s purpose — to operate on a mid-80s codebase — and, admittedly, personal taste.

The binary tools work on a proprietary object file format and produce a.out- format executables. These are documented in obj.h and a.out.h respectively.

The compiler and its tools are fully functional and have been fairly well- tested, though they are works in progress. In particular, the optimizer is quite minimal: the framework for a more aggressive optimizer is there, but for the moment only rudimentary data-flow analysis is done to aid the register allocator and clean up the more egregious output from the code generator.

Included in the source is:

* ncc: compiler driver.
* ncpp: an ANSI C89 compliant C preprocessor.
* ncc1: the C compiler proper, produces assembly output
* nas: accepts 16/32/64-bit Intel syntax assembly and produces .o object.
* nld: the object linker – combines .o files into a.out executables.
* nobj: object/executable inspector.

You can find the source over at github here:

I have to admit, I’m more interested in this 4.3BSD port to the AMD64, although Charles hasn’t made any mention of it just of yet.

For those who are interested in that sort of thing, NCC is licensed under the 2-clause BSD license.

Old Unix tree’s

Well I was looking for a good way to see what changed between Net/2, 386BSD 0.0 and 386BSD 0.1 and it appears that nobody has a cvsweb of these early versions….

What is strange, is that cvsweb package for debian is lacking the actual cgi file.. So after going insane with cvsweb, I set one up.

I’ve never really setup a CVS repository before so this was my first shot…

rm -rf /var/lib/cvs
mkdir -p /var/lib/cvs
cvs -d /var/lib/cvs init
cd /var/www/
cvs -d /var/lib/cvs import -m “Net/2” Net2 CSRG Net2
cd /var/www/
cvs -d /var/lib/cvs import -m “386BSD 0.0” Net2 BJolitz Jolix00
cd /var/www/
cvs -d /var/lib/cvs import -m “386BSD 0.1” Net2 BJolitz Jolix01
cd /var/www/
cvs -d /var/lib/cvs import -m “NetBSD 0.8” Net2 NetBSD NetBSD08
cd /var/www/
cvs -d /var/lib/cvs import -m “NetBSD 0.9” Net2 NetBSD NetBSD09 

From what I saw the more the directories align, the better, so I moved all the i386 and other platform stuff into arch directories to better match NetBSD 0.9 …

I also setup src2html to browse various levels, it’s great for quickly finding things that may have moved… It’s here.

Now I just have to see about doing ‘forks’ in CVS and adding in the 4.4 lite stuff.

I hate to say it, but 4.3 BSD RENO sucks.

Ok so I spent the day building stuff on RENO, I thought maybe I could bring it up to par package wise, like the UWisc 4.3 BSD… Oh boy what a PITA!

First the syscalls changed to RENO so hardly any of the packages built on Uwisc work on reno.. expect LOTS of unhandled syscalls. Wow, that’s lame.

I got bash 2.0 to build without much pokeing, but get this.. Control+C kills it!

myname# bash
bash-2.00# Bus error (core dumped)

Yeah. Nice.

gcc 2.5.8 can build binutils 2.8.1 & gcc so I thought that was cool to go onwards to gzip & lynx…

Well launching lynx on ANYTHING other then file:// gives me this:

Alert!: Unsupported URL scheme!

Alert!: Unsupported URL scheme!

lynx: Start file could not be found or is not text/html or text/plain

Oh yeah, and it built dammed near clean except for adding a va_list definition….

I was going to try to build more stuff, but it just feels so futile. Since adventure (zork) had been removed in RENO I was going to try to build GNU Fortran 77 & get a build of that going, but now it’s most likely it won’t work at all. I guess I’ll do some kind of update on RENO but why would anyone actually want to load it? Why is it so popular?

I wonder if there is an easy accessable 4.4 BSD release, all that is on TUSH is 4.4 Alpha… At this point I wonder if Net/2 would be better…

Anyways that’s been my day.