.nr LL 7.5i .nr PD 1v .TL Amsterdam Compiler Kit installation guide .AU Ed Keizer .AI Wiskundig Seminarium Vrije Universiteit Amsterdam .NH Introduction .PP This document describes the process of installing Amsterdam Compiler Kit. It depends on your combination of hard- and software how hard it will be to install the kit. This description is intended for a PDP 11/44 running .UX Version 7. Installation on other PDP 11's should be easy, as long as they have separate instruction and data space. Installation on machine's without this feature, like PDP 11/34, PDP 11/60 requires extensive surgery on some programs and is thought of as impossible. See chapter 6 for installation on other systems. .NH Restoring tree .PP The process of installing Amsterdam Compiler Kit is quite simple. It is important that the original Amsterdam Compiler Kit distribution tree structure is restored. Proceed as follows .IP " -" 10 Create a directory, for example /usr/em, on a device with at least 20000 blocks left. .IP " -" Change to that directory (cd ...); it will be the working directory. .IP " -" Extract all files from the distribution medium, for instance magtape: \fBtar x\fP. .IP " -" Keep a copy of the original distribution to be able to repeat the process of installation in case of disasters. This copy is also useful as a reference point for diff-listings. .LP The directories in the tree contain the following information: .nr PD 1v .IP "lib" 14 .br almost all binaries and shell files used by commands and library em_data.a from misc/data .IP "lib/ack" .br The command descriptor files used by the program ack. .nr PD 0 .IP "bin" .br the few utilities that knot things together .IP "etc" .br The MAIN description of EM sits here. contains files (e.g. em_table) describing the opcodes and pseudos in use, the operands allowed, effect in stack etc. etc. Make in this directory creates most of the files in h .IP "include" .br More or less system independent include files needed by modules in the C library from lang/cem/libcc. Especially needed for "stdio". .IP "h" .br The #include files for: .nf as_spec.h Used by EM assembler and interpreters. em_abs.h Contains trap numbers and address for lin and fil em_flag.h Definition of bits in array em_flag in lib/em_data.a Describes parameters effect on flow of instructions em_mes.h Definition of names for mes pseudo numbers em_mnem.h instruction => compact mapping. em_pseu.h pseudo instruction => compact mapping em_ptyp.h Useful for compact code reading/writing, defines classes of parameters em_spec.h Definition of constants used in compact code local.h Various definitions for local versions pc_err.h Definitions of error numbers in Pascal pc_file.h Macro's used in file handling in Pascal em_path.h Pathnames used by \fIack\fP, intended for all utilities pc_size.h Sizes of objects used by Pascal compiler and run-time system. em_reg.h Definition of names for register types. .IP "doc" .br Documentation .nf cg.doc Use and internal specification of the backend. .br regadd.doc Update for cg.doc concerning register variables .br regadd.doc Description of steps to add register variables. .br ack.doc Layout of description files needed for each machine. .br cref.doc C reference manual, addendum .br install.doc Ack Installation Guide .br pcref.doc Pascal reference manual, addendum .br peep.doc Description of the peephole optimizer .br em.doc EM reference manual .br toolkit.doc A general overview of the toolkit .br v7bugs.doc Bugs in the standard V7 system .br val.doc Pascal validation suite version 3 report .nf .IP "doc/em.doc" .br The EM-manual IR-81 .IP "doc/em.doc/int" .br The EM interpreter written in pascal .IP "mkun" .br The PUBMAC macro package for nroff/troff from the Katholieke Universiteit at Nijmegen. It is used for the EM reference manual, the Makefile installs the macro package in /usr/lib/tmac/tmac.mkun*. This package is in the public domain. .IP "mach" .br just there to group the directories for all machines these directories have sub-directories named: .nf as the assembler ( *.s + libraries => a.out ) cg the new backend ( *.m => *.s ) lib the libraries for all run-time systems these libraries are used by the assembler. libpc Used to create Pascal run-time system in 'lib' libcc Used to create C run-time system in 'lib' libem Sources for EM runtime system, result sits in 'lib' test Various tests dl Down-load programs int Source for an interpreter available are: PMDS II 68000, wordsize 2, ptrsize 4 mach/m68k2 mach/m68k2/as mach/m68k2/cg mach/m68k2/libem mach/m68k2/lib mach/m68k2/dl mach/m68k2/libpc mach/m68k2/libcc mach/m68k2/libsys bare 6809 mach/6809 mach/6809/as 8080, wordsize 2, ptrsize 2 mach/8080 mach/8080/as mach/8080/test mach/8080/libcc mach/8080/lib bare 8086, wordsize 2, ptrsize 2 mach/i86 mach/i86/as mach/i86/lib mach/i86/libcc mach/i86/dl mach/i86/libem mach/i86/libpc mach/i86/saio (library for stand-alone EM on 86/12A ) pdp 11, UNIX/V7, wordsize 2, ptrsize 2 mach/pdp mach/pdp/test mach/pdp/libem mach/pdp/lib mach/pdp/libcc mach/pdp/libpc mach/pdp/cg mach/pdp/int -PDP 11/44 EM interpreter vax 780, UNIX V7, wordsize 4, ptrsize 4 mach/vax4 mach/vax4/cg mach/vax4/lib mach/vax4/libcc mach/vax4/libem mach/vax4/libpc z80, CP/M, wordsize 2, ptrsize 2 mach/z80 mach/z80/as mach/z80/libem mach/z80/lib mach/z80/libcc mach/z80/libpc mach/z80/int -Z80 EM interpreter z80, nascom mach/z80a mach/z80a/dl vax 11/780, Berkeley UNIX, wordsize 2, ptrsize 4 mach/vax2 mach/vax2/cg mach/vax2/lib mach/vax2/libpc mach/vax2/libem bare 6500, wordsize 2, ptrsize 2 mach/6500 mach/6500/as mach/6500/dl mach/6500/libem mach/6500/lib bare 6800, wordsize 2, ptrsize 2 mach/6800 mach/6800/as EM virtual machine code, wordsize 2, ptrsize 2 mach/int mach/int/libcc mach/int/libpc mach/int/lib mach/int/test The directory proto contains files used by most machines. e.g. makefiles for libraries for C and Pascal mach/proto mach/proto/libg .fi .IP "emtest" .br Contains prototype of em test set. .IP "man" .br Man files for various utilities .IP "lang" .br just there to group the directories for all front-ends .IP "lang/pc" .br Pascal front-end .IP "lang/pc/libpc" .br Source of Pascal run-time system ( in EM or C ) .IP "lang/pc/test" .br Some test programs written in Pascal .IP "lang/pc/pem" .br The compiler proper .IP "lang/cem" .br C front-end .IP "lang/cem/libcc" .br Directories with sources of C runtime system, libraries (in EM or C) .IP "lang/cem/libcc/gen" .br Sources for routines in chapter III of UNIX programmers manual, excluding STDIO .IP "lang/cem/libcc/stdio" .br STDIO sources .IP "lang/cem/libcc/mon" .br Sources for routines in chapter II, written in EM .IP "lang/cem/comp" .br The compiler proper .IP "lang/cem/ctest" .br C test set .IP "lang/cem/ctest/cterr" .br Programs developed for pinpointing previous errors .IP "lang/cem/ctest/ct*" .br The test programs. .IP "util" .br Contains directories with various utilities .IP "util/opt" .br EM peephole optimizer (*.k => *.m) .IP "util/misc" .br Decode (*.[km] => *.e) + encode (*.e => *.k) .IP "util/data" .br The C-code for `lib/em_data.a` These sources are created by the Makefile in `etc` .IP "util/ass" .br The EM assembler ( *.[km] + libraries => e.out ) .IP "util/arch" .br The archiver to be used for ALL EM utilities .IP "util/cgg" .br A program needed for compiling backends. .IP "util/cpp" .br The V7 C preprocessor. .LP All pathnames mentioned in the text of this document are relative to the working directory, unless they start with '/'. .PP The person doing the installation needs permission to write in the directories of the Amsterdam Compiler Kit distribution tree. Preferably you should log in as sys (uid=3,gid=0). .NH Pathnames .PP Absolute pathnames are concentrated in "h/em_path.h". Only the pascal runtime system and the utility \fIack\fP use absolute pathnames to access files in the kit. The tree is distributed with /usr/em as the working directory. The definition of EM_HOME in em_path.h should be altered to specify the root directory for the Compiler Kit distribution on your system. The trailing " in the definition of EM_HOME is intentionally missing! Em_path.h also specifies which directory should be used for temporary files. Most programs from the kit do indeed use that directory although some remain stubborn and use /tmp or /usr/tmp. .LP The shape of the tree should not be altered lightly because most Makefiles and the utility \fIack\fP know the shape of the ACK tree. All pathnames in all Makefiles are relative, that is do not have "/" as the first character. The knowledge of the utility \fIack\fP about the shape of the tree is concentrated in the files in the directory lib/ack. .NH Commands .PP The kit is distributed with all available commands in the bin directory. The commands distributed are: .IP "\fIack\fP, \fIacc\fP, \fIapc\fP and their links" .br They are used to compile the Pascal, C, etc... programs. .IP \fIarch\fP .br The archiver used for the EM- and universal assembler. .IP "\fIem\fP and \fIeminform\fP" .br The EM interpretator for the PDP-11 and the program to unravel its post-mortem information. .LP We currently make the kit available to our users by telling them that they should include the bin directory of the kit in their PATH shell variable. The programs will still work when moved to a different directory. The copying should preferably be done with tar, since links are heavily used. Renaming of the programs linked to \fIack\fP will not always produce the desired result. This program uses its call name as an argument. Any call name not being \fIcc\fP, \fIacc\fP, \fIpc\fP or \fIapc\fP will be interpreted as the name of a 'machine description' and the program will try to find a description file with that name. All recompilations will only touch the utilities in the bin directory, not your own copies. .NH Options .PP There is one important option in h/local.h. The utility \fIack\fP uses a default machine name when called as \fIacc\fP, \fIcc\fP, \fIapc\fP, \fIpc\fP or \fIack\fP. The machine name used for default is determined by the definition of ACKM in h/local.h. The current definition is \fIpdp\fP. .PP The distribution is tailored to one specific opreating system per CPU type. For some of these CPU's it is possible to tailor the distribution to another operating system. The steps to be taken are described in READ_ME (or README) files in the subdirectories of the directory in EM_HOME/mach for that particular machine. For example: The vax2 distribution is tailoerd to BSD4.1, but has #define's for BSD4.1c and BSD4.2. For the names and places of these define's look in EM_HOME/mach/vax2/cg and EM_HOME/mach/vax2/libem. .NH Recompilation .PP The kit comes with binaries in the directories \fBbin\fP and \fBlib\fP. Some directories among mach/*/lib contain archives with object files, notably mach/pdp/lib. The binaries and object files are for a PDP 11/44 with floating point running UNIX V7. .PP Almost all directories contain a "Makefile" or a shell command file called "make". Apart from commands applying to that specific directory these files all recognize a few special commands. When called with one of these they will apply the command to their own directory and all subdirectories. The special commands are: .IP "install" 20 recompile and install all binaries and libraries. .br Some Makefiles allow errors to occur in the programs they call. They ignore such errors and notify the user with the message "~....... error code n: ignored". Whenever such a message appears in the output you can ignore it too. .br The installation of the PUBMAC macro package is not done automatically from the higher level directory. .IP "cmp" recompile all binaries and libraries and compare them to the ones already installed. .IP pr print the sources and documentation on the standard output. .IP opr make pr | opr .br Opr should be an off-line printer daemon. On some systems it exists under another name e.g. lpr. The easiest way to call such a spooler is using a shell script with the name opr that calls lpr. This script should be placed in /usr/bin or EM_HOME/bin or one of the directories in your PATH. .IP clean remove all files not needed for day-to-day use, that is binaries not in bin or lib, object files etc. .LP Example: .nf .sp 1 make install .sp 1 .fi given as command in the home directory will cause recompilation of all programs in the kit. .LP Recompilation of the complete kit lasts about 9 hours an a PDP 11/44. .NH 2 Recompilation on a different machine. .PP Installation on other systems will often require recompilation of all programs. The presence of a C compiler is essential for recompilation. Except the Pascal compiler proper all programs are written in C. Some modules are derived from \fIyacc\fP sources. Retranslating these programs from that yacc source is not necessary, although it might improve performance. Some versions of \fIyacc\fP 'know' that the resulting C programs will run on a 32-bit int machine. C modules produced by such a \fIyacc\fP are not portable and should not be used to (cross)compile programs for 16-bit machines. We assume a version UNIX which, apart from the C-compiler, contains most normal utilities, like ed, sed, grep, make, the Bourne shell etc. All Makefiles use the system C-compiler. The existence of a backend for your system is of course essential if you wish to produce executable files for that system. When the backend exists it is also possible to boot the Pascal Compiler, that is written in Pascal itself. The kit contains the compact code files for the 2/2 and 2/4 versions of the Pascal compiler. The current version of this compiler can only be used on machines with a 16-bit word size and 16- or 32-bit pointers. The Makefile automatically tries to boot the Pascal compiler from one of these compact code files, if the compiler proves unable to compile itself. .PP The native assemblers and loaders are used on PDP-11 and VAX. The description files in lib/ack for other systems use our universal assembler. The load file produced by this assembler is not directly usable in any system known to us, but has to be converted before it can be put to use. The \fIdl\fP programs present for some machines unravel these load files and transmit commands to load memory to a microprocessor over a serial line. The PDP-11 version of our universal assembler is supplied with a conversion program. The file man/a.out.5 contains a description of the format of the universal assembler load file, it might be useful to those who wish or need to write their own conversion programs. .br Berkeley UNIX for the VAX'en has (at least) three different versions, BSD4.1a, BSD4.1c and BSD4.2. The READ_ME files in the directories mach/vax2/cg, mach/vax2/libem, mach/vax4/cg and mach/vax4/libem tell you how to adapt the vax2 and vax4 backend to these versions. .NH 2 Recompiling libraries .PP The kit contains sources for part II and III of the C-library, except the math functions, they are grabbed from our V7 system and sometimes altered in a EM dependent way or replaced altogether when the original was in assembly. These files can be used to make libraries for the Ack C-compiler. The recompilation process uses a few include files. The include directory in the EM home directory contains a few more or less system independent include files. The system dependent include files are fetched from /usr/include on the system you use to recompile. This may lead to several problems. Sometimes the system differs so much from V7 that certain manifest constants do not exist any more. At other times these include files were written for a compiler without a restriction on name length. In that case - I've seen it happen - people tend to use differing identifiers that are identical in the first eight characters. All these problems you have to solve yourself, the libraries are only included as an extra and too much system dependent to give any guarantees. .NH Fixes to the UNIX V7 system .PP UNIX System V7 has a few bugs that prevent a part of or the whole kit from working properly. To be honest, we do not know which of the following changes are essential to the functioning of our kit. .PP The file "doc/v7bugs.doc" gives for each of the following bugs a small test program and a diff listing of the source files that have to be modified. .IP 1 Bug in the C optimizer for unsigned comparison .nr PD 0 .IP 2 The loader 'ld' fails for large data and text portions .IP 3 Floating point registers are not saved if more memory is needed. .IP 4 Floating point registers are not copied to child in fork(). .nr PD 1v .LP Use the test programs to see if the errors are present in your system and to check if the modifications are effective. .NH Testing .PP Test sets are available in Pascal, C and EM assembly. .IP em 8 .br The directory emtest contains a few EM test programs. The EM assembly files in these tests must be transformed into load files, thereby avoiding use of the EM optimizer. These tests use the LIN and NOP instructions to mark the passing of each test. The NOP instruction prints the current line number during the test phase. Each test notifies its correctness by calling LIN with a unique number followed by a NOP which prints this line number. The test finishes normally with 0 as the last number printed In all other cases a bug showed its existence. .IP Pascal .br The directory lang/pc/test contains a few pascal test programs. All these programs print the number of errors found and a identification of these errors. .IP C .br The sub-directories in lang/cem/ctest contain C test programs. The idea behind these tests is: when you have a program called xx.c, compile it into xx.cem. Run it with standard output to xx.cem.r, compare this file to xx.cem.g, a file containing the 'ideal' output. Any differences will point to implementation differences or bugs. Giving the command "run gen" or plain "run" starts this process. The differences will be presented on standard output. The contents of the result files depend on the wordsize, the xx.cem.g files on the distribution are intended for a 16-bit machine. .NH Documentation .PP Manual pages for Amsterdam Compiler Kit can be copied to "/usr/man/man?" by the following commands: .DS cd man make install .DE .LP Several documents are provided: .DS doc/toolkit.doc: a general overview doc/pcref.doc: the Pascal-frontend reference manual doc/val.doc: the results of running the Pascal Validation Suite doc/cref.doc: the C-frontend manual doc/em.doc: a description of the EM machine architecture doc/peep.doc: internal documentation for the peephole optimizer doc/cg.doc: documentation for backend writers and maintainers doc/regadd.doc: addendum to previous document describing register variables doc/install.doc: this document .DE .LP The Validation Suite is a collection of more than 200 Pascal programs, designed by Brian Wichmann and Arthur Sale to test Pascal compilers. We are not allowed to distribute it, but you may request a copy from .DS Richard J. Cichelli A.N.P.A. 1350 Sullivan Trail P.O. Box 598 Easton, Pennsylvania 18042 USA .DE .LP Good luck.