Consolidation is the name given to the process of converting semicompiled output from a compiler into a binary program which can be run. Most of the standard compilers produce output which has to be consolidated (one exception being ALGOL68). Using a standard method of producing programs ready to run means that various semicompiled libraries can be used, and output from more than one compiler can be linked together.
The GEORGE 4 consolidator normally used at ACL is XPCH. This usually produces sparse programs (Y.3.2.3), but can produce programs in any of the addressing or branch modes (Part Y). It cannot, however, produce an overlay program. If overlays are needed, the GEORGE 3 consolidator XPCK (Part S) must be used.
Usually, consolidation follows immediately after compilation, with the necessary parameters being passed by the compiler or the TASK system. In this case, the user provides the information required (such as library names, listing options etc) to the compiler, and links libraries to channels via the macro (LIB parameter in TASK). If the binary program is produced directly from pre-compiled files, XPCH must be called directly (CONS parameter in TASK) and the necessary steering information provided explicitly.
Files linked to XPCH are specified either as libraries or as a complete file. The latter will be linked in regardless of preceding references unless a segment of the same name has already been loaded. However, all libraries are scanned once in order. It is therefore necessary to arrange the order of segments within library files, and the files themselves, so that routines are correctly linked. For example, if B calls A, and A comes before B in order (either in the same file or in a previous file), the linking will only be correct if A has been loaded by something else (such as an earlier reference). If duplicate routines are encountered, the first is taken as the required one and references are linked to this. If, however, subsequent routines of the same name are forcibly included, they will be loaded and will take up store space although no references to them will be made. If a routine with the required name exists but is of the wrong mode, then XPCH will not load it.
Users with Assembly Code programs (Part N), or FORTRAN programs using ENTRY, should note that XPCH will satisfy a reference to a CUEd (or GLABEL) name (as opposed to a routine name) only if the routine containing the CUE has already been loaded (either by specific reference or included in a complete file using a SEMI parameter, for example). This can be an advantage. Suppose a program contains calls to a number of different output devices, with attendant routines. It is possible for unwanted routines to be removed by including a routine which contains the names of the unwanted routines as CUEs. If this routine is loaded first, the unwanted routines will not be loaded and store space will be saved.
XPCH allows the user to produce a binary program up to 3M words long. The actual amount of store used can be varied at run time, since storage is only allocated to parts that are actually used. It is possible to define sections of a program as 'pure1, in which case checks are made to prevent these sections being overwritten. For example, the instructions produced by compiling a FORTRAN routine are placed in a 'pure1 area. The use of such areas also speeds program running, since it is not necessary to copy pure areas when deleting them from core (via the paging system).
The user of high level languages does not need to know about the control of store, since the compiler will make the necessary allocations. The 3M words available are divided into 48 quires, each 64K words long. A sparse program will usually occupy only a small part of its virtual store, the size of the program being the maximum number of pages it may use. Sparse programs usually operate in 22-bit address mode and extended branch mode (Y.2.1). The GEORGE 3 consolidator can only produce dense programs.
A semicompiled segment consists of code, and data which may be local (and unnamed) or COMMON. One COMMON area can be nominated as the stack (ALGOL, TOPGLOBAL directive in PLASYD, or #ELASTIC directive in PLAN). Code and data are placed in the following areas:
Lower Workspace (Impure) LW Lower Variable (Impure) LV Common Lower Variable (Impure) CLV Lower Preset (Impure) LP Common Lower Preset (Impure) CLP Lower Pure (Pure) LR Common Lower Pure (Pure) CLR Literals (Pure) LTThe compilers usually determine where data is placed.
Store Layout Example
Lower Data LW Quire 0 LV CLV LP CLP LR CLR LT Replacers RR Pure PSEG1 UR PSEG2 UR CUR Impure SEG3 Quire 4 UP uv SEGA UP UV CUP CUV STACK TOP Quire 8
Dense programs are ordered in the same way, but the sections are not put into separate quires.
The layout can be changed by the user, but this option should be used with care and is not discussed further.
XPCH accepts parameters from a basic file on *CR0 and files containing semicompiled segments on *DA1, *DA2, etc. At most, 12 files can be read. The listing, if any, is produced on *LP0 and the binary program is either written to a file or left in store ready to run. In general, it is preferable to avoid the first option and use the SAVE command to copy the core image to a file (D.4.3).
The steering parameters are only required if XPCH is called directly. As with other ICL programs, many of the parameters require filenames. These may be dummy filenames, but should be distinct, although it is possible to force a second read of a library by using the same dummy filename twice. The possible parameters are:
*IN (filename)
This specifies a semicompiled file which will be completely included. One of these parameters must be present.
*LIB (filename)
This specifies a library file. Semicompiled segments will only be included if they have been previously referenced.
XPCH will work faster if any libraries have been set up by XFYZ or NULLIB (Part Q).
*OUT (filename)
This defines a file on which the binary object program is to be written. If omitted, the binary program is left in store.
*APPEND (filename)
The binary program is appended to an existing file. The parameters are terminated by:
****
Files are scanned in the order of the parameters. Errors in parameters give rise to:
HALTED: PE
The listing may contain one of the following error codes:
Code Meaning B Unrecognised parameter D Parameter line too long E File or subfile name contains illegal character F No left parenthesis H File or subfile name too long I File or subfile name does not start with letter J No right parenthesis K No full stop M No filename N More than one *OUT or *APPEND O Invalid combination of parameters P No *IN parameter Y Parameter incomplete 02 Invalid format - terminator assumed (This message will not cause a halt)
The following errors are possible:
Error Meaning HALTED: NEED ED The parameters do not match the files provided. HALTED: ER Message output on listing. HALTED: YY Message output on listing. DISPLAY: MO Program is incomplete. Consolidation will continue with segments missing. HALTED: QQ This can occur in a consolidated program and indicates a call to a missing segment at run time. HALTED: ST Needs more store to consolidate.
Lineprinter messages:
INVALID FILE STRUCTURE Usually means compilation errors. INVALID SEMICOMPILED FORMAT Usually means compilation errors. CANNOT FIND SUBFILE name Usually means compilation errors. LOWER DATA > 4096 WORDS This means that the program must be redesigned to lessen LOWER data use, or overlays may be required. LOWER UNIT VIOLATION ON LOADING Sparse FORTRAN program >4096 words of LOWER. MISSING AND OMITTED SEGMENTS List of names The consolidator does not stop. ADDRESS FOR MISSING AND OMITTED SEGMENTS Address of SUSWT QQ order inserted for missing cues. UNEXPECTED CUE FOUND A global name has been used incorrectly. For example, the same name has been used for a subroutine and a BLOCK COMMON area in FORTRAN. INCOMPATIBLE MODE: SEGMENT The segment is omitted.
The order of the listing output from XPCH is:
Example:
CONSOLIDATED BY XPCHIA DATE 10/09/71 TIME 18/37/00 *IN (SEMICOM FILE) *OUT (PROGRAM FILE) *SPARSE *SHARE *QUIRE 17, R (NOTWRITEAREA) *PURE (SEGA, SEGB) COMM.02 COMMONA1, COMMONA2 COMM.03 **** SPARSE PROGRAM #RELJ (MIXED AM - STARTS IN 22AM/EBM/SHARABLE) ------------------------------------------------------------------- MISSING AND OMITTED SEGMENTS OMIT SEG3 MISS BLANK QUIRE 0 -------- LOWER DATA LENGTH 1103 WORDS = 2 PAGES LW *55 45 LV *60 48 LP *1044 548 LR *1427 791 *2112 1098 PURE PART LENGTH 158 WORDS = 1 PAGE *PURE RR *10000 4096 SEG *10016 4110 SEGA (9 WORDS) ENT 4110 ENTA SEG *10027 4119 SEGB (5 WORDS) CUR *10034 4129 COMMONA1 CUR *10667 4151 COMMONA2 DEFAULT PURE SEG *10074 4156 SEGC (48 WORDS) CUR *10156 4206 *10156 4206 COMA QUIRE 4 ------- IMPURE PART LENGTH 1000096 WORDS = 977 PAGES OVERSPILL HAS OCCURRED INTO QUIRES 5-19 SEG *1000000 262144 IMPSEG (90 WORDS) CUV *1000140 262240 MILLIONLONGCOMMON *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*- QUIRE 20 (SPECIFIED AS QUIRE 8 BUT SHIFTED DUE TO OVERSPILL) -------- CHARACTERISTIC: E/R/W = IMPURE LENGTH 69600 WORDS = 68 PAGES OVERSPILL HAS OCCURRED INTO QUIRE 21 TOP *5000000 1310720 TOPCOMM *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*- QUIRE 22 (SPECIFIED AS QUIRE 17 BUT SHIFTED DUE TO OVERSPILL) ------- CHARACTERISTIC: R LENGTH 500 WORDS = 1 PAGE CUP *5400000 1441792 NOTWRITEAREA *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*- ADDRESS FOR MISSING AND OMITTED SEGMENTS *1426 790 SIZE 1074176 WORDS = 1049 PAGES LAST BUCKET USED OF PROGRAM FILE (0) IS 20
The following is a brief description of the use of TASK in accessing XPCH. Further details can be obtained from the TASK manual.
Specifying a compiler and omitting the NOCONS parameter will automatically call XPCH. For example:
TASK FORTRAN,*CR FRED
The parameter OVERLAY will call the GEORGE 3 consolidator XPCK, and. should only be used if overlays are required (Part S). In this case, it may be necessary to specify a larger store for XPCK by using the parameter:
CCORE size
XPCH will automatically expand, if required, up to the given MAXSIZE when it will halt ST. In this case the job should be rerun with a larger MAXSIZE.
The standard languages such as FORTRAN and ALGOL will cause standard libraries to be scanned. The user does not need to provide a LIB parameter for these (Part Q).
It is possible to compile and consolidate several segments together in one run of TASK by using the LINK parameter. The LINK parameter is also needed if SEMI or LIB parameters are used and no steering lines have been provided for the compilers (such as LIBRARY(B), SEMICOMPILED(A) in FORTRAN). For example:
TASK FORTRAN,*CR FRED,LINK,LIB (26,NAGLIBF) TASK PLASYD,*CR SUBS,NOCONS,ER,FORTRAN,*CR FRED,LINK
If no compiler is required, the CONS parameter should be used as the first parameter. This parameter can also be used to provide a parameter file for XPCH. In this case, the specified file will contain the parameters described in N.2.2. Note also that explicit parameters must be provided for standard libraries in this case. For example:
TASK CONS CPAR,SEMI FRED-SEM TASK FORTRAN,*CR FRED,CONS CPAR
File CPAR might contain in the second example:
*IN(A) *LIB(B) *LIST ****
It is also possible to omit CONS if a LINK parameter is present. The following two examples are equivalent:
TASK LINK,SEMI FRED-SEM TASK CONS,LINK,SEMI FRED-SEM