OS 2200 Collector Programming Reference Manual - Public Support ...
OS 2200 Collector Programming Reference Manual - Public Support ...
OS 2200 Collector Programming Reference Manual - Public Support ...
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
ClearPath <strong>OS</strong> <strong>2200</strong><br />
<strong>Collector</strong> <strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong><br />
February 2011 7830 9887–001<br />
unisys<br />
imagine it. done.
NO WARRANTIES OF ANY NATURE ARE EXTENDED BY THIS DOCUMENT. Any product or related information<br />
described herein is only furnished pursuant and subject to the terms and conditions of a duly executed agreement to<br />
purchase or lease equipment or to license software. The only warranties made by Unisys, if any, with respect to the<br />
products described in this document are set forth in such agreement. Unisys cannot accept any financial or other<br />
responsibility that may be the result of your use of the information in this document or software material, including<br />
direct, special, or consequential damages.<br />
You should be very careful to ensure that the use of this information and/or software material complies with the laws,<br />
rules, and regulations of the jurisdictions with respect to which it is used.<br />
The information contained herein is subject to change without notice. Revisions may be issued to advise of such<br />
changes and/or additions.<br />
Notice to U.S. Government End Users: This is commercial computer software or hardware documentation developed at<br />
private expense. Use, reproduction, or disclosure by the Government is subject to the terms of Unisys standard<br />
commercial license for the products, and where applicable, the restricted/limited rights provisions of the contract data<br />
rights clauses.<br />
Unisys and ClearPath are registered trademarks of Unisys Corporation in the United States and other countries.<br />
All other brands and products referenced in this document are acknowledged to be the trademarks or registered<br />
trademarks of their respective holders.
Contents<br />
Section 1. Introduction<br />
Section 2. Using the <strong>Collector</strong><br />
2.1. <strong>Collector</strong> Input .......................................................................... 2–1<br />
2.1.1. <strong>Collector</strong> Language Conventions .................................... 2–3<br />
2.1.2. Files ................................................................................. 2–4<br />
2.2. <strong>Collector</strong> Output ....................................................................... 2–4<br />
2.2.1. <strong>Collector</strong>-Produced Relocatable Elements ...................... 2–4<br />
2.2.2. <strong>Collector</strong>-Produced Absolute Output .............................. 2–5<br />
2.2.3. Listing .............................................................................. 2–5<br />
2.3. @MAP-<strong>Collector</strong> Initiation and Termination ............................. 2–7<br />
Section 3. Inclusion and Exclusion of Elements<br />
Section 4. Banking<br />
3.1. Explicit Inclusion and Exclusion ............................................... 3–1<br />
3.1.1. IN - Element Inclusion ..................................................... 3–1<br />
3.1.2. FRSTIN - First Element Included ..................................... 3–3<br />
3.1.3. FORM - Source Language Structure Duplication ............ 3–3<br />
3.1.4. NOT - Element Exclusion ................................................ 3–4<br />
3.1.5. CLASS - Element Selection Determination<br />
through Version Names .............................................. 3–6<br />
3.2. Implicit Inclusion-File Searching ............................................... 3–8<br />
3.2.1. LIB-File Searching............................................................ 3–8<br />
3.2.2. RLIB - File Searching ..................................................... 3–10<br />
3.2.3. DLIB - Directed LIB for the Default Libraries ................ 3–10<br />
3.2.4. Sequence of File Searching ........................................... 3–10<br />
3.2.4.1. System Library Searching ..................................... 3–11<br />
3.2.4.2. Altering the Search Sequence - INFO Group<br />
12 Keywords .................................................... 3–12<br />
3.2.4.3. Determining the Search Sequence Used ............. 3–14<br />
3.2.4.4. Searching User-Specified Search Files ................. 3–16<br />
3.2.5. @PREP of Library Files .................................................. 3–17<br />
4.1. Introduction .............................................................................. 4–1<br />
4.2. Banking Directives ................................................................... 4–1<br />
4.2.1. IBANK, DBANK — Bank Structuring ............................... 4–1<br />
4.2.2. BANKINFO — Specifying Bank Attributes ...................... 4–6<br />
4.2.3. $Ics — Location Counter Set Specification ................... 4–10<br />
4.2.4. INFO Group 3 ................................................................ 4–12<br />
7830 9887–001 iii
Contents<br />
4.3. Bank-Implied Collections ........................................................ 4–12<br />
4.4. Bank-Named Collections ........................................................ 4–13<br />
4.4.1. Bank Address Assignments ........................................... 4–13<br />
4.4.2. Initially Based Banks ...................................................... 4–14<br />
4.4.3. The Control Bank ........................................................... 4–14<br />
4.4.4. Element Inclusion .......................................................... 4–15<br />
4.4.4.1. Global Elements .................................................... 4–16<br />
4.4.4.2. Local Elements ...................................................... 4–16<br />
4.4.4.3. Local-Global Conflicts ............................................ 4–18<br />
4.4.5. Element Placement ........................................................ 4–18<br />
4.5. Bank Switching for Basic Mode ............................................. 4–20<br />
4.5.1. IBJ$/DBJ$ ...................................................................... 4–20<br />
4.5.2. BBJ$ ............................................................................... 4–21<br />
4.5.3. Use of MAPBDR$ .......................................................... 4–21<br />
4.5.4. Use of the BDI with IBJ$/DBJ$/BBJ$ ........................... 4–22<br />
4.5.5. TYPE IBJLNK and BDICALL$/IBJ$ ................................ 4–23<br />
4.5.5.1. Using BDICALL$ and IBJ$ .................................... 4–23<br />
4.5.5.2. System-Provided Procedures ................................ 4–23<br />
4.5.5.3. Using TYPE IBJLNK............................................... 4–24<br />
4.5.5.4. Resolution of BDICALL$, IBJ$, and TYPE<br />
IBJLNK .............................................................. 4–24<br />
4.5.6. BDICALL$/IBJ$ Return .................................................. 4–25<br />
4.6. Bank Switching for Extended Mode ....................................... 4–26<br />
4.6.1. Use of the BDI ............................................................... 4–26<br />
4.6.2. Example Using LOCL and CALL .................................... 4–27<br />
4.7. BDI and Entry-Point Definitions .............................................. 4–28<br />
4.8. Use of BANKINFO AFCB ........................................................ 4–30<br />
4.9. MAPCALL$, MAPGOTO$, and the VECTOR Attribute .......... 4–35<br />
4.9.1. MAPCALL$ .................................................................... 4–35<br />
4.9.2. MAPGOTO$ ................................................................... 4–36<br />
4.9.3. MAP$CALLGOTO .......................................................... 4–36<br />
4.10. Link Vector Processing ........................................................... 4–38<br />
Section 5. Program Parameter Specification<br />
5.1. TYPE Directive .......................................................................... 5–1<br />
5.2. Absolute Element Arithmetic Fault Mode<br />
Determination ....................................................................... 5–5<br />
5.3. Exec Action Produced by Absolute Element ............................ 5–6<br />
5.4. Third- and Quarter-Word Sensitivity ......................................... 5–6<br />
Section 6. Other Directives<br />
6.1. COR — Corrections .................................................................. 6–1<br />
6.2. DEF — External Definition Retention ....................................... 6–3<br />
6.3. END — End of Input ................................................................. 6–4<br />
6.4. ENT — Starting Address Redefinition ...................................... 6–4<br />
6.5. EQU — External <strong>Reference</strong> Definition ..................................... 6–5<br />
6.6. LEVEL — Specifying the Bank Descriptor Table (BDT)<br />
Level ..................................................................................... 6–5<br />
6.7. MINGAP, MINSIZ — Absolute Element Optimization.............. 6–7<br />
iv 7830 9887–001
Contents<br />
6.8. REF — External <strong>Reference</strong> Retention ................................... 6–10<br />
6.9. SNAP — Snapshot Dumps .................................................... 6–11<br />
6.10. WINDOW — Creation of 4K Windows .................................. 6–14<br />
Section 7. <strong>Collector</strong>-Defined Symbols<br />
Section 8. Efficient Use of the <strong>Collector</strong><br />
8.1. Introduction .............................................................................. 8–1<br />
8.2. Use of the IN Directive ............................................................ 8–1<br />
8.3. @PREP of TPF$ ........................................................................ 8–1<br />
8.4. Relocatable Element Structure ................................................ 8–1<br />
8.5. Use of the Location Counter .................................................... 8–5<br />
8.6. Use of the C Option ................................................................. 8–5<br />
Appendix A. TYPE EXEC Collections<br />
A.1. TYPE EXEC .............................................................................. A–1<br />
A.2. XSEG — Executive Function Arrangement .............................. A–1<br />
A.3. FIRSTBDI.................................................................................. A–3<br />
A.4. BDICALL$, BDIREF$, LBDI$, LBDICALL$, and<br />
LBDIREF$ ............................................................................ A–4<br />
Appendix B. Collection Examples<br />
B.1. Bank-Implied and Bank-Named Collections ............................. B–1<br />
B.1.1. Bank-Implied Collection ................................................... B–1<br />
B.1.2. Bank-Named Collection ................................................... B–2<br />
B.2. Bank-Implied Segmentation ..................................................... B–3<br />
B.3. Bank-Named Segmentation ..................................................... B–7<br />
Appendix C. Processing Element Preambles<br />
Appendix D. Restrictions<br />
C.1. Introduction .............................................................................. C–1<br />
C.2. INFO Groups ............................................................................ C–1<br />
D.1. 262K Banks .............................................................................. D–1<br />
D.2. 65K Location Counters ............................................................. D–1<br />
D.3. Relocation Order ...................................................................... D–1<br />
D.4. Relocatable Element Format Errors ......................................... D–1<br />
D.5. EQU .......................................................................................... D–2<br />
D.6. Implicit Call for Non-TPF$ File .................................................. D–2<br />
D.7. Truncation of Negative Fields .................................................. D–2<br />
D.8. LIB/NOT of Same File .............................................................. D–2<br />
D.9. Static Diagnostic Text .............................................................. D–3<br />
D.10. Location Counters Restricted to 2047 ..................................... D–3<br />
7830 9887–001 v
Contents<br />
Appendix E. <strong>Collector</strong> Diagnostic Messages<br />
E.1. Introduction .............................................................................. E–1<br />
E.2. FATAL ERROR Messages ....................................................... E–1<br />
E.3. ERROR Messages ................................................................... E–8<br />
E.4. WARNING Messages ............................................................ E–30<br />
E.5. Information Messages ........................................................... E–35<br />
Appendix F. Program Segmentation<br />
F.1. Introduction ............................................................................... F–1<br />
F.2. Segmentation Directives .......................................................... F–1<br />
F.2.1. SEG — Program Segmentation ....................................... F–2<br />
F.2.2. DSEG — Dynamic Segments .......................................... F–6<br />
F.2.3. RSEG — Relocatable Segments ...................................... F–6<br />
F.3. Loading Program Segments ..................................................... F–7<br />
F.3.1. L$OAD,LOAD$ — Direct Method ................................... F–8<br />
F.3.2. Reloading the Main Segment ........................................ F–10<br />
F.3.3. D$LOAD,DLOAD$ — Loading Dynamic<br />
Segments .................................................................. F–10<br />
F.3.4. Indirect Loading ............................................................. F–11<br />
F.3.5. D$REL,DREL$ — Releasing a Segment’s<br />
Program Area ............................................................. F–12<br />
F.3.6. Segment Load Table ...................................................... F–13<br />
F.4. Segmentation within Bank-Named Collections ...................... F–13<br />
F.5. Common Blocks ..................................................................... F–14<br />
Appendix G. ROR$E-Relocatable Output Routine<br />
G.1. Introduction .............................................................................. G–1<br />
G.2. SROR$EB—Start Relocatable Output Routine with<br />
External Buffer .................................................................... G–1<br />
G.3. ROR$EB—Generation of Relocatable Output with<br />
External Buffer .................................................................... G–2<br />
G.3.1. ROR$EB Item Format ..................................................... G–2<br />
G.3.2. Special Relocation Items ................................................. G–3<br />
G.4. EROR$EB—End Relocatable Output Routinewith<br />
External Buffer .................................................................... G–5<br />
G.5. TBLWR$EB—Table Write Subroutine with External<br />
Buffer .................................................................................. G–6<br />
G.6. Optimization Information ......................................................... G–7<br />
Index ............................................................................................. 1<br />
vi 7830 9887–001
Figures<br />
1–1. Creating an Absolute Element ........................................................................... 1–1<br />
2–1. <strong>Collector</strong> Input and Output ................................................................................. 2–2<br />
4–1. Bank of Global <strong>Reference</strong>s .............................................................................. 4–17<br />
B–1. I Bank Main Storage Map for the Segmented MAPABS ................................... B–5<br />
B–2. D Bank Main Storage Map for the Segmented MAPABS ................................. B–6<br />
B–3. Bank Structure of the Program ABS ................................................................ B–10<br />
B–4. Segment Structure of Bank1 in Program ABS ................................................. B–11<br />
B–5. Segment Structure of Bank2 in Program ABS’ ................................................ B–11<br />
B–6. Segment Structure of Bank3 and Bank4 in Program ABS ............................... B–12<br />
B–7. Segment Structure of Bank5 and Bank6 in Program ABS ............................... B–13<br />
7830 9887–001 vii
Figures<br />
viii 7830 9887–001
Tables<br />
2–1. @MAP Statement Options ................................................................................. 2–8<br />
2–2. SIR$: Symbolic Input/Output Routine Options .................................................. 2–9<br />
4–1. IBANK and DBANK Directive Attributes ............................................................ 4–4<br />
4–2. BANKINFO Directive Attributes ......................................................................... 4–6<br />
4–3. BDICALL$ and IBJ$ (DBJ$) Resolution ........................................................... 4–25<br />
4–4. MAPCALL$ and MAPGOTO$ Resolutions ...................................................... 4–38<br />
5–1. Parameters Specified with the TYPE Directive .................................................. 5–1<br />
B–1. Elements in FILEA.............................................................................................. B–1<br />
F–1. Placement of Common Blocks Defined in One Element................................. F–15<br />
F–2. Placement of Common Blocks Defined in More Than One Element .............. F–15<br />
7830 9887–001 ix
Tables<br />
x 7830 9887–001
Section 1<br />
Introduction<br />
The <strong>OS</strong> 1100 <strong>Collector</strong> combines or collects relocatable elements generated by language<br />
processors with relocatable library elements to form an executable (absolute) element.<br />
Figure 1–1. Creating an Absolute Element<br />
The <strong>Collector</strong> produces an absolute element structured so that the Exec program loader<br />
can place it in execution. Once the <strong>Collector</strong> creates the absolute program (that is,<br />
collects it), it can be saved and re-executed many times. You re-collect the program only<br />
if the program changes.<br />
A program execution control statement (@XQT) or processor call within the runstream<br />
places an absolute element (program) in execution. When the Exec encounters an @XQT<br />
or processor call statement, it retrieves the program from its mass storage file, loads it<br />
into main storage, and executes it. If you use a processor call (@processor), the Exec<br />
presents (in table form) the parameter fields from the call when the processor performs<br />
its first symbiont input (READ$ or SYMB$) request. If you use @XQT, the first symbiont<br />
input obtains the first data image following the @XQT.<br />
During execution, an absolute element can control which of its parts are in main storage<br />
by requesting that the Exec load previously defined program overlay segments or by<br />
accessing program banks. In addition, the executing program can attach to other<br />
previously defined banks provided by other absolutes. This program structure supports<br />
the dynamic sharing of both code (usually reentrant) banks and data banks between<br />
multiple users. Such shared banks are called common banks.<br />
7830 9887–001 1–1
Introduction<br />
1–2 7830 9887–001
Section 2<br />
Using the <strong>Collector</strong><br />
2.1. <strong>Collector</strong> Input<br />
The @MAP statement calls the <strong>Collector</strong>. It provides a direct means of collecting or<br />
combining relocatable elements to produce an executable program called an absolute<br />
element. Optionally, you can use the <strong>Collector</strong> to create a single relocatable element<br />
from a collection of several relocatable elements.<br />
Input to the <strong>Collector</strong> (see Figure 2-1) comes from these three sources:<br />
• Parameters supplied on the @MAP statement<br />
• Information supplied by the <strong>Collector</strong> directives<br />
• Relocatable elements taken from various program files:<br />
− Temporary program file (TPF$)<br />
− User-created program files<br />
− Implied library file (MAP$PF)<br />
− System library files (SYS$*DATA$.LIB$NAMES)<br />
− System relocatable library (SYS$*RLIB$)<br />
The <strong>Collector</strong> produces the following output:<br />
• An absolute or relocatable element<br />
• A symbolic element (optional)<br />
• A program listing (optional)<br />
7830 9887–001 2–1
Using the <strong>Collector</strong><br />
Figure 2–1. <strong>Collector</strong> Input and Output<br />
The primary output of the <strong>Collector</strong> is the absolute or relocatable element that results<br />
from collecting the various relocatable elements. This element is given a name and<br />
placed within a program file for subsequent use. You can specify both the element name<br />
and the file in which the element is placed.<br />
Usually, the <strong>Collector</strong> includes a set of tables within an absolute element for diagnostic<br />
systems to use. You can suppress this output by specifying the Z option (see Table 2-2)<br />
on the @MAP statement. You can produce extended diagnostic tables for the absolute<br />
element by specifying the TYPE directive with the EXTDIAG parameter. See Table 5-1.<br />
A program is partitioned into logical entities called banks. This is done by explicitly<br />
naming the bank, using the <strong>Collector</strong> IBANK or DBANK directive, and then by directing<br />
the <strong>Collector</strong> as to what partitions of the program to put into the separate banks. This is<br />
called a bank-named collection. If no IBANK or DBANK directives are specified, the<br />
<strong>Collector</strong> creates an absolute element with two banks. This is called a bank-implied<br />
collection. When more than two banks are created, the program is commonly called a<br />
multibanked program.<br />
By convention, but not necessity, the instructions of a program are placed under odd<br />
location counters, while the data is placed under even location counters. This separates<br />
instructions and data, with instructions allocated to I banks and data to D banks.<br />
2.1.1. <strong>Collector</strong> Language Conventions<br />
The <strong>Collector</strong> directives enable the programmer to control the collection of the program.<br />
These directives have the following characteristics:<br />
2–2 7830 9887–001
2.1.2. Files<br />
• Free-form and can begin in any column of the source language image.<br />
• Limited in length to 80 characters.<br />
• Can contain comments preceded by the blank-period-blank construction.<br />
Using the <strong>Collector</strong><br />
• Can be continued by using the continuation character, the semicolon ( ; ), anywhere<br />
a space is allowed. A comment can contain any character except the semicolon ( ; ).<br />
Using the continuation character within a comment causes the <strong>Collector</strong> to treat the<br />
line following the current line as a comment.<br />
• Follow the standard dropout rules pertaining to file names and element names. See<br />
the Executive Control Language (ECL) and FURPUR <strong>Reference</strong> <strong>Manual</strong> for standard<br />
file name and element name notation.<br />
• Can have leading blanks following a parameter field separator ( , ).<br />
<strong>Collector</strong> directives can follow the @MAP statement or can be contained in a symbolic<br />
element in a program file that is specified as input on the @MAP statement. You have<br />
the same access and updating facilities for this symbolic element as for any other type of<br />
symbolic element.<br />
Certain <strong>Collector</strong> directives can be used only in bank-named collections. These directives<br />
are IBANK, DBANK, BANKINFO, FORM, WINDOW, $lcs (location counter set), and<br />
certain formats of the IN and LIB directives.<br />
On all <strong>Collector</strong> directives, in all fields and subfields, a parameter consisting of a set of<br />
characters contained within apostrophes (for example, ’XYZ-ABC’) is treated as an<br />
alphanumeric name. Any normal termination characters are considered to be characters<br />
within the name. This method can also be used to process ASCII characters such as the<br />
underscore. Though the underscore (Fieldata 077) is not printed by Fieldata processors<br />
because it is the timesharing ER TREAD$ stop code, the <strong>Collector</strong> processes it normally<br />
if the name containing the underscore is included in apostrophes.<br />
Numbers on <strong>Collector</strong> directives are assumed to be decimal numbers; a leading zero can<br />
be used to specify an octal number. A unary minus ( - ) can be used to indicate a<br />
negative number.<br />
In <strong>Collector</strong> directive formats, parameters in italic type indicate information that is<br />
supplied by the programmer; parameters in regular type must be coded as shown.<br />
The <strong>Collector</strong> dynamically assigns all files that are necessary for the collection if they are<br />
not already assigned to the run. If the file is accessed with a write function, the file must<br />
be assigned exclusively to the run; if necessary, the <strong>Collector</strong> dynamically assigns the file<br />
exclusively. If a file referenced in the collection needs a unique internal name, the<br />
<strong>Collector</strong> attaches an internal name to the file. For the default installation mode of the<br />
<strong>Collector</strong>, the <strong>Collector</strong> restores all files referenced in the collection to their original<br />
assign state at the end of the collection. The <strong>Collector</strong> frees the files it assigned and<br />
removes all internal names attached by the <strong>Collector</strong>. The <strong>Collector</strong> provides an alternate<br />
installation mode that leaves the files assigned if so desired for performance reasons.<br />
7830 9887–001 2–3
Using the <strong>Collector</strong><br />
2.2. <strong>Collector</strong> Output<br />
The <strong>Collector</strong> produces relocatable and absolute elements.<br />
2.2.1. <strong>Collector</strong>-Produced Relocatable Elements<br />
Although the <strong>Collector</strong> is generally used to produce an absolute element, a relocatable<br />
element can be produced by specifying the R option on the @MAP statement. All<br />
indicated relocatable elements are merged into a single relocatable element. The<br />
external definitions specified with the DEF directive and the external references<br />
specified with the REF directive are retained. All other external definitions are<br />
submerged in the new relocatable element.<br />
Relocatable elements in SYS$*RLIB$, files specified in SYS$*DATA$.LIB$NAMES, and<br />
files specified by INFO group 12, are not implicitly included in an R option collection. For<br />
more information about INFO groups, see the Meta-Assembler (MASM) <strong>Programming</strong><br />
<strong>Reference</strong> <strong>Manual</strong>. Location counter specification is preserved; that is, information<br />
contained in location counter n for all input relocatable elements is placed under location<br />
counter n of the output relocatable element with the exception of common blocks that<br />
are combined according to common block name and reassigned a location counter<br />
number.<br />
Only the following directives can be specified with an R option collection. All others<br />
produce a diagnostic message and the collection continues:<br />
CLASS EQU NOT<br />
DEF FRSTIN REF<br />
END IN TYPE<br />
ENT LIB<br />
You can use the R option to include two relocatable elements with duplicate entry points<br />
in the same collection. To accomplish this, perform an R option collection, using the EQU<br />
directive to redefine the entry point. Do not specify the duplicated entry point on a DEF<br />
directive, but do specify the redefined entry point. This causes the duplicated entry point<br />
to be submerged in the newly created relocatable element. The resulting element can<br />
then be collected with the other element that contains the duplicate entry point to form a<br />
single absolute element.<br />
You can also use the R option to combine a group of library routines into a single<br />
relocatable element to reduce the number of IN directives needed to include them in the<br />
collection. Similarly, you can use an R option collection to create an element to be used<br />
with the FRSTIN directive. This element can include a group of elements to be placed at<br />
the beginning of a bank or segment. The R option collection is necessary in this case<br />
since the FRSTIN directive can be used only to specify placement of a single element<br />
within a bank or segment.<br />
2–4 7830 9887–001
2.2.2. <strong>Collector</strong>-Produced Absolute Output<br />
Using the <strong>Collector</strong><br />
The primary output of the <strong>Collector</strong> is the absolute element. The absolute element<br />
contains four basic parts:<br />
• The header table<br />
• Tables used by the Exec<br />
• Absolute text (and access control words (ACW))<br />
• Tables accessible to the user<br />
The absolute element produced by the <strong>Collector</strong> is structured so that the Exec program<br />
loader can place it in execution. Once the absolute program has been created (collected),<br />
it can be saved and re-executed many times. If changes are made to the program, recollect<br />
it to create a new absolute.<br />
The absolute element format is documented in the Data Structures <strong>Programming</strong><br />
<strong>Reference</strong> <strong>Manual</strong>.<br />
2.2.3. Listing<br />
The <strong>Collector</strong> produces four different listings depending on the options specified on the<br />
@MAP statement:<br />
• N option listing<br />
The N option listing lists all fatal error messages.<br />
• No option listing<br />
The no option listing contains all information produced by the N option listing plus<br />
the following items:<br />
− Starting address<br />
− Program size<br />
− Nonfatal error messages, warnings<br />
In batch mode, the listing also includes the bank, segment, and element address<br />
assignments<br />
• S option listing<br />
The S option listing includes all information produced when no option is specified<br />
plus the following items:<br />
− The source input with CTS line numbers, if present<br />
− The main storage allocated to each element and segment<br />
− The common bank table containing the bank descriptor index (BDI) and name for<br />
all common banks referenced in the collection<br />
− The bank and segment index values<br />
− A scale drawing of program segmentation and bank structure<br />
7830 9887–001 2–5
Using the <strong>Collector</strong><br />
• L option listing<br />
The L option listing contains all information produced by the S option listing plus the<br />
following items:<br />
− The external references of each element.<br />
− The program address of all external definitions.<br />
− A list of the files available for element inclusion; the list contains the internal file<br />
name specified and the full external file name. This list also indicates if the file<br />
was available for library searching, if it was searched for elements appearing on<br />
IN directives with no file name attached, if it was searched to resolve external<br />
references, if it is an RLIB type file, and if the keyword for the file was specified<br />
in an INFO group 12 item. The files marked for searching in the table are listed in<br />
the order in which they were searched to satisfy external references. (See 3.2.3<br />
for additional information.)<br />
The <strong>Collector</strong> sign-on and sign-off lines are always produced. The sign-on line format for<br />
<strong>Collector</strong> is as follows:<br />
<strong>Collector</strong> level (yymmdd hhmm:ss) yyyy Mmm dd Ddd hhmm:ss<br />
where:<br />
level<br />
is the level of the <strong>Collector</strong>.<br />
yymmdd hhmm:ss<br />
is the date and time that the <strong>Collector</strong> was created. For example, 901124 0923:47.<br />
yyyy Mmm dd Ddd hhmm:ss<br />
is the current date and time. For example, 1990 Nov 24 Sat 2143:51.<br />
The sign-off line format is<br />
where:<br />
END MAP. ERRORS: n TIME: s.mmm STORAGE: a/b/c/d/e<br />
n is the number of errors detected by the <strong>Collector</strong>.<br />
s.mmm are the number of seconds and milliseconds of SUPS for the collection.<br />
a is the amount of temporary memory space used.<br />
b is the amount of temporary memory space freed.<br />
c is the amount of permanent memory space used.<br />
d is the number of MCORE$ requests.<br />
2–6 7830 9887–001
e is the highest address allocated by <strong>Collector</strong> for its own use.<br />
Using the <strong>Collector</strong><br />
2.3. @MAP-<strong>Collector</strong> Initiation and Termination<br />
Purpose<br />
The @MAP statement specifies that the <strong>Collector</strong> is to combine a set of relocatable<br />
elements into one absolute or relocatable element. All @MAP statement parameters are<br />
optional. The <strong>Collector</strong> can also be called implicitly by the @XQT control statement.<br />
Format<br />
@label:MAP,options si,ro,so<br />
where:<br />
options<br />
si<br />
ro<br />
so<br />
(See Table 2-1.)<br />
specifies the input symbolic element that contains the <strong>Collector</strong> source language.<br />
specifies the absolute output element. When the R option is specified, ro names the<br />
relocatable output element.<br />
specifies the output <strong>Collector</strong> source language element.<br />
See the Executive Control Language (ECL) and FURPUR <strong>Reference</strong> <strong>Manual</strong> for processor<br />
call statement conventions. See Table 2-2 for a description of the symbolic input/output<br />
routine (SIR$) options.<br />
At the end of the collection, a termination line is printed. This line includes the number of<br />
errors encountered, the standard unit of processing (SUP) time used by the collection,<br />
and <strong>Collector</strong> internal storage information. See 2.2.3 for more information<br />
Table 2–1. @MAP Statement Options<br />
Option Description<br />
A Under no circumstances is the error exit (ER<br />
ERR$) to be taken during the collection. The<br />
absolute is not marked in error.<br />
7830 9887–001 2–7
Using the <strong>Collector</strong><br />
Table 2–1. @MAP Statement Options<br />
Option Description<br />
B Mark the absolute element so that the<br />
program area is not cleared to zero before<br />
loading the program and any indirectly loaded<br />
segments (see F.3.4).<br />
C Expand the storage area of the <strong>Collector</strong> using<br />
larger allocation amounts. This can reduce the<br />
number of times the <strong>Collector</strong> references<br />
MCORE$. Use larger buffers to reduce I/O<br />
requests. Attempt to retain information in<br />
memory instead of writing to scratch files.<br />
D Print a diagnostic message for all possible<br />
addresses over 65K (0177777). Check for<br />
possible instruction format violations of text<br />
words that are relocated.<br />
E Allow program addresses to exceed 65K. If<br />
this option is omitted and the program’s D<br />
bank exceeds 65K, the D bank starting<br />
address is moved downward so that all (or as<br />
many as possible) of the addresses over 65K<br />
are forced below 65K. In bank-named<br />
collections, all possible D bank starting<br />
addresses are moved downward.<br />
F Mark the output absolute or relocatable<br />
element as quarter-word sensitive. This is<br />
equivalent to the TYPE QUARTER directive.<br />
(See T option.)<br />
L Produce the most comprehensive listing (see<br />
2.2.3).<br />
N Produce the most abbreviated print listing<br />
available, consisting of the sign-on and<br />
termination lines and any fatal errors (see<br />
2.2.3).<br />
R Generate a relocatable element instead of an<br />
absolute element (see 2.2.1).<br />
S Produce a summary listing (see 2.2.3).<br />
T Do not mark the output element as quarterword<br />
sensitive. This is equivalent to the TYPE<br />
THIRD directive. See 5.4.<br />
2–8 7830 9887–001
Table 2–1. @MAP Statement Options<br />
Option Description<br />
Using the <strong>Collector</strong><br />
X If an error is detected, terminate the collection<br />
without producing an output element and exit<br />
using ER ERR$. When the X option is omitted,<br />
the results of the collection are accepted, even<br />
though there can be minor errors, as long as<br />
an absolute element can be produced. The X<br />
option is assumed when the <strong>Collector</strong> is<br />
automatically called by @XQT.<br />
Z Suppress generation of diagnostic tables in the<br />
absolute element that are used by diagnostic<br />
systems. This does not suppress INFO 8<br />
(static diagnostic) text.<br />
Table 2–2. SIR$: Symbolic Input/Output Routine Options<br />
Option Description<br />
G Input is compressed symbolic in columns 1-80 of the symbolic images. Applies only<br />
with the I option.<br />
H Input contains sequence numbers in columns 73-80 of the symbolic images. Applies<br />
only with the I option.<br />
I Read images from the runstream and insert them into a new symbolic. If the I option<br />
is present without any si specification, SIR$ reads images from the runstream and<br />
passes them to the caller.<br />
J Input contains compressed symbolic images in columns 1-72 of the images and<br />
sequence numbers in columns3-8 70. These sequence numbers are not checked by<br />
the K option. Applies only with the I option.<br />
K Check sequence numbers in columns 73-80 of the symbolic images (valid only with<br />
H and I options).<br />
P Indicates that the symbolic element produced by the <strong>Collector</strong> should be in Fieldata<br />
format.<br />
Q Indicates that the symbolic element produced by the <strong>Collector</strong> should be in ASCII<br />
format.<br />
P and Q Indicates that the symbolic element produced by the <strong>Collector</strong> can be a combination<br />
of Fieldata format and ASCII format.<br />
Neither<br />
P nor Q<br />
Indicates that the symbolic element produced by the <strong>Collector</strong> can be a combination<br />
of Fieldata format and ASCII format When the I option is included the format is<br />
determined by the format of the runstream images. When the I option is not<br />
included the format is determined by the format of the symbolic input element<br />
images.<br />
U Read change images from the runstream, apply them to the symbolic input element,<br />
and produce a new cycle of the symbolic element.<br />
7830 9887–001 2–9
Using the <strong>Collector</strong><br />
Table 2–2. SIR$: Symbolic Input/Output Routine Options<br />
Option Description<br />
W List change images.<br />
Examples:<br />
@MAP<br />
The name for the absolute element is automatically assigned by the <strong>Collector</strong>. The<br />
printed output and internal table entries would appear as if the @MAP statement had<br />
been<br />
@MAP,I ,TPF$.NAME$<br />
If no directives follow, the directive IN TPF$. is assumed.<br />
@MAP OLDFILE.OLDELEMENT,A,NEWFILE.NEW/ELEMENT<br />
Element OLDELEMENT from file OLDFILE is updated by any source language<br />
statements following the @MAP statement. The output source language goes into file<br />
NEWFILE, element NEW/ELEMENT. The absolute element A goes into TPF$.<br />
@MAP SYMIN/C,BACKUP.ABSOUT<br />
Version C of element SYMIN from TPF$ is the input symbolic element. The absolute<br />
output element ABSOUT is written in file BACKUP. No source language output is<br />
produced; any successive change lines are applied but not saved.<br />
@MAP,I BACKUP.SYMOUT, .ABSOUT<br />
The source language statements (<strong>Collector</strong> directives) following the @MAP statement<br />
are inserted as the symbolic output element SYMOUT in file BACKUP. The absolute<br />
element ABSOUT is also put into file BACKUP.<br />
@MAP,U SYMIN(3),ABSOUT/REVISED<br />
Cycle 3 of element SYMIN located in TPF$ is updated to produce cycle 4 of element<br />
SYMIN. Any change lines are saved. Version REVISED of absolute output element<br />
ABSOUT is also put in TPF$.<br />
@MAP,IRXLD ARB,ARB<br />
The source language statements following the @MAP statement become the symbolic<br />
element ARB in the file TPF$. The output element goes into TPF$ as relocatable element<br />
ARB. If errors are encountered during the collection, the run is terminated. A full listing is<br />
produced. Diagnostics are printed for addresses over 65K.<br />
2–10 7830 9887–001
Using the <strong>Collector</strong><br />
7830 9887–001 2–11
Using the <strong>Collector</strong><br />
2–12 7830 9887–001
Section 3<br />
Inclusion and Exclusion of Elements<br />
3.1. Explicit Inclusion and Exclusion<br />
The following directives enable you to explicitly include or exclude elements in the<br />
collection process.<br />
3.1.1. IN - Element Inclusion<br />
Purpose<br />
The IN directive allows you to specifically include an element or all relocatable elements<br />
of a file in the collection of a program. An element can be preceded by a file name. The<br />
elements indicated on an IN directive are placed in the segment named by the preceding<br />
SEG directive (see F.2.1) and in the bank named by the preceding IBANK or DBANK<br />
directive (see 4.2.1).<br />
SYS$RLIB$ID is considered a non-supported SYSLIB routine. See the System Service<br />
Routines Library (SYSLIB) <strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong> for more information about<br />
SYS$RLIB$ID.<br />
All IN directive parameters are optional. If all parameters are omitted, the following is<br />
assumed:<br />
IN TPF$.<br />
Formats<br />
IN name-1,name-2,name-3,...,name-n<br />
IN(bank-list) name-1($lcs),name-2($lcs),...,name-n($lcs)<br />
where:<br />
name<br />
specifies the element or entire file to be included in the collection.<br />
bank-list<br />
$lcs<br />
is a list of bank-names to be used with local element inclusion.<br />
7830 9887–001 3–1
Inclusion and Exclusion of Elements<br />
specifies which location counters of name-i are to be included in this part of the<br />
program<br />
Description<br />
The bank-list and $lcs parameters are used only with bank-named collections (see<br />
4.4.4.2).<br />
By stating a file name without a following element name, you can specify the inclusion<br />
of all relocatable elements in a program file. In bank-implied collections, if some<br />
elements of a file have been explicitly named, these are included as specified and the IN<br />
file name serves to bring in only the remaining elements in the file. When specifying an<br />
entire file for inclusion, a period must follow the file name.<br />
When name consists of an element name only, with no version specified, any<br />
relocatable element with that name, irrespective of version, is eligible for inclusion. If<br />
relocatable elements with the same element name but different version names exist in<br />
the same file, ambiguities arise. The CLASS directive (see 3.1.5) can be used to<br />
overcome the ambiguity. Alternatively, the ambiguity is not present if the version name<br />
is explicitly stated as part of name on the IN directive:<br />
IN name /^^^^^^^^^^^^<br />
This format of the name parameter must be used to specifically select a relocatable<br />
element with a version name consisting of 12 space characters, (denoted by ^) when<br />
other relocatable elements with version names exist in the file. Each relocatable element<br />
included in the collection must have a unique element name. It is not possible to include<br />
two relocatable elements with the same element name having different version names<br />
or file names in the same collection.<br />
Common blocks can be named on IN directives, but must not have an associated implicit<br />
or explicit file name because they are embedded within other elements. For inclusion of<br />
a common block in the collection, see F.5.<br />
For the order of elements explicitly and implicitly included in the collection, see 4.4.1 and<br />
4.4.5.<br />
For efficiency considerations, see 8.2.<br />
Examples<br />
IN FILEA.,FILEB.<br />
All relocatable elements in FILEA and FILEB are included in the collection.<br />
IBANK BDAY2 .<br />
IN COLLECTOR*F8(1).INIT/REV<br />
The relocatable element INIT version REV in file COLLECTOR*F8 (1) is included in the<br />
collection of the IBANK BDAY2. (See 4.2 for the use of the banking directives.)<br />
DBANK ADAY1 .<br />
3–2 7830 9887–001
IN FILEB.BB, .CC,DD<br />
Inclusion and Exclusion of Elements<br />
Elements BB and CC from file FILEB and element DD (whose file name is not indicated)<br />
are included in the collection of the DBANK ADAY1. TPF$, all specified library (LIB) files,<br />
MAP$PF, files specified by INFO group 12 keywords, files specified in<br />
SYS$*DATA$.LIB$NAMES and SYS$*RLIB$ are searched in that order for element DD<br />
until it is found in one of them. If element DD is not found, a diagnostic is printed.<br />
3.1.2. FRSTIN - First Element Included<br />
For either format of the IN directive, you can use FRSTIN instead of IN. If FRSTIN is<br />
used, it must be the first element inclusion statement in a bank-implied collection or<br />
must immediately follow an IBANK, DBANK, or SEG directive. FRSTIN specifies that the<br />
first named element is to be positioned at the beginning of the bank or segment in which<br />
it is collected. Only one FRSTIN directive can be specified for each IBANK, DBANK, or<br />
SEG directive. Only the first element name is used on the FRSTIN directive. Other<br />
elements named will be positioned as if they were named on an IN directive.<br />
3.1.3. FORM - Source Language Structure Duplication<br />
Purpose<br />
Allows the duplication of a portion of a program structure previously defined within a<br />
collection without requiring repetition of the source language used to define that<br />
structure.<br />
Formats<br />
FORM bank-name<br />
FORM bank-name*segment-name<br />
where:<br />
bank-name<br />
specifies the bank whose structure is to be duplicated<br />
segment-name<br />
specifies the segment within the bank whose element inclusion structure is to be<br />
duplicated.<br />
Description<br />
When placed following an IBANK or DBANK directive, a “FORM bank-name” directive<br />
causes the full segment tree of the named bank to be regenerated for the bank being<br />
defined, except that the location counter set presently in control must differ from the<br />
one that was in control for the bank named on the FORM directive. If an explicit location<br />
counter set is specified, it must precede the FORM directive. Since FORM bank-name<br />
creates an exact duplication of a previous bank structure, no additional SEG, DSEG,<br />
RSEG, or IN directives can be specified for the bank being generated.<br />
7830 9887–001 3–3
Inclusion and Exclusion of Elements<br />
A “FORM bank-name*segment-name” directive causes the IN directives within the<br />
specified segment to be regenerated.<br />
Only SEG, DSEG, and IN directives within a structure are duplicated when a FORM on<br />
that structure is specified.<br />
Examples<br />
1a. IBANK I1 1b. IBANK I1<br />
SEG MAIN SEG MAIN<br />
IN A,B IN A,B<br />
SEG SG SEG SG<br />
IN FILE.ELT,.ELT1 IN FILE.ELT,.ELT1<br />
DBANK D1 DBANK D1<br />
SEG MAIN FORM I1<br />
IN A,B<br />
SEG SG<br />
IN FILE.ELT,.ELT1<br />
The “FORM bank-name” directive is used in example 1b to produce the same results as<br />
in example 1a.<br />
2. IBANK I1<br />
SEG MAIN<br />
IN A,B<br />
SEG SG<br />
IN FILE.ELT,.ELT1<br />
DBANK D1<br />
SEG MAIN<br />
FORM I1*MAIN<br />
SEG SG<br />
FORM I1*SG<br />
The “FORM bank-name*segment-name” directive is used in example 2 to produce the<br />
same results as in example 1.<br />
3.1.4. NOT - Element Exclusion<br />
Purpose<br />
The NOT directive names the elements or files that are to be excluded from the entire<br />
collection.<br />
All NOT directive parameters are optional. If all parameters are omitted, the following is<br />
assumed:<br />
NOT TPF$.<br />
Formats<br />
NOT name-1,name-2,...,name-n<br />
3–4 7830 9887–001
NOT DEFAULT$LIBS.<br />
name-n<br />
Inclusion and Exclusion of Elements<br />
specifies the element, with or without a file name, or the file to be excluded from<br />
the collection. If the version name or file name is omitted, all elements of the<br />
specified name are excluded.<br />
DEFAULT$LIBS.<br />
refers to all the default system files specified in SYS$*DATA$.LIB$NAMES.<br />
Note: The period is required for NOT DEFAULT$LIBS. If the period is omitted, the<br />
<strong>Collector</strong> treats DEFAULT$LIBS as an element rather than as the default system<br />
files.<br />
Description<br />
When all elements of a file are to be excluded, the entire file can be designated for<br />
exclusion with a NOT directive. The effect of excluding a whole file is to make the file<br />
inaccessible for searching as a library file. A period must follow the file name to ensure<br />
that it is not interpreted as an element name. The file name specified on the NOT<br />
directive should be the same as it appears elsewhere in the collection on IN or LIB<br />
directives. The NOT directive affects the entire collection.<br />
If a file name with no following element names appears on a NOT directive, elements<br />
within the named file can still be explicitly included during the collection. This is useful<br />
only with TPF$, MAP$PF, files specified in SYS$*DATA$.LIB$NAMES, and SYS$*RLIB$,<br />
since these are the only files that are normally searched automatically. They must be<br />
specified as TPF$, MAP$PF, DEFAULT$LIBS, and SYS$*RLIB$ on the NOT directive to<br />
override the automatic search. If you do not include elements from TPF$, specify the<br />
NOT TPF$ directive. See 8.3 for more information about efficient use of <strong>Collector</strong>.<br />
Examples<br />
NOT CWW,LRR<br />
All elements named CWW and LRR in any file are excluded from the collection; if no IN<br />
directives are present, all other relocatable elements in TPF$ are included.<br />
IN FILEA.<br />
NOT FILEA.CL,.AB<br />
All elements named CL and AB from FILEA are excluded from the collection; all other<br />
relocatable elements in FILEA are included.<br />
IN FIL1.<br />
NOT SYS$*RLIB$.<br />
NOT TPF$.<br />
Relocatable elements from SYS$*RLIB$ and TPF$ are excluded from the collection. All<br />
elements from FIL1 are included.<br />
7830 9887–001 3–5
Inclusion and Exclusion of Elements<br />
NOT DEFAULT$LIBS.<br />
Relocatable elements for all of the files specified in SYS$*DATA$.LIB$NAMES are<br />
excluded from the collection. These files will not be searched for elements without file<br />
names or for unresolved references. All relocatable elements in TPF$ are included.<br />
3.1.5. CLASS - Element Selection Determination through<br />
Version Names<br />
Purpose<br />
The CLASS directive uniquely specifies one element version in a program file when more<br />
than one element has the same element name but different version names. In the<br />
collection this occurs when<br />
• The version of the element was not specified on an IN directive and more than one<br />
relocatable element has that name.<br />
• More than one relocatable element with the same name contains an entry point that<br />
defines an external reference.<br />
• A file name was not specified with the element on an IN directive and the element<br />
with different version names is present in more than one file.<br />
Format<br />
CLASS string<br />
where string consists of 12 alphanumeric characters, asterisks, a dollar sign ( $ ), a minus<br />
sign ( - ), and blanks representing the versions of the elements. The string begins with<br />
the first nonblank character following CLASS, and is terminated after 12 characters, or by<br />
the blank-period-blank comment delimiter. If fewer than 12 characters have been<br />
processed upon termination of the string, significant blanks are filled in on the right to<br />
make a 12-character string.<br />
Description<br />
The CLASS directives in a collection have a cumulative effect; therefore, different<br />
orderings of CLASS directives can give different results.<br />
Asterisks in a string (wild card characters) represent character positions to be ignored in<br />
the version name. Blanks in a string are valid to <strong>Collector</strong>.<br />
When several elements qualify to be included in the collection, the <strong>Collector</strong> compares<br />
the value of the string parameter on the CLASS directive with the version names of the<br />
available elements. If the element version name is not identical to the string parameter,<br />
it is not included in the collection.<br />
If, after the first comparison, more than one element qualifies, the string on the next<br />
CLASS directive is used in eliminating the remaining versions.<br />
3–6 7830 9887–001
7830 9887–001<br />
If all the CLASS directives have been used and more than one element qualifying<br />
element still remains none of the remaining elements is used in the collection and the<br />
<strong>Collector</strong> prints a diagnostic message.<br />
Examples:<br />
@MAP,I SAMP,ALPHA<br />
IN SIZE<br />
CLASS D***********<br />
CLASS ***B********<br />
CLASS *****4******.<br />
The IN directive does not specify which version of the SIZE element is to be used in the<br />
collection. The three CLASS directi directives ves specify that the DCOB14 version be used in the<br />
collection. Graphically, this can be shown as follows:<br />
@MAP,I SA<br />
IN ELT1<br />
CLASS D*LA********<br />
Inclusion and Exclusion of Elements<br />
The CLASS D*LA******** directive specifies that the D2LARGE version of the ELT1<br />
element be used in the collection. Graphically, this can be shown as follows:<br />
3–7
Inclusion and Exclusion of Elements<br />
3.2. Implicit Inclusion-File Searching<br />
The following directives enable you to implicitly include files in the library search.<br />
3.2.1. LIB-File Searching<br />
Purpose<br />
The LIB directive specifies which files (libraries) are to be searched to include the<br />
following:<br />
• An element named on an IN directive for which no file specification was made; for<br />
example, IN ELT<br />
• An element that satisfies external references that are not defined by elements<br />
already included in the collection<br />
If, after searching all of the library files, an element is not found that fulfills either of the<br />
above purposes, the <strong>Collector</strong> prints a diagnostic message.<br />
All LIB directive parameters are optional, except file-name-1.<br />
Format<br />
LIB file-name-1,file-name-2,...file-name-n<br />
LIB file-name-1(bank-name/$lcs,bank-name/$lcs,...),file-name-2...<br />
LIB (bank-name/$lcs,bank-name/$lcs...)<br />
LIB file-name-1( ),file-name-2( ),...file-name-n( )<br />
where:<br />
file-name-n<br />
specifies a file to be searched.<br />
bank-name<br />
$lcs<br />
( )<br />
specifies a bank in which implicitly included elements are to be placed. An implicitly<br />
included element is an element that has not been named on an IN directive but<br />
which satisfies an external reference.<br />
specifies which location counters of the implicit elements go to the corresponding<br />
banks.<br />
indicates that the parameters specified on the last preceding LIB (bank-name/$lcs,...)<br />
directive are to be applied for the file name specified.<br />
Description<br />
3–8 7830 9887–001
Inclusion and Exclusion of Elements<br />
You can use the second, third, and fourth formats only in bank-named collections (see<br />
4.4.5).<br />
The third format, which is called a “directed LIB” directive, is used to specify the<br />
appropriate bank and location counter set for all elements included from files named in<br />
format 4.<br />
To use a directed LIB directive with TPF$, you must include a NOT TPF$ directive in the<br />
MAP symbolic.<br />
The <strong>Collector</strong> does not guarantee the order of implicitly included elements within a bank.<br />
The LIB directive affects the entire collection.<br />
Examples<br />
LIB A<br />
IN E1<br />
.<br />
.<br />
.<br />
LIB B<br />
IN E2<br />
LIB directives have a cumulative effect. Files A and B are used for the search sequences<br />
for elements E1 and E2.<br />
The following example has the same effect:<br />
LIB A,B<br />
IN E1<br />
.<br />
.<br />
.<br />
IN E2<br />
LIB (IB1/$1,3,DB1/$2,4)<br />
The directed LIB directive dictates that location counters 1 and 3 from implicitly included<br />
elements go to the bank IB1. Similarly, location counters 2 and 4 from implicitly included<br />
elements go to the bank DB1. This line is meaningless unless format 4 LIB directives are<br />
also encountered.<br />
LIB F1( ),F2( )<br />
Implicit elements from files F1 and F2 are placed in banks IB1 and DB1 according to the<br />
directed LIB directive, which also must be provided.<br />
LIB F3(IB2/$1,3)<br />
Location counters 1 and 3 from implicitly included elements in file F3 are placed in I-bank<br />
IB2.<br />
7830 9887–001 3–9
Inclusion and Exclusion of Elements<br />
3.2.2. RLIB - File Searching<br />
RLIB can be used instead of LIB in all formats. Any element from a file on such a<br />
statement is treated as being from SYS$*RLIB$ or from the files specified in<br />
SYS$*DATA$.LIB$NAMES. The result is that these elements are not dumped by @PMD<br />
unless the L option is used with the PostMortem Dump processor (PMD) request, nor<br />
will they be traced by the Program Trace Routine (SNOOPY).<br />
3.2.3. DLIB - Directed LIB for the Default Libraries<br />
Purpose<br />
The DLIB directive is used to specify which location counters are to be placed in a<br />
particular bank when implicitly included elements are brought in from the files specified<br />
in SYS$*DATA$.LIB$NAMES. The DLIB directive is used as a directed LIB for the default<br />
libraries (the files specified in SYS$*DATA$.LIB$NAMES). The DLIB directive will not<br />
change the default library search order as the LIB directive does. The DLIB directive is<br />
not allowed in an R option collection since the default libraries are not searched for an R<br />
option collection.<br />
Format<br />
DLIB DEFAULT$LIBS.(bank-name/$lcs,...,bank-name/$lcs)<br />
where:<br />
bank-name<br />
$lcs<br />
specifies a bank in which implicitly included elements are to be placed.<br />
specifies which location counters of the implicit elements go to the corresponding<br />
banks.<br />
Description<br />
The DLIB directive is a “directed LIB” of all the files specified in<br />
SYS$*DATA$.LIB$NAMES.<br />
The collection must be a bank-named collection.<br />
Note: The period after DEFAULT$LIBS is optional.<br />
3.2.4. Sequence of File Searching<br />
The library sequence for file searching is as follows:<br />
1. TPF$<br />
2. Files specified on LIB and RLIB directives-in the order in which they are specified<br />
3. MAP$PF-the implied library file (if it exists)<br />
3–10 7830 9887–001
Inclusion and Exclusion of Elements<br />
4. Files specified by INFO group 12 keywords within the relocatables. These files are<br />
searched in the order in which the elements containing the INFO group 12 keywords<br />
are included in the collection<br />
5. Files specified in SYS$*DATA$.LIB$NAMES<br />
6. SYS$*RLIB$<br />
Any of these implicit or explicit files can be excluded from the search using the NOT<br />
directive.<br />
NOT DEFAULT$LIBS. is used to exclude (NOT) all of the files specified in<br />
SYS$*DATA$.LIB$NAMES. See 3.1.4 for an example.<br />
SYS$*RLIB$, files specified in SYS$*DATA$.LIB$NAMES, and files specified by INFO<br />
group 12 are not searched in an R option collection unless they are specified on a LIB<br />
directive. The INFO group 12 information is carried forward to the R option output<br />
element.<br />
There are two types of library searching in a collection:<br />
1. During the first search, all libraries are searched once in the previously described<br />
search sequence for elements specified on IN directives. This is called an element<br />
search.<br />
Note: If you do not use @PREP with TPF$, elements in TPF$ are treated in a special<br />
manner by the <strong>Collector</strong> (see 3.2.5).<br />
2. During the second search, all libraries are searched once again in the predescribed<br />
sequence for elements satisfying external references. This is called a reference<br />
search.<br />
The first element found in either of the two types of library searches is included in the<br />
collection. If an element with the same name exists or if two different elements satisfy<br />
the same external reference, the first element encountered is included in the collection.<br />
If these situations occur with elements existing in the same file, a message concerning<br />
element or entry-point ambiguity is also printed. If the elements are in different files, no<br />
message is printed.<br />
Note: The <strong>Collector</strong> terminates its library searching if all elements specified on IN<br />
directives are found, or if all external references are satisfied before all the library<br />
files have been searched.<br />
3.2.4.1. System Library Searching<br />
Searching of SYS$*DATA$.LIB$NAMES is as follows:<br />
The <strong>Collector</strong> searches sequentially through LIB$NAMES. The library preference order<br />
(also known as the file sequence number or the group-sequence) and the order of<br />
installation are used to determine the order of the product installation files within<br />
LIB$NAMES. There are 10 preference order specifications available. The lowernumbered<br />
library preference order files are processed first. Within each library<br />
preference level, the files appear in LIB$NAMES in the reverse order that they were<br />
7830 9887–001 3–11
Inclusion and Exclusion of Elements<br />
installed. For example, consider these files installed in the following order with the<br />
preference level in parentheses:<br />
SYS$LIB$*SORT (7)<br />
SYS$LIB$*ACOB (4)<br />
SYS$LIB$*FTN (4)<br />
In LIB$NAMES, the files would appear and would be searched in the following order:<br />
SYS$LIB$*FTN<br />
Lowest preference order level and last file installed at that level.<br />
SYS$LIB$*ACOB<br />
Same lowest preference order but installed before FTN.<br />
SYS$LIB$*SORT<br />
Next preference order and last at that preference level. It occurs after the lower<br />
preference level files even though SORT was installed first.<br />
Each installation (INSTALL) can change the order of the files in LIB$NAMES. Continuing<br />
from the preceding example, if SYS$LIB$*ACOB were installed again, the search order<br />
would now be<br />
SYS$LIB$*ACOB<br />
SYS$LIB$*FTN<br />
SYS$LIB$*SORT<br />
Since FTN and ACOB had the same preference order specification, ACOB would now be<br />
before FTN because it was installed after FTN. Within a preference level, no search order<br />
can be assumed.<br />
The <strong>Collector</strong> searches through the files in a forward manner. Once a library file has been<br />
searched, it is not searched again, unless the file name appears on multiple LIB<br />
directives, or unless the file falls in more than one of the library search sequence steps.<br />
The <strong>Collector</strong> terminates the search order when all references are resolved.<br />
3.2.4.2. Altering the Search Sequence - INFO Group 12 Keywords<br />
INFO group 12 keywords are specified using the MASM $INFO group 12 directive.<br />
These keywords alter the <strong>Collector</strong> search sequence. When an INFO group 12 keyword<br />
is encountered in a relocatable element, the product installation file corresponding to the<br />
INFO group 12 keyword is included in the INFO 12 search chain to satisfy any external<br />
3–12 7830 9887–001
Inclusion and Exclusion of Elements<br />
references. This is true unless LIB$NAMES is already being searched. If this is the case,<br />
the system file corresponding to the INFO group 12 keyword is searched next.<br />
The element SYS$*DATA$.LIB$NAMES contains the INFO group 12 keywords defined<br />
on the system and their corresponding product installation files. The files are searched in<br />
the order that the relocatable elements containing the keywords are included in the<br />
collection. After all files named by keywords have been searched, and if any unsatisfied<br />
references remain, all entries in the element SYS$*DATA$.LIB$NAMES are processed<br />
sequentially until all files have been searched, or all external references have been<br />
satisfied.<br />
If no INFO group 12 keywords are specified in an element, the <strong>Collector</strong> searches the<br />
library files in the order they appear in the element SYS$*DATA$.LIB$NAMES.<br />
The <strong>Collector</strong> skips library search sequence steps 4 and 5 (see 3.2.4) in the library search<br />
sequence if the element SYS$*DATA$.LIB$NAMES does not exist or is empty. This is<br />
provided for upward compatibility.<br />
The order in which the files appearing in the element SYS$*DATA$.LIB$NAMES are<br />
searched can be altered at collection time. Files appearing in the element<br />
SYS$*DATA$.LIB$NAMES that are specified by INFO group 12 keywords in the<br />
relocatable elements included in the collection, either explicitly or implicitly, are searched<br />
before going sequentially through all the files appearing in SYS$*DATA$.LIB$NAMES.<br />
Files specified by INFO group 12 keywords are searched in the order that relocatable<br />
elements containing the keywords are included in the collection. You can also supply LIB<br />
directives for system library files to ensure that specific system library files are searched<br />
before the INFO group 12 keyword and SYS$*DATA$.LIB$NAMES search chains. Files<br />
specified on LIB directives are searched in the order they are specified.<br />
This altered search order causes the files specified by the INFO group 12 keyword and<br />
the LIB directive to be searched more than once during the same search pass, once in<br />
each altered position, and once during the sequential search of all the files listed in the<br />
element SYS$*DATA$.LIB$NAMES if all references have not been satisfied.<br />
Here are considerations when using INFO group 12 keywords:<br />
• If there is more than one INFO group 12 keyword in a relocatable element, the<br />
corresponding files are searched in the order the keywords appear in the element.<br />
• If the same INFO group 12 keyword is specified more than once in an element, the<br />
corresponding file is searched again if necessary.<br />
ELT1<br />
$INFO 12 ’FORTRAN’ . FORTRAN searched<br />
$INFO 12 ’SORT’ . SORT searched<br />
$INFO 12 ’FORTRAN’ . FORTRAN searched<br />
Note: The $INFO statements are taken from a MASM element.<br />
• If the <strong>Collector</strong> is searching sequentially through SYS$*DATA$.LIB$NAMES and<br />
includes an element that contains an INFO group 12 keyword, the corresponding<br />
system file is searched next.<br />
7830 9887–001 3–13
Inclusion and Exclusion of Elements<br />
• An INFO group 12 keyword is ignored if it is the same as the last INFO group 12<br />
keyword in the previous element.<br />
ELT1<br />
$INFO 12 ’FORTRAN’ . FORTRAN searched<br />
$INFO 12 ’FORTRAN’ . FORTRAN ignored<br />
$INFO 12 ’SORT’ . SORT searched<br />
ELT2<br />
$INFO 12 ’SORT’ . SORT ignored<br />
$INFO 12 ’FORTRAN’ . FORTRAN searched<br />
$INFO 12 ’SORT’ . SORT searched<br />
Note: The $INFO statements are taken from a MASM element.<br />
• If an element implicitly included contains an INFO group 12 keyword, the file<br />
corresponding to that keyword is attached to the INFO group 12 search chain.<br />
The search is terminated as soon as the external references are satisfied.<br />
3.2.4.3. Determining the Search Sequence Used<br />
The files searched are included in the long <strong>Collector</strong> output listing (@MAP,L). For<br />
example, assume that the <strong>Collector</strong> directives are as follows:<br />
LIB PLSLIB<br />
IN REL$.PROG-MAIN<br />
IN REL$.INFOR-SUB<br />
Also assume that the element PROG-MAIN contains this directive:<br />
$INFO 12 ’SYSLIB’<br />
The resulting <strong>Collector</strong> output listing can appear as in the following example. The file<br />
SYS$LIB$*SYSLIB appears twice in the output listing, with the occurrence caused by<br />
the INFO 12 keyword noted by an asterisk under the INFO 12 column. The file<br />
SYS$LIB$*SYSLIB is thus searched twice to satisfy external references.<br />
Example<br />
Files Available for Element Inclusion (in Search Order):<br />
-------------------------------------------------------<br />
Search Element <strong>Reference</strong><br />
Specified Name External Filename File Search Search RLIB INFO 12<br />
------------------------------------------------------------------------------<br />
TPF$ C<strong>OS</strong>*TPF$(0) * * *<br />
PLSLIB PLS*7R1(2) * * *<br />
REL$ COMUS4R2*RO(77)<br />
SYS$LIB$*SYSLIB(4) SYS$LIB$*SYSLIB(4) * * * *<br />
SYS$LIB$*DPS(4) SYS$*LIB$*DPS(4) * * *<br />
SYS$LIB$*ACOB(10) SYS$*LIB$*ACOB(10) * * *<br />
SYS$LIB$*FTN(5) SYS$*LIB$*FTN(5) * * *<br />
3–14 7830 9887–001
Inclusion and Exclusion of Elements<br />
UDS$$SRC*D$MR(2) UDS$$SRC*D$MR(2) * * *<br />
SYS$LIB$*PCI<strong>OS</strong>(3) SYS$LIB$*PCI<strong>OS</strong>(3) * * *<br />
SYS$LIB$*UCSRTS(4) SYS$LIB$*UCSRTS(4) * * *<br />
SYS$LIB$*SORT(4) SYS$LIB$*SORT(4) * * *<br />
SYS$LIB$*CML(3) SYS$LIB$*CML(3) * * *<br />
SYS$LIB$*SYSLIB(4) SYS$LIB$*SYSLIB(4) * * *<br />
SYS$LIB$*RLIB SYS$LIB$*RLIB(1) * * *<br />
where:<br />
Specified Name<br />
is the internal file name specified on a LIB directive, an IN directive, a NOT directive,<br />
or included implicitly by the <strong>Collector</strong>.<br />
Files are printed in the following order:<br />
− TPF$, unless TPF$ appears on a directive<br />
− Files specified on LIB, NOT, or IN directives, in the order specified in the map<br />
symbolic. Each file will be printed once except<br />
ο Files specified on more than one LIB directive<br />
ο File or file.element specified on an IN directive and the same file specified<br />
on any other directive<br />
− MAP$PF, if it exists<br />
− Files specified by INFO group 12 keywords-in the order in which the elements<br />
containing the INFO 12 keywords are included in the collection<br />
− Files used from the element SYS$*DATA$.LIB$NAMES<br />
− SYS$*RLIB$<br />
External Filename<br />
corresponds to the external file name. The external file name is not printed for a NOT<br />
directive of an entire file.<br />
Search File<br />
indicates the file was available for an element or reference search.<br />
Element Search<br />
indicates the files that were searched for elements, without file names, specified on<br />
IN directives. The files were searched in the same order as they appear in the output<br />
listing.<br />
<strong>Reference</strong> Search<br />
7830 9887–001 3–15
Inclusion and Exclusion of Elements<br />
RLIB<br />
indicates the files that were searched to satisfy external references in the elements<br />
specified on IN directives or in elements implicitly included. The files were searched<br />
in the same order as they appear in the output listing.<br />
indicates that the file appeared on an RLIB directive or is treated as a system library<br />
file (SYS$*RLIB$ and files in SYS$*DATA$.LIB$NAMES).<br />
INFO 12<br />
indicates that the file was referenced by an INFO group 12 keyword in an element.<br />
3.2.4.4. Searching User-Specified Search Files<br />
A user-specified file can be searched more than once if the file name appears more than<br />
once on a LIB directive. Assume that the following appears in the <strong>Collector</strong> symbolic:<br />
IN XXX.ELT<br />
Also assume that XXX.ELT contains the external reference XREFA.<br />
You also need the following:<br />
LIB Y,Z,Y<br />
This statement includes all elements to satisfy all external references if the following<br />
situation occurred:<br />
Notes:<br />
1. To satisfy external reference XREFA from element XXX.ELT, element Y.A is included<br />
in the collection. (SEARCH LIB FILE 1)<br />
2. Element Y.A contains a reference to XREFB. The <strong>Collector</strong> will not find entry point<br />
XREFB in the rest of the search of file Y, so it searches the next library in the library<br />
search chain, file Z. (SEARCH LIB FILE 2)<br />
3–16 7830 9887–001
Inclusion and Exclusion of Elements<br />
3. To satisfy the reference to XREFB from element Y.A, element Z.B is included in the<br />
collection.<br />
4. Element Z.B contains a reference to XREFC. The <strong>Collector</strong> will not find entry point<br />
XREFC in the rest of the search of file Z, so it searches the next library in the library<br />
search chain, file Y. (SEARCH LIB FILE 3)<br />
5. To satisfy the reference to XREFC from element Z.B, element Y.C is included in the<br />
collection.<br />
6. If only LIB Y,Z had been specified, file Y would have been searched only once and<br />
element Y.C would not have been included in the collection and thus entry point<br />
XREFC would have remained undefined<br />
LIB directives such as the preceding are necessary because the <strong>Collector</strong> searches<br />
through the libraries in a forward manner. Once a library file has been searched, it is not<br />
searched again unless specified. However, it is redundant to specify the same file twice<br />
consecutively (for example, LIB Y,Y) since a file is fully searched even if an element from<br />
that file is added to the collection.<br />
3.2.5. @PREP of Library Files<br />
The @PREP function (see the Executive Control Language (ECL) and FURPUR <strong>Reference</strong><br />
<strong>Manual</strong>) creates an entry-point table for a file. The <strong>Collector</strong> accesses this entry-point<br />
table to determine if any of the file’s entry points satisfy external references in the<br />
collection.<br />
You must prepare (@PREP) all library files specified on LIB or RLIB directives that are<br />
used to satisfy external references. If a file has not been prepared, it is included in the<br />
first search (for element inclusion) but not in the second search (for satisfying external<br />
references). If a file has not been prepared, the <strong>Collector</strong> prints a diagnostic message.<br />
If TPF$ is not prepared, it is treated in a special manner by the <strong>Collector</strong>. All of the<br />
elements in TPF$ are tentatively included in the collection unless specifically excluded by<br />
the NOT directive. If any of these elements are not necessary for satisfying external<br />
references (or if they have not been named on an IN directive), they are discarded later in<br />
the collection.<br />
When TPF$ is prepared, the same procedure is used as with all prepared files. When<br />
TPF$ is not prepared, the <strong>Collector</strong> must read in all of the TPF$ elements, process their<br />
preambles, and create its own entry-point table. This implicit @PREP of TPF$ by the<br />
<strong>Collector</strong> is less efficient than an explicit @PREP.<br />
Files specified in SYS$*DATA$.LIB$NAMES are prepared when they are installed.<br />
For efficiency considerations see 8.3.<br />
7830 9887–001 3–17
Inclusion and Exclusion of Elements<br />
3–18 7830 9887–001
Section 4<br />
Banking<br />
4.1. Introduction<br />
A bank is the basic container of information for <strong>OS</strong> 1100 systems. Banks in main storage<br />
are called physical banks. A physical bank is a region of main storage that has been<br />
allocated for a particular user. Each physical bank has an associated data structure called<br />
a bank descriptor, which lists characteristics of the physical bank. A bank is recognized<br />
as a unit of an absolute element. Through the use of the bank directives, you have more<br />
control over the execution and storage allocation of the program.<br />
A bank template is a copy of a bank that is not installed on the system. Bank templates<br />
reside in the absolute elements, but never in main storage or in the swapfile (meaning<br />
swapped out of main storage into SWAP$FILE).<br />
Bank attributes are determined from control information that accompanies the bank<br />
template in the absolute element or from attributes named in the bank’s system<br />
definition. See the Exec System Software Common Banks <strong>Programming</strong> Guide for more<br />
information on banking.<br />
The maximum number of banks per absolute that the <strong>Collector</strong> allows is 4089 (07771).<br />
This value is determined by the <strong>Collector</strong>'s maximum internal user-bank BDI value of<br />
4092 (07774).<br />
4.2. Banking Directives<br />
This subsection describes bank directives and bank directive attributes.<br />
4.2.1. IBANK, DBANK — Bank Structuring<br />
Purpose<br />
The IBANK and DBANK directives specify program banks within a bank-named<br />
collection.<br />
All parameters on the IBANK and DBANK directives are optional, except name-1.<br />
Format<br />
IBANK,attributes name-1,bank-list level-#,bdr-#<br />
DBANK,attributes name-1,bank-list level-#,bdr-#<br />
7830 9887–001 4–1
Banking<br />
where:<br />
attributes<br />
are described in Table 4-1. For alternate file common (shared) banks (AFCB),<br />
attributes in the bank’s system definition can override attributes in the absolute<br />
element when the bank is installed. For nonconfigured common banks (NCCB), the<br />
attributes are strictly from the absolute element. See the Exec System Software<br />
Common Banks <strong>Programming</strong> Guide.<br />
name-1<br />
specifies the name of the bank. For nonconfigured common banks (NCCB), this is<br />
the name of the absolute element containing the NCCB when the bank is the only<br />
bank in the absolute element. All characters are allowed in a bank name if they are<br />
enclosed in single quotes.<br />
bank-list<br />
specifies the address relationship between the bank named in name-1 and other<br />
program banks. Names present in a bank-list can be I bank or D bank names. The<br />
bank-list parameter has several formats that determine the starting address of the<br />
bank named in name-1:<br />
no entry<br />
When bank-list is void, the starting address of the name-1 bank is the next<br />
address that is a multiple of 01000 following the highest address of the most<br />
recently defined I bank (if name-1 is an I bank) or D bank (if name-1 is a D bank).<br />
name-2<br />
The starting address of the name-1 bank is the same as that of the name-2<br />
parameter. Name-2 can be either a bank name, a numeric value, or a bank name<br />
± offset, where offset is an integer value that is added to or subtracted from the<br />
starting address of the bank name.<br />
(name-2)<br />
The starting address of the name-1 bank is the next address that is a multiple of<br />
01000 following the name-2 bank. Name-2 can be bank name or a bank name ±<br />
offset, where offset is applied to the bank’s last address.<br />
(name-2,name-3,...,name-n)<br />
level-#<br />
The starting address of the name-1 bank is the next address that is a multiple of<br />
01000 following the highest address of the name-2,...,name-n banks. Each of the<br />
name-2,. ..,name-n parameters can be a bank name, a bank name ± offset<br />
(where offset is applied to the bank’s last address) or an integer value.<br />
4–2 7830 9887–001
dr-#<br />
Description<br />
Banking<br />
specifies the bank descriptor table (BDT) level for a particular bank. This level<br />
overrides the global level when referencing the bank specified on the bank<br />
directive. Level-# must be an integer from 0 to 3. The level-# for a bank is<br />
required by extended mode programs to reference a bank. The default level-# is<br />
2. For collections with the TYPE EXEC directive, the default level-# is 1 (see 6.6).<br />
The level for each level-# is<br />
0 System<br />
1 Application<br />
2 Program<br />
3 Activity<br />
specifies the bank descriptor registerf (BDR) associated with a bank. The bdr-#<br />
field must be an integer from 0 to 3. The default BDR is 0 unless the M or U<br />
option is specified on the bank directive. The M and U options will set the BDR<br />
as follows<br />
IBANK,M BDR is 0.<br />
IBANK,U BDR is 1.<br />
DBANK,M BDR is 2.<br />
DBANK,U BDR is 3.<br />
IBANK,MU BDR is 0. The M option overrides the U option.<br />
DBANK,MU BDR is 2.<br />
The bdr-# field satisfies references to that bank’s BDR. It is not placed in the<br />
bank load table. If the bdr-# field and options on the bank directive conflict, an<br />
error message is issued. The BDR as defined by the options will then be used.<br />
For information on how the <strong>Collector</strong> assigns BDIs to banks, see A.3.<br />
The starting address of a bank is the INFO group 3 directive specified minimum address<br />
for an element included in the bank if the minimum address for the element would not<br />
otherwise be met. However, the INFO 3 directive is ignored if the O option is specified<br />
on the IBANK or DBANK directive or an integer starting address is specified of the<br />
following forms:<br />
IBANK bank1, 03000<br />
DBANK bank1, 010000<br />
The following forms do not cause the INFO 3 directive to be ignored.<br />
IBANK bank1, (bank2, 05000)<br />
DBANK bank1, (bank2, 050000)<br />
For additional information on bank-named collections, see 4.4.<br />
7830 9887–001 4–3
Banking<br />
Table 4–1. IBANK and DBANK Directive Attributes<br />
Attributes Description<br />
A This attribute is used on common banks that can process contingencies for<br />
errors received in program banks. It indicates that the bank is available for<br />
processing program bank contingencies.<br />
B This attribute indicates that the bank template is not to be marked as requiring<br />
extended mode even if an INFO 10 location counter is included in the bank.<br />
C The bank template is to be the control bank. This attribute can be specified only<br />
once in a collection. If no C option appears in a collection, the control bank is<br />
selected from the initially based banks. The order of precedence is as follows:<br />
Main D bank<br />
Utility D bank<br />
Main I bank<br />
Utility I bank<br />
D The bank template has the dynamic attribute. If this attribute is not specified,<br />
the bank template has the static attribute. In most cases, dynamic banks are<br />
more efficient than static banks. See the Exec System Software Common Banks<br />
<strong>Programming</strong> Guide.<br />
G The bank template has the guaranteed entry attribute. When a bank basing an<br />
instruction is executed to a guaranteed entry bank, the jump must be made to<br />
the address specified as the guaranteed entry.<br />
H The bank template has the program contingency handling attribute. See the<br />
Exec System Software Executive Requests <strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong><br />
and the Exec System Software Common Banks <strong>Programming</strong> Guide for more<br />
details.<br />
L All references to BDICALL$ and IBJ$, where the associated reference is defined<br />
in an L option bank, are to be satisfied by 0 and LMJ, respectively. This option is<br />
assumed for the control bank. If the bank is not an initially based static bank, a<br />
warning message is printed.<br />
M This bank is to be initially based (BDR0 or BDR2 for the 1100/60, 1100/70, and<br />
1100/80, systems, or B12 or B14 on the extended mode architecture). This<br />
option can be used only once with an IBANK directive and once with a DBANK<br />
directive. If no M or U options are specified, the M option is assumed for the<br />
first IBANK and first DBANK directives. Once the M option is specified, no<br />
assumptions are made regarding the M or U option.<br />
N This bank requires extended mode.<br />
O The starting address specified by bank-list is to override any minimum address<br />
(INFO 3) specifications found in elements in this bank. This option is assumed if<br />
bank-list is a number without parentheses (see 4.2.4).<br />
Q The bank template has the test-and-set (TS) queuing attribute. When TS<br />
conflicts occur within a bank with this attribute, the system queues the activity<br />
to the TS cell. See the Exec System Software Common Banks <strong>Programming</strong><br />
Guide.<br />
4–4 7830 9887–001
Table 4–1. IBANK and DBANK Directive Attributes<br />
Attributes Description<br />
R The bank template has the read-only (write-protected) attribute.<br />
Banking<br />
S The bank is to be a nonconfigured common bank (NCCB). This option is usually<br />
used with multibanking techniques. See the Exec System Software Common<br />
Banks <strong>Programming</strong> Guide for more details.<br />
T This bank must start on an absolute 2,048 (04000) word boundary.<br />
U This bank is to be initially based (BDR1 or BDR3 for the 1100/60, 1100/70, and<br />
1100/80 systems, or B13 or B15 on the extended mode architecture). This<br />
option can be used only once with an IBANK directive and once with a DBANK<br />
directive. The U option is never assumed on an IBANK or DBANK directive.<br />
V The bank template is not placed in the absolute element.<br />
X The bank is represented by a configured bank descriptor index (BDI). These<br />
types of common banks include configured common banks (CCB) and alternate<br />
file common banks (AFCB). A CERU$ or CBEP$$ element included in the<br />
collection provides the bank’s BDI. This type of common bank cannot be the<br />
control bank.<br />
Z This is a void bank template. This bank is assigned the next consecutive BDI,<br />
starting with a value of 4, ahead of all other banks in the collection, including S<br />
option and D option banks. Only the D option can be specified with the Z option.<br />
No FORM, IN, or SEG directives are allowed following a Z option bank.<br />
Example<br />
The program is divided into four I banks and five D banks.<br />
1. IBANK I1<br />
2. IBANK I2<br />
3. DBANK D1<br />
4. IBANK I3,I2<br />
5. DBANK D2,036000<br />
6. DBANK D3,(I2,D1)<br />
7. DBANK D4,(I3)<br />
8. IBANK I4,I2+03000<br />
9. DBANK D5,(D3+02000,D4,D2,042000)<br />
The starting addresses of these banks are as follows:<br />
1. I1 starts at address 01000.<br />
2. I2 starts at the next 01000 following I1.<br />
3. D1 starts at 040000 or at the next 01000 following the longest I bank, whichever<br />
address is higher.<br />
7830 9887–001 4–5
Banking<br />
4. I3 starts at the same address as I2.<br />
5. D2 starts at address 036000.<br />
6. D3 starts at the next 01000 following the highest ending address of I2 and D1.<br />
7. D4 starts at the next 01000 following I3.<br />
8. I4 starts at the address obtained by adding 03000 to the start address of I2.<br />
9. D5 starts at the next 01000 following the highest ending address of D4, D2,<br />
D3+02000, and 042000.<br />
4.2.2. BANKINFO — Specifying Bank Attributes<br />
Purpose<br />
The BANKINFO directive specifies the attributes that are to be associated with the<br />
previous bank. The BANKINFO directive is used to improve the readability of a collection.<br />
It is also used to create AFCBs and a link vector bank.<br />
Format<br />
BANKINFO attribute-list<br />
where attribute-list specifies the attributes for the preceding bank directive. (See Table 4-<br />
2.) Each attribute is separated by a comma to create the attribute list. Most of these<br />
attributes correspond with the attributes (options) that can be specified on the BANK<br />
directive (see Table 4-1).<br />
Description<br />
The attributes can be abbreviated to six characters and can be no longer than twelve<br />
characters. The <strong>Collector</strong> uses only the first six characters to determine the desired<br />
attribute. Attributes followed by a value in parentheses indicate the existence of a<br />
subattribute. The subattributes are described with the attributes to which they apply.<br />
Table 4–2. BANKINFO Directive Attributes<br />
Attribute Option Description<br />
AFCB X The bank is represented by a configured BDI. These types<br />
of common banks include CCBs and AFCBs. The bank’s<br />
BDI will be obtained from a CERU$ or CBEP$$ element<br />
included in the collection. This type of common bank<br />
cannot be the control bank.<br />
4–6 7830 9887–001
Table 4–2. BANKINFO Directive Attributes<br />
Banking<br />
AFCB(bankname,bdi) * The bank is to be a common bank that is represented by a<br />
configured BDI. These types of common banks include<br />
CCBs and AFCBs. The bank name and BDI value are<br />
specified in parentheses. The bank name specified is the<br />
name used to install the common bank with COMUS. The<br />
BDI value should be in octal format (040nnnn). See the<br />
Exec System Software Common Banks <strong>Programming</strong><br />
Guide. The name specified on the bank directive will then<br />
be treated as if it were received from a CBEP$$ element<br />
(CB1 * EQU 040nnnn). (See 4.8).<br />
ALLOWCONTIN A This attribute is used on common banks that can process<br />
contingencies for errors received in program banks. It<br />
indicates that the bank is available for processing program<br />
bank contingencies.<br />
BDR(#) * This attribute specifies the BDR associated with a bank.<br />
The BDR value must be an integer from 0 to 3. The default<br />
BDR is 0 unless the bank is initially based. The BDR<br />
associated with an initially based bank is as follows:<br />
MAINI BDR is 0<br />
MAIND BDR is 2<br />
UTILI BDR is 1<br />
UTILD BDR is 3<br />
The BDR value satisfies references to that bank’s BDR,<br />
typically using MAPBDR$. It is not placed in the bank<br />
loadtable. If the BDR value and the basing options or<br />
attributes conflict, an error message is issued. A BDR value<br />
will then be determined by where the bank is based using<br />
the chart just shown.<br />
CODESTRIPPED V The bank template is not placed in the absolute element.<br />
CONTINGENCY H The bank template has the program contingency handling<br />
attribute. See the Exec System Software Executive<br />
Requests <strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong> for more details.<br />
CONTROL C The bank template is to be the control bank. This attribute<br />
can be specified only once in a collection. If no C option or<br />
CONTROL attribute appears in a collection, the control bank<br />
is selected from the initially based banks. The order of<br />
precedence is as follows:<br />
Main D bank<br />
Utility D bank<br />
Main I bank<br />
Utility I bank<br />
DYNAMIC D The bank template has the dynamic attribute. If this<br />
attribute is not specified, the bank template has the static<br />
attribute. See the <strong>OS</strong> 1100 Exec System Software<br />
Common Banks <strong>Programming</strong> Guide.<br />
EXTENDED N This bank requires extended mode.<br />
7830 9887–001 4–7
Banking<br />
Table 4–2. BANKINFO Directive Attributes<br />
GUARANTEED G The bank template has the guaranteed entry-point attribute.<br />
When a bank basing instruction is executed to a guaranteed<br />
entry-point bank, the jump must be made to the address<br />
specified as the guaranteed entry point.<br />
INITIAL(subattribute) M,U This bank is to be initially based. The subattributes are<br />
MAINI or BDR0 (based on BDR0)<br />
MAIND or BDR2 (based on BDR2)<br />
UTILI or BDR1 (based on BDR1)<br />
UTILD or BDR3 (based on BDR3)<br />
Each subattribute can be used for only one bank. If no<br />
subattributes (or M or U options) are specified, the MAINI<br />
(BDR0) is assumed for the first IBANK directive and the<br />
MAIND (BDR2) is assumed for the first DBANK directive.<br />
Once the MAINI (BDR0) and the MAIND (BDR2) or the M<br />
option is specified, no assumptions are made regarding the<br />
other subattributes (or the M or U options).<br />
Bank descriptor registers BDR0, BDR1, BDR2, and BDR3<br />
are used for the 1100/60, 1100/70, and 1100/80 systems.<br />
Base registers B12, B13, B14, and B15 are used on the<br />
extended mode architecture. For extended mode<br />
architecture, BDR0, BDR1, BDR2, and BDR3 are synonyms<br />
for B12, B13, B14, and B15 respectively.<br />
LEVEL(#) * This attribute specifies the BDT level for a particular bank.<br />
This level overrides the global level when referencing the<br />
bank specified on the bank directive (see 6.6). The number<br />
(#) specified on the LEVEL attribute must be an integer<br />
from 0 to 3.<br />
LMJ L All references to BDICALL$ and IBJ$, where the associated<br />
reference is defined in an L option or LMJ attribute bank,<br />
are to be satisfied by 0 and LMJ, respectively. This attribute<br />
is assumed for the control bank. If the bank is not an initially<br />
based static bank, a warning message is printed.<br />
NCCB S The bank is to be a nonconfigured common bank. This<br />
attribute is usually used with multibanking techniques. See<br />
the Exec System Software Common Banks <strong>Programming</strong><br />
Guide for more details.<br />
NOTEXTENDED B This attribute indicates the bank template is not to be<br />
marked as requiring extended mode even if an INFO 10<br />
location counter is included in the bank.<br />
OVERRIDEMIN O The starting address specified by bank-list is to override any<br />
minimum address (INFO 3) specifications found in<br />
elements in this bank. This attribute is assumed if bank-list<br />
is a number without parentheses (see 4.2.4).<br />
4–8 7830 9887–001
Table 4–2. BANKINFO Directive Attributes<br />
READONLY R The bank template has the read-only (write-protected)<br />
attribute.<br />
Banking<br />
TSQUEUING Q The bank template has the test-and-set (TS) queuing<br />
attribute. When TS conflicts occur within a bank with this<br />
attribute, the system queues the activity to the TS cell. See<br />
the Exec System Software Common Banks <strong>Programming</strong><br />
Guide.<br />
VECTOR<br />
(Bn[,Xn] [Bn[,Xn]] ...)<br />
Bn is a B register 2 to 15, or 2 to 31 for TYPE EXEC. Xn is<br />
an X register 1 to 15. This bank is to be the link vector bank.<br />
The <strong>Collector</strong> creates the contents of this bank as the<br />
<strong>Collector</strong> defined tags MAPCALL$ and MAPGOTO$ are<br />
encountered. Collections using this attribute cannot contain<br />
segmentation. For more information, see 4.9.<br />
VOID Z This is a void bank template. This bank is assigned the next<br />
consecutive BDI starting with a value of 4, ahead of all<br />
other banks in the collection, including NCCB attribute (S<br />
option) and DYNAMIC (D option) banks. Only the DYNAMIC<br />
attribute (D option) can be specified with the VOID (Z<br />
option) attribute. No FORM, IN, or SEG directives are<br />
allowed following a VOID bank.<br />
2048BOUNDARY T This bank must start on an absolute 2048 (04000) word<br />
boundary.<br />
* The asterisk indicates that this attribute is not available as an option on the BANK<br />
directive.<br />
Examples:<br />
1a. IBANK,MD IB1 1b. IBANK IB1<br />
BANKINFO INITIAL(MAINI),DYNAMIC<br />
The BANKINFO directive is used in example 1b to produce the same results as shown in<br />
example 1a.<br />
2a. DBANK,MDRC DB1 2b. DBANK DB1<br />
BANKINFO INITIAL(MAIND),DYNAMIC<br />
BANKINFO READONLY,;<br />
CONTROL<br />
More than one attribute can be specified on a BANKINFO directive by using a comma<br />
between the attributes. More than one BANKINFO directive can be used for each BANK<br />
directive. A semicolon can also be used to continue the BANKINFO directive.<br />
3a. IBANK,XM AFCBNAME 3b. IBANK AFCBNAME<br />
DBANK BANKNAME BANKINFO INITIAL(MAINI),AFCB<br />
IN FILE.ELT DBANK BANKNAME<br />
IN CBEP$$ELT IN FILE.ELT<br />
IN CBEP$$ELT<br />
7830 9887–001 4–9
Banking<br />
The BANKINFO directive is used in example 3b to produce the same results as shown in<br />
example 3a.<br />
4. IBANK AFCBNAME<br />
BANKINFO AFCB(INSTALLNAME,0400103),DYNAMIC<br />
IN FILE.ELT<br />
An integrated AFCB can be created in one collection. The bank name specified on the<br />
IBANK or DBANK directive, AFCBNAME, becomes an entry point that the <strong>Collector</strong> uses<br />
to resolve references to the bank. This is the name that is used when referencing the<br />
bank from elements within this collection. It has the BDI value specified on the<br />
BANKINFO directive.<br />
The bank name specified on the BANKINFO directive (INSTALLNAME) is the externally<br />
visible name for the common bank. This name is used for the COMUS INSTALL<br />
command and on the unsolicited console keyin RL. This name is listed on the <strong>Collector</strong><br />
listing as the bank name.<br />
The M or U option or the INITIAL attribute can also be specified. The common bank is<br />
based, not the bank name specified on the BANKINFO directive. The basing of this bank<br />
is not printed on the <strong>Collector</strong> output listing.<br />
4.2.3. $Ics — Location Counter Set Specification<br />
Purpose<br />
The $lcs directive specifies the set of location counters to be included in the current<br />
bank from elements explicitly included in the collection by IN directives.<br />
Format<br />
$lcs<br />
where $lcs specifies the set of location counters either by means of a keyword or<br />
explicit naming as follows:<br />
$ALL<br />
$NONE<br />
$ODD<br />
$EVEN<br />
Include all location counters.<br />
Include no location counters (used to create dummy or skeletal structures).<br />
Include only odd location counters (default for I banks).<br />
Include only even location counters (default for D banks).<br />
4–10 7830 9887–001
$n-1,n-2,...,n-m<br />
Include only those location counters specified.<br />
$ALLBUT,n-1 ,n-2,...,n-m<br />
Include all location counters except those specified.<br />
Description<br />
Banking<br />
The location counter set specification is used only in conjunction with a bank-named<br />
collection. The specified set remains in effect until the next $lcs or IBANK or<br />
DBANKdirective is encountered. A bank directive automatically sets the location counter<br />
set to $ODD for IBANK and $EVEN for DBANK.<br />
The location counter set specified for a bank can be overridden for individual elements or<br />
files by using the optional $lcs field on the IN directive (see 3.1.1).<br />
In formats 2 and 3 of the LIB directive, $lcs is also used to direct implicit elements to<br />
specific banks (see 3.2.1).<br />
Each location counter of each element can be globally included only once in a collection.<br />
However, a location counter can be locally included as many times as desired.<br />
Example<br />
LIB (I/$ALL,D/$NONE)<br />
LIB F1( )<br />
LIB F2(I/$1,3,7,010,D/$2,4,5,6)<br />
IBANK I<br />
$ALLBUT,2,4<br />
IN E1,E2,E3($2),E4<br />
.<br />
.<br />
.<br />
$1,3<br />
IN E5<br />
.<br />
.<br />
.<br />
DBANK D<br />
$2,4<br />
IN E1,E2,E3($ALLBUT,2),E4<br />
.<br />
.<br />
.<br />
$ALLBUT,1,3<br />
IN E5<br />
7830 9887–001 4–11
Banking<br />
Bank Included<br />
Element<br />
I E1,E2,E4<br />
E3<br />
E5<br />
D E1,E2,E4 E3<br />
E5<br />
Location<br />
Counter<br />
All but 2 and 4<br />
4–12 7830 9887–001<br />
2<br />
1 and 3<br />
2 and 4<br />
All but 2<br />
All but 1 and 3<br />
All implicit elements from file F1 will go to I bank I. Location counters 1, 3, 7, and 8 from<br />
the implicit elements from file F2 will go to I bank I, and location counters 2, 4, 5, and 6<br />
from the implicit elements from file F2 will go to D bank D.<br />
4.2.4. INFO Group 3<br />
The MASM INFO group 3 (INFO 3) directive allows you to specify the minimum I bank<br />
and D bank addresses of the element that contains the directive. The INFO 3 specified<br />
minimum I bank address applies to the I bank containing location counter one of the<br />
element that contains the INFO 3 specified minimum I bank address.<br />
The INFO 3 specified minimum D bank address applies to the D bank containing location<br />
counter zero of the element that contains the INFO 3 specified minimum D bank<br />
address.<br />
4.3. Bank-Implied Collections<br />
The <strong>Collector</strong> provides the capability of dividing an absolute element into logical<br />
structures called banks. If you do not wish to define this structure by means of the<br />
IBANK or DBANK directives, the <strong>Collector</strong> generates a two-bank absolute element. This<br />
is called a bank-implied collection. A bank-implied collection creates basic mode<br />
instruction banks.<br />
In a bank-implied collection, location counters from both explicitly and implicitly included<br />
elements are split with the odd location counters going to the I bank and the even ones<br />
going to the D bank.<br />
The starting address of the I bank (instruction area) is normally 01000; however, it can be<br />
altered by the MASM $INFO group 3 directive. The starting address of the D bank (data<br />
area) depends on the size of the I bank, the use of the MASM INFO group 3 directive,<br />
the total program size, and the options specified on the @MAP statement. The first<br />
address of the D bank, however, is always a multiple of 01000 and is often given the<br />
default value 040000.<br />
Your program can reference the first and last I bank and the first and last D bank<br />
addresses by the symbols FRSTI$, LASTI$, FRSTD$, and LASTD$, respectively. In<br />
addition, the symbols LASTIR$ and LASTDR$ return the values of LASTI$ and LASTD$<br />
rounded to the end of the main storage block. The <strong>Collector</strong> replaces these symbols with<br />
the actual assigned address values.
Banking<br />
An unnamed common block (that is, blank common), if required in the program, is placed<br />
in the D bank under the name BLANK$COMMON. If the program contains segments,<br />
the unnamed common block is attached to the main segment. It can be positioned in<br />
another segment or bank by an IN BLANK$COMMON directive.<br />
Named common blocks are always placed in the D bank. If the program contains<br />
segmentation, named common blocks (if not named on an IN directive) are attached to a<br />
global segment that contains all segments referencing the named common block. This is<br />
to ensure that the common block is loaded if any of the referencing segments is loaded.<br />
4.4. Bank-Named Collections<br />
One of the advantages of a multibanked program (that is, a program with more than one<br />
I bank and D bank) is that banks containing code not necessary for a certain portion of<br />
the program need not be in main storage until they are required. This subsection<br />
provides information regarding some guidelines and considerations that you need to<br />
keep in mind when creating bank-named collections.<br />
4.4.1. Bank Address Assignments<br />
The relative starting address of a bank can be explicitly given on the IBANK or DBANK<br />
directive as a numeric value or as an address to be determined in relation to the size of<br />
other banks. This bank starting address should be a multiple of 01000. This is a hardware<br />
restriction since the lower 9 bits of the address are not retained. When no such address<br />
specification exists, the following guidelines apply:<br />
1. The I bank specified by means of the first IBANK directive starts at the higher of the<br />
following:<br />
a. 01000<br />
b. A MASM $INFO group 3 specified address from an element included in this I<br />
bank unless the O option is specified<br />
2. The D bank specified by means of the first DBANK directive starts at the highest of<br />
the following:<br />
a. 040000<br />
b. The next address that is a multiple of 01000 following the highest assigned I<br />
bank address<br />
c. A MASM $INFO group 3 specified address from an element included in this D<br />
bank (if the element placement is such that the minimum specified address<br />
would not otherwise be met) unless the O option is specified<br />
3. I banks follow I banks and D banks follow D banks; that is, an I bank (D bank) that<br />
has no explicit address assignment is assigned a starting address that is the next<br />
multiple of 01000 following the last address assigned to the previous I bank (D bank)<br />
defined in the <strong>Collector</strong> source language.<br />
No bank address can be greater than 0777777 (262K). The total size of all I banks (D<br />
banks) can be greater than 0777777 if there is some overlap of program address<br />
assignments within banks, so that the total address space does not exceed 0777777<br />
(262K).<br />
7830 9887–001 4–13
Banking<br />
Note: For older unsupported Series 1100 systems, there is an I bank restriction that no I<br />
bank address can be greater than 0177777 (65K).<br />
Overlap of bank address assignments can be achieved by using the IBANK and DBANK<br />
directives. Overlay banks that have the same address space refer to separate physical<br />
storage and can be used to contain different data or instructions. Access to the specific<br />
data or instructions is controlled by the basing and unbasing of the respective banks.<br />
Although banks occupy different space in memory, the visibility of the banks based must<br />
not overlap within the <strong>Collector</strong> address space or parts of a bank will not be accessible.<br />
Bank overlaps can be necessary for large collections. The banks chosen to overlap<br />
should be logically separate so they are not based at the same time.<br />
In addition to the <strong>Collector</strong>-defined tags FRSTI$, LASTI$, LASTIR$, FRSTD$, LASTD$,<br />
and LASTDR$ (see Section 7), the tags FIRST$, LAST$, LASTR$, and BDI$ are defined<br />
for bank-named collections. These tags are defined to be the first assigned address, last<br />
assigned address, rounded last assigned address, and BDI value for the bank in which<br />
the reference is contained.<br />
4.4.2. Initially Based Banks<br />
An initially based bank is a bank that can be referenced at the start of execution of a<br />
program. This means that the bank is described in one of the basing registers (BDR0 to<br />
BDR3 on the 1100/60, 1100/70, and 1100/80 systems or B12 to B15 on the extended<br />
mode architecture). A bank can be specified for initial basing by means of the M or U<br />
option on the IBANK and DBANK directives (see 4.2.1), or by means of the BANKINFO<br />
directive (see 4.2.2). Each option can be used with a maximum of one IBANK and one<br />
DBANK directive. When there is no initial basing specified for any banks, the first I bank<br />
and the first D bank defined in the <strong>Collector</strong> source language are initially based on BDR0<br />
and BDR2 (1100/60, 1100/70, 1100/80 systems) or B12 and B14 (extended mode<br />
architecture) respectively. A bank is never assigned to be based on BDR1 or BDR3<br />
(1100/60, 1100/70, 1100/80 systems) or B13 or B15 (extended mode architecture) by<br />
default. Thus, if a bank is to be initially based on BDR1 or BDR3 (1100/60, 1100/70,<br />
1100/80 systems) or B13 or B15 (extended mode architecture), it must have the U<br />
option specified on the IBANK and DBANK directives. If a bank is not initially based, it<br />
can be based dynamically by means of the LBJ, LIJ, or LDJ instructions (see 4.5) for<br />
basic mode banks and the LBU, CALL, or GOTO instructions (see 4.6) for extended<br />
mode banks.<br />
4.4.3. The Control Bank<br />
The control bank is the normal place in which to collect such components of a program<br />
as permanent flags, central control routines for sets of dependent library subroutines,<br />
test-and-set cells, and locations designed to capture interrupts (such as guard mode<br />
contingency) that can result at varied or unpredictable locations throughout the program.<br />
Certain tables produced by the <strong>Collector</strong>, including the segment load table (SLT$), are<br />
located at the beginning of the control bank. A bank is specified as the control bank by<br />
using the BANKINFO directive with the CONTROL attribute or by specifying the C option<br />
on an IBANK or DBANK directive. The control bank normally is defined as an initially<br />
based D bank.<br />
4–14 7830 9887–001
Banking<br />
In a basic mode instruction environment, the <strong>Collector</strong> assumes that the control bank will<br />
not normally be unbased by means of an LIJ, LDJ, or LBJ for another bank. In the<br />
extended mode instruction mode environment, this assumption cannot be made.<br />
If a control bank is not specified, the <strong>Collector</strong> selects an initially-based bank to be the<br />
control bank in the order of<br />
1. Main D bank based on the BDR2 (1100/60, 1100/70, 1100/80 systems) or B14<br />
(extended mode architecture)<br />
2. Utility D bank based on the BDR3 (1100/60, 1100/70, 1100/80 systems) or B15<br />
(extended mode architecture)<br />
3. Main I bank based on the BDR0 (1100/60, 1100/70, 1100/80 systems) or B12<br />
(extended mode architecture)<br />
4. Utility I bank based on the BDR1 (1100/60, 1100/70, 1100/80 systems) or B13<br />
(extended mode architecture)<br />
4.4.4. Element Inclusion<br />
All of the rules of element inclusion and file searching for bank-implied collections are<br />
applicable to bank-named collections with a few important additions. When banks are<br />
not named in the <strong>Collector</strong> symbolic, any element to be included is split, with its odd<br />
location counters going to the I bank (instruction area) and its even counters to the D<br />
bank (data area). However, in a bank-named collection, in addition to naming an element<br />
for inclusion, you can also designate which location counters of the element are to be<br />
included within a bank. Normally, the selected location counters of an element are<br />
determined by the location counter set that is active at the time the element is named<br />
for inclusion (see 4.2.3). The selection can be overridden on an individual basis by using<br />
the $lcs field for the element named on the IN directive (see 3.1.1). Thus, the element<br />
name can appear on several IN directives, but different location counters must be<br />
included each time the element is named for global inclusion.<br />
All location counters of an element are included in a collection. Therefore, if an element<br />
has a location counter that was not specified for inclusion, that location counter is placed<br />
in the control bank.<br />
Example<br />
IBANK I1<br />
BANKINFO INITIAL(BDR0),DYNAMIC<br />
$1,5<br />
IN ELTA<br />
IBANK I2<br />
BANKINFO INITIAL(BDR1),DYNAMIC<br />
$7,9,3<br />
IN ELTB($ODD),ELTA<br />
$ALL<br />
IN ELTC,ELTD<br />
DBANK D1<br />
BANKINFO INITIAL(BDR2),CONTROL<br />
IN ELTA,ELTB<br />
7830 9887–001 4–15
Banking<br />
The following chart shows which location counters of each element are placed in the<br />
various banks:<br />
ELTA<br />
ELTB<br />
ELTC<br />
ELTD<br />
I1 I2 D1<br />
1,5 7,9,3<br />
4–16 7830 9887–001<br />
ODD<br />
ALL<br />
ALL<br />
EVEN,11<br />
EVEN<br />
Note that the even location counters of ELTA and ELTB are placed in D1 since $ODD is<br />
assumed for I banks and $EVEN is assumed for D banks. Also note that all of the odd<br />
location counters for ELTB go to I2, overriding the active location counter set of $7,9,3.<br />
Location counter 11 in ELTA was placed in the control bank because no direction was<br />
given for its placement.<br />
4.4.4.1. Global Elements<br />
An element is global in nature when its entry points are known to any nonlocal elements<br />
in the collection, and when its external references can be satisfied by any nonlocal<br />
element. Because of the global nature of elements, they can be included only once in a<br />
collection. All of the elements in the example in 4.4.4 are global in nature.<br />
4.4.4.2. Local Elements<br />
By specification, an element (or one or more of its location counters) can be made local<br />
to a set of banks and thereby be included in the collection more than once. The locality<br />
of these elements is determined by the specification of a local bank set list on the IN<br />
directive.<br />
Note: An entry-point name can be defined in only one place whether defined by a<br />
<strong>Collector</strong> directive or by a relocatable element.<br />
The locality of an element implies the following:<br />
1. All of the external references in the local element are satisfied only by elements<br />
defined in the set of banks that make up the local bank set list.<br />
2. The external labels (entry points) of the local element satisfy only references by<br />
elements defined in the set of banks that make up the local bank set list.<br />
The local bank set list consists of the banks named in the bank-list on the IN directive<br />
and the bank named on the preceding IBANK or DBANK directive.<br />
The entry points of a local element satisfy only references made by other elements<br />
within the banks to which it is local. No other banks have access to these entry points.<br />
Within a given bank, elements and location counters can be included only once.
Banking<br />
This feature allows duplication of heavily used routines in different banks without<br />
causing entry-point conflicts and without forcing unnecessary repetitive switching of<br />
bank bases to base very short pieces of heavily used code.<br />
Entry points can thus appear many times locally (satisfying references from within the<br />
local bank set), but can appear only once globally (satisfying references from all elements<br />
not named locally). Entry points named on the COR, SNAP, EQU, ENT, and DEF<br />
<strong>Collector</strong> directives apply to the global specification of that entry point.<br />
Any element desired for local inclusion must be named on the IN directive along with the<br />
local bank set list. No implicitly included element can be included locally.<br />
Elements included more than once using local element inclusion must be identical for<br />
each inclusion of the element. To include different elements with identical names or<br />
entry points, use relocatable elements produced by the <strong>Collector</strong> (see 2.2.1).<br />
Example<br />
IBANK I1<br />
IN(I2) ELTA<br />
IN() ELTB<br />
IBANK I2<br />
IN ELTB($1)<br />
IN(I1) ELTB($3)<br />
IBANK I3<br />
IN( ) ELTA,ELTB($3)<br />
DBANK D1<br />
BANKINFO CONTROL<br />
IN ELTA($1),ELTB,ELTC<br />
Figure 4-1 shows how external references from globally included elements for the<br />
various banks in the example are satisfied. For example, an element in bank I3<br />
referencing an entry point defined under location counter 1 of element ELTB would<br />
receive the definition of that entry point in bank I2 since location counter 1 of ELTB is not<br />
included in bank I3, but is included globally in bank I2. Location counters that are not<br />
shown for a bank are undefined for the element in that bank.<br />
Figure 4–1. Bank of Global <strong>Reference</strong>s<br />
7830 9887–001 4–17
Banking<br />
<strong>Reference</strong>s made by locally included elements follow the same rules, except that the<br />
defining bank must be in the locally included element’s bank list. For example, if an<br />
element in bank I1 references an entry point in element ELTC, the referencing element<br />
must either be made local to banks I1 and D1, or it must be made global.<br />
4.4.4.3. Local-Global Conflicts<br />
A situation can arise where a conflict occurs between the local nature of an element, its<br />
entry points and external references, and their global nature.<br />
A local-global conflict occurs when a reference has been made to a location counter of<br />
an element and that location counter appears in more than one place. The reference can<br />
either be a reference to an entry point or a reference made by means of the relocation<br />
information in the text. If there is no reference to a location counter included both locally<br />
and globally, there is no local-global conflict.<br />
The local-global conflict presents a problem to the <strong>Collector</strong>, because it cannot determine<br />
which value to place in the reference. When a local-global conflict occurs, a message is<br />
printed.<br />
Examples:<br />
IBANK I1<br />
IN E1<br />
IBANK I2<br />
$ALL<br />
IN(I1) E2<br />
IBANK I3<br />
$ALL<br />
IN E2<br />
In this example, element E2 and its entry points are local to I banks I1 and I2. It is also<br />
global because of its explicit inclusion in I bank I3 (that is, the entry points of element E2<br />
are also defined in I bank I3). If element E1 references one of the entry points of E2, the<br />
<strong>Collector</strong> does not know if it should return the local definition or the global definition for<br />
the reference.<br />
IBANK I1<br />
IN E1<br />
IBANK I2<br />
IN(I1) E2<br />
IBANK I3<br />
IN(I1) E2<br />
This example shows another conflict that the <strong>Collector</strong> cannot resolve. E2 is defined<br />
locally twice (to I banks I1 and I2 and to I banks I1 and I3). Therefore, if E1 references an<br />
entry point in E2, the <strong>Collector</strong> cannot determine which definition it should use.<br />
4.4.5. Element Placement<br />
An element is included in a collection because it is either<br />
4–18 7830 9887–001
1. Explicitly included (named on an IN directive)<br />
Banking<br />
2. Implicitly included (through the library search sequence it has been found to satisfy<br />
external references in elements already included in the collection)<br />
Explicitly included elements are placed in the bank that is named on the preceding<br />
IBANK or DBANK directive.<br />
Although elements can be split by location counters between banks, the entire element,<br />
that is, all its location counters, are included somewhere in the absolute element. If all of<br />
the location counters of an explicitly included element are not specified on IN directives<br />
or on $lcs directives, remaining location counters are placed in the control bank (see<br />
4.4.3).<br />
The placement of implicitly included elements is dependent upon the placement of the<br />
referencing elements. For bank-implied collections, the implicitly included elements are<br />
split with odd location counters to the I bank and even location counters to the D bank.<br />
For bank-named collections, the following conditions apply:<br />
1. One bank<br />
The location counters of the referencing elements can be anywhere, and implicitly<br />
included elements are entirely included in the bank.<br />
2. Two banks based only on BDR0 and BDR2, and the banks are not dynamic<br />
The location counters of the referencing elements can be anywhere, and implicitly<br />
included elements are split, with odd location counters to the I bank and even<br />
location counters to the D bank.<br />
3. Conditions of 2 not met<br />
The location counters of the referencing elements are all in one bank, and implicitly<br />
included elements are split, with odd location counters to the referencing bank and<br />
even location counters to the control bank.<br />
4. Conditions of 2 not met<br />
The location counters of the referencing elements are in more than one bank, and<br />
implicitly included elements are placed entirely in the control bank.<br />
The only way to override the <strong>Collector</strong>’s placement of implicitly included elements is to<br />
use formats 2 or 4 of the LIB directive (see 3.2.1).<br />
Condition 3 does not apply to references from implicitly included elements. Consider the<br />
following situation:<br />
7830 9887–001 4–19
Banking<br />
Element CALL is contained entirely in one bank and the requirements of condition 2 are<br />
not met. Because of this, the location counters of DEF1 are split, with the odd ones<br />
placed in the referencing bank and the even ones placed in the control bank.<br />
When the references of element DEF1 are processed and DEF2 is included in the<br />
collection, condition 4 applies because DEF1 (the referencing element) is not contained<br />
entirely in one bank. All of the location counters of DEF2 are placed in the control bank.<br />
4.5. Bank Switching for Basic Mode<br />
Your program can switch control between banks as needed. When the bank is already<br />
based, a jump to an entry point suffices. When the bank is not based, the bank must be<br />
based by means of the LBJ, LIJ, or LDJ instructions.<br />
For an expanded discussion on bank switching techniques, see the Exec System<br />
Software Common Banks <strong>Programming</strong> Guide.<br />
4.5.1. IBJ$/DBJ$<br />
IBJ$ and DBJ$ are <strong>Collector</strong>-defined symbols that are used in the bank switching<br />
operation. When the <strong>Collector</strong> encounters IBJ$ (DBJ$), it determines if an LMJ<br />
instruction or LIJ (LDJ) instruction should be generated. In general, an LMJ instruction is<br />
generated if the entry point to which the jump will be made is contained in the same<br />
bank in which the call occurs. An LIJ (LDJ) instruction is generated if the entry point is in<br />
a different bank from the calling bank. Further details concerning the situations governing<br />
the generation of these instructions are discussed in 4.5.5.<br />
IBJ$ (DBJ$) is not an assembler instruction, but an external reference you pass to the<br />
<strong>Collector</strong> in the text of the relocatable element. Bits 0 through 9 of the text word must<br />
be relocated by the external reference “IBJ$” (“DBJ$”).<br />
An assembler procedure that generates the correct external reference should include the<br />
following (DBJ$ (LDJ) will no longer be mentioned, since anything that applies to IBJ$<br />
(LIJ) applies to it):<br />
IBJ* PROC 1,1<br />
F FORM 10,4,4,18<br />
F IBJ$,IBJ(1,1),IBJ(1,3),IBJ(1,2)<br />
END<br />
4–20 7830 9887–001
where:<br />
4.5.2. BBJ$<br />
IBJ(1,1) is the a field (must be an X register).<br />
IBJ(1,2) is the u field.<br />
IBJ(1,3) is the x field.<br />
Banking<br />
BBJ$ is a <strong>Collector</strong>-defined symbol that is used in the bank switching operation. It is<br />
identical to IBJ$ except that an LBJ instruction is generated instead of an LIJ instruction.<br />
When the <strong>Collector</strong> encounters BBJ$, it determines if an LBJ instruction or an LMJ<br />
instruction should be generated. An LMJ instruction is generated if the entry point to<br />
which the jump will be made is contained in the same bank in which the call occurs. An<br />
LBJ instruction is generated if the entry point is in a different bank from the calling bank.<br />
An assembler procedure to generate the correct external reference should include the<br />
following:<br />
BBJ* PROC 1,1<br />
F FORM 10,4,4,18<br />
F BBJ$,BBJ(1,1),BBJ(1,3),BBJ(1,2)<br />
END<br />
Where:<br />
BBJ(1,1) is the a field (must be an X register).<br />
BBJ(1,2) is the u field.<br />
BBJ(1,3) is the x field.<br />
Here is an example of a typical call:<br />
LXI,U X11,BDICALL$+MAPBDR$+label<br />
BBJ X11,label<br />
BDICALL$ and MAPBDR$ are <strong>Collector</strong>-defined tags (see 4.5.3 and 4.5.4).<br />
4.5.3. Use of MAPBDR$<br />
MAPBDR$ must be used with BDICALL$ or BDIREF$. The tag MAPBDR$ tells the<br />
<strong>Collector</strong> to return the BDR for the bank in which the associated label is defined. This<br />
facilitates specification of the BDR for LBJ instructions. If MAPBDR$ is used without<br />
BDICALL$ or BDIREF$, it is ignored.<br />
MAPBDR$ should be used in the following format:<br />
LXI,U X11,BDICALL$+MAPBDR$+label<br />
7830 9887–001 4–21
Banking<br />
or<br />
LXI,U X11,BDIREF$+MAPBDR$+label<br />
The BDR returned is the value specified on the IBANK or DBANK directive for the bank<br />
containing the label. For more information on BDR specification, refer to 4.2.1.<br />
4.5.4. Use of the BDI with IBJ$/DBJ$/BBJ$<br />
When using the LIJ instruction, your program must place the BDI of the destination bank<br />
in H1 of the X register used in the instruction. The BDI is a unique (collection-dependent)<br />
number given by the <strong>Collector</strong> to all of the banks in a collection. In the case of common<br />
banks, it is a unique number registered in the system element SYS$*RLIB$.CERU$ or in<br />
the CBEP$$ element of the program’s product file. The use of the BDI by the Exec is a<br />
method for identifying a bank for loading.<br />
It is not advisable to hard-code the BDI in H1 of the X register used in the IBJ$<br />
instruction because the BDI could change if the collection was rearranged or if CERU$<br />
changed. For these reasons, it is possible to pass the <strong>Collector</strong> a set of specifications<br />
that direct it to find the proper BDI. Three <strong>Collector</strong>-defined symbols are used for this<br />
purpose. The <strong>Collector</strong> resolves them as follows:<br />
• BDI$<br />
BDI for the bank in which the reference is made.<br />
• BDIREF$<br />
BDT level and BDI for the bank in which the associated label is defined. If the value<br />
of the associated label is an absolute 36-bit number, the lower 18 bits are used (H2).<br />
• BDICALL$<br />
Same as BDIREF$, unless the collection is bank-implied or the reference is in the<br />
control bank or in the same bank in which the label is defined. In these cases, the<br />
value is zero. If the value of the associated label is an absolute 36-bit number, the<br />
upper 18 bits are used (H1).<br />
In conjunction with IBJ$, these symbols are used as follows (X11 is used only for these<br />
examples; any X register can be used):<br />
LXI,U X11,BDICALL$+label<br />
IBJ X11,label<br />
In the preceding example, IBJ refers to a call of the procedure in 4.5.1.<br />
BDICALL$ must precede the label in the relocatable; that is, label+BDICALL$ will not<br />
work correctly. If the label is a complex expression, the last relocatable value in the<br />
expression is used to determine the value of BDICALL$+label (See 4.5.5 for a discussion<br />
of BDICALL$.)<br />
BDI$ is not normally used for bank switching operations. It is used when the BDI of the<br />
currently executing bank is required.<br />
4–22 7830 9887–001
Banking<br />
BDIREF$ must precede the label in the relocatable; that is, label+BDIREF$ will not work<br />
correctly. BDIREF$ is used when you are certain that the bank to which control is to be<br />
transferred will not be based when the reference is made, and hence is used with an<br />
explicit LIJ, LDJ, or LBJ instruction. Also see 4.7.<br />
The format returned for BDIREF$ and BDICALL$ is affected by the TYPE EXEC directive.<br />
For more information regarding TYPE EXEC collections, see Appendix A.<br />
4.5.5. TYPE IBJLNK and BDICALL$/IBJ$<br />
4.5.5.1. Using BDICALL$ and IBJ$<br />
BDICALL$ and IBJ$, together with the TYPE IBJLNK parameters, provide a means of<br />
coding subroutines and their calls so that the correct linkages and BDICALL$/IBJ$<br />
parameters can be generated at collection time rather than at compile time. When<br />
coding calls to subroutines, especially for library routines used in high-level languages,<br />
the programmer does not need to know whether the subroutine is to be collected in the<br />
same bank as the call, whether it is to be collected in a different bank in the program, or<br />
whether it resides in a common bank.<br />
BDICALL$ and IBJ$ are used in the following format, where the instructions must be in<br />
the order shown but other instructions can be placed between the LXI and IBJ<br />
instructions. I$BJ is a SYSLIB procedure that generates a word in instruction format with<br />
bits 0 through 9 (the f and j fields) relocated by the external reference IBJ$. X11 is used<br />
for convenience in the examples; however, any index register could be used.<br />
Format<br />
LXI,U X11,BDICALL$+label<br />
IBJ X11,label<br />
In the preceding example, IBJ refers to a call of the procedure in 4.5.1.<br />
4.5.5.2. System-Provided Procedures<br />
The system-defined procedure calls I$BJ and D$BJ generate the IBJ$ (DBJ$) calling<br />
sequences used in bank switching.<br />
Format<br />
I$BJ Xn,ep-name[,Xx]<br />
D$BJ Xn,ep-name[,Xx]<br />
where:<br />
Xn<br />
is an X register.<br />
ep-name<br />
7830 9887–001 4–23
Banking<br />
Xx<br />
is an entry point defined as either a simple address or as an absolute value in the<br />
form<br />
ep-name* $EQU bdi*/18+ep-value<br />
(bdi and ep-value must not be external references)<br />
is an optional X register used in LMJ/LIJ.<br />
The I$BJ and D$BJ procedures generate the following code:<br />
LXI,U Xn,BDICALL$+ep-name .<br />
IBJ$ Xn,ep-name[,Xx] . (or DBJ$ Xn,ep-name[,Xx])<br />
4.5.5.3. Using TYPE IBJLNK<br />
Using TYPE IBJLNK, linkages can be set up to a common routine, where the<br />
BDICALL$/IBJ$ parameters are specified at collection time. The element name on the<br />
IBJLNK directive can contain the absolute values of different tags.<br />
If you use the following MASM instruction and <strong>Collector</strong> directive, and label is defined in<br />
element-name, H1 of the 36-bit absolute value label is placed in H1 of the X register.<br />
MASM Instruction<br />
LXI,U X11,BDICALL$+label<br />
<strong>Collector</strong> Directive<br />
TYPE IBJLNK element-name,address<br />
The IBJ$ reference is then satisfied as LMJ X11,address, where address is the value<br />
found on the TYPE IBJLNK directive (see F.2.1).<br />
The main advantage of TYPE IBJLNK is that you can supply a jump-to address for the<br />
IBJ$ symbol to the <strong>Collector</strong> at collection time. Another advantage is that a dummy<br />
element can be included and used as the TYPE IBJLNK parameter. The values defined<br />
for the entry points in this dummy element override any absolute value definitions of the<br />
entry point found in library elements.<br />
4.5.5.4. Resolution of BDICALL$, IBJ$, and TYPE IBJLNK<br />
Table 4-3 shows how the BDICALL$ and IBJ$ (DBJ$) collector defined symbols are<br />
resolved for different cases.<br />
4–24 7830 9887–001
label Defined<br />
Case 1:<br />
In the same bank<br />
as the reference,<br />
or<br />
In the control<br />
bank, or<br />
In a bank with<br />
the L option<br />
Case 2:<br />
In a bank other<br />
than the bank<br />
where the<br />
reference was<br />
made<br />
Case 3:<br />
As a 36-bit<br />
absolute value:<br />
label* $EQU;<br />
bdi*/1 8+;<br />
ep-value<br />
Case 4:<br />
As a 36-bit<br />
absolute value:<br />
label*$EQU;<br />
bdi*/1 8+;<br />
ep-value<br />
Table 4–3. BDICALL$ and IBJ$ (DBJ$) Resolution<br />
Other<br />
Conditions<br />
OR Collection is<br />
bank-implied<br />
AND Collection is<br />
bank-named<br />
AND Element defining<br />
label is not<br />
specified on<br />
TYPE IBJLNK<br />
AND Element defining<br />
label is specified<br />
on TYPE IBJLNK<br />
4.5.6. BDICALL$/IBJ$ Return<br />
BDICALL$+<br />
label<br />
Satisfied<br />
as:<br />
IBJ$<br />
(DBJ$<br />
)<br />
Satisfi<br />
ed as:<br />
Banking<br />
Calling Sequence<br />
Generated by<br />
<strong>Collector</strong><br />
0 LMJ LXI,U X11,0<br />
BDI of the<br />
bank<br />
defining<br />
label<br />
Value from<br />
H1 of label<br />
Value from<br />
H1 of label<br />
taken from<br />
element<br />
specified on<br />
TYPE<br />
IBJLNK<br />
LIJ<br />
(LDJ)<br />
LIJ<br />
(LDJ)<br />
LMJ X11,label<br />
LXI,U X11,bdi<br />
LIJ X11,label<br />
LXI,U X11,H1 of label<br />
LIJ X11,H2 of label<br />
LMJ LXI,U X11,H1 of label<br />
LMJ X11,address<br />
(from TYPE IBJLNK)<br />
When BDICALL$ and IBJ$ are satisfied in one of the first three ways described in Table<br />
4-3, that is, without the use of a TYPE IBJLNK specification, the called subroutinecan<br />
appropriately determine the type of call and type of return. The type of return is<br />
determined by examining the value passed in the increment portion (H1) of X11, as<br />
follows:<br />
TAG .<br />
S X11,RETURN . Save return address<br />
.<br />
. . Process subroutine<br />
.<br />
7830 9887–001 4–25
Banking<br />
L X11,RETURN . Restore return address<br />
TZ,H1 RETURN . Call by LIJ or LMJ?<br />
LIJ X11,0,X11 . LIJ, return with LIJ<br />
J 0,X11 . LMJ, return with JUMP<br />
4.6. Bank Switching for Extended Mode<br />
Your program can switch control between banks as needed. Register B0 always points<br />
to the current bank (instruction stream). To pass control to a location within the current<br />
bank, use the LOCL instruction. To pass control to a location in a bank other than the<br />
current bank, use the CALL or GOTO instructions.<br />
Registers B2 through B11 are available for user data banks. Registers B12 through B15<br />
can point to either code or data in basic mode but only to data in extended mode. The<br />
LBU instruction is used to load a user B register.<br />
4.6.1. Use of the BDI<br />
When you use the CALL instruction, the operand is the address of a virtual address. H1<br />
of the virtual address contains the LBDI of the target bank and H2 contains the offset<br />
into the bank. Three <strong>Collector</strong>-defined symbols are used for this purpose. The <strong>Collector</strong><br />
resolves them as follows:<br />
• LBDI$<br />
BDT level and BDI for the bank in which the reference is made.<br />
• LBDIREF$<br />
BDT level and BDI for the bank in which the associated label is defined. If the value<br />
of the associated label is an absolute 36-bit number, then the lower 18 bits are used<br />
(H2).<br />
• LBDICALL$<br />
Same as LBDIREF$, unless the collection is bank-implied or the reference is in the<br />
same bank in which the label is defined. In these cases, the value is zero. If the value<br />
of the associated label is an absolute 36-bit number, the upper 18 bits are used (H1).<br />
The BDT level is always formatted in the returned value in the extended mode virtual<br />
address (see 4.2.1 and 6.6).<br />
LBDIREF$ and LBDICALL$ must precede the label in the relocatable; that is,<br />
label+LBDIREF$ or label+LBDICALL$ will not work correctly.<br />
The format returned for LBDI$, LBDIREF$, and LBDICALL$ is affected by the TYPE<br />
EXEC directive (see Appendix A).<br />
If the reference and the label are in different banks, use the CALL instruction with<br />
LBDICALL$. If the reference and the label are in the same bank, use LOCL.<br />
4–26 7830 9887–001
4.6.2. Example Using LOCL and CALL<br />
Banking<br />
Following is an example of the LOCL and CALL instructions. When the program is<br />
executed, it begins in element RB$.BM6. An LBJ instruction is used to jump to the label<br />
EMSTART in element RB$.EM4. Register B2 is used to point to the literal pool.<br />
An LOCL instruction is then used, since the label EM4TAG is within the same bank.<br />
Register A4 is loaded to show that the control was transferred to the label EM4TAG. The<br />
RTN instruction returns to the line after the LOCL instruction. Register A5 is loaded to<br />
show that the control was returned.<br />
A CALL instruction is then executed using LBDICALL$ since the label EM5TAG is in a<br />
different bank. Control is transferred to the element RB$.EM5 at the label EM5TAG.<br />
Register A6 is loaded to show that the CALL worked correctly. The RTN instructions are<br />
followed back and the L$SNAP is performed. After the program execution, A4 contains<br />
4, A5 contains 5, and A6 contains 6.<br />
@ . Assemble extended mode relocatable EM4<br />
@MASM,L ,RB$.EM4<br />
$INCLUDE ’MAXR$’ . Register mnemonics<br />
$EXTEND . Generate extended mode<br />
. instructions<br />
$(3) $LIT B2 .<br />
LITPOOL .<br />
$(1) .<br />
EMSTART* . Entry point<br />
LA,U A2,LITPOOL . Load address of literal<br />
. pool in A2<br />
LXI,U A2,LBDIREF$+LITPOOL . Load bdi of this bank<br />
LBU B2,A2 . Base literal pool on<br />
. register b2<br />
LOCL EM4TAG . Local call<br />
LA,U A5,5 .<br />
CALL (LBDICALL$+EM5TAG,EM5TAG) . Call another bank<br />
RTN . Return to caller<br />
EM4TAG . A local entry point<br />
LA,U A4,4 .<br />
RTN . Return to caller<br />
END .<br />
@EOF<br />
@ . Assemble extended mode relocatable EM5.<br />
@MASM,L ,RB$.EM5<br />
$INCLUDE ’MAXR$’ . Register mnemonics<br />
$EXTEND . Generate extended mode<br />
. instructions<br />
$(1) .<br />
EM5TAG* . Tag<br />
LA,U A6,6 .<br />
RTN .<br />
END .<br />
@EOF<br />
7830 9887–001 4–27
Banking<br />
@ . Assemble basic mode relocatable BM6.<br />
@MASM,L ,RB$.BM6<br />
$INCLUDE ’MAXR$’ . Register mnemonics<br />
$BASIC .<br />
$(3) $LIT .<br />
START* . Begin execution in<br />
. basic mode<br />
LX,U X11,EMSTART . Starting address in<br />
. em routine<br />
LXI,U X11,BDICALL$+EMSTART . BDI of em routine<br />
LBJ X11,0,X11 . Jump to em routine<br />
L$SNAP ’A4-A6’,2,0,0 .<br />
ER EXIT$ .<br />
END START .<br />
@EOF<br />
@PREP RB$.<br />
@MAP,S ,RB$.ABS<br />
NOT TPF$. .<br />
TYPE BLOCKSIZE64 . Required for extended<br />
. mode programs<br />
LIB RB$. .<br />
IBANK EM4BANK . Extended mode bank<br />
BANKINFO EXTENDED<br />
IN EM4 .<br />
IBANK EM5BANK . Extended mode control Bank<br />
BANKINFO EXTENDED<br />
IN EM5 .<br />
IBANK BM6BANK . Basic mode bank<br />
BANKINFO INITIAL(MAINI)<br />
IN BM6 .<br />
@EOF<br />
@XQT RB$.ABS<br />
4.7. BDI and Entry-Point Definitions<br />
Internally, the <strong>Collector</strong> recognizes two types of definitions for BDIs and entry points as<br />
follows:<br />
• Absolute values<br />
BDIs or entry points that have been equated to a value.<br />
• Values defined by <strong>Collector</strong><br />
For BDIs, these are the BDIs assigned by the <strong>Collector</strong> to the banks in the collection.<br />
For entry points, these are also known as relative values or values that are relative to<br />
a location counter.<br />
BDIs of all alternate file common banks are defined in CERU$ or in individual CBEP$$<br />
elements. In addition, entry-point absolute values for use with IBJ$ are defined in<br />
4–28 7830 9887–001
Banking<br />
relocatable elements in compiler libraries that have CBEP$$ as the first 6 characters of<br />
their name. This naming convention allows the use of common banks to be detected so<br />
their BDIs can be placed in a list in the absolute element. When the absolute element is<br />
loaded, the Exec can ensure that any common banks referenced are available. You can<br />
also define banks and entry points using absolute values; however, you should follow the<br />
above naming conventions.<br />
Absolute values must be defined as follows:<br />
bank-name* $EQU bdi<br />
ep-name* $EQU bdi*/18+ep-value<br />
The fields bdi and ep-value can be either a nonrelocatable number or an external<br />
reference (for example, a bank name). However, in each bdi*/18+ep-value, at least one<br />
of the fields must be a nonrelocatable number.<br />
The <strong>Collector</strong> expects the BDI to be in H2 of the absolute value when processing<br />
BDIREF$ and LBDIREF$ and to be in H1 when processing BDICALL$ and LBDICALL$<br />
for an entry point.<br />
Because of this difference, you must use the following command to obtain the BDI for a<br />
bank defined as an absolute value:<br />
LXI,U X11,BDIREF$+bank-name<br />
You must use the following command to obtain the BDI for a bank containing an entry<br />
point defined as an absolute value:<br />
LXI,U X11,BDICALL$+ep-name<br />
When defining the BDIs of common banks in a CBEP$$ element, the appropriate format<br />
must be used (see 6.6). Level 1 is used for alternate file common banks (AFCB). The<br />
formats are:<br />
• For basic mode:<br />
bank-name* $EQU 0400103 . AFCB BDI<br />
entrypt* $EQU 0400103001000 . entry point<br />
• For extended mode:<br />
embank-name* $EQU 0200103 . AFCB BDI<br />
ementrypt* $EQU 0200103001000 .entry point<br />
• For either mode:<br />
MAPBDT$+bankname<br />
BDT level and BDI for the bank named. The BDT level is determined by the <strong>Collector</strong><br />
using the appropriate format. If the referencing bank is an extended mode bank, the<br />
extended mode format (L) is used. If the referencing bank is a basic mode bank, the<br />
basic mode format (E,LS) is used. (See 6.6.) MAPBDT$+bankname is useful for<br />
basing program data banks to be used by a program.<br />
7830 9887–001 4–29
Banking<br />
4.8. Use of BANKINFO AFCB<br />
The BANKINFO directive simplifies the creation of integrated AFCB absolutes. Before<br />
the BANKINFO AFCB(bankname,bdi) attribute was available, you had to package<br />
programs running with or as AFCBs so that the AFCB banks were handled separately<br />
from local banks (such as D-banks). This meant that the AFCB banks were collected<br />
separately from the local banks, and the BDI relationships were defined by entry points<br />
in a CBEP$$ element.<br />
The BANKINFO directive allows you to specify the configured BDI to be used to<br />
reference an AFCB bank within a collection. A reference to an AFCB bank name then<br />
produces the correct BDI for referencing the bank, in the same manner as for local<br />
banks.<br />
User programs that reference an AFCB and do not create it still need a CBEP$$ element<br />
to define the BDIs. This is because AFCBs are not collected as banks within the user<br />
program’s absolute. The AFCB can be considered an external reference from the user<br />
program, not part of it, so the BDIs are needed only by the user programs.<br />
The <strong>Collector</strong> obtains the common bank BDI value for references to entry points in a<br />
common bank for the following <strong>Collector</strong>-defined symbols: BDI$, BDIREF$, BDICALL$,<br />
LBDI$, LBDICALL$, LBDIREF$, and MAPBDT$. The <strong>Collector</strong> assumes Level 1 for a<br />
bank created with a BANKINFO AFCB(bankname,bdi) directive. All common banks are<br />
maintained at Level 1 (see 6.6). For more information on common banks, refer to the <strong>OS</strong><br />
1100 Exec System Software Common Banks <strong>Programming</strong> Guide.<br />
If a bank list is necessary, the name specified on the BANKINFO directive should be<br />
used, not the name on the BANK directive.<br />
Example 1<br />
ep* Res 1<br />
.<br />
.<br />
.<br />
MYFILE.CALL<br />
LXI,U X11,BDICALL$+EP<br />
.<br />
.<br />
.<br />
LXI,U X11,BDIREF$+EP<br />
.<br />
.<br />
.<br />
LXI,U X11,LBDICALL$+EP<br />
.<br />
.<br />
.<br />
LXI,U X11,LBDIREF$+EP<br />
4–30 7830 9887–001
MYFILE.BDI<br />
.<br />
.<br />
.<br />
MYFILE.MAPBDT<br />
MYFILE.MAP<br />
LXI,U X11,BDI$<br />
.<br />
.<br />
.<br />
LXI,U X11,LBDI$<br />
.<br />
.<br />
.<br />
LXI,U X11,MAPBDT$+CBNAME3<br />
.<br />
.<br />
.<br />
IBANK I1<br />
BANKINFO AFCB(CBNAME,0400444)<br />
IN MYFILE.EP<br />
IBANK I2<br />
BANKINFO INITIAL(MAINI)<br />
IN MYFILE.CALL<br />
DBANK D1<br />
BANKINFO CONTROL,INITIAL(MAIND)<br />
END<br />
Resolutions of the BDI value:<br />
BDICALL$ = 0400444<br />
BDIREF$ = 0400444<br />
LBDICALL$ = 0200444<br />
LBDIREF$ = 0200444<br />
Banking<br />
CBNAME is the name of the common bank. Use this name to install the common bank<br />
with COMUS. I1 becomes an entry point with an absolute value of 0400444.<br />
Example 2<br />
IBANK I1<br />
BANKINFO AFCB(CBNAME2,0400555)<br />
IN MYFILE.BDI<br />
DBANK D2<br />
BANKINFO CONTROL,INITIAL(MAIND)<br />
END<br />
7830 9887–001 4–31
Banking<br />
Resolutions of the BDI value:<br />
BDI$ = 0400555<br />
LBDI$ = 0200555<br />
Example 3<br />
IBANK I1<br />
BANKINFO AFCB(CBNAME3,0400666)<br />
IBANK I2<br />
IN MYFILE.MAPBDT<br />
DBANK D1<br />
BANKINFO CONTROL,INITIAL(MAIND)<br />
END<br />
Resolution of the BDI value:<br />
MAPBDT$ = 0400666<br />
The basic mode format is used since I2, the referencing bank, is a basic mode bank.<br />
Example 4<br />
IBANK I1<br />
BANKINFO AFCB(CBNAME3,0400333)<br />
IBANK I2<br />
BANKINFO EXTENDED<br />
IN MYFILE.MAPBDT<br />
DBANK D1<br />
BANKINFO CONTROL,INITIAL(MAIND)<br />
END<br />
Resolution of the BDI value:<br />
MAPBDT$ = 0200333<br />
The extended mode format is used since I2, the referencing bank, is an extended mode<br />
bank.<br />
The following is an example that shows the distinctions between the CBEP$$<br />
mechanism and the BANKINFO mechanism.<br />
Elements<br />
CBEP$$ element<br />
CB1* EQU 0400444<br />
CB2* EQU 0400555<br />
EP0* EQU 0400444001000<br />
EP1* EQU 0400444001001<br />
EP2* EQU 0400555001000<br />
EP3* EQU 0400555001001<br />
4–32 7830 9887–001
MYFILE.CALL<br />
LXI,U X11,BDICALL$+EP0<br />
.<br />
.<br />
.<br />
LXI,U X11,BDICALL$+EP3<br />
.<br />
.<br />
.<br />
MYFILE.JUMPVECTOR<br />
JV1* J ABC<br />
JV2* J DEF<br />
.<br />
.<br />
.<br />
MYFILE.JUMPVECTOR2<br />
JV3* J GHI<br />
JV4* J JKL<br />
.<br />
.<br />
.<br />
Here is a collection to create common banks (before BANKINFO):<br />
TYPE COMMONBANK<br />
IBANK,DR I1,01000<br />
FRSTIN MYFILE.JUMPVECTOR<br />
IN -----<br />
IBANK,DR I2,03000<br />
FRSTIN MYFILE.JUMPVECTOR2<br />
IN -----<br />
IBANK,DV I3<br />
IN MYFILE.CALL<br />
DBANK,DCV D1<br />
IN CBEP$$xxx<br />
IN -----<br />
END<br />
Here is a collection to execute common banks (before BANKINFO):<br />
IBANK,XM CB1<br />
IBANK,XU CB2<br />
IBANK,DV I1,01000<br />
FRSTIN MYFILE.JUMPVECTOR<br />
IN -----<br />
IBANK,DV I2,03000<br />
FRSTIN MYFILE.JUMPVECTOR2<br />
IN -----<br />
Banking<br />
7830 9887–001 4–33
Banking<br />
IBANK,D I3<br />
IN MYFILE.CALL<br />
DBANK,DCM D1<br />
IN CBEP$$xxx<br />
IN -----<br />
END<br />
Description of CBEP$$ mechanism<br />
The COMUS INSTALL command associates the bank name with these BDI values:<br />
I1 – 0400444<br />
I2 - 0400555<br />
The names used to reference the bank, however, are given by the CBEP$$ definitions of<br />
CB1 and CB2.<br />
Here are the resolutions of the element CALL by the CBEP$$ element:<br />
LXI,U X11,BDICALL$+EP0 => 0400444001000<br />
LXI,U X11,BDICALL$+EP3 => 0400555001001<br />
Following is the collection to create and execute the common bank using BANKINFO:<br />
TYPE COMMONBANK<br />
IBANK I1,01000<br />
BANKINFO DYNAMIC,READONLY,AFCB(CB1,0400444),INITIAL(MAINI)<br />
FRSTIN MYFILE.JUMPVECTOR<br />
IN -----<br />
IBANK I2,01000<br />
BANKINFO DYNAMIC,READONLY,AFCB(CB2,0400555) ,INITIAL(UTILI)<br />
FRSTIN MYFILE.JUMPVECTOR2<br />
IN -----<br />
IBANK I3<br />
BANKINFO DYNAMIC<br />
IN MYFILE.CALL<br />
DBANK D1<br />
BANKINFO DYNAMIC,CONTROL,INITIAL(MAIND)<br />
IN -----<br />
END<br />
Description of BANKINFO mechanism:<br />
The COMUS INSTALL command associates the bank name with these BDI values:<br />
CB1 – 0400444<br />
CB2 - 0400555<br />
These AFCBs can now be referenced by the bank name (CB1 and CB2), so that the<br />
CBEP$$ definition is unnecessary.<br />
Here are the resolutions of the element CALL by the <strong>Collector</strong>:<br />
4–34 7830 9887–001
LXI,U X11,BDICALL$+EP0 => 0400444+001000<br />
LXI,U X11,BDICALL$+EP3 => 0400555+001001<br />
Banking<br />
No CBEP$$ element is necessary. The INITIAL attribute causes the common bank rather<br />
than the local bank, to be initially based at initial load time.<br />
4.9. MAPCALL$, MAPGOTO$, and the VECTOR<br />
Attribute<br />
The <strong>Collector</strong> provides an assembler procedure, MAP$CALLGOTO, which generates the<br />
<strong>Collector</strong>-defined tags MAPCALL$ and MAPGOTO$. The user-visible interface is as<br />
follows:<br />
MAPGOTO$ e<br />
MAPCALL$ e<br />
where e is an external entry point or tag relocated by a location counter + offset.<br />
4.9.1. MAPCALL$<br />
Basic Mode Output<br />
The MAPCALL$ procedure entry generates the respective output words for basic mode:<br />
MI$ FORM 10,4,4,2,16<br />
LXI,U X11,BDIVECT$<br />
MI$ MAPCALL$,0,0,0,e<br />
where:<br />
MAPCALL$<br />
is an XREF that can be specifically recognized by the <strong>Collector</strong>. The function is similar<br />
to IBJ$/DBJ$/BBJ$.<br />
BDIVECT$<br />
is a <strong>Collector</strong>-defined tag that is resolved by the <strong>Collector</strong> to the BDI value of the link<br />
vector bank.<br />
Extended Mode Output<br />
The MAPCALL$ procedure entry generates the respective output word for extended<br />
mode:<br />
MI$ FORM 10,4,4,2,16<br />
MI$ MAPCALL$,0,0,0,e<br />
where MAPCALL$ is an XREF that can be specifically recognized by the <strong>Collector</strong>. The<br />
function is similar to IBJ$/DBJ$/BBJ$.<br />
7830 9887–001 4–35
Banking<br />
4.9.2. MAPGOTO$<br />
Basic Mode Output<br />
The MAPGOTO$ procedure entry generates the respective output words for basic<br />
mode:<br />
MI$ FORM 10,4,4,2,16<br />
LXI,U X11,010000+BDIVECT$ . 010000 sets the<br />
MI$ MAPGOTO$,0,0,0,e . IS field to 1<br />
where:<br />
MAPGOTO$<br />
is an XREF that can be specifically recognized by the <strong>Collector</strong>. The function is similar<br />
to IBJ$/DBJ$/BBJ$.<br />
BDIVECT$<br />
is a <strong>Collector</strong>-defined tag that is resolved by the <strong>Collector</strong> to the BDI value of the link<br />
vector bank.<br />
Extended Mode Output<br />
The MAPGOTO$ procedure entry generates the respective output word for extended<br />
mode:<br />
MI$ FORM 10,4,4,2,16<br />
MI$ MAPGOTO$,0,0,0,e<br />
where MAPGOTO$ is an XREF that can be specifically recognized by the <strong>Collector</strong>. The<br />
function is similar to IBJ$/DBJ$/BBJ$.<br />
4.9.3. MAP$CALLGOTO<br />
The procedure provided by the <strong>Collector</strong>, MAP$CALLGOTO, performs some assemblytime<br />
error detection on parameter e. Errors (E flags) are generated at assembly time if<br />
the parameter e has<br />
• No relocation attached<br />
• A form attached<br />
• Multiple relocation attached<br />
Each user entry point or tag with relocation by location counter + offset that occurs in<br />
the same word as MAPCALL$ or MAPGOTO$ receives special handling.<br />
MAPCALL$<br />
If the target location is in a different bank than the MAPCALL$ word and the<br />
referencing bank is an extended mode bank, an operation code, op code (f-j-a), for<br />
4–36 7830 9887–001
Banking<br />
the CALL instruction is provided. The target location receives link vector processing.<br />
The offset into the link vector for the entry point and the B (and X) register from the<br />
BANKINFO directive are used to complete the instruction.<br />
See 4.10 for more information about link vector processing.<br />
If the target location is in a different bank than the MAPCALL$ word and the<br />
referencing bank is a basic mode bank, an op code for the LBJ instruction is<br />
provided. The target location receives link vector processing. The <strong>Collector</strong> fills in the<br />
u field with the offset into the GOTO list in the link vector bank. The GOTO list is<br />
described in later paragraphs.<br />
If the target location is in the same bank as the MAPCALL$ word and the<br />
referencing bank is an extended mode bank, an op code for the LOCL instruction is<br />
provided. The target location does not receive link vector processing. The actual<br />
address of the target location is used to complete the instruction.<br />
If the target location is in the same bank as the MAPCALL$ word and the<br />
referencing bank is a basic mode bank, then processing depends on whether the<br />
collection is TYPE EXEC. If the collection is not TYPE EXEC, an op code for the LMJ<br />
instruction is provided. The target location does not receive link vector processing.<br />
The actual address of the target location is used to complete the instruction. For<br />
TYPE EXEC collections, an op code for the LBJ instruction is provided. The target<br />
location receives link vector processing. The <strong>Collector</strong> fills in the u field with the<br />
offset into the GOTO list in the link vector bank.<br />
MAPGOTO$<br />
If the target location is in a different bank than the MAPGOTO$ word and the<br />
referencing bank is an extended mode bank, an op code for the GOTO list is<br />
provided. The target location receives link vector processing. The offset into the link<br />
vector for the entry point and the B (and X) register from the BANKINFO directive are<br />
used to complete the instruction.<br />
If the target location is in a different bank than the MAPGOTO$ word and the<br />
referencing bank is a basic mode bank, an op code for the LBJ instruction is<br />
provided. The target location receives link vector processing. The <strong>Collector</strong> fills in the<br />
u field with the offset into the GOTO list in the link vector bank.<br />
If the target location is in the same bank as the MAPGOTO$ word and the<br />
referencing bank is an extended mode bank or a basic mode bank, an op code for J<br />
is provided, but the target location does not receive link vector processing. The 16-bit<br />
basic mode address of the target location is used to complete the instruction.<br />
Table 4-4 summarizes reference resolutions with MAPCALL$ and MAPGOTO$.<br />
7830 9887–001 4–37
Banking<br />
Table 4–4. MAPCALL$ and MAPGOTO$ Resolutions<br />
Resolution<br />
MAPCALL$<br />
Different bank<br />
MAPCALL$<br />
Same bank<br />
MAPGOTO$<br />
Different bank<br />
MAPGOTO$<br />
Same bank<br />
CALL<br />
Referencing bank is<br />
extended mode<br />
lv processing offset into lv B<br />
and X register<br />
LOCL<br />
address of e<br />
GOTO<br />
lv processing offset into lv B<br />
and X register<br />
J (extended mode)<br />
address of e<br />
4.10. Link Vector Processing<br />
Referencing bank is<br />
basic mode<br />
4–38 7830 9887–001<br />
LBJ<br />
lv processing offset into<br />
goto list<br />
LMJ<br />
address of e<br />
LBJ - TYPE EXEC<br />
lv processing offset into<br />
goto list<br />
LBJ<br />
lv processing offset into<br />
goto list<br />
J (basic mode) address of<br />
e<br />
If link vector processing is needed, the <strong>Collector</strong> assigns a link vector offset and a B (and<br />
X) register to the entry point. These values are then used to complete the instruction<br />
being built and the link vector.<br />
The link vector contains the L,BDI, OFFSET virtual address of the target location. If there<br />
are any basic mode banks, the link vector is doubled in size. The second half is the<br />
GOTO list, and contains GOTO instructions, which point to the respective entries in the<br />
first half of the link vector by using the B (and X) register specified on the BANKINFO<br />
directive.<br />
The first B (and X) register specified on the BANKINFO directive is used for the first 4096<br />
link vector entries created, the second B (and X) register is used for the next 4096, and<br />
so forth. If the number of B registers needed is greater than the number of B registers<br />
supplied, an error occurs. The same B register specification is used for the second half of<br />
the link vector used for basic mode, which also starts on a 4096-word boundary.<br />
Only one BANKINFO directive specifying a link vector bank per collection is allowed. If<br />
more than one is specified, an error message is printed.<br />
The link vector is always allocated on 4K boundaries. Each 4K boundary associates with a<br />
B register specified on a BANKINFO directive with the VECTOR attribute specified.<br />
The upper limit of the link vector bank must be less than 65K if addressed by a basic<br />
mode bank.
Banking<br />
The link vector bank must be a noninitially based extended mode dynamic bank. The<br />
<strong>Collector</strong> internally sets the bank as extended mode and dynamic. The user can specify<br />
that the bank is dynamic, extended, read-only, or overridden minimum address by<br />
specifying the D, N, R, or O options respectively on the BANK directive or by specifying<br />
the DYNAMIC, EXTENDED, READONLY or OVERRIDEMIN attributes on the BANKINFO<br />
directive.<br />
7830 9887–001 4–39
Banking<br />
4–40 7830 9887–001
Section 5<br />
Program Parameter Specification<br />
5.1. TYPE Directive<br />
Purpose<br />
The TYPE directive is used to specify conditions in the created absolute element.<br />
Format<br />
TYPE parameter-1,parameter-2,...,parameter-n<br />
The parameters are described in Table 5-1. Please note that the parameters can appear<br />
in any order on the TYPE directive table 5-1.<br />
Table 5–1. Parameters Specified with the TYPE Directive<br />
Parameters Description Use of Parameters by TYPE Directive<br />
SETAFCM Set arithmetic fault<br />
compatibility mode for the<br />
absolute or relocatable<br />
element (set PSR D20 at<br />
initial load). See 5.3.<br />
CLRAFCM Set arithmetic fault<br />
noninterrupt mode for the<br />
absolute or relocatable<br />
element (clear PSR D20 at<br />
initial load). See 5.3.<br />
INSAFCM Set the absolute or<br />
relocatable element to ignore<br />
the setting of SETAFCM and<br />
CLRAFCM. See 5.3.<br />
Parameters SETAFCM, CLRAFCM, and<br />
INSAFCM override any related indicators<br />
present in the individual relocatable<br />
elements included in the collection.<br />
Parameters SETAFCM, CLRAFCM, and<br />
INSAFCM override any related indicators<br />
present in the individual relocatable<br />
elements included in the collection.<br />
Parameters SETAFCM, CLRAFCM, and<br />
INSAFCM override any related indicators<br />
present in the individual relocatable<br />
elements included in the collection.<br />
7830 9887–001 5–1
Program Parameter Specification<br />
Table 5–1. Parameters Specified with the TYPE Directive<br />
Parameters Description Use of Parameters by TYPE Directive<br />
BLOCKSIZE64<br />
Set bank sizes in the absolute<br />
element to 64-word<br />
multiples.<br />
COMMONBANK Suppress certain error<br />
messages regarding the start<br />
address during commonbanked<br />
collections.<br />
When BLOCKSIZE64 is specified on the<br />
TYPE directive, all banks of the program<br />
will have their sizes stored in the bank<br />
load table of the absolute element in 64word<br />
blocks. In the absence of the<br />
BLOCKSIZE64 specification, sizes will be<br />
stored in 512-word blocks. For all basic<br />
mode banks, either block size can be<br />
used; however, Exec main storage use<br />
will be improved if TYPE BLOCKSIZE64<br />
is used. For all extended mode<br />
architecture extended mode banks, TYPE<br />
BLOCKSIZE64 is required by the<br />
hardware if the activity local storage or<br />
the return control stack is used. The<br />
CALL instruction uses both. The values<br />
of the <strong>Collector</strong>-defined symbols,<br />
BLOCKSIZE$, LASTR$, LASTIR$, and<br />
LASTDR$, are also affected by this<br />
parameter.<br />
When COMMONBANK is specified on<br />
the TYPE directive, certain annoying error<br />
messages are suppressed. The error<br />
messages indicate a situation that<br />
intentionally exists when performing<br />
COMMONBANK collections. The<br />
suppression of these messages resolves<br />
some anxiety that often exists when<br />
using an absolute that supposedly<br />
contains errors. However, do not use this<br />
directive to suppress the error messages<br />
unless they should be suppressed.<br />
5–2 7830 9887–001
Program Parameter Specification<br />
Table 5–1. Parameters Specified with the TYPE Directive<br />
Parameters Description Use of Parameters by TYPE Directive<br />
COMSEG Include all text for a common<br />
block in the segment that the<br />
COMMON block is attached<br />
to.<br />
EXEC Allow use of special<br />
directives for the collection of<br />
the Exec.<br />
EXTDIAG Produce extended diagnostic<br />
tables for the absolute<br />
element.<br />
Location counters from many elements<br />
define text included in a common block.<br />
These location counters can be placed in<br />
different segments. The segment at the<br />
common point of the other location<br />
counters contains the actual area to be<br />
occupied by the common block. The<br />
loading of one of the segments<br />
containing text for the common block<br />
causes reinitialization of part of the<br />
common block.<br />
The presence of the COMSEG parameter<br />
causes all location counters defining text<br />
for a common block to be included in the<br />
same segment as the common block<br />
area, thus avoiding any reinitialization of<br />
the common block unless that segment<br />
is reloaded. This parameter is valid only<br />
for bank-named collections. See F.5.<br />
With the introduction of the extended<br />
mode architecture systems, additional<br />
bank descriptor table levels were<br />
defined. The Exec expects to find its<br />
banks at a higher level of the BDT. (See<br />
6.6). When EXEC is specified on the<br />
TYPE directive, the <strong>Collector</strong> sets up this<br />
default level for the collection and<br />
provides additional special processing.<br />
See Appendix A.<br />
Within the absolute element’s diagnostic<br />
tables, the normal entry-point name table<br />
contains only referenced entry points.<br />
The absolute value table contains only<br />
referenced absolute entry points and<br />
does not include any absolute entry<br />
points defined in the elements ERU$ or<br />
CERU$. The specification of EXTDIAG<br />
prevents any of these exclusions so that<br />
all entry points from all the elements are<br />
included in these diagnostic tables.<br />
7830 9887–001 5–3
Program Parameter Specification<br />
Table 5–1. Parameters Specified with the TYPE Directive<br />
Parameters Description Use of Parameters by TYPE Directive<br />
IBJLNK<br />
elementname,address<br />
Extend the use of the<br />
BDICALL$/IBJ$ feature to<br />
allow collection time<br />
definition. element-name is<br />
the name of an element<br />
included in the collection and<br />
address is a symbol or<br />
numeric value representing<br />
an address in the absolute<br />
element. If address is a<br />
symbol, it does not cause<br />
automatic inclusion of an<br />
element from a file named on<br />
a LIB directive.<br />
NPEDIAG Provide the capability to use<br />
the NPE DIAG$ format in<br />
dumps generated for mixed<br />
mode absolutes.<br />
QUARTER Mark the output absolute,<br />
relocatable, or symbolic<br />
element quarter-word<br />
sensitive (set PSR D10 (D32<br />
on the 1100/90 system) at<br />
initial load). See 5.4.<br />
The values specified for element-name<br />
(which must be included in the collection)<br />
and address are used in satisfying<br />
references to BDICALL$ and IBJ$. When<br />
a reference to BDICALL$+label is found<br />
and if label is defined in element-name,<br />
the value of label is used to satisfy the<br />
reference.<br />
Since BDICALL$ always takes the BDI<br />
from H1 of a 36-bit absolute value, label<br />
as defined in element-name must also be<br />
a 36-bit absolute number with the<br />
required value in the upper 18 bits. When<br />
a reference such as IBJ$ X11, label is<br />
used and label is defined in elementname,<br />
the instruction generated is LMJ<br />
X11,address. (See 4.5.5)<br />
The <strong>Collector</strong> provides an indicator in the<br />
Absolute Header Table of an absolute.<br />
This indicator will cause the operating<br />
system to create a dump as though it<br />
came from an "Object Module-Based<br />
Program." When any activity of such an<br />
absolute terminates abnormally<br />
(restricted to activity abnormal<br />
termination), only the activity local banks<br />
are written to the DIAG$ file. The last<br />
activity to terminate will write all program<br />
local banks to the DIAG$ file. (Refer to<br />
the Exec System Software Executive<br />
Requests <strong>Programming</strong> <strong>Reference</strong><br />
<strong>Manual</strong> section for additional information<br />
describing the operating system action<br />
concerning this absolute indicator.)<br />
This parameter is equivalent to the F<br />
option on the @MAP statement. If the F<br />
or T options are specified, they override<br />
any TYPE QUARTER directives found. If<br />
more than one TYPE QUARTER or TYPE<br />
THIRD directive is found, the first one<br />
found is used.<br />
5–4 7830 9887–001
Program Parameter Specification<br />
Table 5–1. Parameters Specified with the TYPE Directive<br />
Parameters Description Use of Parameters by TYPE Directive<br />
THIRD Mark the output absolute,<br />
relocatable, or symbolic<br />
element third-word sensitive<br />
(clear PSR D10 (D32 on the<br />
1100/90 system) at initial<br />
load). See 5.4.<br />
READONLY Mark the I bank of a bankimplied,<br />
unsegmented, readonly<br />
absolute.<br />
REALTIME All initial loads and reloads of<br />
absolute elements of type<br />
REALTIME are performed at<br />
real-time request priority with<br />
real-time positioning. This<br />
does not affect processor<br />
switching priority.<br />
This parameter is equivalent to the T<br />
option on the @MAP statement. If the F<br />
or T options are specified, they override<br />
any TYPE THIRD directive found.<br />
If more than one TYPE QUARTER or<br />
TYPE THIRD directive is found, the first<br />
one found is used.<br />
The I bank of this bank-implied,<br />
unsegmented collection is marked readonly.<br />
The R option on the IBANK directive<br />
should be used for bank-named<br />
collections.This directive is independent<br />
of any read-only specifications (INFO 9)<br />
contained in the input relocatables. See<br />
4.2.4 for more information about the<br />
INFO groups.<br />
The parameter REALTIME is used to<br />
designate an absolute element as realtime<br />
for storage request purposes. The<br />
switching level and real-time activity<br />
count of the program are not affected<br />
until the program does an ER RT$. The<br />
storage priority of in-storage banks of the<br />
program are always real-time, unless all<br />
of the program’s activities are nonrealtime<br />
and in a long-wait state, in which<br />
case the in-storage banks are marked<br />
long-wait and are able to be swapped.<br />
This parameter has no effect if the user<br />
executing the resulting program is not<br />
authorized to use the real-time capability.<br />
5.2. Absolute Element Arithmetic Fault Mode<br />
Determination<br />
The <strong>Collector</strong> marks the arithmetic fault mode of an absolute element or relocatable<br />
element produced by the <strong>Collector</strong> in the following order of precedence:<br />
1. If explicit sensitivity is given on the TYPE directive, the output element is marked<br />
accordingly, regardless of the sensitivities of the input relocatable elements.<br />
2. If all input relocatable elements have the same sensitivity, the output element is<br />
marked with the sensitivity.<br />
3. If both SETAFCM and CLRAFCM relocatable elements are present, the presence or<br />
absence of INSAFCM for relocatable elements where the sensitivity is not specified<br />
7830 9887–001 5–5
Program Parameter Specification<br />
is irrelevant. In this case (both the SETAFCM and CLRAFCM relocatable elements<br />
are present), the output element is marked with the sensitivity of the relocatable<br />
element containing the program start address; if that element is marked INSAFCM<br />
or if no starting address exists, the output element is marked UNKNOWN.<br />
4. If SETAFCM relocatable elements are present in addition to INSAFCM and for<br />
relocatable elements where the sensitivity is not specified, the output element is<br />
marked SETAFCM.<br />
5. If CLRAFCM relocatable elements are present in addition to INSAFCM and for<br />
relocatable elements where the sensitivity is not specified, the output element is<br />
marked CLRAFCM.<br />
6. If INSAFCM and for conditions where sensitivity is not specified on relocatable<br />
elements existing by themselves, the output element is marked UNKNOWN.<br />
For more information on arithmetic fault compatibility mode, see the processor and<br />
storage reference manual for your Series 1100 and <strong>2200</strong> systems.<br />
5.3. Exec Action Produced by Absolute Element<br />
The arithmetic fault mode sensitivity of the absolute element is used by the Executive in<br />
determining the initial setting of PSR bit D20 on 1100/60, 1100/70, and 1100/80 systems<br />
or bit DB29 on the extended mode architecture systems. For more information about<br />
these bit settings, see the systems processor and storage reference manual for the <strong>OS</strong><br />
1100 system in use at your site. The following actions are taken by the Executive:<br />
1. If the absolute element’s sensitivity is UNKNOWN, the system standard value set at<br />
system generation is used.<br />
2. If the absolute element’s sensitivity is SETAFCM, D20 (DB29) is initially set.<br />
3. If the absolute element’s sensitivity is CLRAFCM, D20 (DB29) is initially cleared.<br />
4. If the absolute element’s sensitivity is INSAFCM, D20 (DB29) is initially cleared.<br />
5.4. Third- and Quarter-Word Sensitivity<br />
If sensitivity is not specified by option or TYPE directive, program sensitivity is<br />
determined as follows:<br />
1. If only third-word sensitive elements and elements with neither T nor F sensitivity<br />
are present, T is used.<br />
2. If only quarter-word sensitive elements and elements with neither T nor F sensitivity<br />
are present, F is used.<br />
3. If both third-word and quarter-word sensitive elements are present, the sensitivity of<br />
the element containing the program starting address as specified by the ENT<br />
directive is used. If the ENT directive is not used, the absolute element is marked as<br />
being not sensitive.<br />
5–6 7830 9887–001
Section 6<br />
Other Directives<br />
6.1. COR — Corrections<br />
Purpose<br />
The COR directive specifies that a location in the absolute element is to be changed<br />
without altering the corresponding location in the original relocatable element. A COR<br />
directive can replace any text word with one of the following:<br />
• An instruction word<br />
• A data word<br />
• A data word containing up to two symbols or values representing the upper and<br />
lower halves of the word<br />
Format<br />
COR element-name<br />
Where element-name specifies the element to which the corrections are to be made.<br />
The correction data images that follow the COR directive can be in any one of the<br />
following formats:<br />
address,lc-1 f j a x h i u<br />
address,lc-1 data-word<br />
address,lc-1 data,lc-2 data,lc-3<br />
where:<br />
address,lc-1<br />
specifies the relative address and location counter of the relocatable element to<br />
which the corrections are being made.<br />
f j a x h i u<br />
specifies field values in instruction word format that are to be inserted. Blanks are<br />
used to separate each part of the instruction correction. The u field can be<br />
− A symbol<br />
− A symbol and offset<br />
7830 9887–001 6–1
Other Directives<br />
− An address in the form integer,lc-2,element-name-1<br />
data-word<br />
data<br />
specifies a numeric value.<br />
specifies a symbol, symbol and offset, or integer correction.<br />
lc-2, lc-3<br />
specifies that the u- or data fields that are relative to the value of the specified<br />
location counter. If omitted, the fields are assumed to contain absolute values.<br />
element-name-1<br />
specifies the element to which the location counter (lc-2) belongs; if omitted, the<br />
element being corrected is assumed.<br />
Description<br />
The corrections contained in a COR directive are ignored if the R option was specified on<br />
the @MAP statement. Any number of correction data images can follow the COR<br />
directive.<br />
COR directives cannot contain instructions that are jumps to any indirectly loaded<br />
segment.<br />
A symbol must be an externalized label.<br />
In bank-named collections, a COR directive and its parameters can apply only to global<br />
elements (see 4.4.4.1 and 4.4.4.2).<br />
Example<br />
1. COR ELT1<br />
2. 000001,01 051 00 00 00 0 0 000011,01,ELT2<br />
3. 000004,01 006 00 015 00 0 0 DUMMY+1<br />
4. 000007,01 0000000000114<br />
5. 000011,01 00000111 DUMMY+1<br />
6. 000006,02 0000112,01 0000013<br />
7. 000011,02 DUMMY+2<br />
8. 000014,02 02,02 DUMMY+2<br />
9. 000016,03 027 00 017 00 0 0 01176,02<br />
Description<br />
1. Corrections to the specified lines in element ELT1 are to be applied to the final<br />
absolute element.<br />
2. The word being collected under element ELT1 at relative address 01, location<br />
counter 1, is modified to set the function code to 051, and the j, a, x, h, and i fields to<br />
6–2 7830 9887–001
Other Directives<br />
zero. The u field is given the value of 011 relative to location counter 1 of element<br />
ELT2.<br />
3. The word appearing at relative address 04 under location counter 1 of ELT1 is<br />
modified to set the function code to 06, the a field to 015, and the u field to<br />
DUMMY+1. The j, x, h, and i fields are set to zero.<br />
4. The word appearing at relative address 07 under location counter 1 is changed to<br />
contain 0114.<br />
5. The word at relative address 011 under location counter 1 is changed to contain<br />
0111 in H1 and DUMMY+1 in H2.<br />
6. The data at relative address 06 under location counter 2 contains the following:<br />
a. H1: 0112, relative to location counter 1 of ELT1<br />
b. H2: 013<br />
7. The data at relative address 011 under location counter 2 receives the value of<br />
symbol and offset, DUMMY+2.<br />
8. The data at relative address 014 under location counter 2 receives the data 02<br />
relative to location counter 2 in H1, and the value of symbol DUMMY+2 in H2.<br />
9. The instruction word appearing at relative address 016 under location counter 3<br />
receives the function code 027, the a field 017, and the u field 01176, relative to<br />
location counter 2 of ELT1. The j, x, h, and i fields are set to zero.<br />
6.2. DEF — External Definition Retention<br />
Purpose<br />
In the collection of an absolute, each DEF directive label specified creates an entry in the<br />
table ENTRY$, which is generated by the <strong>Collector</strong>.<br />
In an R option collection, each label specified remains externalized in the resulting<br />
relocatable element.<br />
All DEF directive parameters are optional.<br />
Format<br />
DEF label-1,label-2,...,label-n<br />
where label-i specifies the external definitions to be retained.<br />
Description<br />
The DEF directive is normally used in R option collections. In an R option collection, the<br />
DEF directive causes the <strong>Collector</strong> to create an entry (for each specified label) in the<br />
entry-point table of the preamble of the resulting relocatable element.<br />
During an absolute collection, the DEF directive causes the <strong>Collector</strong> to build not only the<br />
ENTRY$ table but also the common block table, COMMN$. Both tables can be accessed<br />
7830 9887–001 6–3
Other Directives<br />
by the user program through the <strong>Collector</strong>-defined symbols ENTRY$ and COMMN$.<br />
COMMN$ is also built if the DEF directive is present with no parameters.<br />
If the label specified on the DEF directive is not contained in any explicitly included<br />
elements, a search of the library files is made to find an element in which the label is<br />
defined.<br />
6.3. END — End of Input<br />
Purpose<br />
The END directive specifies the end of the source language input for the <strong>Collector</strong>. The<br />
END directive is optional. If not given, the end of <strong>Collector</strong> source language is indicated<br />
by the next control statement.<br />
Format<br />
END<br />
6.4. ENT — Starting Address Redefinition<br />
Purpose<br />
The ENT directive provides you with the capability of overriding any start addresses<br />
provided by relocatable elements. Upon program initialization (@XQT or @processor call),<br />
control is transferred to the absolute address of the named label.<br />
Format<br />
ENT name<br />
where name must be an externally defined label.<br />
Description<br />
The absolute address of the label found with the ENT directive becomes the starting<br />
address for the resultant absolute. In the absence of an ENT directive, the last start<br />
address encountered in processing the relocatable elements becomes the program start<br />
address. If start addresses are found in both explicitly and implicitly included elements,<br />
the last explicitly included element is used. For compiled languages, a relocatable<br />
element containing a start address usually corresponds to a main program.<br />
The start address must be in the address range of an initially based bank. If there are<br />
initially based common banks, the <strong>Collector</strong> may not be able to ascertain if the start<br />
address is actually within the common banks. Thus, a warning message is printed even<br />
though a TYPE COMMONBANK statement was included in the collection.<br />
If the program contains segments, the start address must be contained in the main<br />
segment as this is the only segment initially loaded at execution time.<br />
6–4 7830 9887–001
6.5. EQU — External <strong>Reference</strong> Definition<br />
Purpose<br />
Other Directives<br />
The EQU directive provides the means to assign, during the collection, a value to an<br />
undefined symbol or to change the value of an external label.<br />
All EQU directive parameters are optional except name-1/value-1.<br />
Format<br />
EQU name-1/value-1,name-2/value-2,...,name-n/value-n<br />
where:<br />
name-i<br />
value-i<br />
specifies the label to be defined.<br />
is the value to be assigned to the preceding name-i parameter. Value-i can be<br />
specified as follows:<br />
− An integer<br />
− A symbol (for example, BOB)<br />
− A symbol with an offset (for example, BOB+4)<br />
Description<br />
Any symbol used in the value parameter must be a bank name, segment name, or<br />
externally defined in one of the elements specified for inclusion in the collection. If you<br />
use a bank name or segment name in the value parameter, the EQU directive must<br />
appear after the BANK or SEG directive. Therefore, no search is performed on files<br />
named on LIB directives. If an external label that duplicates an EQU name is found, the<br />
value of the external label is the value found on the EQU line and a message is printed.<br />
In bank-named collections, only global symbols can be used on the EQU directive (see<br />
4.4.4.1 and 4.4.4.2). A bank or segment name should not be used as name-i and should<br />
appear only once as value-i.<br />
Example<br />
EQU JOE/0200,ABE/SAM+10<br />
The external references JOE and ABE are defined as 0200 8 and SAM+10 10 respectively.<br />
6.6. LEVEL — Specifying the Bank Descriptor Table<br />
(BDT) Level<br />
Purpose<br />
7830 9887–001 6–5
Other Directives<br />
The LEVEL directive allows you to specify a BDT level for the collection. This value is<br />
returned with the <strong>Collector</strong>-defined tags LBDI$, LBDICALL$, LBDIREF$, BDICALL$, and<br />
BDIREF$.<br />
The LEVEL directive was implemented when the Bank Descriptor Table was defined<br />
with 4 levels of address space. Since then the definition of the Bank Descriptor Table<br />
(BDT) has been expanded to 8 levels of address space called levels (L) 0-7. The level L is<br />
intended to indicate scope, with L0 most global and L7 most local. In general, the<br />
<strong>Collector</strong> LEVELs 0-3 still provide this capability matching the first 2 bits, where L = 0, 2,<br />
4, and 6, of the possible 3 bits used to indicate the 8 levels L0-L7. The <strong>Collector</strong> LEVEL<br />
directive does not provide the capability to indicate the odd L levels where L = 1, 3, 5,<br />
and 7.<br />
The default LEVEL for normal collections is 2 and for TYPE EXEC is 1.<br />
Format<br />
LEVEL value<br />
where value must be an integer from 0 to 3.<br />
Description<br />
If multiple LEVEL directives are given in the collection, the last LEVEL directive overrides<br />
all previous LEVEL directives.<br />
The LEVEL directive is not allowed for R option collections.<br />
Different values are associated with each BDT level that is used with the <strong>Collector</strong>defined<br />
symbols LBDI$, LBDICALL$, LBDIREF$, BDICALL$, and BDIREF$. Two formats<br />
are used, one for basic mode (<strong>Collector</strong> symbols BDICALL$ and BDIREF$) and one for<br />
extended mode (<strong>Collector</strong> symbols LBDI$, LBDICALL$, and LBDIREF$).<br />
Extended mode format<br />
L BDI OFFSET<br />
0 2 3<br />
Basic mode format<br />
E BDR L<br />
S<br />
0 1 2 3 4 5 6<br />
17 18<br />
IS BDI OFFSET<br />
17 18 35<br />
Because of the extended mode and basic mode formats, different values for the BDT<br />
level are associated with the <strong>Collector</strong>-defined symbols LBDI$, LBDICALL$, LBDIREF$,<br />
6–6 7830 9887–001<br />
35
Other Directives<br />
BDICALL$, and BDIREF$. The following table shows the relationships between each<br />
level and each format.<br />
The L (Level) field of an extended mode virtual address was expanded from 2 bits to 3<br />
bits to allow for the 8 levels of address space. The basic mode virtual address still has<br />
only 2 bits (E and LS) to select the Bank Descriptor Table. Only the even L values<br />
translate directly to E,LS values as seen in the Level diagram above. The odd L values (L<br />
= 1, 3 ,5, and 7) are translated to E,LS = 1,1. Thus the <strong>Collector</strong> retains its original<br />
implementation where the <strong>Collector</strong> levels 0-3 indicate the first 2 bits of the L field which<br />
are the even L levels 0, 2, 4, and 6.<br />
<strong>Collector</strong> LEVEL value (L bits 0,<br />
1)<br />
Basic Mode (E,LS):<br />
bits 0,3<br />
0 — System 1,1 0,0,0 (0)<br />
1 — Application (TYPE EXEC) 1,0 0,1,0 (2)<br />
2 — Program (default) 0,0 1,0,0 (4)<br />
3 — Activity 0,1 1,1,0 (6)<br />
Extended Mode (L):<br />
bits 0,1,2<br />
The <strong>Collector</strong>-defined symbols can be used in a basic mode or in an extended mode<br />
program.<br />
In an absolute element, the level of a bank is not specified. For absolutes that are<br />
executed as programs, the Exec loads all banks produced by the <strong>Collector</strong> at level 2.<br />
Alternate file common banks (AFCB) are further processed during COMUS installation to<br />
have banks at level 1. Consequently, there is no provision for the creation of an activity<br />
local bank (level 3) by the <strong>Collector</strong> within an absolute. Activity local banks must be<br />
created dynamically and the <strong>Collector</strong>-defined tags can be used to appropriately<br />
manipulate their BDIs for basing.<br />
Programs that were constructed for systems without the extended mode architecture<br />
enhancements use the basic mode virtual address. These programs always have the LS<br />
field clear (zero). This means the virtual addresses with L=0 or L=3 are not available to<br />
these programs.<br />
You can override the LEVEL value for a specific bank by means of the IBANK/DBANK<br />
directive or the BANKINFO directive. For more information, refer to 4.2.1 and 4.2.2.<br />
6.7. MINGAP, MINSIZ — Absolute Element<br />
Optimization<br />
Purpose<br />
The MINGAP and MINSIZ directives enable the user to modify the resultant absolute<br />
element to minimize the I/O transfer time when the program is loaded for execution.<br />
7830 9887–001 6–7
Other Directives<br />
Format<br />
MINGAP value<br />
MINSIZ value<br />
where value specifies any positive integer.<br />
Description<br />
One of the tasks of the <strong>Collector</strong> is to insert information into the absolute element that<br />
describes how the absolute element is structured and how it is to be loaded into main<br />
storage by the Exec loader. This information is conveyed by means of access control<br />
words (ACW). ACWs have the following basic format:<br />
Z length program start address for load<br />
0 1 17 18 35<br />
where:<br />
length<br />
Z<br />
is the number of words to load.<br />
if set, indicates that the loader is to zero-fill the area. ACWs with Z set are called<br />
zero-fill ACWs. ACWs with Z not set are called text ACWs.<br />
Program areas created by assembler RES directives or compiler array declarations do not<br />
contain meaningful data or instructions at load time. Therefore, the <strong>Collector</strong> has two<br />
alternatives when creating the ACW to describe the RES area:<br />
1. The area could be zero-filled by the <strong>Collector</strong>.<br />
This increases the size of the absolute element (affecting the mass storage<br />
requirements of the element) and the number of words that must be transferred by<br />
the loader when bringing the block of text into mass storage for execution.<br />
2. The area could be left void by the <strong>Collector</strong> (bit 0 set in the ACW).<br />
This decreases the size of the absolute element but increases the number of ACWs<br />
used by the loader and, hence, the number of I/O operations needed to transfer the<br />
element to main storage for execution.<br />
The MINGAP and MINSIZ directives give the user control over the creation of the ACWs<br />
as follows:<br />
MINGAP<br />
6–8 7830 9887–001
Other Directives<br />
Any RES area greater than or equal to MINGAP words is left void. Any RES area less<br />
than MINGAP words is zero-filled.<br />
MINSIZ<br />
This directive controls the minimum number of words to be transferred per ACW<br />
(bits 1 through 17 of the ACW).<br />
Both MINGAP and MINSIZ are initially set to 10. The <strong>Collector</strong> uses a combination of<br />
MINGAP and MINSIZ to create the ACWs. In general, text ACWs always describe at<br />
least MINSIZ words and zero-fill ACWs describe at least MINGAP words. If the length of<br />
a text ACW is less than MINSIZ, enough words of the adjacent RES area are converted<br />
by the <strong>Collector</strong> into text words of zeros so that the length of the text ACW equals<br />
MINSIZ. If a RES area is less than MINGAP, it is merged with the two adjoining text<br />
areas and filled with zeros.<br />
Examples<br />
All examples in this section assume MINGAP and MINSIZ = 10. The length in the ACW<br />
is described in octal.<br />
In example 1, the size of the text areas is less than MINSIZ (10). Five words from the<br />
adjacent RES area are zero-filled and combined in the text ACW. Therefore, the zero-fill<br />
ACW describes five words less than the original RES area.<br />
7830 9887–001 6–9
Other Directives<br />
In example 2, the <strong>Collector</strong> initially attempted to create an ACW for area 1 with the<br />
following format:<br />
000012 program address<br />
This, however, left only five words in the RES area. Because 5 < MINGAP (10), the<br />
<strong>Collector</strong> combined area 1, area 2, and area 3 into one ACW and zero-filled the RES area.<br />
ACWs do not cross segment boundaries. If the text and RES areas of the main segment<br />
do not reach to the end of a main storage block, the <strong>Collector</strong> creates a zero-fill ACW to<br />
describe this area. If a RES area occurs at the end of the main segment, the <strong>Collector</strong><br />
does not combine the ACW describing the final RES area with the ACW describing the<br />
area between the end of the user’s segment and the main storage block.<br />
In this example, a main storage block is defined to be 512 or 64 words, depending on the<br />
use of the TYPE BLOCKSIZE64 directive.<br />
6.8. REF — External <strong>Reference</strong> Retention<br />
Purpose<br />
In the collection of an absolute, each REF directive label specified creates an entry in the<br />
XREF$ table, which is generated by <strong>Collector</strong>.<br />
6–10 7830 9887–001
In a R option collection, each label specified remains undefined in the resulting<br />
relocatable element.<br />
All REF directive parameters are optional.<br />
Format<br />
REF label-1,label-2,...,label-n<br />
where label-i specifies the external references to be retained.<br />
Description<br />
Other Directives<br />
During an absolute collection, the REF directive causes the common block table,<br />
COMMN$, to be built in addition to the XREF$ table. Both can be accessed by the user<br />
program by means of the <strong>Collector</strong>-defined symbols XREF$ and COMMN$. No attempt<br />
is made to satisfy any references to the names indicated on REF directives. In an<br />
absolute collection, all references are satisfied with the address of the third word of the<br />
entry created in XREF$ for the label.<br />
In an R option collection, the REF directive causes the <strong>Collector</strong> to create an entry (for<br />
each specified label) in the external reference list of the preamble of the resulting<br />
relocatable element. In an R option collection, all references to the names on the REF<br />
directive are given relocation information.<br />
If an external definition (entry point) that is identical to a REF name is encountered, a<br />
message is printed and the external definition is ignored.<br />
Example<br />
REF VALUE1,VALUE2,SUBROUTINE4<br />
In an absolute collection, the listed external references (VALUE 1, VALUE2, and<br />
SUBROUTINE4) are retained after the collection in the XREF$ table of the resultant<br />
element. Any references to these symbols are satisfied with the address of the third<br />
word of the appropriate entry in the XREF$ table.<br />
In an R option collection, the listed labels are placed in the external reference list of the<br />
preamble.<br />
6.9. SNAP — Snapshot Dumps<br />
Purpose<br />
The SNAP directive specifies the elements in which a snapshot dump is to be taken. The<br />
snap data images immediately following the SNAP directive specify the address within<br />
the element where the snapshot dump is to be taken, the length of the dump, and the<br />
frequency of the dump.<br />
All data image parameters are optional except address-1, lc-1, address-2, and length.<br />
7830 9887–001 6–11
Other Directives<br />
Format<br />
SNAP element-name<br />
where element-name specifies the element name where the dump is taken.<br />
The SNAP data image format is as follows:<br />
address-1,lc-1 address-2 length,registers times,frequency<br />
where:<br />
address-1,lc-1<br />
specifies the address and the location counter within the relocatable element of the<br />
instruction at which the snap request (SLJ SNAP$$) is placed. This field cannot<br />
contain a symbol.<br />
address-2<br />
length<br />
specifies the starting address of the program area to be dumped. This field can be in<br />
the form address, location-counter, element-name, or symbol + offset.<br />
specifies the length in words of the program area to be dumped.<br />
registers<br />
times<br />
specifies which registers are to be dumped. The following codes are used:<br />
00 No registers dumped<br />
01 Only R registers dumped<br />
02 Only A registers dumped<br />
03 Both A and R registers dumped<br />
04 Only X registers dumped<br />
05 Both X and R registers dumped<br />
06 Both X and A registers dumped<br />
07 X, A, and R registers dumped<br />
specifies the maximum number of times the snapshot dump is to be taken. If<br />
omitted, the value of decimal 100 is assumed.<br />
6–12 7830 9887–001
frequency<br />
Other Directives<br />
specifies at what frequency of reference the dump is to be taken. If omitted, the<br />
value 1 (which dumps every time the SNAP directive is encountered) is assumed.<br />
Description<br />
No more than 16 snapshot dumps can be requested in any one collection. If more than<br />
one snapshot of the same element is to be taken, multiple data images can follow the<br />
SNAP directive.<br />
When the dump request instruction SLJ SNAP$$ is inserted at the specified address, the<br />
instruction appearing there is placed in a table in element SNAP$. After the dump is<br />
taken, the saved instruction is executed from within the SNAP$ element as if it had not<br />
been moved. If the saved instruction is a jump instruction, control transfers immediately<br />
to the location specified in the jump instruction; otherwise, control is transferred to the<br />
location following the location from which the SNAP$ element was called. Because the<br />
replaced instruction is executed from within the SNAP$ element, the replaced<br />
instruction must not be<br />
• Altered during program execution<br />
• <strong>Reference</strong>d as data or by indirect addressing<br />
• An SLJ instruction that specifies indirect addressing or indexing<br />
• An LMJ instruction that specifies indirect addressing or indexing<br />
• An LIJ, LDJ, or LBJ instruction<br />
• An EX instruction that references an LMJ or SLJ instruction<br />
• A test and skip instruction<br />
• Used in reentrant code<br />
In a bank-named collection, the SNAP directive and its parameters can apply only to<br />
global elements and entry points. The SNAP$ element must be entirely included in the<br />
control bank.<br />
Example 1<br />
1. SNAP LARK<br />
2. 010,1 012,1 020,07 0200,010<br />
Description<br />
A snapshot dump is taken in element LARK. Line 2 gives the parameters for the dump.<br />
The instruction at address 010 under location counter 1 is the location where the<br />
snapshot request is placed. The address 012 under location counter 1 is the starting<br />
address of the dump. Sixteen locations in main storage are dumped along with the<br />
contents of the A, X, and R registers. The dump is to be taken a maximum of 128 times,<br />
but only once every eighth reference.<br />
Example 2<br />
7830 9887–001 6–13
Other Directives<br />
1. SNAP JACK<br />
2. 0132,02 HAH+2 256,4<br />
Description<br />
A snapshot is to be taken in element JACK. Line 2 specifies that the instruction at<br />
location 0132 under location counter 2 is the location where the snapshot request is<br />
placed. The address HAH+2 (where HAH must be externally defined) is the starting<br />
address of the dump. The contents of the X registers and 256 or 0400 main storage<br />
locations are to be dumped. Since the times and frequency parameters are not specified,<br />
the system assumes a value of 100 for times and 1 for frequency. The common block is<br />
initialized every time a segment containing the text defining the common block is loaded.<br />
If all the text defining the common block is in the same segment, the common block is<br />
initialized to only one set of the values.<br />
6.10. WINDOW — Creation of 4K Windows<br />
Purpose<br />
The WINDOW directive is used to create 4K windows into a bank and to specify which<br />
base/index register is associated with a particular 4K window.<br />
Format<br />
WINDOW [address] (Bn[,Xn] [Bn[,Xn]] ...) [[address] (Bn[,Xn] [Bn[,Xn]] ...)] ...<br />
where:<br />
address<br />
Bn<br />
Xn<br />
is an externally defined tag defined within the bank, an absolute value (for example,<br />
defined on <strong>Collector</strong> EQU directive), or a numerical value. The value must be<br />
preceded with a 0 for the value to be octal.<br />
indicates B register 2 to 15 or indicates B register 2 to 31 for TYPE EXEC.<br />
indicates X register 1 to 15.<br />
Description<br />
Each base/index register pair targets consecutive 4K windows in the bank associated<br />
with the WINDOW directive. The first pair points to the address specified. If no address<br />
is specified, the start address of the bank is used.<br />
An absolute value or a numerical value can be used to begin the bank at any address for<br />
a specified base register or set of base registers. This address may or may not fall within<br />
the bank limits. It is your responsibility to properly use this capability. Also, an address<br />
6–14 7830 9887–001
Other Directives<br />
specification of zero does not maintain the <strong>Collector</strong> generated addresses within the<br />
confines of the base registers provided. However, <strong>Collector</strong> does issue an error when an<br />
externally defined tag is not defined within the bank limits and used as the address on<br />
the WINDOW directive.<br />
The <strong>Collector</strong> intercepts low order, 12-bit relocation (d field) by XREF or LC+offset, and<br />
checks if the final relocated address is within a window. If the B register field is zero in<br />
the instruction, then the appropriate B register from the WINDOW directive is used. (The<br />
<strong>Collector</strong> cannot distinguish between B0 and no B register specified. Therefore, the<br />
WINDOW directive treats register B0 and no B register as no B register specified.) The<br />
window directive treats the X register field in the same way.<br />
The 12-bit field obtains the address of the referenced tag minus the start address of the<br />
corresponding 4K window. If no WINDOW directive is found, the <strong>Collector</strong> performs<br />
normal relocation and error checking.<br />
Absolute value entry points are not considered relocated; thus, no B or X register<br />
substitution occurs for references to absolute value entry points.<br />
A warning is issued if the WINDOW directive is used in a bank that is not marked as an<br />
extended mode bank and the collection is not TYPE EXEC.<br />
If any WINDOW directives are present, the SEG directive cannot be used.<br />
If a 12-bit field is relocated by multiple relocation, each part must be defined in the same<br />
bank for window processing to be performed.<br />
You are responsible for basing the B register at the address specified on the WINDOW<br />
directive.<br />
You are also responsible for overlapping problems if more than one window is specified<br />
for a bank. The <strong>Collector</strong> uses the first base/index pair specified on the WINDOW<br />
directive that contains the relocated value.<br />
Example 1<br />
IBANK NAME,01000<br />
WINDOW (B3 B4,X4) tag2(B5)<br />
IN -----<br />
For this example, the bank limits are 01000 to 040000. Tag2 has a value of 0<strong>2200</strong>0.<br />
The first window starts at the beginning of the bank because no address was specified.<br />
The second window starts 4K after the first. The third window starts at tag2.<br />
Window 1 01000 to 010777, B3<br />
Window 2 011000 to 020777, B4,X4<br />
Window 3 0<strong>2200</strong>0 to 031777, B5<br />
7830 9887–001 6–15
Other Directives<br />
If a 12-bit field is encountered and the tag it references has a value of 02000, the<br />
<strong>Collector</strong> uses window 1. B3 is used in the instruction, with an offset value of 01000<br />
(02000-01000) for the 12-bit field.<br />
If a 12-bit field is encountered and the tag it references has a value of 021500, the<br />
<strong>Collector</strong> cannot find a window with the value 021500 in its range. Normal relocation is<br />
performed, which causes a truncation error to occur.<br />
Example 2<br />
For this example the same map symbolic is used and the bank limits remain the same,<br />
but tag2 has a value of 020000.<br />
Window 1 and 2 remain the same. Window 3 now has a different range.<br />
Window 1 01000 to 010777, B3<br />
Window 2 011000 to 020777, B4,X4<br />
Window 3 020000 to 027777, B5<br />
If a 12-bit field is encountered and the tag it references has a value of 020500, the<br />
second window is chosen by the <strong>Collector</strong>. B4 and X4 are used in the instruction, and<br />
the 12-bit field receives a value of 07500 (020500-011000).<br />
The <strong>Collector</strong> searches the windows in the order they are specified on the WINDOW<br />
directive. It simply checks to see if the address being relocated is in the range of the<br />
window.<br />
Assume the following WINDOW directive:<br />
WINDOW tag2(B5) (B3 B4,X4)<br />
If tag2 had a value of 020000, the windows would be as follows:<br />
Window 1 020000 to 027777, B5<br />
Window 2 01000 to 010777, B3<br />
Window 3 011000 to 020777, B4,X4<br />
If a 12-bit field is encountered and the tag it references has a value of 020500, the first<br />
window is used. (Window 1 here is window 3 in the previous example.) B5 would be<br />
used in the instruction and the 12-bit field would receive a value of 0500 (020500-<br />
020000=0500). The third window is nearly useless. Only 07000 words can actually be<br />
seen by the <strong>Collector</strong>, 011000 to 017777 (020000 to 020777 is not visible).<br />
6–16 7830 9887–001
Other Directives<br />
7830 9887–001 6–17
Other Directives<br />
6–18 7830 9887–001
Section 7<br />
<strong>Collector</strong>-Defined Symbols<br />
<strong>Reference</strong>s to the following symbols are satisfied by the <strong>Collector</strong> during the collection:<br />
BBJ$<br />
BDI$<br />
Same as IBJ$ except that LBJ is generated in place of LIJ (see 4.5.2 and 4.5.4).<br />
Bank descriptor index (BDI) for the bank in which the reference is made (see 4.5.4).<br />
BDICALL$<br />
Same as BDIREF$, unless the collection is bank-implied or the reference is in the<br />
same bank in which the label is defined. In these cases, the value is zero. If the value<br />
of the associated label is an absolute 36-bit number, the upper 18 bits are used (see<br />
4.5.3 through 4.5.6). Thus, for an entry point, the BDI is expected to be in H1.<br />
BDIREF$<br />
BDI for the bank in which the associated label is defined (see 4.5.4).The BDI is<br />
expected to be in H2 of the absolute value.<br />
BDIVECT$<br />
BDI value of the link vector bank created by the BANKINFO directive with the<br />
VECTOR attribute specified.<br />
BLOCKSIZE$<br />
Number of words in a main storage block (normally 512; 64 if TYPE BLOCKSIZE64<br />
was used).<br />
COMMN$<br />
DBJ$<br />
D$ATE<br />
First address of the common block table (see 6.2 and 6.8).<br />
Same as IBJ$ except that LDJ is generated in place of LIJ (see 4.5.1 and 4.5.4).<br />
7830 9887–001 7–1
<strong>Collector</strong>-Defined Symbols<br />
The date, in TDATE$ format (upper 18 bits), that the absolute element was created.<br />
ENTRY$<br />
FIRST$<br />
First address of the entry-point table (see 6.2).<br />
Lowest address assigned to the bank in which the reference is made.<br />
FIRSTBDI$<br />
Symbol that returns the number specified on the FIRSTBDI directive. If no FIRSTBDI<br />
directive is given, the <strong>Collector</strong> uses the default value of 4.<br />
FRSTD$<br />
FRSTI$<br />
IBJ$<br />
LAST$<br />
Lowest D bank address assigned to the program.<br />
Lowest I bank address assigned to the program.<br />
Used in the f and j fields of an instruction. The LIJ operation code is put in the f and j<br />
fields if the tag in the u field of the instruction is an absolute value or is defined in a<br />
bank other than that in which the reference is made, except for bank-implied<br />
collections. The LMJ operation code is put in the f and j fields if the collection is<br />
bank-implied, or the tag in the u field is defined in the same bank as that in which the<br />
reference is made (see 4.5.1, 4.5.2, and 4.5.6).<br />
Highest address assigned to the bank in which the reference is made, including<br />
dynamic segments.<br />
LASTD$<br />
Highest D bank address assigned to the program, including dynamic segments.<br />
LASTDR$<br />
LASTI$<br />
Same as LASTD$, rounded to the end of the main storage block.<br />
Highest I bank address assigned to the program, including dynamic segments.<br />
LASTIR$<br />
Same as LASTI$, rounded to the end of the main storage block.<br />
7–2 7830 9887–001
LASTR$<br />
LBDI$<br />
Same as LAST$, rounded to the end of the main storage block.<br />
<strong>Collector</strong>-Defined Symbols<br />
BDI for the bank in which the reference is made, with the BDT level bits set (see<br />
4.6.1 and 6.6).<br />
LBDICALL$<br />
Same as LBDIREF$, unless the collection is bank-implied or the reference is in the<br />
same bank in which the label is defined. In these cases, the value is zero. If the value<br />
of the associated label is an absolute 36-bit number, the upper 18 bits are used. The<br />
BDT level bits are set (see 4.6.1 and 6.6).<br />
LBDIREF$<br />
BDI for the bank in which the associated label is defined. If the value of the<br />
associated label is an absolute 36-bit number, then the lower 18 bits are used (H2).<br />
The BDT level bits are set (see 4.6.1 and 6.6).<br />
MAPBDR$<br />
BDR for the bank in which the associated label is defined (see 4.5.3).<br />
MAPBDT$<br />
Bank descriptor table (BDT) level and BDI for the named bank. If the referencing<br />
bank is an extended mode bank, the extended mode format is used. If the<br />
referencing bank is a basic mode bank, the basic mode format is used (see 4.7 and<br />
6.6 ).<br />
MAPCALL$<br />
Symbol that flags the <strong>Collector</strong> for link vector processing and to create instructions.<br />
See 4.9.<br />
MAPGOTO$<br />
SLT$<br />
T$IME<br />
XREF$<br />
Flags the <strong>Collector</strong> for link vector processing and to create instructions. See 4.9.<br />
First address of the segment load table.<br />
The time, in TDATE$ format (lower 18 bits), that the absolute element was created<br />
Compare with D$ATE.<br />
7830 9887–001 7–3
<strong>Collector</strong>-Defined Symbols<br />
First address of the external reference table (see 6.8).<br />
D$ATE and T$IME provide 18-bit values for the date and time of the absolute element<br />
creation, which may be edited using the SYSLIB AEDIT$SFDT editing routine to provide<br />
a means of verifying the version of the program being executed.<br />
If you redefine a <strong>Collector</strong>-defined symbol, your supplied value is taken as the value of<br />
the symbol. You can only specify a value for the <strong>Collector</strong>-defined symbol, by using the<br />
<strong>Collector</strong> EQU directive or by defining a value for the <strong>Collector</strong>-defined symbol in an<br />
element that is explicitly included in the collection.<br />
7–4 7830 9887–001
Section 8<br />
Efficient Use of the <strong>Collector</strong><br />
8.1. Introduction<br />
There are ways you can make a collection more efficient. The suggestions in the<br />
following paragraphs either reduce the amount of main storage used by the <strong>Collector</strong> or<br />
the amount of <strong>Collector</strong> processing.<br />
8.2. Use of the IN Directive<br />
Using file-name.element-name on the IN directive instead of just element-name reduces<br />
<strong>Collector</strong> processing because the <strong>Collector</strong> does not need to search all of the libraries in<br />
the collection for the element. If library files are used only for element searching and not<br />
for satisfying external references, it is more efficient to use file-name. element-name for<br />
each element on the IN directive. However, the use of file-name. element-name makes<br />
the <strong>Collector</strong> symbolic less flexible.<br />
Elements included from a library file should not be named on IN directives if they do not<br />
need to be. Implicit element inclusion is slightly faster than explicit element inclusion.<br />
When IN file-name is used, processing is most efficient when the file contains only<br />
nondeleted, relocatable elements.<br />
8.3. @PREP of TPF$<br />
If TPF$ does not have an entry-point table (created by @PREP or @PACK,P), the <strong>Collector</strong><br />
brings all of the elements from TPF$ into the collection, processes their preambles, and<br />
creates an entry-point table. In effect, the <strong>Collector</strong> is doing an implicit @PREP of TPF$.<br />
After determining which elements are necessary for satisfying external references, the<br />
<strong>Collector</strong> discards the unnecessary TPF$ elements.<br />
Obviously, a prep of TPF$ is more efficient in both space and processing time. If no<br />
implicitly included elements from TPF$ are needed, the most efficient approach is to use<br />
a NOT TPF$ directive.<br />
8.4. Relocatable Element Structure<br />
You can reduce collection time and <strong>Collector</strong> storage requirements by carefully<br />
structuring the relocatable element.<br />
7830 9887–001 8–1
Efficient Use of the <strong>Collector</strong><br />
Internally, when preparing the text for output as an absolute element, the <strong>Collector</strong><br />
creates three-word packets to describe blocks of text within the relocatable element.<br />
These packets describe contiguous blocks of code and if a relocatable element has<br />
contiguous blocks of code, there are fewer packets. After processing all of the text for a<br />
segment, the packets are rearranged to describe a solid block of code within the<br />
absolute.<br />
Example 1<br />
.<br />
.<br />
.<br />
TAG1 + 1 .<br />
TAG2 + 2 .<br />
TAG3 + 3 . Packet required for 3 words<br />
RES 10 .<br />
TAG4 + 4 .<br />
TAG5 + 5 . Packet required for 2 words<br />
RES 5 .<br />
TAG6 + 6 . Packet required for 1 word<br />
.<br />
.<br />
.<br />
This sequence of code is less efficient and requires more internal<br />
<strong>Collector</strong> storage than the following sequence:<br />
.<br />
.<br />
.<br />
TAG1 + 1 .<br />
TAG2 + 2 .<br />
TAG3 + 3 .<br />
TAG4 + 4 .<br />
TAG5 + 5 .<br />
TAG6 + 6 . Packet required for 6 word2<br />
RES 15 .<br />
.<br />
.<br />
.<br />
In the second half of Example 1, the <strong>Collector</strong> uses two-thirds less<br />
storage than in the first half.<br />
Example 2<br />
INTEGER ARRAY (3,4)<br />
DATA ((ARRAY(I,J),J=1,4),I=1,3)/1,2,3,4,5,6,7,8,9,10,11,12/<br />
This FORTRAN example creates an array that is filled as follows:<br />
8–2 7830 9887–001
7830 9887–001<br />
This array appears as follows in a relocatable element:<br />
Address<br />
0<br />
3<br />
6<br />
9<br />
1<br />
4<br />
7<br />
10<br />
2<br />
5<br />
8<br />
11<br />
In order for the <strong>Collector</strong> to describe sequential addresses in the absolute text, a three-<br />
word packet must be constructed for each word of this array and then analyzed and<br />
unchained so that the text reads as follows:<br />
Address<br />
0<br />
1<br />
Contents<br />
1<br />
2<br />
3<br />
4<br />
5<br />
6<br />
7<br />
8<br />
9<br />
10<br />
11<br />
12<br />
Contents<br />
1<br />
5<br />
Efficient Use of the <strong>Collector</strong><br />
8–3
Efficient Use of the <strong>Collector</strong><br />
2 9<br />
3 2<br />
4 6<br />
5 10<br />
6 3<br />
7 7<br />
8 11<br />
9 4<br />
10 8<br />
11 12<br />
To conserve both time and storage, a more efficient array is<br />
INTEGER ARRAY(3,4)<br />
DATA ((ARRAY(I,J),I=1,3),J=1,4)/1,2,3,4,5,6,7,8,9,10,11,12/<br />
This creates the following array:<br />
The relocatable element for this array is constructed as follows:<br />
Address Contents<br />
0 1<br />
1 2<br />
2 3<br />
8–4 7830 9887–001
3 4<br />
4 5<br />
5 6<br />
6 7<br />
7 8<br />
8 9<br />
9 10<br />
10 11<br />
11 12<br />
Only one <strong>Collector</strong> packet is necessary to describe this array.<br />
Efficient Use of the <strong>Collector</strong><br />
The <strong>Collector</strong> creates the three-word packets per segment. When all of the code has<br />
been described for a segment, it unchains the packets and releases the storage that they<br />
used. (If an element spans segments, a few packets describing that element are held<br />
until the other segments are processed.) If it is not possible for the programmer to<br />
employ the coding techniques previously shown, yet more efficient <strong>Collector</strong> storage<br />
utilization is necessary, a collection with more segments reduces the amount of storage<br />
the <strong>Collector</strong> needs to process the packets. More segmentation, however, increases the<br />
execution time of the resulting absolute.<br />
8.5. Use of the Location Counter<br />
The <strong>Collector</strong> and the relocatable element format favor the use of location counters 1<br />
and 2. I/O and mass storage use are reduced if only these location counters are used.<br />
Therefore, if two location counters are sufficient, location counters 1 and 2 should be<br />
used.<br />
8.6. Use of the C Option<br />
The C option is designed to improve the collection time performance of the <strong>Collector</strong> for<br />
large collections. Small collections will probably not show a noticeable improvement in<br />
collection time, and will be wasting internal memory if the C option is used. To<br />
determine the amount of internal space your collection uses, refer to 2.2.3 (which<br />
describes the values of the storage information given on the sign-off line, including the<br />
number of calls being made to MCORE$).<br />
7830 9887–001 8–5
Efficient Use of the <strong>Collector</strong><br />
8–6 7830 9887–001
Appendix A<br />
TYPE EXEC Collections<br />
A.1. TYPE EXEC<br />
Purpose<br />
The TYPE EXEC directive has the following effect on collections:<br />
• Allows the use of XSEG and FIRSTBDI directives<br />
• Suppresses the error message ’*ERROR: NO START ADDRESS’<br />
• Assumes LEVEL 1 unless overridden by the LEVEL directive in the map symbolic<br />
• Changes the format of the values returned for BDICALL$, BDIREF$, LBDI$,<br />
LBDICALL$, and LBDIREF$<br />
The TYPE EXEC directive is not allowed for R option collections.<br />
Format<br />
TYPE EXEC<br />
A.2. XSEG — Executive Function Arrangement<br />
Purpose<br />
The XSEG directive arranges the segments in the collection of the Executive to minimize<br />
the size of the function overlay area. This directive is intended for use only in collections<br />
of the <strong>OS</strong> <strong>2200</strong> Executive system. All XSEG directive parameters are optional, except<br />
name-1.<br />
Format<br />
XSEG name-1,segment-list<br />
where:<br />
name-1<br />
specifies the name of the segment. When name-1 is followed by an asterisk (*), the<br />
named segment is automatically loaded when referenced by a jump instruction.<br />
7830 9887–001 A–1
TYPE EXEC Collections<br />
Such a segment is called an indirect load segment. The asterisk is allowed on all SEG<br />
directives, but is ignored if the directive defines the main segment.<br />
segment-list<br />
specifies the address relationship between the segment named in name-1 and the<br />
other program segments. (See F.2.1 for segment-list formats.)<br />
Description<br />
An XSEG directive functions the same as a SEG directive, except that the initial relative<br />
starting address is reduced, if possible, by multiples of 01000. The resulting final starting<br />
address is equal to the starting address of the bank that the segment is in, plus the<br />
number of words by which the initial relative starting address exceeds a multiple of<br />
01000.<br />
Example<br />
@MAP, I TEST,TEST<br />
IBANK XS1,02000<br />
1. SEG MAIN<br />
IN EL1<br />
2. XSEG A<br />
IN EL2<br />
3. XSEG B<br />
IN EL3<br />
4. SEG C,B<br />
IN EL4<br />
5. XSEG D,(B,C)<br />
IN EL5<br />
Use the following octal lengths and address ranges for this example:<br />
Segment<br />
If the Octal Length<br />
Is:<br />
MAIN 01143 02000-03142<br />
A 02054 02143-04216<br />
B 02712 02217-05130<br />
C 04364 02217-06602<br />
D 0115 02603-02717<br />
Description<br />
The Assigned Address<br />
Range Is:<br />
1. Segment MAIN is assigned a start address of 02000 (see F.2.1 for bank start<br />
address assignment) and an end address of 03142.<br />
2. Segment A, an XSEG that follows segment MAIN, starts at address 02143 and ends<br />
at address 04216. Segment A is initially assigned a start address of 03143,<br />
A–2 7830 9887–001
TYPE EXEC Collections<br />
immediately following segment MAIN. However, since segment A is an XSEG, its<br />
start address of 02143 is formed by adding 0143 (the number of words that 03143 is<br />
over a multiple of 01000) to 02000 (the start address of bank XS1).<br />
3. Segment B, an XSEG that follows segment A, starts at address 02217 and ends at<br />
address 05130. Segment B is initially assigned a start address of 04217, immediately<br />
following segment A. Since segment B, like segment A, is an XSEG, its actual start<br />
address is 02217 (0217 + 02000).<br />
4. Segment C starts at the same address as segment B with a start address of 02217<br />
and an end address of 06602.<br />
5. Segment D is an XSEG that follows the highest address assigned to segment B and<br />
C. The initial start address is 06603 immediately following segment C. The actual<br />
start address for segment D is 02603 (0603 + 02000), since it is also an XSEG.<br />
A.3. FIRSTBDI<br />
Purpose<br />
The FIRSTBDI directive allows you to specify the starting bank descriptor index (BDI) for<br />
the banks in the collection. The following restrictions apply to this directive:<br />
• The default starting BDI is 4. BDIs 0 through 3 are reserved in the user’s bank<br />
description table (BDT).<br />
• A check is made to ensure that the BDI does not exceed the <strong>Collector</strong>'s maximum<br />
internal user-bank BDI value of 4092 (07774); an error message is issued if the<br />
number is too large.<br />
• Multiple FIRSTBDI directives result in the last FIRSTBDI directive overriding all<br />
previous FIRSTBDI directives.<br />
• The FIRSTBDI directive is not allowed in an R option collection.<br />
Format<br />
FIRSTBDI number<br />
where number specifies the starting BDI. The number must not exceed the <strong>Collector</strong>'s<br />
maximum internal user-bank BDI value of 4092 (07774).<br />
Note: The maximum number of banks is limited by the maximum BDI value, 4092<br />
(07774), not by the maximum number of user banks per absolute (4089-07771).<br />
Therefore, using FIRSTBDI to start at a higher BDI value will result in fewer available<br />
user banks.<br />
Description<br />
Banks are assigned ascending BDIs, starting with the FIRSTBDI value, as follows:<br />
• Z option banks<br />
• S option banks<br />
7830 9887–001 A–3
TYPE EXEC Collections<br />
• Dynamic banks that are not initially based<br />
• Dynamic banks that are initially based<br />
• Static banks<br />
• Control bank<br />
• INFO 11 banks<br />
• Link vector bank<br />
A.4. BDICALL$, BDIREF$, LBDI$, LBDICALL$, and<br />
LBDIREF$<br />
For TYPE EXEC collections, the BDT level is always returned with the BDI of the bank<br />
when the tags just shown are referenced.<br />
BDICALL$ and BDIREF$ return the BDT level and BDI in basic mode virtual address<br />
form.<br />
LBDI$, LBDICALL$, and LBDIREF$ return the BDT level and BDI in extended mode<br />
virtual address form.<br />
BDI$ is not affected.<br />
For more information regarding the use of these <strong>Collector</strong>-defined tags, refer to 4.5.4<br />
and 4.6.1.<br />
A–4 7830 9887–001
Appendix B<br />
Collection Examples<br />
B.1. Bank-Implied and Bank-Named Collections<br />
Table B-1 shows the elements in FILEA and their required outside references. These<br />
symbolics pertain to the partial runstreams for the bank-implied and bank-named<br />
collections.<br />
FILEA<br />
Table B–1. Elements in FILEA<br />
MAIN FILEA.SUB1,.SUB2<br />
SUB1 LIB1.SUB3<br />
SUB2 LIB1.SUB4<br />
B.1.1. Bank-Implied Collection<br />
Elements In Which FILEA<br />
<strong>Reference</strong>s Are Defined<br />
This partial runstream uses a bank-implied collection to produce an absolute element<br />
named ABS.<br />
1. @PREP LIB1.<br />
2. @MAP,IS MAPSYM,ABS<br />
3. IN FILEA.MAIN<br />
4. IN FILEA.SUB1,.SUB2<br />
5. LIB LIB1.<br />
6. END<br />
Description<br />
1. FURPUR is called to create the relocatable entry-point table for file LIB1.<br />
2. Call the <strong>Collector</strong>. The I option specifies that symbolic element MAPSYM is introduced<br />
from file TPF$. The S option produces a listing. The absolute element (ABS) is placed in<br />
the file TPF$.<br />
3. The element MAIN in file FILEA is included with the odd location counters placed in the I<br />
bank ($IBANK) and the even location counters placed in the D bank ($DBANK). The<br />
<strong>Collector</strong> generates the bank names, $IBANK and $DBANK, because IBANK and<br />
DBANK directives have not been included in the symbolic input.<br />
7830 9887–001 B–1
Collection Examples<br />
4. The elements SUB1 and SUB2 from FILEA are included with the odd location counters<br />
placed in the I bank ($IBANK) and the even location counters placed in the D bank<br />
($DBANK).<br />
5. The file LIB1 is searched for the entry points to satisfy the external references from<br />
elements SUB1 and SUB2. The elements LIB1.SUB3 and LIB1.SUB4, which are<br />
implicitly included to satisfy these external references, are split so that their odd<br />
location counters are included in the I bank ($IBANK) and their even location counters in<br />
the D bank ($DBANK).<br />
6. Signifies the end of input to the <strong>Collector</strong>.<br />
B.1.2. Bank-Named Collection<br />
This partial runstream uses a bank-named collection to produce the absolute element<br />
named ABS.<br />
1. @PREP LIB1.<br />
2. @MAP,IS MAPSYM,ABS<br />
3. IBANK $IBANK<br />
4. BANKINFO INITIAL(MAINI)<br />
5. IN FILEA.MAIN<br />
6. IN FILEA.SUB1,.SUB2<br />
7. DBANK $DBANK<br />
8. BANKINFO INITIAL(MAIND),CONTROL<br />
9. FORM $IBANK<br />
10. LIB LIB1.($IBANK/$ODD,$DBANK/$EVEN)<br />
Description<br />
1. FURPUR is called to create the relocatable entry-point table for file LIB1.<br />
2. Call the <strong>Collector</strong>. The I option specifies that symbolic element MAPSYM is introduced<br />
from the file TPF$. The S option produces a listing. The absolute element (ABS) is<br />
placed in the file TPF$.<br />
3. I bank $IBANK is a static bank.<br />
4. I bank $IBANK is based on BDR0.<br />
5. The odd location counters from element MAIN in file FILEA are included in bank $IBANK.<br />
6. The odd location counters from elements SUB1 and SUB2 from FILEA are included in<br />
bank $IBANK.<br />
7. D bank $DBANK is a static bank.<br />
8. D bank $DBANK is the control bank and is based on BDR2.<br />
9. The FORM directive causes the structure of $IBANK to be duplicated and included in<br />
bank $DBANK.<br />
10. The file LIB1 is searched for the entry points to satisfy the external references from<br />
elements SUB1 and SUB2. The elements LIB1.SUB3 and LIB1.SUB4, which are<br />
implicitly included to satisfy these external references, are split so that their odd<br />
location counters are included in bank $IBANK and their even location counters in bank<br />
$DBANK.<br />
B–2 7830 9887–001
B.2. Bank-Implied Segmentation<br />
Collection Examples<br />
The following is an example of a segmented program showing the elements in the file<br />
FILEA and their external references<br />
The following example demonstrates the use of <strong>Collector</strong> directives to produce a<br />
segmented program:<br />
1. @PREP LIB1.<br />
2. @PREP LIB2.<br />
3. @MAP,IL MAPSYM,MAPABS<br />
4. SEG MAIN<br />
5. IN FILEA.MAIN<br />
6. SEG ALPHA*, (MAIN)<br />
7. IN FILEA.ALPHA1/A,.ALPHA2/A,.ALPHA3/A<br />
8. SEG BETA*, (ALPHA)<br />
9. IN FILEA.BETA1/B,.BETA2/B,.BETA3/B<br />
10. SEG CHI*,BETA<br />
11. IN FILEA.CHI1/C,.CHI2/C<br />
7830 9887–001 B–3
Collection Examples<br />
12. SEG DELTA*, (BETA,CHI)<br />
13. IN FILEA.DELTA1/D,.DELTA2/D<br />
14. SEG EPSO*, DELTA<br />
15. IN FILEA.EPSO1/E,.EPSO2/E<br />
16. SEG GAMMA*, (MAIN)<br />
17. IN FILEA.GAMMA1/G,.GAMMA2/G<br />
18. SEG PHI*, (DELTA,GAMMA)<br />
19. IN FILEA.PHI1,.PHI2<br />
20. LIB LIB1,LIB2<br />
21. END<br />
Description<br />
1. File LIB1 is prepared (@PREP) to create the relocatable entry-point table.<br />
2. File LIB2 is prepared (@PREP) to create the relocatable entry-point table.<br />
3. Calls the <strong>Collector</strong>. The I option specifies that symbolic element MAPSYM is<br />
introduced from the runstream. The L option specifies that a complete listing is to be<br />
produced. The absolute output element is called MAPABS. Both MAPSYM and<br />
MAPABS are placed in TPF$.<br />
4. Segment MAIN is the program’s main segment.<br />
5. Element MAIN is found in file FILEA.<br />
6. Segment ALPHA is marked for indirect loading. The starting address of ALPHA<br />
follows the last address of segment MAIN.<br />
7. Elements ALPHA1/A, ALPHA2/A, and ALPHA3/A are found in file FILEA and are<br />
included in the collection of segment ALPHA.<br />
8. Segment BETA is marked for indirect loading. The starting address of BETA follows<br />
the last address of segment ALPHA.<br />
9. Elements BETA1/B, BETA2/B, and BETA3/B are found in file FILEA and are included<br />
in the collection of segment BETA.<br />
10. Segment CHI is marked for indirect loading. The starting address of segment CHI is<br />
the same as the starting address of segment BETA.<br />
11. Elements CHI1/C and CHI2/C are in FILEA and are included in the collection of<br />
segment CHI.<br />
12. Segment DELTA is marked for indirect loading. The starting address of segment<br />
DELTA follows the last address of either segment BETA or segment CHI, whichever<br />
is longer.<br />
13. Elements DELTA1/D and DELTA2/D are in file FILEA and are included in the<br />
collection of segment DELTA.<br />
14. Segment EPSO is marked for indirect loading. The starting address of segment<br />
EPSO is the same as the starting address of segment DELTA.<br />
15. Elements EPSO1/E and EPSO2/E are in file FILEA and are included in the collection<br />
for segment EPSO.<br />
16. Segment GAMMA is marked for indirect loading. The starting address of segment<br />
GAMMA follows the last address of segment MAIN.<br />
B–4 7830 9887–001
Collection Examples<br />
17. Elements GAMMA1/G and GAMMA2/G are in file FILEA and are included in the<br />
collection of segment GAMMA.<br />
18. Segment PHI is marked for indirect loading. The starting address of segment PHI<br />
follows the last address of either segment DELTA or segment GAMMA, whichever<br />
is longer.<br />
19. Elements PHI1 and PHI2 in file FILEA are included in the collection of segment PHI.<br />
20. Files LIB1 and LIB2 are searched before searching the system library for the<br />
collection elements.<br />
21. End of the <strong>Collector</strong> directives.<br />
Figure B-1 and Figure B-2 show the instruction and data areas of main storage for the<br />
preceding example.<br />
Figure B–1. I Bank Main Storage Map for the Segmented MAPABS<br />
7830 9887–001 B–5
Collection Examples<br />
Figure B–2. D Bank Main Storage Map for the Segmented MAPABS<br />
B–6 7830 9887–001
B.3. Bank-Named Segmentation<br />
Collection Examples<br />
The following is an example of a bank-named segmented program showing the<br />
elements in file FILEA and their required outside references:<br />
The following example demonstrates the use of <strong>Collector</strong> directives to produce a banknamed<br />
segmented program named ABS:<br />
1. @PREP LIB1.<br />
2. @PREP LIB2.<br />
3. @MAP,IL MAPSYM,MAPABS<br />
4. IBANK,MD BANK1<br />
5. SEG MAIN<br />
6. IN FILEA.MAIN<br />
7. SEG ALPHA<br />
8. IN FILEA.ALPHA1/A,.ALPHA2/A<br />
9. SEG BETA*<br />
10. IN FILEA.BETA1/B<br />
11. DBANK,MC BANK2<br />
7830 9887–001 B–7
Collection Examples<br />
12. SEG MAIN<br />
13. IN FILEA.MAIN<br />
14. SEG ALPHA<br />
15. IN FILEA.ALPHA1/A,.ALPHA2/A<br />
16. SEG BETA*<br />
17. IN FILEA.BETA1/B<br />
18. IN FILEA.BETA2/B($ALL)<br />
19. IBANK BANK5,(BANK1)<br />
20. $ALL<br />
21. SEG MAIN<br />
22. IN FILEA.CHI3/C<br />
23. SEG EPSO<br />
24. IN FILEA.EPSO1/E,.EPSO2/E<br />
25. SEG PHI<br />
26. IN FILEA.PHI1,.PHI2<br />
27. SEG MAIN<br />
28. IBANK,U BANK3,BANK5-02000<br />
29. IN FILEA.BETA3/B<br />
30. SEG CHI<br />
31. IN FILEA.CHI1/C,.CHI2/C<br />
32. SEG DELTA,CHI<br />
33. IN FILEA.DELTA1/D,.DELTA2/D<br />
34. DBANK,U BANK4<br />
35. FORM BANK3<br />
36. DBANK BANK6,BANK4<br />
37. $ALL<br />
38. SEG MAIN<br />
39. IN FILEA.GAMMA1/G<br />
40. SEG GAMMA<br />
41. IN FILEA.ALPHA3/A,.GAMMA2/G<br />
Description<br />
1. An entry-point table is prepared for file LIB1.<br />
2. An entry-point table is prepared for file LIB2.<br />
3. Calls the <strong>Collector</strong>. The I option specifies that symbolic element MAPSYM is<br />
introduced from the runstream. The L option specifies that a complete listing is to be<br />
produced. The absolute output element is called ABS. Both MAPSYM and ABS are<br />
placed in TPF$.<br />
4. I bank BANK1 is a dynamic bank that is based on BDR0.<br />
5. Segment MAIN is the main segment for BANK1.<br />
6. The odd location counters from element MAIN in file FILEA are to be included.<br />
7. Segment ALPHA follows segment MAIN.<br />
8. The odd location counters from elements ALPHA1/A and ALPHA2/A in FILEA are to<br />
be included.<br />
9. Segment BETA follows segment ALPHA and is indirectly loaded.<br />
10. The odd location counters from element BETA1/B in FILEA are to be included.<br />
B–8 7830 9887–001
11. D bank BANK2 is the control bank and is based on BDR2.<br />
12. Segment MAIN is the main segment in BANK2.<br />
Collection Examples<br />
13. The even location counters from element MAIN in FILEA are to be included.<br />
14. Segment ALPHA follows segment MAIN.<br />
15. The even location counters from elements ALPHA1/A and ALPHA2/A in FILEA are to<br />
be included.<br />
16. Segment BETA is indirectly loaded and follows segment ALPHA.<br />
17. The even location counters from element BETA1/B in FILEA are to be included.<br />
18. All location counters from element BETA2/B in FILEA are to be included.<br />
19. I bank BANK5 is a static bank and follows BANK1.<br />
20. The $lcs specification is for the inclusion of all location counters of an element.<br />
21. Segment MAIN is the main segment of BANK5.<br />
22. All location counters from element CHI3/C in FILEA are to be included.<br />
23. Segment EPSO follows segment MAIN.<br />
24. All location counters from elements EPSO1/E and EPSO2/E in FILEA are to be<br />
included.<br />
25. Segment PHI follows segment EPSO.<br />
26. All location counters from elements PHI1 and PHI2 in FILEA are to be included.<br />
27. I bank BANK3 is a static bank based on BDR1. Its starting address is equal to the<br />
starting address of BANK5 minus 02000.<br />
28. Segment MAIN is the main segment of BANK3.<br />
29. The odd location counters from element BETA3/B in FILEA are to be included.<br />
30. Segment CHI follows segment MAIN.<br />
31. The odd location counters from elements CHI1/C and CHI2/C in FILEA are to be<br />
included.<br />
32. Segment DELTA starts at the same address as segment CHI.<br />
33. The odd location counters from elements DELTA1/D and DELTA2/D in FILEA are to<br />
be included.<br />
34. D bank BANK4 is a static bank based on BDR3. It follows D bank BANK2.<br />
35. The same segmentation structure and element inclusions for BANK3 are to be<br />
placed in BANK4, except that the even location counters of the elements are to be<br />
included rather than the odd location counters as in BANK3.<br />
36. D bank BANK6 is a static bank that starts at the same address as BANK4.<br />
37. The $lcs specification is for the inclusion of all location counters for the following<br />
included elements.<br />
38. Segment MAIN is the main segment of BANK6.<br />
39. All location counters of element GAMMA1/G in FILEA are to be included.<br />
7830 9887–001 B–9
Collection Examples<br />
40. Segment GAMMA follows segment MAIN.<br />
41. All location counters from elements ALPHA3/A and GAMMA2/G in FILEA are to be<br />
included.<br />
Figure B-3 through Figure B-7 show the bank structure of the program, the segment<br />
structure within each bank, and the element inclusion within the segments and banks.<br />
Figure B–3. Bank Structure of the Program ABS<br />
Note: Address space increases from left to right in the following diagrams.<br />
B–10 7830 9887–001
Figure B–4. Segment Structure of Bank1 in Program ABS<br />
Figure B–5. Segment Structure of Bank2 in Program ABS’<br />
Collection Examples<br />
7830 9887–001 B–11
Collection Examples<br />
Figure B–6. Segment Structure of Bank3 and Bank4 in Program ABS<br />
B–12 7830 9887–001
Collection Examples<br />
Figure B–7. Segment Structure of Bank5 and Bank6 in Program ABS<br />
7830 9887–001 B–13
Collection Examples<br />
B–14 7830 9887–001
Appendix C<br />
Processing Element Preambles<br />
C.1. Introduction<br />
An element preamble is attached to every relocatable element created by the language<br />
processors and by the <strong>Collector</strong>. The element preamble provides the following<br />
information that is needed when relocatable elements are collected to form an absolute<br />
or relocatable element:<br />
• The definition and location of each externally-defined name (entry point) in the<br />
element<br />
• The length, in words, under each location counter in the element<br />
• The table of the undefined symbols appearing in the element<br />
• Common blocks in the element<br />
When the preamble is processed<br />
• The entry points in the element are added to the <strong>Collector</strong> entry-point table.<br />
• Undefined symbols appearing in the element that have no corresponding entry in the<br />
entry-point table are listed in the undefined symbol table.<br />
• Undefined symbols in the element that have a name corresponding to an entry point<br />
in another element are linked to the entry-point table.<br />
Symbols are removed from the undefined symbol table as corresponding entry point<br />
names are found. Newly encountered undefined symbol names are added at the end of<br />
the undefined symbol table.<br />
C.2. INFO Groups<br />
One of the tables in the preamble of the relocatable contains INFO items that are used<br />
for communication between the language processors and the <strong>Collector</strong>. INFO groups 2,<br />
4, 7, 8, 9, and 10 are associated with a location counter. INFO group 11 is a void bank<br />
created in an absolute element. INFO group 12 includes a library search for INFO group<br />
12 items (for example, keywords and directives). The following INFO groups are<br />
recognized by the <strong>Collector</strong>:<br />
Group 2:<br />
Labeled Common<br />
7830 9887–001 C–1
Processing Element Preambles<br />
Group 4:<br />
Blank Common<br />
Group 7:<br />
Even starting address. A location counter that is associated with this group always<br />
starts on an even address; if necessary, it leaves the word preceding it unused.<br />
Group 8:<br />
Static diagnostic information. The text for a location counter that belongs to INFO 8<br />
is not loaded into main storage, but is available in the absolute element for use by<br />
diagnostic processors, such as the ASCII FORTRAN walkback routine.<br />
Group 9:<br />
Read-only. A nonvoid bank is classified as read-only if it meets the following criteria<br />
− It contains only location counters that are marked as read-only.<br />
− It is not segmented.<br />
− It does not contain any tables generated by the <strong>Collector</strong> (for example, the<br />
segmented load table).<br />
Compare the INFO 9 directive with the action of the TYPE READONLY directive and the<br />
use of the R option on the IBANK and DBANK directives.<br />
Group 10:<br />
Extended mode location counter. The bank this location counter is included in is<br />
marked as requiring extended mode, unless the B option is specified on the bank<br />
directive. If an INFO 10 directive appears in an element in an unprepped TPF$ that is<br />
not included in the collection, the bank that it is tentatively included in will still be<br />
marked as requiring extended mode.<br />
Group 11:<br />
Void bank. A void bank is created in the absolute element. The bank descriptor index<br />
(BDI) assigned to the bank is one higher than the BDI of the last “normal” user bank.<br />
A bank name can appear on more than one INFO 11 directive and is ignored after the<br />
first appearance. If an INFO 11 name appears in any other form in the collection<br />
(entry point, segment name, or non INFO 11 bank name) an error message is<br />
printed. The D (dynamic bank) option, (bit 16 of word 2 of control information table<br />
(CIT) item) and S (shared bank) option (bit 17 of word 2 of CIT item) are allowed. Void<br />
banks are assumed to be D banks unless the I bank option bit (bit 15 of word 2 of<br />
CIT item) is set. If an INFO 11 directive appears in an R option collection, it is<br />
maintained in the resulting relocatable. If an INFO 11 directive appears in an element<br />
in an unprepped TPF$ that is not included in the collection, a void bank is created in<br />
the resulting absolute.<br />
Group 12:<br />
C–2 7830 9887–001
Processing Element Preambles<br />
Library search. The order in which files specified by INFO 12 keywords are searched<br />
is the same as the order of the INFO 12 directives and can vary between collections<br />
because elements containing INFO group 12 items can be included in the collection<br />
in a different order. Any number of INFO 12 directives can appear within a<br />
relocatable element. Duplicate INFO group 12 items are allowed. Keywords are<br />
related to a file by use of an integer index created by COMUS. For example, the<br />
FORTRAN compiler can produce an INFO 12 directive of the form INFO 12<br />
‘FORTRAN’. The <strong>Collector</strong> would then search the index for the keyword FORTRAN<br />
and retrieve the integer index for it. The integer index would then be used to find the<br />
file name corresponding to this keyword; for example, the file name can be<br />
FOR*RLIB. This file would then be searched if necessary to satisfy external<br />
references. The actual keyword in the INFO group 12 item is in Fieldata. Meta-<br />
Assembler (MASM) performs the translation from ASCII if necessary. (For further<br />
information on INFO group 12 keywords and the search order, see 3.2.4.)<br />
These INFO Groups can be created by the MASM processor (see the Meta-Assembler<br />
(MASM) <strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong>.)<br />
In addition, the MASM processor recognizes Groups 1, 3, 5, and 6 and converts them to<br />
other types of information in the relocatable.<br />
7830 9887–001 C–3
Processing Element Preambles<br />
C–4 7830 9887–001
Appendix D<br />
Restrictions<br />
D.1. 262K Banks<br />
Due to the internal design of the <strong>Collector</strong>, the number of words in a bank is limited to<br />
262,143 (addresses 0 through 0777776), which is one less than the hardware limit of<br />
262,144. There are also some areas of the Exec that impose this limitation.<br />
D.2. 65K Location Counters<br />
No text word can have an offset of more than 65,535 (65K) from the start of a location<br />
counter. This restriction is essential to the old format of the relocatable. With the advent<br />
of the enhanced relocatable output routine, described in Appendix G, this restriction has<br />
been lifted to an offset of 262,143 (262K) from the start of a location counter. The Meta-<br />
Assembler (MASM) has been modified to generate this enhanced relocatable format.<br />
D.3. Relocation Order<br />
The relocation information for the special external references IBJ$ and DBJ$ must<br />
precede any relocation information for the u field of the same text word.<br />
The relocation information for the special external references BDICALL$, BDIREF$,<br />
LBDICALL$, and LBDIREF$ must precede any other relocation information for the u field<br />
of the same text word. This means that the assembler language programmer must use<br />
these references as BDICALL$+value, not value+BDICALL$.<br />
D.4. Relocatable Element Format Errors<br />
Some format errors in relocatable elements are not detected, because of their infrequent<br />
occurrence and the relatively high overhead required to detect these errors. These errors<br />
are caused only if the program creating the relocatable element is in error or if the<br />
element has been corrupted. Errors known not to be detected include<br />
• Incorrect length in location counter table (LCT)<br />
If the location counter table in the relocatable preamble specifies a location counter<br />
length that is too small, this error is undetected and may cause initial load errors. It is<br />
not an error to specify a length that is “too large,” since this implies the existence of<br />
a RES area at the end of the location counter.<br />
• Incorrect word count<br />
7830 9887–001 D–1
Restrictions<br />
D.5. EQU<br />
It is possible for the word count field in the relocation information to specify an illegal<br />
length.<br />
EQU directives of the form EQU ep1/ep2 have the following restrictions:<br />
1. If ep1 specifies a bank or segment name, the EQU directive is ignored.<br />
2. If ep2 specifies a bank or segment name and a later EQU directive specifies the<br />
same bank or segment name, the first EQU directive is ignored.<br />
3. The element containing ep2 must be included in the collection; it is not searched for<br />
in a LIB file.<br />
D.6. Implicit Call for Non-TPF$ File<br />
If you use the following statement where the file (file-name) contains no absolute<br />
elements or the most recent absolute of the file has been deleted, <strong>Collector</strong> is called<br />
implicitly, just as it is for TPF$. Note that there is no element specified on the @XQT<br />
statement.<br />
@XQT file-name.<br />
There is no last absolute for a file if the file contains no absolutes or the most recent<br />
absolute of the file has been deleted. In either case, the following message is output<br />
from the processor interface routine PREPRO, and an ER ERR$ termination of the<br />
<strong>Collector</strong> takes place.<br />
SI: BADLY CODED FIELD<br />
D.7. Truncation of Negative Fields<br />
To avoid problems with common-bank entry points, truncation of a negative field is not<br />
detected.<br />
D.8. LIB/NOT of Same File<br />
Currently, the <strong>Collector</strong> does not always recognize cases where two different names<br />
refer to the same file. Consider the following <strong>Collector</strong> directives:<br />
LIB USENAME.<br />
NOT FILE.ELT<br />
If USENAME and FILE refer to the same file, the NOT directive does not have the<br />
desired effect. This also applies if a file is referenced as “QUAL*FILE” and “FILE” since<br />
it is not obvious that FILE is not an @USE name.<br />
In addition, the directive “NOT SYS$*RLIB$” must specify the qualifier and file name in<br />
order to have the desired effect.<br />
D–2 7830 9887–001
D.9. Static Diagnostic Text<br />
Restrictions<br />
If static diagnostic (INFO group 8) text is present in more than one bank of a bankimplied,<br />
segmented collection, it is not processed correctly. To minimize this problem, all<br />
INFO group 8 text should be under odd-numbered location counters. Compilers that<br />
generate INFO group 8 text meet this requirement.<br />
D.10. Location Counters Restricted to 2047<br />
The total number of location counters must not exceed 2,047, numbered 0 through<br />
2,046.<br />
7830 9887–001 D–3
Restrictions<br />
D–4 7830 9887–001
Appendix E<br />
<strong>Collector</strong> Diagnostic Messages<br />
E.1. Introduction<br />
The diagnostic messages in this appendix are categorized into four different types:<br />
FATAL ERROR, ERROR, WARNING, and Information. The error count in the <strong>Collector</strong>’s<br />
end line includes only messages that are of type FATAL ERROR or ERROR.<br />
• FATAL ERROR<br />
This type of error is always printed by the <strong>Collector</strong> and has the prefix “*FATAL<br />
ERROR:.” It causes the <strong>Collector</strong> to stop processing, and no absolute relocatable<br />
element is produced.<br />
• ERROR<br />
This type of message is not printed if the N option is specified on the @MAP<br />
statement. If the X option is specified on the @MAP statement, then no output is<br />
produced. If the X option is not specified, processing continues and the resulting<br />
output is marked in error. ERROR messages have the prefix “*ERROR:.”<br />
• WARNING<br />
This type of message is not counted in the end line as an error; however, incorrect<br />
results can occur. WARNING messages are not printed if the N option is specified on<br />
the @MAP statement. WARNING messages have the prefix “*WARNING:.”<br />
• Information<br />
This is not an error message, but a normal notification of an action taken. This type<br />
of message is printed only if the S or L option is specified on the @MAP statement.<br />
Information messages do not have any prefix.<br />
E.2. FATAL ERROR Messages<br />
*FATAL ERROR: Above BANK directive not processed due to format error<br />
The immediately preceding IBANK or DBANK directive is improperly formatted.<br />
*FATAL ERROR: Addresses exceed 0777776 (262K)<br />
In a bank-implied collection, the assigned D bank addresses exceed 262,143.<br />
*FATAL ERROR: Addresses exceed 0777776 (262K) for D-bank bank-name<br />
7830 9887–001 E–1
<strong>Collector</strong> Diagnostic Messages<br />
In a bank-named collection, the assigned addresses for the named D bank exceed<br />
262,143.<br />
*FATAL ERROR: Addresses exceed 0777776 (262K) for I-bank bank-name<br />
In a bank-named collection, the assigned addresses for the named I bank exceed<br />
262,143.<br />
*FATAL ERROR: Address too large<br />
An address or offset on an IBANK or DBANK directive exceeds 0777000.<br />
*FATAL ERROR: Assumed main segment name $MAIN$ duplicated by entry<br />
point or bank name<br />
If there are no SEG directives in a collection, a main segment named $MAIN$ is created.<br />
At the time this segment is created, $MAIN$ has already been used as a bank or entrypoint<br />
name.<br />
*FATAL ERROR: Attempting to read Element Table for file file-name -<br />
BSP$ (RPFET$) status: status<br />
An error occurred trying to read the specified file’s element table. See the System<br />
Service Routines Library (SYSLIB) <strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong> for a description of<br />
status bits.<br />
*FATAL ERROR: Attempting to read Entry Point Table for file file-name -<br />
BSP$ (RPFEPT$) status: status<br />
An error occurred trying to read the entry-point table for the specified file that was<br />
named on a LIB directive. See the System Service Routines Library (SYSLIB)<br />
<strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong> for a description of status bits.<br />
*FATAL ERROR: Bank bank-name duplicately defined<br />
The specified bank name has already been encountered on an IBANK or DBANK<br />
directive.<br />
*FATAL ERROR: Bank indirectly defines itself<br />
A bank in the bank structure is related to another bank that is directly or indirectly related<br />
to the first bank. For example, bank A follows bank B and bank B follows bank A.<br />
*FATAL ERROR: Bank bank-name is not properly defined<br />
The named bank has not been specified in the name-1 subfield on an IBANK or DBANK<br />
directive, but was used as a bank name in a LIB, IN, IBANK, or DBANK directive.<br />
*FATAL ERROR: Bank list must contain at least one bank name<br />
The bank-list subfield contains only numbers in parentheses.<br />
E–2 7830 9887–001
<strong>Collector</strong> Diagnostic Messages<br />
*FATAL ERROR: BSP$ error return for file file-name at address address<br />
BSP$ status status<br />
Indicates an internal error or a corrupted file. See the System Service Routines Library<br />
(SYSLIB) <strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong>, for a description of status bits.<br />
*FATAL ERROR: Collection invalid - None of the banks in this collection<br />
can be the control bank or initially based<br />
The link vector bank cannot be the control bank or initially based. Z option (VOID) banks<br />
cannot be the control bank or initially based.<br />
*FATAL ERROR: <strong>Collector</strong> storage exhausted; processing terminated.<br />
Restructure your collection to avoid excessive memory use.<br />
Restructure your collection to avoid excessive memory use.<br />
*FATAL ERROR: CSMS - Insufficient space in CDB internal storage for<br />
last transaction<br />
*FATAL ERROR: CSMS - Internal storage address is bad<br />
*FATAL ERROR: CSMS - Internal storage control information is bad<br />
*FATAL ERROR: CSMS - Internal storage free chain is bad<br />
*FATAL ERROR: CSMS - CDB BDI or allocation offset information is bad<br />
*FATAL ERROR: CSMS - CDB or area is too short for initialization<br />
*FATAL ERROR: CSMS - Illegal reference to CDB storage<br />
*FATAL ERROR: CSMS - Attempted store beyond allocated limits<br />
*FATAL ERROR: CSMS - Free of memory allocated by another run<br />
*FATAL ERROR: CSMS - Second attempt to free storage<br />
*FATAL ERROR: CSMS - Internal CDB error information in A0-A3<br />
Indicates an internal <strong>Collector</strong> error. Please submit a tape containing the necessary<br />
relocatables and libraries needed to re-create the problem.<br />
*FATAL ERROR: Element element for RSEG segment cannot load data into<br />
common block common-block located in segment segment<br />
*FATAL ERROR: Element element for segment segment cannot load data into<br />
common block common-block located in RSEG segment<br />
*FATAL ERROR: Element element has more than 2,047 location counters.<br />
Location counter numbers must be in the range 0 - 2,046<br />
7830 9887–001 E–3
<strong>Collector</strong> Diagnostic Messages<br />
The specified relocatable element has more than 2,047 location counters. This can be<br />
caused by an internal <strong>Collector</strong> error or a corrupted relocatable element.<br />
*FATAL ERROR: Fatal error occurred while interpreting map symbolic<br />
This message follows one or more messages describing the error. Segment LANG<br />
interprets the <strong>Collector</strong> directives.<br />
*FATAL ERROR: FIRSTBDI value is too large: Maximum BDI 4092 (007774)<br />
The <strong>Collector</strong>'s maximum internal user-bank descriptor index (BDI) value cannot exceed<br />
4092 (07774).<br />
*FATAL ERROR: FIRSTBDI value is too large for the number of banks<br />
There are 12 bits available for a BDI value; therefore, the maximum BDI value is 07777.<br />
Banks specified on a $INFO 11 directive are also given a BDI value.<br />
*FATAL ERROR: First segment for last bank is not main segment<br />
The first segment specified for the last bank in the collection does not have the same<br />
main segment name as the other banks.<br />
*FATAL ERROR: entry-point has already been used as bankname<br />
The entry point specified on the WINDOW directive has already been used on a BANK<br />
directive.<br />
*FATAL ERROR: bank-name has already been used as non-bank name<br />
A bank name must be different from all segment names and entry points in the<br />
collection.<br />
*FATAL ERROR: Highest location counter number allowed is 2047 - highest<br />
location counter needed is location-counter<br />
In an R option collection, all common blocks are assigned location counter numbers<br />
greater than the highest location counter number found in any of the included relocatable<br />
elements. This message occurs when there are not enough location counter numbers<br />
available for assignment to all common blocks.<br />
*FATAL ERROR: Internal <strong>Collector</strong> error – can not buy bank to create<br />
link vector bank<br />
Unable to perform the ER BANK$ to acquire a bank to be used as the link vector bank.<br />
*FATAL ERROR: Internal <strong>Collector</strong> error: unexpected return from ADDIN<br />
An error was returned from the ADDIN routine that builds the internal <strong>Collector</strong> tables for<br />
elements specified on IN directives.<br />
E–4 7830 9887–001
<strong>Collector</strong> Diagnostic Messages<br />
*FATAL ERROR: value is illegal length for location counter locationcounter<br />
in element element<br />
The relocatable element's preamble specifies a length of greater than 65,535 for the<br />
given location counter or the given location counter is nonexistent and a length of greater<br />
than zero is specified. In either case, this indicates that the relocatable was incorrectly<br />
generated or that the file containing the relocatable has been corrupted.<br />
*FATAL ERROR: file-name is not a program file<br />
*FATAL ERROR: The level of <strong>Collector</strong> Common Bank COLLECTOR$01 (0403030)<br />
does not match the level of the <strong>Collector</strong> D Bank DATACON being<br />
executed.<br />
The <strong>Collector</strong> absolute element containing only the <strong>Collector</strong> D banks and requiring the<br />
installed <strong>Collector</strong> common I banks has been copied from a tape or file and executed out<br />
of its normal installed environment. In order to successfully execute the absolute<br />
element, it must be installed correctly with its matching <strong>Collector</strong> absolute element<br />
containing the matching <strong>Collector</strong> common I banks. These <strong>Collector</strong> absolute elements<br />
are not intended to be executed out of alternative files.<br />
*FATAL ERROR: Main segment name must be same for all banks<br />
In a bank-named collection, the main segment of each bank must have the same name<br />
as the main segment of all other banks.<br />
*FATAL ERROR: No available bank for control bank<br />
In a bank-named collection, there is no bank that can be the control bank.<br />
*FATAL ERROR: No files available to <strong>Collector</strong><br />
Due to facility errors or NOT directives, no files are available.<br />
*FATAL ERROR: No relocatable element created - status from ER PFWL$:<br />
status<br />
An error occurred in an R option collection attempting to output the relocatable element.<br />
The error was received while attempting to retrieve the next write location address of<br />
the program file. See the Exec System Software Executive Requests <strong>Programming</strong><br />
<strong>Reference</strong> <strong>Manual</strong> for a complete description of the statuses.<br />
*FATAL ERROR: No relocatable element created - I/O error: status<br />
An I/O error occurred in an R option collection attempting to output the relocatable<br />
element. See the Exec System Software Executive Requests <strong>Programming</strong> <strong>Reference</strong><br />
<strong>Manual</strong> for a complete description of the statuses.<br />
*FATAL ERROR: No relocatable element created - ROR$E internal error:<br />
An internal error occurred in an R option collection attempting to output the relocatable<br />
element. This can indicate a problem with the ROR$E routine.<br />
7830 9887–001 E–5
<strong>Collector</strong> Diagnostic Messages<br />
*FATAL ERROR: No relocatable element created - status from ER PFI$:<br />
status<br />
An I/O error occurred in an R option collection attempting to output the relocatable<br />
element. The error was received while attempting to update the element table of the<br />
program file. See the Exec System Software Executive Requests <strong>Programming</strong><br />
<strong>Reference</strong> <strong>Manual</strong> for a complete description of the statuses.<br />
*FATAL ERROR: No relocatable element created - invalid Base Table<br />
information: status<br />
An error occurred in an R option collection attempting to output the relocatable element.<br />
See G.5 a complete description of the error.<br />
*FATAL ERROR: Number of banks n exceeds maximum number of user banks<br />
007771<br />
n indicates the number of banks in the collection. While the <strong>Collector</strong> is interpreting the<br />
map symbolic, n indicates the number of banks it encounters. The <strong>Collector</strong> processes<br />
VOID ($INFO 11) banks later in the collection and does each one individually. Thus<br />
whenever a VOID bank exceeds the maximum number, this message is displayed and<br />
the collection terminated, because there is no way to know at that point whether there<br />
will be more void banks to process.<br />
*FATAL ERROR: Only common bank directives - collection invalid<br />
Only IBANK and DBANK directives with the X option appeared in the collection. No<br />
absolute element is produced.<br />
*FATAL ERROR: Only Z option bank directives - collection invalid<br />
Only IBANK and DBANK directives with the Z option appeared in the collection. No<br />
absolute element is produced.<br />
*FATAL ERROR: PFWL$ error status status for file file-name<br />
See the Exec System Software Executive Requests <strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong> for<br />
a description of the program file package (PFP) status.<br />
*FATAL ERROR: Previous FORM on bank precludes defining another SEG for<br />
this bank<br />
Since a FORM on a bank-name creates an exact duplication of a previous bank structure,<br />
no additional SEG, DSEG, or RSEG directives can be specified for the bank being<br />
generated.<br />
*FATAL ERROR: Relocatable element element contains an invalid<br />
relocation bit stream<br />
An error occurred while processing the text of the relocatable element. This indicates<br />
that the format of the relocatable element is in error or unknown to this level of the<br />
<strong>Collector</strong>.<br />
E–6 7830 9887–001
<strong>Collector</strong> Diagnostic Messages<br />
*FATAL ERROR: Relocatable element element has an illegal format or is<br />
of a format value1 not handled by the relocatable binary format value1<br />
available with this <strong>Collector</strong>.<br />
The relocatable format version specified in the base table of the relocatable is an<br />
unknown format. This can indicate a relocatable format which is in error or unknown to<br />
this level of the collector.<br />
*FATAL ERROR: Return from BSP$ attempting to access file at filename at<br />
address address - I/O status status<br />
An I/O error occurred while the <strong>Collector</strong> was trying to read or write the specified file at<br />
the specified address in the file. See the Exec System Software Executive Requests<br />
<strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong> for status description.<br />
*FATAL ERROR: Return from SIR$ (CL<strong>OS</strong>R$) - status from I/O (or PFI$ if<br />
04000xx): status<br />
An error occurred while the <strong>Collector</strong> was trying to close the source input element. See<br />
the Exec System Software Executive Requests <strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong> for<br />
status description.<br />
*FATAL ERROR: Return from SIR$ (GETSR$) - status from I/O: status<br />
An error occurred while the <strong>Collector</strong> was requesting the next source image from the<br />
source input element. See the Exec System Software Executive Requests <strong>Programming</strong><br />
<strong>Reference</strong> <strong>Manual</strong> for status description.<br />
*FATAL ERROR: Return from SIR$ (OPNSR$) - status from I/O: status<br />
An error occurred while the <strong>Collector</strong> was trying to open the source input element for<br />
reading. See the Exec System Software Executive Requests <strong>Programming</strong> <strong>Reference</strong><br />
<strong>Manual</strong> for status description.<br />
*FATAL ERROR: RSEG segment has size value greater than 65K - not<br />
included in collection<br />
The specified RSEG is larger than 65,535 by the specified size. It is not included in the<br />
collection since the maximum size of an RSEG is 65,535.<br />
*FATAL ERROR: Scratch files could not be assigned - GETPSF$ status:<br />
status<br />
The files PSF$ and PSF1$ used by the <strong>Collector</strong> could not be assigned. See the System<br />
Service Routines Library (SYSLIB) <strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong> for a description of<br />
the GETPSF$ status.<br />
*FATAL ERROR: Segment indirectly defines itself<br />
A segment in the segment structure is related to another segment that is directly or<br />
indirectly related to the first segment. For example, segment A follows segment B and<br />
segment B follows segment A.<br />
7830 9887–001 E–7
<strong>Collector</strong> Diagnostic Messages<br />
*FATAL ERROR: Segment name segment duplicated<br />
The specified name has been used to define more than one segment in the collection.<br />
*FATAL ERROR: Segment segment not properly defined<br />
The segment name has not been specified in the name-1 subfield on a SEG or DSEG<br />
directive.<br />
*FATAL ERROR: Source input is invalid SDF - SIR$ (OPNSR$) error<br />
The symbolic element specified in the source input field on the @MAP processor call<br />
statement does not contain general symbolic type SDF (TYPE S).<br />
*FATAL ERROR: Symbol name name duplication error<br />
The specified name, present on an RSEG, SEG, DSEG, IBANK, or DBANK directive, has<br />
already been found as a nonsegment or nonbank name. This produces a fatal error.<br />
E.3. ERROR Messages<br />
*ERROR: Above directive ignored - duplicate RSEG name<br />
RSEG names must be unique.<br />
*ERROR: Above directive ignored - not allowed in collections with the<br />
WINDOW directive<br />
Segments are not allowed in collections that contain WINDOW directives.<br />
*ERROR: Above directive not allowed after Z option or VOID attribute<br />
bank<br />
No FORM, IN, or SEG directives are allowed following a Z option or VOID attribute bank.<br />
*ERROR: Above directive not allowed following a common bank<br />
Following an IBANK or DBANK directive specifying a common bank, another IBANK or<br />
DBANK directive must precede any SEG, DSEG, RSEG, XSEG, or IN directive.<br />
*ERROR: Above directive not allowed following the link vector bank<br />
No IN, SEG, or FORM directives are allowed for the link vector bank.<br />
*ERROR: Above directive not processed due to format error<br />
The immediately preceding source directive is improperly formatted. The directive is<br />
ignored.<br />
*ERROR: Above directive not processed - if banks are desired a BANK<br />
directive must precede any SEG or IN directives<br />
E–8 7830 9887–001
<strong>Collector</strong> Diagnostic Messages<br />
The first IBANK or DBANK directive was encountered after a SEG, RSEG, DSEG, XSEG,<br />
or IN directive has been processed.<br />
*ERROR: Above F-cycle subfield not properly formatted<br />
The F-cycle subfield in the immediately preceding source directive is improperly<br />
formatted.<br />
*ERROR: Above read-key subfield not properly formatted<br />
The read key subfield in the immediately preceding source directive is improperly<br />
formatted.<br />
*ERROR: A common bank can have no relationships<br />
An IBANK or DBANK directive with an X option has a bank-list subfield specified.<br />
*ERROR: AFCB attribute ignored - no bank name specified<br />
No bank name was specified with parentheses. If the parentheses are used, a bank<br />
name must also be specified.<br />
*ERROR: AFCB attribute ignored - no BDI value specified<br />
No BDI value was specified within the parentheses. If the parentheses are used, a BDI<br />
value must also be specified.<br />
*ERROR: AFCB attribute ignored - previous IN, SEG or FORM directive<br />
encountered<br />
No FORM, IN, or SEG directives are allowed with the alternate file common bank (AFCB)<br />
attribute unless the BDI value is also specified.<br />
*ERROR: name already defined<br />
The symbol has appeared in the first subfield of two or more EQU directives, or it is a<br />
bank or segment name.<br />
*ERROR: value at address address bits bits - bits element element is<br />
possible over-65K address field<br />
The D option was specified and an address field contains a value greater than 65,535.<br />
*ERROR: B and N option conflict - both ignored<br />
Both the B and N options were specified on the same BANK directive.<br />
*ERROR: Bad placement of character char<br />
The character is in an illegal position. This can indicate use of a bank-list field on an IN<br />
directive with no preceding IBANK or DBANK directive.<br />
7830 9887–001 E–9
<strong>Collector</strong> Diagnostic Messages<br />
*ERROR: Bank already based on BDR 0 - MAINI or BDR0 subattribute<br />
ignored<br />
The M option, the BANKINFO INITIAL(MAINI), or the BANKINFO INITIAL(BDR0) has<br />
been specified for more than one BANK directive.<br />
*ERROR: Bank already based on BDR 0 - M option ignored<br />
The M option, the BANKINFO INITIAL(MAINI), or the BANKINFO INITIAL(BDR0) has<br />
been specified for more than one BANK directive.<br />
*ERROR: Bank already based on BDR 1 - UTILI or BDR1 subattribute<br />
ignored<br />
The U option, the BANKINFO INITIAL(UTILI), or the BANKINFO INITIAL(BDR1) has been<br />
specified for more than one BANK directive.<br />
*ERROR: Bank already based on BDR 1 - U option ignored<br />
The U option, the BANKINFO INITIAL(UTILI), or the BANKINFO INITIAL(BDR1) has been<br />
specified for more than one BANK directive.<br />
*ERROR: Bank already based on BDR 2 - MAIND or BDR2 subattribute<br />
ignored<br />
The M option, the BANKINFO INITIAL(MAIND), or the BANKINFO INITIAL(BDR2) has<br />
been specified for more than one BANK directive.<br />
*ERROR: Bank already based on BDR 2 - M option ignored<br />
The M option, the BANKINFO INITIAL(MAIND), or the BANKINFO INITIAL(BDR2) has<br />
been specified for more than one BANK directive.<br />
*ERROR: Bank already based on BDR 3 - UTILD or BDR3 subattribute<br />
ignored<br />
The M option, the BANKINFO INITIAL(UTILD), or the BANKINFO INITIAL(BDR3) has<br />
been specified for more than one BANK directive.<br />
*ERROR: Bank already based on BDR 3 - U option ignored<br />
The M option, the BANKINFO INITIAL(UTILD), or the BANKINFO INITIAL(BDR3) has<br />
been specified for more than one BANK directive.<br />
*ERROR: Bank directive must precede BANKINFO directive - BANKINFO<br />
directive ignored<br />
The BANKINFO directive defines the previous bank. Therefore, a BANK directive must<br />
precede the BANKINFO directive.<br />
*ERROR: BANK directive must precede WINDOW directive - WINDOW directive<br />
ignored<br />
E–10 7830 9887–001
<strong>Collector</strong> Diagnostic Messages<br />
Windows are defined for particular banksA BANK directive must precede a WINDOW<br />
directive.<br />
*ERROR: BANK directives not allowed in R option collection<br />
An IBANK or DBANK directive appeared in an R option collection.<br />
*ERROR: BANKINFO attribute AFCB(bankname,bdi) conflicts with a previous<br />
AFCB BANKINFO attribute or an X attribute specification on the BANK<br />
directive - attribute is ignored.<br />
The previous BANK directive contains an X attribute specification or the BANKINFO<br />
attribute AFCB without subattributes has already been specified for a bank. The<br />
BANKINFO attribute AFCB (bankname,bdi) cannot also be specified for the same bank<br />
since these attributes produce conflicting results.<br />
*ERROR: BANKINFO attribute AFCB conflicts with a previous BANKINFO AFCB<br />
attribute which contains subattributes - attribute is ignored.<br />
The BANKINFO attribute AFCB (bankname,bdi) has already been specified for a bank.<br />
The BANKINFO attribute AFCB without subattributes cannot also be specified for the<br />
same bank since these attributes produce conflicting results.<br />
*ERROR: BANKINFO directive ignored - no attributes specified<br />
The BANKINFO directive was ignored because no attributes were specified.<br />
*ERROR: Bank, segment, or segment within bank not previously defined<br />
A FORM directive has been performed on an undefined segment or bank, or on a<br />
segment that is not contained in the specified bank.<br />
*ERROR: BDI of entry point entry-point not available to element due to<br />
local inclusion<br />
The entry point has been referenced by BDICALL$ or BDIREF$, but because of local<br />
element inclusion, it is not defined for the referencing bank.<br />
*ERROR: BDI value on BANKINFO directive is in error - AFCB attribute<br />
ignored<br />
The bank descriptor index (BDI) value cannot contain alphabetic characters. Only numeric<br />
characters are allowed.<br />
*ERROR: BDR attribute ignored - no BDR value specified<br />
The bank descriptor register (BDR) attribute was specified on a BANKINFO directive<br />
without a BDR value. The BDR value must be an integer from 0 to 3.<br />
*ERROR: BDR value conflicts with BANKINFO attributes or bank options -<br />
BDR value will be ignored<br />
7830 9887–001 E–11
<strong>Collector</strong> Diagnostic Messages<br />
The BDR value must be an integer from 0 to 3. The BDR value must not conflict with the<br />
M and U options on the bank directive or with the subattributes specified with the<br />
INITIAL attribute on the BANKINFO directive. The order of precedence is as follows:<br />
IBANK,M or MAINI = BDR is 0<br />
IBANK,U or UTILI = BDR is 1<br />
DBANK,M or MAIND = BDR is 2<br />
DBANK,U or UTILD = BDR is 3<br />
*ERROR: BDR value conflicts with bank options - BDR value will be<br />
ignored<br />
The BDR value must be an integer from 0 to 3. The BDR value must not conflict with the<br />
M and U options on the bank directive.<br />
IBANK,M = BDR 0<br />
IBANK,U = BDR 1<br />
DBANK,M = BDR 2<br />
DBANK,U = BDR 3<br />
*ERROR: BDR value on bank card is in error - default values will be<br />
used<br />
The BDR value must be an integer from 0 to 3. Default values for initially loaded banks<br />
are as follows:<br />
IBANK,M = BDR 0<br />
IBANK,U = BDR 1<br />
DBANK,M = BDR 2<br />
DBANK,U = BDR 3<br />
The default value of 0 is used for banks that are not initially loaded.<br />
*ERROR: BDR value on BANKINFO card is in error - default values will be<br />
used<br />
The BDR value must be an integer from 0 to 3. Default values for initially based banks<br />
are as follows:<br />
IBANK,M or MAINI = BDR is 0<br />
IBANK,U or UTILI = BDR is 1<br />
E–12 7830 9887–001
DBANK,M or MAIND = BDR is 2<br />
DBANK,U or UTILD = BDR is 3<br />
<strong>Collector</strong> Diagnostic Messages<br />
The default value of 0 is used for banks that are not initially based. The format is as<br />
follows:<br />
BANKINFO BDR(#)<br />
*ERROR: Bit limits defining field invalid in element element<br />
The relocatable element is formatted incorrectly. It was either created incorrectly or has<br />
been corrupted.<br />
*ERROR: Both T and F options given - both ignored<br />
The @MAP processor call statement contained both the T and F options.<br />
*ERROR: CLRAFCM sensitivity of absolute element conflicts with SETAFCM<br />
sensitivity of start address element<br />
When the program is loaded for execution, the arithmetic fault compatibility mode is set<br />
so that no interrupt is taken when a floating-point overflow, floating-point underflow, or<br />
divide fault occurs. However, when execution is initialized, the program’s code expects<br />
interrupts to be taken. This is a logical conflict.<br />
*ERROR: <strong>Collector</strong> tag MAPCALL$ or MAPGOTO$ used without a link vector<br />
bank<br />
The <strong>Collector</strong> defined tags MAPCALL$ and MAPGOTO$ are used with a link vector bank.<br />
A link vector bank is defined with the VECTOR attribute specified on the BANKINFO<br />
directive.<br />
*ERROR: Combined location counter location-counter length exceeds 262K<br />
This message occurs with an R option collection when the combined lengths of all<br />
location counters of the specified number in the included relocatable elements exceed<br />
262K.<br />
*ERROR: Common bank cannot be control bank - CONTROL attribute ignored<br />
The X option or the BANKINFO AFCB(#) has been specified with the BANKINFO<br />
CONTROL. The BANKINFO CONTROL is ignored.<br />
*ERROR: Common bank cannot be control bank - C option ignored<br />
Both C and X options have been specified on the same IBANK or DBANK source<br />
directive. The C option (control bank) is ignored.<br />
*ERROR: Common bank cannot be control bank - C option or CONTROL<br />
attribute ignored<br />
7830 9887–001 E–13
<strong>Collector</strong> Diagnostic Messages<br />
The X option or the BANKINFO AFCB(#) has been specified with the BANKINFO<br />
CONTROL or with the C option on the bank directive. The C option or the CONTROL<br />
attribute is ignored.<br />
*ERROR: Common block common-block included more than once either<br />
directly or by FORM - only first IN of common block processed<br />
The specified common block was either named on two or more IN directives or was<br />
included more than once by use of the FORM directive.<br />
*ERROR: Common block location counter used as INFO-8 location counter<br />
in element element<br />
The same location counter cannot be used both as INFO 8 and as a common block.<br />
*ERROR: Control bank ambiguity - CONTROL attribute ignored<br />
The C option or the BANKINFO CONTROL can be specified only once in a collection for<br />
either an IBANK or DBANK source directive. The C option or the CONTROL attribute has<br />
already been specified once.<br />
*ERROR: Control bank ambiguity - C option ignored<br />
The C option can be specified only once in a collection on either an IBANK or DBANK<br />
source directive. The C option has already been specified once.<br />
*ERROR: Control bank has S option - segmentation not allowed<br />
A program whose control bank has the S option specified contains segments.<br />
*ERROR: COR calls on undefined location counter location-counter in<br />
element element<br />
The specified location counter number is not present in the named relocatable element.<br />
*ERROR: COR ignored - No global location counter location-counter in<br />
element element<br />
A COR source directive specified a location counter that was not included globally in a<br />
bank-named collection.<br />
*ERROR: COR not used with R option<br />
A COR source directive appeared in an R option collection. The source directive is<br />
ignored.<br />
*ERROR: COR of nonexistent element element<br />
A COR source directive specified an element that was not included in the collection.<br />
*ERROR: CSF$ status status from image<br />
E–14 7830 9887–001
<strong>Collector</strong> Diagnostic Messages<br />
The image was rejected by ER CSF$. The file named is excluded from the collection. See<br />
the Exec System Software Executive Requests <strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong> for<br />
status description.<br />
*ERROR: DBJ$ is not used in an op code field - referenced in element<br />
The symbol DBJ$ must appear as an external reference in bits 0 through 9. See 4.5.1 for<br />
correct use of DBJ$.<br />
*ERROR: DEF and REF not allowed with V option<br />
A DEF or REF directive has been specified with a V option collection. The directives are<br />
ignored because the tables generated by these directives are placed in the program’s D<br />
bank, which will be nonexistent in the absolute element.<br />
*ERROR: Directed LIB for file file-name illegal - LIB file-name assumed<br />
A directed LIB directive has been found in a bank-implied collection. The directive is<br />
processed as LIB file-name.<br />
*ERROR: DLIB directive is valid only for bank named collections -<br />
directive ignored<br />
A directed LIB (DLIB) directive has been found in a bank-implied collection. The directive<br />
is ignored.<br />
*ERROR: DLIB directive is valid only with DEFAULT$LIBS - directive<br />
ignored<br />
The keyword DEFAULT$LIBS must be used on the DLIB directive. The format is - DLIB<br />
DEFAULT$LIBS.(bank-name/$lcs,…)<br />
*ERROR: DLIB directive ignored - first occurrence of DLIB directive<br />
will be used<br />
The DLIB directive can be used only once. The first occurrence of the DLIB directive will<br />
be used. All other occurrences are ignored.<br />
*ERROR: DLIB directive not allowed in R option collections<br />
Default libraries are not searched during R option collections. The DLIB directive is not<br />
allowed in R option collections.<br />
*ERROR: bank-name does not exist as a common bank<br />
The name of the common bank specified for initial basing is not defined in the collection.<br />
*ERROR: Element element ambiguity in file file-name Element list:<br />
The specified element name is found for more than one relocatable element in the file.<br />
The list following the message contains the element name and version name for each<br />
7830 9887–001 E–15
<strong>Collector</strong> Diagnostic Messages<br />
such element in the file. None of the listed elements is included in the collection. CLASS<br />
directives can resolve the ambiguity.<br />
*ERROR: Element element exists in file file-name with different<br />
versions<br />
The specified element exists in the named file with more than one version name.<br />
*ERROR: Element element/version in file file-name bypassed - duplicates<br />
element name already specified<br />
In processing a whole file IN (IN file-name.), an element in file-name is found that<br />
duplicates the name of an element from an IN directive from another file.<br />
*ERROR: Element element in file file-name bypassed - duplicates already<br />
encountered common block<br />
A relocatable element with the same name as a common block that has already been<br />
included in the collection is encountered. The relocatable element is ignored.<br />
*ERROR: Element inclusion is not allowed after FORM directive on a bank<br />
A directive of the form FORM bank-name was followed by an IN directive. The IN<br />
directive is ignored since the FORM directive implies that the bank structure is to be the<br />
same as the specified bank.<br />
*ERROR: Element element not found in file file-name<br />
The element specified on an IN directive could not be found in the named file.<br />
*ERROR: Element element not included - has zero length location counter<br />
location-counter - no value given<br />
The specified element contains a zero length location counter and is excluded from the<br />
collection.<br />
*ERROR: Element element specified on TYPE IBJLNK not included in<br />
collection<br />
A TYPE IBJLNK source directive was specified with the named element that was not<br />
included in the collection.<br />
*ERROR: Element element start address not used - not initially loaded<br />
The specified element is not in an initially based bank.<br />
*ERROR: Element element start address address not used - outside main<br />
segment limits<br />
The specified element’s start address is not included in the main segment of a bank.<br />
E–16 7830 9887–001
<strong>Collector</strong> Diagnostic Messages<br />
*ERROR: Element element used BDICALL$/BDIREF$ with label which is<br />
defined under zero length location counter - cannot be satisfied<br />
The label used with BDICALL$/BDIREF$ in the named element is defined under a zero<br />
length location counter.<br />
*ERROR: Element element used BDICALL$/BDIREF$ with label which is local<br />
to another bank - cannot be satisfied<br />
The specified element used BDICALL$/BDIREF$ with a label that is defined in an<br />
element that was locally included in another bank.<br />
*ERROR: Element element was not found for COR<br />
An element named on a COR parameter was not found.<br />
*ERROR: Element element was not found for SNAP<br />
An element named on a SNAP parameter was not found.<br />
*ERROR: ENT directive cannot have a numeric field<br />
The parameter field of the ENT directive must contain an externalized entry-point name.<br />
*ERROR: ENT entry point entry-point not global - not used<br />
The named entry point that was specified on an ENT directive is included only locally.<br />
*ERROR: Entry point entry-point ambiguity in file file-name Element<br />
list:<br />
The specified entry point was found in more than one element in the file. A list of the<br />
elements in which it was found follows. CLASS or NOT directives can help correct the<br />
problem. This message is not printed for FORTRAN library entry points B2L$ and B2O$,<br />
which are handled as special cases.<br />
*ERROR: Entry point entry-point in indirect segment referenced<br />
illegally with offset from element<br />
An entry point in the I bank of an indirectly loaded segment cannot be referenced with a<br />
plus or minus offset unless the reference is made from within the segment containing<br />
the entry point. If the reference is from outside the segment containing the entry point,<br />
the offset is ignored.<br />
*ERROR: Entry point entry-point not defined in bank bank-name - no<br />
window created<br />
The entry point/tag specified on the WINDOW directive must be defined in the bank<br />
where the window is defined.<br />
*ERROR: Entry point entry-point not global - zero used in COR<br />
7830 9887–001 E–17
<strong>Collector</strong> Diagnostic Messages<br />
A value of zero has been used for an entry point specified in a COR source directive as<br />
no global value was found for the entry point.<br />
*ERROR: Entry point entry-point not global - zero used in SNAP<br />
A value of zero has been used for an entry point specified in a SNAP source directive as<br />
no global value was found for the entry point.<br />
*ERROR: Entry point entry-point not valid in both REF and DEF<br />
The same entry-point name has been specified on both a DEF and REF source directive.<br />
The first source directive with the name is the only one processed. All others are<br />
ignored.<br />
*ERROR: Entry point entry-point referenced from element element is<br />
undefined name<br />
A reference to an entry point that is not defined in any of the elements included in the<br />
collection has occurred. This message is not printed if the reference is made from a<br />
code-stripped bank.<br />
*ERROR: Entry point entry-point referenced from element element is<br />
undefined name for bank bank-name<br />
Because of local element inclusion, the specified entry point cannot be referenced from<br />
the named bank.<br />
*ERROR: Entry point entry-point referenced from entry point entry-point<br />
is undefined name<br />
A reference to an entry point from another entry point has occurred. The first entry point<br />
is not defined in any of the elements included in the collection.<br />
*ERROR: Entry point entry-point specified on TYPE IBJLNK not defined in<br />
collection<br />
A TYPE IBJLNK source directive was specified with an entry point that was not defined<br />
in any element included in the collection.<br />
*ERROR: Entry point entry-point used to define entry point entry-point<br />
is not an absolute value<br />
A reference to an entry point from another entry point has occurred. The first entry point<br />
is not an absolute value.<br />
*ERROR: ENT specified entry point entry-point is not in an initially<br />
based bank<br />
The program start address must be in an initially based bank.<br />
*ERROR: ENT specified entry point entry-point is not in any included<br />
element - not used<br />
E–18 7830 9887–001
<strong>Collector</strong> Diagnostic Messages<br />
The entry point specified on an ENT source directive could not be found in any element<br />
included in the collection.<br />
*ERROR: ENT specified entry point entry-point is not in the main<br />
segment<br />
The program start address must be in the main segment.<br />
*ERROR: EXTENDED and NOTEXTENDED attribute conflict - both ignored<br />
Both the B option or EXTENDED attribute and the N option or NOTEXTENDED attribute<br />
were specified for the same BANK directive.<br />
*ERROR: File file-name does not contain an entry point table<br />
The named file specified on a LIB directive has either not been prepared (@PREP) or<br />
contains no entry points. The file is not searched for entry points but it can be searched<br />
for elements named on IN directives with no file name.<br />
*ERROR: File file-name is empty<br />
The specified file that was named on a source directive in the collection contains no<br />
elements.<br />
*ERROR: File file-name not properly released - error return from<br />
P<strong>OS</strong>TPR$ - CSF$ status: status<br />
An error occurred while the <strong>Collector</strong> was trying to perform an @FREE command on the<br />
named file. See the Exec System Software Executive Requests <strong>Programming</strong> <strong>Reference</strong><br />
<strong>Manual</strong> for status description.<br />
*ERROR: FIRSTBDI specification is allowed only for TYPE EXEC<br />
collections<br />
The collection must be TYPE EXEC to use the FIRSTBDI directive.<br />
*ERROR: FIRSTBDI value is in error - directive ignored<br />
An integer must be specified in the value field. The default value of 4 will be used.<br />
*ERROR: First segment is main segment - may not be DSEG<br />
The first segment named in a bank-implied collection and the first segment named<br />
following a bank statement in a bank-named collection cannot be a dynamic segment.<br />
*ERROR: First segment is main segment - may not be RSEG<br />
The first segment named in a bank-implied collection and the first segment named<br />
following a bank statement in a bank-named collection cannot be a relocatable segment.<br />
*ERROR: FORM cannot specify current bank and segment<br />
7830 9887–001 E–19
<strong>Collector</strong> Diagnostic Messages<br />
The FORM source directive was specified with the same bank-name and segment name<br />
as those that are currently being defined.<br />
*ERROR: FORM ignored - SEG directive needed immediately preceding FORM<br />
In a segmented collection, a FORM bank-name*segment-name directive immediately<br />
follows an IBANK or DBANK directive. The main segment must be named on a SEG<br />
directive preceding the FORM directive.<br />
*ERROR: FORM on bank-name not allowed after SEG or IN directive<br />
A SEG or IN directive appeared before a FORM directive that specified only the bank<br />
name; that is, FORM bank-name.<br />
*ERROR: FRSTIN ignored - not allowed with filename only<br />
A FRSTIN source directive was specified with a file name only. An element name must<br />
also be given on the FRSTIN directive.<br />
*ERROR: FRSTIN ignored - only allowed for first element in segment<br />
A previous FRSTIN source directive had appeared for this segment. This directive is<br />
treated as an IN directive for the element.<br />
*ERROR: Generated address address in element element is out of range<br />
The D option was specified and an address field has been detected that is outside the<br />
address limits for the program.<br />
*ERROR: file-name has wrong project for private file<br />
The wrong project was specified for a private file.<br />
*ERROR: IBJ$ is not used in an op code field - referenced in element<br />
element<br />
The symbol IBJ$ must appear as an external reference in bits 0 through 9. See 4.5.1 for<br />
correct use of IBJ$.<br />
*ERROR: name ignored - format or terminator error<br />
The TYPE directive has an illegal terminator following the specified parameter, or the<br />
parameter is illegal.<br />
*ERROR: name ignored - TYPE parameter conflict<br />
The named parameter directly contradicts a parameter already processed on a TYPE<br />
directive or an option on the processor call statement.<br />
*ERROR: Illegal attribute name ignored<br />
E–20 7830 9887–001
<strong>Collector</strong> Diagnostic Messages<br />
The named illegal attribute was specified on a BANKINFO source directive. The attribute<br />
is ignored and the collection is continued.<br />
*ERROR: Illegal group number value in INFO directive in element element<br />
is ignored<br />
The specified group number named on an INFO directive in the named relocatable<br />
element is not a legal value.<br />
*ERROR: Illegal option char disregarded<br />
The named illegal option was specified on an IBANK or DBANK source directive. The<br />
option is ignored and the collection is continued.<br />
*ERROR: Illegal subattribute name ignored<br />
The named illegal subattribute was specified on a BANKINFO source directive. The<br />
subattribute is from the INITIAL attribute. Legal subattributes are: MAINI, MAIND, UTILI,<br />
UTILD, BDR0, BDR1, BDR2, and BDR3. The subattribute is ignored and the collection<br />
continues.<br />
*ERROR: Indirect load subroutines not available - IDL entries filled<br />
with ER ERR$ instructions<br />
The indirect load routines are required if a segment must be indirectly loaded. They have<br />
been excluded from this collection, possibly because of a NOT SYS$*RLIB$ directive.<br />
*ERROR: INFO 11 entry for bank-name ignored in element element -<br />
duplicates existing name<br />
The name specified on a Meta-Assembler (MASM) INFO group 11 directive can appear<br />
only on another INFO group 11 directive.<br />
*ERROR: INITIAL attribute ignored - no subattributes specified<br />
The INITIAL attribute must have one or more of the following subattributes specified:<br />
MAINI, MAIND, UTILI, UTILD, BDR0, BDR1, BDR2, or BDR3. The INITIAL attribute is<br />
ignored because there were no subattributes specified.<br />
*ERROR: file-name is not a sector-formatted mass storage file<br />
*ERROR: file-name is not cataloged or assigned<br />
The specified file that was named on a source directive in the collection is not a<br />
cataloged file or is not assigned to this run.<br />
*ERROR: entry-point is not defined - no window created for bank bankname<br />
The entry point/tag specified on the window directive is not defined.<br />
*ERROR: LEVEL attribute ignored - no LEVEL value specified<br />
7830 9887–001 E–21
<strong>Collector</strong> Diagnostic Messages<br />
The LEVEL attribute was specified on a BANKINFO directive without a LEVEL value. The<br />
LEVEL value must be an integer from 0 to 3. Default value of 2 is used.<br />
ERROR: LEVEL specification not allowed with R-option collections<br />
The LEVEL directive has no meaning for collections producing relocatable element<br />
output.<br />
ERROR: LEVEL value is in error - directive ignored<br />
The LEVEL value field must be an integer from 0 to 3. The default value of 2 is used.<br />
ERROR: LEVEL value on bank card is in error - default values will be<br />
used<br />
The LEVEL field must be an integer from 0 to 3. The default LEVEL for the collection is<br />
assigned to the bank.<br />
*ERROR: LEVEL value on BANKINFO directive is in error - default values<br />
will be used<br />
The LEVEL value must be an integer from 0 to 3. The default value of 2 is used.<br />
ERROR: LEVEL 1 is assumed for Common Banks - specified level is ignored<br />
The BANKINFO AFCB(name,bdi) attribute was specified. Level 1 is assumed for<br />
common banks (see 6.6). Either the level was specified on the bank directive or on the<br />
LEVEL directive. The specified level is ignored and level 1 is used for the common bank.<br />
*ERROR: Limit is 16 SNAPs per collection<br />
The immediately preceding SNAP directive is ignored because 16 snaps have already<br />
been made.<br />
*ERROR: Local-global conflict - entry point entry-point referenced by<br />
location counter location-counter element element bank bank-name<br />
Due to local inclusion of the location counter under which the entry point is named, more<br />
than one value for that entry point can be referenced from the named bank. A value of<br />
zero is used to satisfy the reference to the entry point.<br />
*ERROR: Local-global conflict - location counter location-counter<br />
referenced by location counter location-counter element element<br />
*ERROR: Local-global conflict - location counter location-counter<br />
referenced by location counter location-counter element element bank<br />
bank-name<br />
The first location counter has been locally included so that the named bank can access<br />
the location counter in more than one bank. A value of zero is used for the location<br />
counter’s assigned value because it is impossible to determine which of the available<br />
values should be used.<br />
E–22 7830 9887–001
<strong>Collector</strong> Diagnostic Messages<br />
*ERROR: Location counter location-counter unknown to location counter<br />
location-counter in element element<br />
In a bank-implied collection, this message usually indicates an erroneously formatted<br />
relocatable that contains a reference to a nonexistent location counter.<br />
*ERROR: Location counter location-counter unknown to location counter<br />
location-counter in element element bank bank-name<br />
Because of local inclusion of the element, the reference made to the first location<br />
counter number cannot be satisfied as it is not in any bank set specified for the second<br />
location counter number. In rare cases, this can indicate an erroneously formatted<br />
relocatable that contains a reference to a nonexistent location counter.<br />
*ERROR: MAPCALL$ is not used in an op code field - referenced in<br />
element element<br />
The symbol MAPCALL$ must appear as an external reference in bits 0 through 9.<br />
*ERROR: MAPGOTO$ is not used in an op code field - referenced in<br />
element element<br />
The symbol MAPGOTO$ must appear as an external reference in bits 0 through 9.<br />
*ERROR: Minimum gap size in error - system value of 10 is used<br />
A format error was detected on the MINGAP source directive. The directive is ignored<br />
and the system value is assumed.<br />
*ERROR: Minimum load size in error - system value of 10 is used<br />
A format error was detected on the MINSIZ source directive. The directive is ignored and<br />
the system value is assumed.<br />
*ERROR: file-name needs a read-key or is write-only<br />
*ERROR: No absolute element produced by <strong>Collector</strong><br />
A fatal error in the collection or the presence of the X option has prevented the output of<br />
an absolute element. The preceding diagnostic messages specify the error or errors.<br />
*ERROR: No continuation statement found<br />
No further statement was found following the continuation character (;).<br />
*ERROR: No element with DEF entry point entry-point<br />
No element was found that contained the specified DEF entry point.<br />
*ERROR: No relocatable element produced by <strong>Collector</strong><br />
7830 9887–001 E–23
<strong>Collector</strong> Diagnostic Messages<br />
Due to a fatal error or the X option, no relocatable element was produced in an R option<br />
collection. The preceding messages specify the error or errors.<br />
*ERROR: No start address<br />
No ENT directive was used in the collection and none of the preambles of the included<br />
relocatable elements indicated a start address.<br />
*ERROR: Not enough B(X) registers specified on the VECTOR attribute<br />
Another B register is needed on the BANKINFO directive with the VECTOR attribute<br />
specified. Each B register corresponds to 4,096 link vector entries.<br />
*ERROR: Number in COR address field is over 0177777 (65K)<br />
A COR source directive was specified with an address field greater than 0177777 (65K).<br />
*ERROR: Offset not numeric on EQU directive<br />
An EQU source directive was specified with a non-numeric offset field. The offset field<br />
on the right-hand side of an EQU directive must be numeric.<br />
*ERROR: Only D (Dynamic), R (Readonly), N (Extended), and O<br />
(Overridemin) options (attributes) allowed with VECTOR attribute - all<br />
others ignored<br />
Only the D, R, N, and O options are allowed with the link vector bank. Only the Dynamic,<br />
Readonly, Extended and Overridemin attributes are allowed with the link vector bank. All<br />
other options or attributes are ignored.<br />
*ERROR: PFI$ error status status for file file-name<br />
An ER PFI$ was performed and received an error status. The possible values are defined<br />
in the Exec System Software Executive Requests <strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong>.<br />
*ERROR: Previous ENT directive overrides this one<br />
An ENT directive appeared previously in the collection. This directive is ignored.<br />
*ERROR: Previous IN overrides this one for file file-name<br />
In a bank-implied collection, an IN directive of a whole file can occur only once. Only the<br />
first IN file-name is processed.<br />
*ERROR: Previous IN overrides this one for the element name element<br />
In a bank-implied collection, an element can be included only once in a collection. Only<br />
the first inclusion is processed.<br />
*ERROR: $ prefixed to common block name to avoid duplicating element<br />
name element<br />
E–24 7830 9887–001
<strong>Collector</strong> Diagnostic Messages<br />
A common block was included that had the same name as the named element that was<br />
previously included.<br />
*ERROR: Relocatable element element is in error<br />
The specified element was marked in error by the processor that generated it.<br />
*ERROR: Relocatable element element not found<br />
The element specified on an IN directive with no file name could not be found in any of<br />
the files named on LIB directives.<br />
*ERROR: Relocatable element element/version not found<br />
The specified element was named on an IN directive with no file name and could not be<br />
found in any of the files named on LIB directives.<br />
*ERROR: Required subfield missing on above directive<br />
A required subfield was omitted.<br />
*ERROR: RSEG cannot be used to define a SEG<br />
A relocatable segment cannot be present in the relationship field of a SEG directive. The<br />
RSEG is ignored in the relationship list.<br />
*ERROR: RSEG directive uses no fields or characters other than name<br />
An RSEG source directive was specified other than as RSEG segment-name.<br />
*ERROR: S-option banks do not allow segmentation - treated as dynamic<br />
A SEG directive has appeared for a bank that was specified with an S option.<br />
*ERROR: S-option bank invalidates Z option on processor call<br />
The S option on a bank directive overrides the Z option on the processor call because the<br />
Exec requires the diagnostic tables to process nonconfigured common banks (NCCB).<br />
*ERROR: Same location counter used for different common blocks in<br />
element element<br />
The same location counter was specified in the named relocatable to define more than<br />
one common block.<br />
*ERROR: SEG cannot overlay main segment - has been changed to follow<br />
main segment<br />
A SEG source directive of the form SEG A,B was specified where B is the main segment<br />
name.<br />
*ERROR: SEG not used with R option<br />
7830 9887–001 E–25
<strong>Collector</strong> Diagnostic Messages<br />
A SEG source directive appeared in an R option collection.<br />
*ERROR: SETAFCM sensitivity of absolute element conflicts with CLRAFCM<br />
sensitivity of start address element<br />
When the program is loaded for execution, the arithmetic fault compatibility mode will be<br />
set so that an interrupt is taken when a floating-point overflow, floating-point underflow,<br />
or divide fault occurs. However, when execution begins, the program’s code does not<br />
expect an interrupt to occur. This is a logical conflict.<br />
*ERROR: SIR$ detected an error for the symbolic input image or the<br />
symbolic output image<br />
A SIR$ error message is printed immediately before this message. The System Service<br />
Routines Library (SYSLIB) <strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong>, Appendix B contains a complete<br />
description of SIR$ error messages. All messages indicate an error for <strong>Collector</strong> source<br />
language input from the runstream or from the SI element or for <strong>Collector</strong> source output<br />
to the SO element.<br />
*ERROR: SNAP calls on undefined location counter location-counter in<br />
element element<br />
The location counter number on a SNAP directive does not exist for the element.<br />
*ERROR: SNAP$ element not found - no snapshots taken<br />
The SNAP$ element that produces the requested snapshot dumps has not been found.<br />
*ERROR: SNAP ignored - no global location counter location-counter in<br />
element element<br />
A SNAP source directive specified a location counter that was not included globally in a<br />
bank-named collection.<br />
*ERROR: SNAP not used with R option<br />
A SNAP source directive appeared in an R option collection.<br />
*ERROR: SNAP of nonexistent element element<br />
*ERROR: Storage Preference specification is no longer allowed. E, P,<br />
$E, or $P option ignored<br />
The E, P, $E, and $P options refer to storage preference on older hardware no longer<br />
supported by the Executive. Please remove them from the map symbolic since they can<br />
be reused in a future release of the <strong>Collector</strong>.<br />
*ERROR: Text generated under location counter location-counter outside<br />
range for element element<br />
More text was generated under a location counter than was specified in the preamble of<br />
the named relocatable element. This usually means an erroneous relocatable.<br />
E–26 7830 9887–001
*ERROR: This segment is used to define itself<br />
<strong>Collector</strong> Diagnostic Messages<br />
The segment being defined in the immediately preceding SEG or DSEG directive has its<br />
own name present in the relationship list. The name in the relationship list is ignored.<br />
*ERROR: Too many characters in a subfield<br />
A subfield in the immediately preceding source directive has too many characters. The<br />
source directive is bypassed.<br />
*ERROR: Too many register pairs - only 14 allowed, others ignored<br />
A register pair is a B register or a B register followed by an X register, specified on the<br />
VECTOR attribute, BANKINFO VECTOR(B2 B3,X3). The first register pair is B2. The<br />
second register pair is B3,X3. Only 14 pairs are allowed with the VECTOR attribute.<br />
*ERROR: Truncation of field value at address address bits bits - bits<br />
in element element<br />
The value to be placed in the specified field size is too large and was truncated. The left<br />
portion of the value is truncated. This occurs, for instance, when an address over 65,535<br />
is supposed to be placed in the U portion of an instruction that is only 16 bits long.<br />
*ERROR: TYPE COMSEG ignored for bank-implied collection<br />
A TYPE COMSEG directive appeared in a bank-implied collection. This directive is<br />
ignored.<br />
*ERROR: TYPE EXEC not allowed with R-option collection<br />
TYPE EXEC has no meaning for collections producing relocatable element output.<br />
*ERROR: TYPE NPEDIAG directive not allowed with R-option collection<br />
TYPE NPEDIAG has no meaning for collections producing relocatable element output.<br />
*ERROR: TYPE READONLY ignored for banked or segmented collection<br />
The TYPE READONLY directive can be used only with bank-implied collections. In a<br />
bank-named collection, use the R option on IBANK and DBANK directives instead. A<br />
read-only bank cannot be segmented.<br />
*ERROR: Use of bank-name or segment-name segment not allowed with<br />
BDICALL$/BDIREF$ - entry point must be used<br />
The specified bank name or segment name was used with either BDICALL$ or<br />
BDIREF$. An entry point must be used with BDICALL$ or BDIREF$.<br />
*ERROR: VECTOR attribute ignored - B register is out of range<br />
B register can be a value from B2 to B15, or B2 to B31 for TYPE EXEC collections.<br />
7830 9887–001 E–27
<strong>Collector</strong> Diagnostic Messages<br />
*ERROR: VECTOR attribute ignored - Common Bank cannot be the Link<br />
Vector bank<br />
The X option of AFCB attribute was specified for the link vector bank. The link vector<br />
bank cannot be a common bank.<br />
*ERROR: VECTOR attribute ignored - Link vector bank already defined<br />
There can be only one link vector bank per collection.<br />
*ERROR: VECTOR attribute ignored - No B register specified<br />
The BANKINFO directive with the VECTOR attribute was specified without a B register.<br />
BANKINFO VECTOR(B3).<br />
*ERROR: VECTOR attribute ignored - No X register specified.<br />
The VECTOR attribute was specified on the BANKINFO directive with a comma after the<br />
B register but no X register. There must be a comma between the B and X register.<br />
There must be a space between each pair of B and X registers: BANKINFO VECTOR<br />
(B3,X3 B4,X4)<br />
*ERROR: VECTOR attribute ignored - SEG, IN or FORM specified<br />
The <strong>Collector</strong> builds the link vector bank; therefore, no SEG, IN, or FORM directives can<br />
be specified for the link vector bank.<br />
*ERROR: VECTOR attribute ignored - SEGs used in collection<br />
No SEG directives are allowed in a collection that contains a link vector bank.<br />
*ERROR: VECTOR attribute ignored - X register is out of range<br />
X register can be a value from X1 to X15.<br />
*ERROR: VOID attribute ignored - only allowed with D option or DYNAMIC<br />
attribute<br />
Only the D option or the Dynamic attribute from the BANKINFO directive is allowed with<br />
the VOID attribute or the Z option for the IBANK and DBANK directives.<br />
*ERROR: VOID attribute ignored - previous IN, SEG or FORM directive<br />
encountered<br />
The bank will not be VOID; no IN, SEG, or FORM directives are allowed for a VOID bank.<br />
*ERROR: entry-point was a DEF entry point but was never defined<br />
A DEF source directive specified an entry point that was never defined by any element<br />
included in the collection.<br />
E–28 7830 9887–001
<strong>Collector</strong> Diagnostic Messages<br />
*ERROR: WINDOW address defined by entry point entry point is a negative<br />
value<br />
This error indicates that the entry point used in the address field of the WINDOW<br />
directive has a negative value.<br />
*ERROR: WINDOW directive ignored - address specified is a negative<br />
value<br />
This error indicates that the constant value specified in the address field of the WINDOW<br />
directive is negative.<br />
*ERROR: WINDOW directive ignored - B register out of range<br />
B register specified on the WINDOW directive is out of range. The range is B2 to B15 for<br />
normal collections, and B2 to B31 for TYPE EXEC collections.<br />
*ERROR: WINDOW directive ignored - No B register specified<br />
No B register was specified on the WINDOW directive. See 6.10 for the proper syntax of<br />
the WINDOW directive.<br />
*ERROR: WINDOW directive ignored - No X register specified<br />
No X register was specified on the WINDOW directive. See 6.10 for the proper syntax of<br />
the WINDOW directive.<br />
*ERROR: WINDOW directive ignored - SEGs used in collection<br />
The WINDOW directive cannot be used in collections with segmentation.<br />
*ERROR: WINDOW directive ignored - syntax error - a space must separate<br />
the WINDOW directive from its parameters<br />
There must be a space after the WINDOW directive and a space before either the<br />
address specified or the parentheses.<br />
*ERROR: WINDOW directive ignored - syntax error while processing the<br />
window address<br />
This indicates that an error was encountered while processing the address field of the<br />
WINDOW directive. You may have used an invalid character in the address field.<br />
*ERROR: WINDOW directive ignored - X register out of range<br />
X register specified on the WINDOW directive is out of range. The range is X1 to B15.<br />
*ERROR: XSEG directives allowed only for TYPE EXEC collections - XSEG<br />
directive ignored<br />
XSEG directives cannot be used unless a TYPE EXEC directive was given previously<br />
within the collection.<br />
7830 9887–001 E–29
<strong>Collector</strong> Diagnostic Messages<br />
*ERROR: Z option ignored - not allowed with options other than D<br />
Only the D option is allowed with the Z option on the IBANK and DBANK directives.<br />
E.4. WARNING Messages<br />
*WARNING: Bank bank-name is not an extended mode bank and a WINDOW<br />
directive was specified<br />
The bank containing the WINDOW directive is not an extended mode bank.<br />
*WARNING: BDR attribute overrides previous BDR value specified<br />
A BDR value has already been specified either on the bank directive or on a previous<br />
BDR attribute specified on a BANKINFO directive. The new BDR value is used.<br />
*WARNING: Blank specification - TPF$ assumed<br />
There is a void subfield on an IN or NOT directive. This is not necessarily an error, but it<br />
can indicate a typographical error in a <strong>Collector</strong> directive.<br />
*WARNING: Common block common-block not in D-bank - minimum address<br />
ignored<br />
The INFO 3 value is for a common block not included in the D bank; thus it is ignored.<br />
*WARNING: Control bank changed to bank-name - S and C option conflict<br />
on bank bank-name<br />
A nonconfigured common bank (NCCB) cannot be a control bank.<br />
*WARNING: Control bank bank-name not initially based<br />
The control bank is assumed to be always based, so tables generated by the <strong>Collector</strong><br />
and some implicitly included routines are placed there. Attempts to reference these<br />
tables and routines cannot be successful.<br />
*WARNING: Control bank will be code stripped<br />
The V and C options have been used together on a bank directive, thus causing the<br />
control bank to be code-stripped.<br />
*WARNING: Element element entry point entry-point already defined<br />
The specified entry point found in the named element has already been defined in<br />
another element. The entry point in the named element is not used.<br />
WARNING: Element element entry point entry-point already defined by<br />
BANK directive<br />
E–30 7830 9887–001
<strong>Collector</strong> Diagnostic Messages<br />
The specified entry point found in the named element has already been defined by an<br />
IBANK or DBANK directive. The entry point in the named element is not used.<br />
*WARNING: Element element entry point entry-point already defined by<br />
EQU directive<br />
The specified entry point found in the named element has already been defined by an<br />
EQU directive. The entry point in the named element is not used.<br />
*WARNING: Element element entry point entry-point already defined by<br />
REF directive<br />
The specified entry point found in the named element has already been defined by a REF<br />
directive. The entry point in the named element is not used.<br />
*WARNING: Element element entry point entry-point already defined by<br />
SEG directive<br />
The specified entry point found in the named element has already been defined by a<br />
SEG, DSEG, RSEG, or XSEG directive. The entry point in the named element is not used.<br />
*WARNING: Element element has no location counters - not included<br />
The named element contains no code, possibly because of ON and OFF directives. It is<br />
not included in the collection.<br />
*WARNING: Element element minimum address ignored - bank has user<br />
specified starting address or O option<br />
Location counter 0 in the element is contained in a bank that has a numeric start address<br />
specified by the user. The INFO 3 value for the element is ignored.<br />
*WARNING: Element element minimum address ignored - location counter 0<br />
not in D-bank<br />
The INFO 3 value for the element applies to location counter 0. Location counter 0 must<br />
be contained in a D bank; if it is not, the INFO 3 value is ignored.<br />
*WARNING: Element element minimum address ignored - location counter 1<br />
not in I-bank<br />
The INFO 3 value for the element applies to location counter 1. Location counter 1 must<br />
be contained in an I bank; if it is not, the INFO 3 value is ignored.<br />
*WARNING: Element element referencing external reference value at<br />
address address greater than largest defined in this relocatable<br />
*WARNING: Element element referencing location counter location-counter<br />
at address address greater than largest defined in this relocatable<br />
*WARNING: Element element referencing location counter location-counter<br />
undefined for this relocatable<br />
7830 9887–001 E–31
<strong>Collector</strong> Diagnostic Messages<br />
The preceding three messages indicate probable format errors in a relocatable element.<br />
*WARNING: Element element start address not used - alternative found<br />
A previous element included in the collection has already specified the start address for<br />
the absolute. The specified element’s start address is ignored.<br />
*WARNING: Element element start address used - bank containing start<br />
address is not initially based<br />
This warning is issued for TYPE COMMONBANK collections. The program will not load<br />
and execute unless the bank containing the start address is the template for an AFCB<br />
bank that is initially based.<br />
*WARNING: ENT specified entry point entry-point may not be in an<br />
initially based bank<br />
An ENT directive was used to specify an entry point in a common bank.<br />
*WARNING: Entry point entry-point is undefined - EQU invalid<br />
When using the EQU directive in the form ’EQU name/symbol’, the symbol must be<br />
defined. If it is not defined, the EQU is invalid. The name remains undefined in the<br />
relocatable being produced.<br />
*WARNING: Entry point entry-point not found for COR<br />
The specified entry point named on a COR source directive could not be found in any<br />
element included in the collection.<br />
*WARNING: Entry point entry-point not found for SNAP<br />
The specified entry point named on a SNAP source directive could not be found in any<br />
element included in the collection.<br />
*WARNING: Entry point entry-point under void location counter locationcounter<br />
assigned value value<br />
An entry point that is assigned under a location counter with no length has been given<br />
the specified value.<br />
*WARNING: Error occurred trying to access SYS$*DATA$.LIB$NAMES<br />
*WARNING: Extended mode requirement from element overridden by B option<br />
on bank bank-name<br />
An element containing an INFO 10 location counter was included in a bank that was<br />
marked as not requiring extended mode.<br />
*WARNING: FIRSTBDI overrides previous FIRSTBDI directives<br />
E–32 7830 9887–001
<strong>Collector</strong> Diagnostic Messages<br />
Only one FIRSTBDI value can be specified. The value used is taken from the last<br />
FIRSTBDI directive.<br />
*WARNING: I-bank bank-name address exceeds 0177777 (65K)<br />
This is a restriction on older unsupported Series 1100 systems. The restriction does not<br />
apply to supported systems. This warning is printed for a bank-named collection.<br />
*WARNING: I-bank address exceeds 0177777 (65K)<br />
This is a restriction on older unsupported Series 1100 systems. The restriction does not<br />
apply to supported systems. This warning is printed for a bank-implied collection.<br />
*WARNING: Keyword name not found in SYS$*DATA$.LIB$NAMES<br />
A keyword entry in an INFO group 12 item could not be located in the element<br />
LIB$NAMES.<br />
*WARNING: L option used on bank bank-name that is not a based static<br />
bank<br />
The L option was specified on an IBANK or DBANK directive that either did not have the<br />
M or U option specified, or had the D (dynamic) option specified.<br />
*WARNING: LEVEL attribute overrides previous LEVEL value specified<br />
A LEVEL value has already been specified on the bank directive, on the LEVEL directive,<br />
or on a previous LEVEL attribute specified on a BANKINFO directive. The new level value<br />
is used.<br />
*WARNING: LEVEL overrides previous LEVEL directives<br />
Only one LEVEL value can be specified. The value is taken from the last LEVEL directive.<br />
*WARNING: LIB file name ignored - no previous LIB direction given<br />
The named file is not searched because no format 3 LIB (bank-name/$lcs...) was given.<br />
*WARNING: Location counter list specified without leading $ - assumed<br />
*WARNING: More than one global inclusion of location counter locationcounter<br />
element element<br />
In a bank-named collection, the element or part of the element has been included more<br />
than once without a local bank-set list. An element or part of an element can be included<br />
locally many times but can be included globally only once.<br />
*WARNING: More than one global inclusion of location counter locationcounter<br />
for element element (Location counter is void)<br />
In a bank-named collection, the element or part of the element has been included more<br />
than once without a local bank-set list. An element or part of an element can be included<br />
7830 9887–001 E–33
<strong>Collector</strong> Diagnostic Messages<br />
locally many times but can be included globally only once. The specified location counter<br />
is void.<br />
*WARNING: * not needed - main segment stays loaded<br />
The indirect load indicator (*) was used in specifying the main segment. The asterisk is<br />
ignored.<br />
*WARNING: N option bank requires TYPE BLOCKSIZE64 if activity local<br />
stack or return control stack is used<br />
The activity local stack and the return control stack are used with the CALL instruction.<br />
This is required by the hardware. The warning can be avoided by using TYPE<br />
BLOCKSIZE64 in the map symbolic.<br />
*WARNING: Number of words of INFO-8 text in the collection exceed<br />
0777777 (262K) - no INFO-8 text output<br />
The number of INFO 8 text words exceeded 262,143 in the collection. No words are<br />
output because the length of this table is stored in a half-word in the absolute element<br />
header table.<br />
*WARNING: value possible bad instruction at address in element element<br />
The D option was specified and an instruction appears to be illegal. Possible causes<br />
include illegal address in u field, illegal j-designator on register transfer, or illegal jdesignator<br />
for sign-extended reference.<br />
*WARNING: Start of D-bank set as far as necessary or possible below<br />
current standard 040000 to minimize using addresses over 0177777 -<br />
program may not work correctly with standard common banks - alternative<br />
is to use the E option<br />
The start of the D bank was lowered to minimize using addresses over 65,535.<br />
*WARNING: The V and Y options have been removed from the <strong>Collector</strong><br />
processor call statement. To void either Ibanks or Dbanks, use the Voption<br />
on the bank directive.<br />
*WARNING: Truncation and over-65K messages suppressed - max of value<br />
reached<br />
Only the first value truncation and address over 65,535 messages are printed. The value<br />
is configuration dependent and is set at 50 in the released version.<br />
*WARNING: segment used as main segment name unspecified in bank<br />
In a bank-named, segmented collection, a bank did not have a main segment specified<br />
by a SEG directive. Since all banks must have the same main segment name, a main<br />
segment is created.<br />
E–34 7830 9887–001
E.5. Information Messages<br />
<strong>Collector</strong> Diagnostic Messages<br />
An implicit @PREP of TPF$ occurred during this collection.<br />
The <strong>Collector</strong> is designed to do special processing of file TPF$ if an @PREP is not<br />
performed on the file at collection time. In order to do this, all elements in TPF$ are<br />
temporarily brought into the collection whether referenced or not. This may cause some<br />
unexpected side effects that can be resolved when the user knows that an implicit<br />
@PREP of TPF$ occurred.<br />
AFCM status of output element is CLRAFCM<br />
The arithmetic fault compatibility mode for the output element is marked as clear. At<br />
initial load time, the arithmetic fault compatibility mode setting is such that no interrupt<br />
occurs for floating-point overflow, floating-point underflow, or divide fault.<br />
AFCM status of output element is INSAFCM<br />
The arithmetic fault compatibility mode for the output element is marked as insensitive.<br />
At initial load time, the arithmetic fault compatibility mode setting is such that no<br />
interrupt occurs for floating-point overflow, floating-point underflow, or divide fault.<br />
AFCM status of output element is SETAFCM<br />
The arithmetic fault compatibility mode for the output element is marked as set. At initial<br />
load time, the arithmetic fault compatibility mode is such that an interrupt occurs for<br />
floating-point overflow, floating-point underflow, and divide fault.<br />
AFCM status of output element is UNKNOWN<br />
The arithmetic fault compatibility mode for the output element is marked as unknown. At<br />
initial load time, the arithmetic fault compatibility mode is determined by a system<br />
generation parameter.<br />
Value at address address in element element - will activate SNAP dump<br />
prior to execution<br />
A snapshot dump is taken at the specified address and then the specified instruction is<br />
executed.<br />
COR: value replaced value at address address in element element<br />
The correction requested by a COR directive has been applied.<br />
D-bank bank-name assigned such that INFO-3 or minimum specification<br />
value address for element element is satisfied<br />
The start address of the named bank has been adjusted so that the specified INFO group<br />
3 value has been satisfied. The start addresses of all other banks related to this bank are<br />
determined by the adjusted start address.<br />
7830 9887–001 E–35
<strong>Collector</strong> Diagnostic Messages<br />
ER ERRPR$ error value printing above message<br />
An ER ERRPR$ has returned an error status.<br />
(File Name: name * name)<br />
This is printed for I/O errors following the description of the error.<br />
I-bank bank-name assigned such that INFO-3 or minimum specification<br />
value address for element element is satisfied<br />
The start address of the named bank has been adjusted so that the specified INFO group<br />
3 value has been satisfied. The start addresses of all other banks related to this bank are<br />
determined by the adjusted start address.<br />
Minimum address requirement address for element element reduced to<br />
address to avoid addresses greater than 262K<br />
In a bank-implied collection, the specified value of INFO group 3 was reduced to avoid<br />
addresses greater than 262,143.<br />
Minimum address requirement address for element element reduced to<br />
address to avoid addresses greater than 262K for D-bank bank-name<br />
The specified value of the INFO group 3 was reduced so that addresses did not exceed<br />
262,143 for the named D bank.<br />
Minimum address requirement address for element element reduced to<br />
address to avoid addresses greater than 262K for I-bank bank-name<br />
The specified value of the INFO group 3 was reduced so that addresses did not exceed<br />
262,143 for the named I bank.<br />
No elements in segment segment<br />
This message is produced in bank-implied collections when a segment is found to have<br />
no elements included in it.<br />
No elements in segment segment, bank bank-name<br />
This message is produced in bank-named collections when a segment is found to have<br />
no elements included in it.<br />
Quarter/Third-word insensitive<br />
The absolute element is insensitive to the setting of PSR bit DB32; that is, it contains no<br />
quarter-word or third-word references. It is executed in third-word mode.<br />
Quarter-word sensitive<br />
The absolute element requires PSR bit DB32 to be set initially; that is, it uses quarterword<br />
references.<br />
E–36 7830 9887–001
<strong>Collector</strong> Diagnostic Messages<br />
Start of D-bank set above current standard 040000 in order to meet<br />
minimum address requirement address of common block common-block<br />
Start of D-bank set above current standard 040000 in order to meet<br />
minimum address requirement address of element element<br />
The start of the D bank was increased to satisfy the INFO 3 value specified by the<br />
named element or common block.<br />
Start of I-bank set above current standard 01000 in order to meet<br />
minimum address requirement address of element element<br />
The start of the I bank was increased to satisfy the INFO 3 value specified by the named<br />
element.<br />
Third-word sensitive<br />
The absolute element requires PSR bit DB32 to be cleared initially; that is, it uses thirdword<br />
references.<br />
TPF$ treated as element<br />
An IN TPF$ was encountered. Because no period followed the name, the name is<br />
assumed to be that of an element. On the IN directive, all files must have a period<br />
immediately following the file name. This is not necessarily an error, but it can indicate a<br />
typographical error in a <strong>Collector</strong> directive.<br />
7830 9887–001 E–37
<strong>Collector</strong> Diagnostic Messages<br />
E–38 7830 9887–001
Appendix F<br />
Program Segmentation<br />
F.1. Introduction<br />
The <strong>OS</strong> <strong>2200</strong> <strong>Collector</strong> still supports segmentation for compatibility with old programs.<br />
However, segments are now considered obsolete because the <strong>OS</strong> <strong>2200</strong> hardware<br />
supports banking rather than segmentation. A change from one bank to another often<br />
requires only a single instruction (for example, LBJ) and is performed entirely by the<br />
hardware, once the bank is initially loaded from the absolute element. Segments must<br />
be loaded from the absolute element and require Exec involvement by an Executive<br />
request interrupt. Therefore, banking is more efficient and is the preferred way of<br />
dividing a program. Programs that currently use segmentation should be converted to<br />
banking if possible, and new programs should use banking and avoid segmentation.<br />
When an absolute program is being executed, it must reside in main storage. However,<br />
there may not be enough available address space to contain the complete program.<br />
Therefore, the program must be subdivided so that the various parts can be made<br />
accessible as they are needed by the program being executed.<br />
A segmented program consists of<br />
• One main segment that resides in main storage throughout the execution of the<br />
program.<br />
• Subordinate segments that are loaded into main storage as they are needed.<br />
As each subordinate segment is loaded into main storage, it may overlay and thus<br />
destroy all or part of a previously loaded segment. The area overlayed is equal in size to<br />
the size of the new segment. The main segment is never allowed to be overlayed except<br />
by a relocatable segment (RSEG).<br />
The absolute element resulting from the collection of various relocatable elements may<br />
or may not be segmented. However, a nonsegmented program could be considered to<br />
be a segmented program with only a main segment named $MAIN$. Likewise, a<br />
program containing only segments can be considered to be a banked program with<br />
precisely two banks, IBANK and DBANK. However, almost all segment control<br />
information (specifically the segment load table) is omitted if segments are not used in<br />
the program.<br />
F.2. Segmentation Directives<br />
The directives used to specify program segmentation are as follows:<br />
7830 9887–001 F–1
Program Segmentation<br />
SEG<br />
RSEG<br />
DSEG<br />
IN<br />
Informs the <strong>Collector</strong> of the beginning of a segment (see F.2. 1).<br />
Informs the <strong>Collector</strong> of the beginning of a relocatable segment (see F.2.3).<br />
Informs the <strong>Collector</strong> of the beginning of a dynamic segment (see F.2.2).<br />
Specifies the elements to be included in the segment (see 3.1.1).<br />
Segments may be loaded and executed independently. However, elements used by<br />
other segments must be loaded in memory when the referencing segments are<br />
executed.<br />
Since each segment has a path leading back to the main segment (defined by the<br />
relationships specified on the segmentation directives), elements that are implicitly<br />
included and that are referenced by two or more segments are attached to the segment<br />
that is located at the common point in the paths to the main segment of all referencing<br />
segments. Elements specified on IN directives are never moved from the segment in<br />
which they were specifically placed.<br />
A segment cannot be loaded into a read-only bank.<br />
F.2.1. SEG — Program Segmentation<br />
Purpose<br />
The SEG directive informs the <strong>Collector</strong> of the beginning of a program segment. All SEG<br />
directive parameters are optional, except name-1.<br />
Format<br />
SEG name-1,segment-list<br />
where:<br />
name-1<br />
specifies the name of the segment. When name-1 is followed by an asterisk (*), the<br />
named segment is automatically loaded when referenced by a jump instruction.<br />
Such a segment is called an indirect load segment. The asterisk is allowed on all<br />
SEG directives, but is ignored if the directive defines the main segment.<br />
segment-list<br />
F–2 7830 9887–001
Program Segmentation<br />
specifies the address relationship between the segment named in name-1 and the<br />
other program segments named in segment-list. The segment-list parameter has<br />
several formats that determine the addresses of the segment named in name-1:<br />
No Entry<br />
When segment-list is void, the starting address of the name-1 segment immediately<br />
follows the last address of the segment named on the preceding SEG directive.<br />
name-2<br />
Specifies that the starting address of the name-1 segment is the same as the<br />
starting address of the name-2 segment. These two segments can never exist in<br />
main storage at the same time.<br />
(name-2)<br />
Specifies that the starting address of the name-1 segment immediately follows the<br />
last address of the name-2 segment.<br />
(name-2,...,name-n)<br />
Specifies that the starting address of the name-1 segment immediately follows the<br />
highest address of the segments specified in name-2, name-3, name-4, and so forth,<br />
in each of the banks in which segment name-1 resides. Note that because segments<br />
may span banks, the highest address of the last I bank may be a different value than<br />
the value of the highest address of the last D bank.<br />
( )<br />
Specifies that the starting address of the name-1 segment immediately follows the<br />
highest address of all segments previously named.<br />
Description<br />
The IN directive specifies the files and elements to be included in a segment. If no SEG<br />
directive is encountered before the first IN directive following the @MAP control<br />
statement, an implied SEG directive is assumed by the <strong>Collector</strong>. This segment is given<br />
the name $MAIN$ by the <strong>Collector</strong> and is the segment that is processed until a SEG,<br />
RSEG, or DSEG directive is encountered.<br />
The segment name can contain 1 to 12 alphanumeric characters (with $ and - allowed).<br />
The segment name must contain at least one alphabetic character and must not be the<br />
same as any entry-point name in the collection. If the segment name is the same as an<br />
entry-point name, the value of the segment is used to satisfy external references and a<br />
message is printed.<br />
The <strong>Collector</strong> assigns a number to each segment beginning with zero for the main<br />
segment and continuing with 1 for the first segment name after the main segment, 2 for<br />
the second segment, and so forth. This number is used as the value of the segment<br />
name and is found in the Bank and Segment Index table in L and S option listings.<br />
7830 9887–001 F–3
Program Segmentation<br />
Within a segment, the <strong>Collector</strong> places any elements included to satisfy undefined<br />
symbols at the beginning of the segment in the inverse order of their inclusion; that is,<br />
the last included element is the first element in the segment. Following these implicitly<br />
included elements are those named on IN directives in the exact order they were<br />
named. When all elements within a file are included in a segment by specifying only the<br />
file name on the IN directive, the ordering of the file’s elements within the segment is<br />
undefined.<br />
Example 1<br />
1. SEG A<br />
2. SEG B<br />
3. SEG C,(A)<br />
The program is to be divided into three segments.<br />
1. Specifies segment A as the main segment.<br />
2. Specifies that the starting address of segment B is immediately after the last<br />
address of main segment A.<br />
3. Specifies that the starting address of segment C is immediately after the last<br />
address of main segment A. Segments B and C can never exist in main storage at<br />
the same time.<br />
Example 2<br />
1. SEG A . MAIN SEGMENT<br />
2. SEG B . Starting address of B immediately follows<br />
. last address of A<br />
3. SEG C . Starting address of C immediately follows<br />
. last address of B<br />
4. SEG D,(C) . Starting address of D immediately follows<br />
. last address of C<br />
F–4 7830 9887–001
Program Segmentation<br />
5. SEG E,C . Starting address of E is the same as starting<br />
. address of C<br />
6. SEG F,(E) . Starting address of F immediately follows<br />
. last address of E<br />
7. SEG G,F . Starting address of G is the same as starting<br />
. address of F<br />
8. SEG M,B . Starting address of M is the same as starting<br />
. address of B<br />
9. SEG H,(M) . Starting address of H immediately follows<br />
. last address of M<br />
10. SEG I,H . Starting address of I is the same as starting<br />
. address of H<br />
11. SEG J,H . Starting address of J is the same as starting<br />
. address of H<br />
12. SEG K,(H,I,J). Starting address of K immediately follows the<br />
. last address of H, I, or J, whichever is longest<br />
13. SEG L*,() . Starting address of L immediately follows the<br />
. highest last address of all the segments.<br />
. Segment L is automatically loaded whenever an<br />
. entry point included in the segment is referenced<br />
. by a jump instruction.<br />
Here is a diagram of this structure:<br />
For a more extensive example, see Appendix B.<br />
7830 9887–001 F–5
Program Segmentation<br />
F.2.2. DSEG — Dynamic Segments<br />
Purpose<br />
The DSEG directive specifies the beginning of a dynamic segment. When indicated, the<br />
program area occupied by a segment is not included in the initial program requirement<br />
for main storage.<br />
Format<br />
DSEG name-1,segment-list<br />
where:<br />
name-1<br />
specifies the name of the segment. When name-1 is followed by an asterisk (*), the<br />
named segment is automatically loaded when referenced by a jump instruction.<br />
Such a segment is called an indirect load segment. The asterisk is allowed on all SEG<br />
directives, but is ignored if the directive defines the main segment.<br />
segment-list<br />
specifies the address relationship between the segment named in name-1 and the<br />
other program segments (see F.2.1).<br />
Description<br />
Dynamic segments are identical to normal overlay segments (defined by the SEG<br />
directive - see F.2.1) in all aspects except one: The program area assigned exclusively to<br />
dynamic segments is not included when determining initial program size. It is the<br />
programmer’s responsibility to guarantee that the program area is available by using the<br />
MCORE$ request before requesting segment loading or to request segment loading by<br />
means of the SYSLIB routine DLOAD$, which obtains the necessary program area<br />
before initiating the segment load (see F.3.3).<br />
Dynamic segments can be defined as indirect load and can be placed anywhere within<br />
the segment structure of a program.<br />
The program addresses assigned to DSEGs are not considered when determining the<br />
initial I and D bank limits for a program. However, in assigning the values in LASTD$,<br />
LASTDR$, LASTI$, LASTIR$, FIRST$, LAST$, and LASTR$, (see Section 7), DSEG<br />
addresses are used.<br />
F.2.3. RSEG — Relocatable Segments<br />
Purpose<br />
The RSEG directive specifies the named segment as a relocatable segment. A<br />
relocatable segment (RSEG) is one whose location within the program is determined<br />
dynamically by the program during execution rather than at collection time. RSEG text is<br />
F–6 7830 9887–001
Program Segmentation<br />
relocated by the Exec loader at load time. An RSEG can reference entry points within the<br />
program, but the relocatable segment itself cannot contain definitions for references<br />
located elsewhere in the program (unless the reference is of the form J TAG,x, where x,<br />
an index register, contains the address at which the RSEG was loaded), since only<br />
internal RSEG addressing is relocated during segment loading.<br />
Format<br />
RSEG name<br />
where name specifies the relocatable segment.<br />
Description<br />
Elements included in relocatable segments must be explicitly named on IN directives<br />
(see 3.1.1). When an element that is referenced by more than one segment is implicitly<br />
included, it is placed in a segment other than the RSEG. Generally, it is advisable that if<br />
an element is referenced by more than one segment (one of which is an RSEG), the<br />
element should be explicitly included in the main segment.<br />
Relocatable segments cannot be indirectly loaded. See F.3. 1 for the direct method of<br />
loading segments.<br />
The starting address of a relocatable segment has no relationship to other segments in<br />
the collection. An RSEG may be loaded at whatever starting address is given in register<br />
A2 during the LOAD$ calling sequence (see F.3.1). The LOAD$ request adds the value in<br />
register A2 to all relative address references internal to the named relocatable segment.<br />
This adds additional overhead to loading an RSEG. You must modify any references to<br />
RSEG labels from outside the relocatable segment by the value in register A2.<br />
All instructions and data in a relocatable segment are collected together with all odd<br />
location counters followed by all even location counters.<br />
A relocatable segment can be loaded into either an I bank or D bank of the program.<br />
An element within an RSEG can define a common block that is located outside that<br />
RSEG only if the common block of the RSEG element contains no text. Take note of this<br />
if you use higher level languages such as FORTRAN.<br />
F.3. Loading Program Segments<br />
When a segmented program is called for execution (see 2.2.1), only the main segment is<br />
initially loaded, but main storage is allocated for all segments except DSEGs and RSEGs.<br />
Your program must load all other segments by either<br />
• The direct method<br />
• The indirect method<br />
Whenever a segment is loaded, an initial copy of the segment is loaded. Once loaded, a<br />
segment remains marked as loaded until all or part of its main storage space is overlayed<br />
by another segment or released by means of ER LCORE$.<br />
7830 9887–001 F–7
Program Segmentation<br />
When a segmented program produced by a bank-named collection is called by an @XQT<br />
control statement, only the main segment of each static bank or initially based dynamic<br />
bank is loaded. The main segment of any other dynamic bank is automatically loaded<br />
upon execution of an LIJ, LDJ, or LBJ instruction to that bank.<br />
F.3.1. L$OAD,LOAD$ — Direct Method<br />
When using the direct method of loading, you must use the L$OAD procedure or the<br />
Executive request ER LOAD$. The L$OAD procedure is an assembler procedure located<br />
in SYS$*RLIB$ or SYS$LIB$*SYSLIB. See the Exec System Software Executive<br />
Requests <strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong> for information on the use of ER LOAD$.<br />
Format<br />
L$OAD name,jump,clear,rseg-addr,bank-name<br />
where:<br />
name<br />
jump<br />
clear<br />
specifies the name of the segment to be loaded.<br />
specifies the location where control is to be transferred after the segment is loaded;<br />
if omitted, control passes to the location following the ER LOAD$.<br />
determines whether or not the program area containing the segment is zero-filled. If<br />
greater than zero, the area is not zero-filled before segment load. If zero or negative,<br />
the area is zero-filled before segment load.<br />
rseg-addr<br />
specifies the starting address for the relocatable segment, if the segment was<br />
defined by an RSEG directive. If omitted when loading a relocatable segment, the<br />
address must be in register A2 before the call is made:<br />
L,U A2,rseg-address<br />
The address can be defined as an octal value or a tag not contained in an RSEG.<br />
bank-name<br />
is used only for loading an RSEG within a bank-named collection. It specifies the<br />
bank into which the RSEG is to be loaded. If omitted, the bank-name must be in<br />
register A2 along with the RSEG starting address:<br />
LXI,U A2,bank-name<br />
F–8 7830 9887–001
Description<br />
Program Segmentation<br />
The L$OAD procedure produces a sequence of code that loads register A0 with the<br />
segment name, register A1 with jump address, register A2 with bank name and address<br />
for RSEG, and generates the ER LOAD$. The L$OAD request takes the following form:<br />
L,U A0,segment-name or L A0,(0400000,segment-name)<br />
L,U A1,jump<br />
L,U A2,rseg-addr or L A2,(bank-name,rseg-addr)<br />
ER LOAD$<br />
The segment-name is the same as the contents of the name-1 parameter on the SEG<br />
directive (see F.2.1).<br />
When bit 0 of register A0 is set, the segment loader does not clear the main storage<br />
area to be occupied by the segment. This decreases the time required to load the<br />
segment; however, as a result, any areas within the segment that are not initialized with<br />
data and instructions cannot be assumed to be zero.<br />
Segments within bank-named collections are directly loaded in the same manner as<br />
segments within a bank-implied collection. However, a consideration in bank-named<br />
collections is that each portion of that segment will be loaded into its respective bank.<br />
Thus, all banks that contain portions of that segment must be either static or currently<br />
based on the BDR0-3 at the time the segment is directly or indirectly loaded.<br />
Examples<br />
1. L$OAD NEW,ORG1<br />
2. L$OAD CAP,YELL,0,01350<br />
Description<br />
1. After segment NEW is loaded, transfer control to location ORG1. The area occupied<br />
by segment NEW is zero-filled before loading. The L$OAD procedure produces the<br />
same effect as the following code:<br />
L,U A1,ORG1<br />
L,U A0,NEW<br />
ER LOAD$<br />
2. The area to be occupied by relocatable segment CAP is zero-filled before loading.<br />
The starting address for segment CAP is 01350. After the segment is loaded, control<br />
is passed to YELL. The L$OAD procedure produces the same effect as the following<br />
code:<br />
L,U A2,01350<br />
L,U A1,YELL<br />
L,U A0,CAP<br />
ER LOAD$<br />
7830 9887–001 F–9
Program Segmentation<br />
F.3.2. Reloading the Main Segment<br />
It may be desirable to reestablish the main segment of a program for either error<br />
recovery or reinitialization. This is done by the LOAD$ request. The LOAD$ request<br />
reloads the entire main segment including all initially produced <strong>Collector</strong> tables. The main<br />
storage requirements remain unchanged.The calling sequence is<br />
L A0,(clear,0400000)<br />
L,U A1,reentry-addr<br />
ER LOAD$<br />
Register A0 is loaded with the segment-id of 0400000. The parameter clear functions as<br />
follows:<br />
• If clear is less than 0, the main segment area is not cleared before loading.<br />
• If clear is greater than or equal to 0, the main segment area is cleared before loading<br />
Register A1 is loaded with the reentry-addr according to the following:<br />
• If the reentry-addr is equal to 0, control is returned to the instruction following the<br />
LOAD$ request.<br />
• If the reentry-addr is not zero, control is passed to that address.<br />
In both bank-implied and bank-named programs, the same calling sequence is used to<br />
reload the main segment.<br />
The following considerations also apply to the main segment reload in bank-named<br />
programs:<br />
• Main segment is reloaded for all static banks and any dynamic banks that were<br />
initially based.<br />
• Any initially based dynamic bank must be based at the time of the main segment<br />
reload. If not, the program will terminate in error.<br />
• Any currently based dynamic banks that were not initially based will not have their<br />
main segments reloaded.<br />
• At the time of the reload, the current main storage requirements for all banks in<br />
which the main segment is reloaded cannot be less than the banks’ initial main<br />
storage requirements.<br />
• All banks that are based at the time of a main segment reload are still based after the<br />
reload has been performed.<br />
F.3.3. D$LOAD,DLOAD$ — Loading Dynamic Segments<br />
Dynamic segments can be loaded by referencing the dynamic load routine, which is a<br />
relocatable element contained in SYSLIB. You can reference this routine explicitly, or<br />
implicitly by the indirect load routine when a DSEG is marked for indirect load. The<br />
dynamic load routine can be called for loading either DSEGs or normal segments.<br />
The dynamic load routine determines whether the segment to be loaded is in fact a<br />
dynamic segment. If it is not, an ER LOAD$ is executed for the segment. If the segment<br />
F–10 7830 9887–001
Program Segmentation<br />
is a dynamic segment, the routine acquires the necessary DSEG areas by means of ER<br />
MCORE$ and then executes an ER LOAD$ to load the DSEG.<br />
You can reference the dynamic load routine by using the D$LOAD procedure or by a<br />
jump to DLOAD$.<br />
Format<br />
D$LOAD segment-name,jump,clear<br />
where:<br />
segment-name<br />
jump<br />
clear<br />
specifies the name of the segment to be loaded.<br />
specifies the location where control is to be transferred after the segment is loaded.<br />
If control is to be passed to the location following the jump to DLOAD$, a *0 must<br />
be placed in the jump parameter field or a tag must be placed on the line following<br />
the D$LOAD procedure call and must be specified in the jump parameter field.<br />
determines whether or not the program area containing the segment to be loaded is<br />
zero-filled. If greater than zero, the area is not zero-filled before segment load. If zero<br />
or negative, the area is zero-filled before segment load.<br />
Description<br />
The D$LOAD procedure generates the following sequence of code:<br />
L,U A0,segment-name or L A0,(0400000,segment-name)<br />
L,U A1,jump<br />
J DLOAD$<br />
When bit 0 of register A0 is set, the segment loader does not clear the main storage<br />
area to be occupied by the segment.<br />
F.3.4. Indirect Loading<br />
Whenever a segment that is marked for indirect loading is referenced by any jump<br />
instruction that passes control to an entry point in the segment’s I bank area, the<br />
segment is automatically loaded if it is not already in main storage. Segments to be<br />
loaded by the indirect method must be marked accordingly on the SEG directive.<br />
The mechanics for such loading are set up by the <strong>Collector</strong> and carried out by the Exec<br />
loader. The <strong>Collector</strong> replaces the address portion of the jump command with the<br />
address of an indirect load table entry. The indirect load table performs an SLJ instruction<br />
to the indirect load routine, which in turn performs an ER to the segment loader (if the<br />
7830 9887–001 F–11
Program Segmentation<br />
segment is not already loaded) and jumps to the location of the externally defined<br />
symbol. All registers are preserved by the process. The <strong>Collector</strong> places the indirect load<br />
table in the beginning of the main segment of the control bank.<br />
If indirect loading is used, the reference cannot be made to an external symbol with an<br />
offset.<br />
If the B option was specified on the @MAP control statement, the indirect load routine<br />
indicates that the segment’s main storage area need not be zero-filled.<br />
Segments marked for indirect loading can also be loaded by the direct method.<br />
There is no instruction interpretation performed to ensure that a referencing instruction<br />
is in fact a jump instruction. An EX instruction cannot be done to an indirectly loaded<br />
segment.<br />
The indirect load routine is nonreentrant.<br />
The reference to an entry point that causes the indirect load of a segment cannot be<br />
from the same element that contains that entry point, even if that portion of the element<br />
making the reference is in another segment of the program.<br />
Example<br />
SEG NINE*,(FR,SX)<br />
Segment NINE is automatically loaded when any externalized I bank entry point is<br />
referenced.<br />
F.3.5. D$REL,DREL$ — Releasing a Segment’s Program Area<br />
When the main storage area occupied by a segment is no longer required by the<br />
program,the space can be released by referencing the dynamic release routine, which is<br />
a relocatable element contained in SYSLIB. This routine can be referenced by either the<br />
D$REL procedure or by a jump to DREL$.<br />
Format<br />
D$REL segment-name,jump<br />
where:<br />
segment-name<br />
jump<br />
specifies the name of the segment area to be released.<br />
specifies the location where control is to be transferred after the segment’s area is<br />
released; if omitted, control passes to the location following the J DREL$ call.<br />
F–12 7830 9887–001
Description<br />
The D$REL procedure generates the following sequence of code:<br />
LXI,U A1,segment-name LXI,U A1,segment-name<br />
LXM,U A1,jump or LMJ A1,DREL$<br />
J DREL$<br />
Program Segmentation<br />
The dynamic release routine determines the program I bank start address of the named<br />
segment. This segment can be either a DSEG or an overlay segment. This address<br />
minus one is placed in A0 and an ER LCORE$ is executed. The D bank start address<br />
minus one is then used for an ER LCORE$. Following the release of the program area,<br />
the segment is marked as a dynamic segment. Its area can then be reacquired by<br />
referencing DLOAD$.<br />
If the released program areas are occupied by more segments than that specified on the<br />
D$REL call, the other segments will not be marked as unloaded. This includes all<br />
segments that follow the specified segment, in addition to those that overlap the<br />
specified segment. Therefore, it is your responsibility to call DREL$ for each segment<br />
actually released and to assure the necessary program areas are reacquired before a<br />
subsequent reload of any such segment.<br />
F.3.6. Segment Load Table<br />
The segment load table (SLT) is generated by <strong>Collector</strong> and is created for all collections<br />
containing segments other than the main segment. The SLT contains entries that<br />
describe every segment of the program.<br />
The SLT is placed in the control bank at the beginning of the main segment. In a bankimplied<br />
segmented collection where there is no program data in the collection (for<br />
example, there are no even location counters in the collection), the D bank contains only<br />
the SLT.<br />
F.4. Segmentation within Bank-Named Collections<br />
A segmentation structure can be specified within each user-defined bank, although it<br />
would be more efficient to make another bank. If a bank has no segments, the bank is<br />
considered to be composed of one main segment. When segmentation does exist<br />
within banks, the same name must be used for the main segment of each bank. The<br />
segmentation structure within a bank can be entirely different from, or entirely the same<br />
as, the segmentation structure of another bank. A segment can be contained within one<br />
bank, or it can span (be named and contained in) several banks. When a spanning<br />
segment is to be loaded, each portion of the segment is loaded into its respective bank.<br />
A bank-implied program, which has segments defined, can be thought of as a two-bank<br />
program (one I bank and one D bank) with each bank having the same segment structure<br />
and each segment spanning the two banks.<br />
Relocatable segments cannot span banks and must be included in their entirety in one<br />
bank.<br />
7830 9887–001 F–13
Program Segmentation<br />
When using segmentation within a bank-named collection, any location counters from<br />
any element that were not specified for inclusion are placed in the main segment of the<br />
control bank. If particular location counters are needed in a particular segment of a bank,<br />
place them there by an appropriate IN statement after the appropriate SEG statement.<br />
F.5. Common Blocks<br />
The <strong>Collector</strong> produces, in the absolute element, load control specifications for the<br />
LOAD$ routine. These specifications indicate which text words (data and instructions)<br />
are to be put at which locations in main storage when the segment is loaded.<br />
If a common block is given initial values (filled with text, rather than simply set aside as a<br />
reserved area), the <strong>Collector</strong> produces specifications to put in these values when the<br />
segment containing the element that defines the initial values is loaded.<br />
For example, if five different elements define five different initial values for the same<br />
common block and each of these five elements is located in a different segment, the<br />
same common block located in a segment common to all referencing segments would<br />
be reinitialized each time one of the five different segments was loaded. This occurs<br />
regardless of where the referenced common block is located within the user’s program<br />
area.<br />
The TYPE COMSEG directive causes the <strong>Collector</strong> to place all location counters defining<br />
common blocks and the common block area itself in one segment. The use of this<br />
directive avoids reinitialization of the common block unless, of course, the segment<br />
containing it and the defining location counters is reloaded.<br />
Any areas of the common blocks in which text is not loaded upon reinitialization are not<br />
changed as long as the reinitialization is caused by the loading of a segment other than<br />
the one in which the common block resides.<br />
If TPF$ does not have an entry-point table (created by @PREP or @PACK,P), the final size<br />
of the common block (in the absolute or relocatable element) is determined by the<br />
largest declaration of the common block in TPF$ and any other element. Otherwise, the<br />
largest common block declared in any element is used as the size of the common block.<br />
Bank-named collections cannot contain locally included common blocks (see 4.4.4.2).<br />
The location counters defining a common block are placed in the same bank as the<br />
common block. If the location counters are already in the same bank as the common<br />
block, they are not moved. If they are in a different bank, the segment where the<br />
location counters are placed is determined by whether the original segment (containing<br />
the location counters) spans the two banks. If the original segment spans the two banks,<br />
the location counters remain in that segment in the new bank; otherwise, they are<br />
placed in the main segment. To determine the segment in which the text defining the<br />
common block is placed, examine the listing that the <strong>Collector</strong> produces for the following<br />
format:<br />
element-name $lcs common-block<br />
F–14 7830 9887–001
Program Segmentation<br />
The text defining the common block is placed in the common referencing segment. If<br />
more than one bank references the common block, the text defining the common block<br />
is placed in the main segment of the control bank.<br />
Table F–1. Placement of Common Blocks Defined in One Element<br />
Number of times the element is<br />
specified on an IN directive<br />
Bank where common block is placed<br />
1 Same bank where the element is included (IN)<br />
> 1 Control bank<br />
Table F–2. Placement of Common Blocks Defined in More Than One<br />
Element<br />
Number of times each element is<br />
specified on an IN directive<br />
Where elements are<br />
included (IN)<br />
Bank where common<br />
block is placed<br />
Once per element In the same bank Same banks where the<br />
elements are included (IN)<br />
Once per element In different banks Control bank<br />
More than once for any element Control bank<br />
Example<br />
Element X contains the definition of the common block:<br />
IBANK I1<br />
IN X<br />
DBANK,C CONTROL<br />
The common block is placed in the I bank I1:<br />
IBANK I1<br />
IN X<br />
DBANK,C CONTROL<br />
IN X<br />
The common block is placed in the control bank.<br />
Element Y also contains the definition of the same common block:<br />
IBANK I1<br />
IN X<br />
IN Y<br />
DBANK,C CONTROL<br />
7830 9887–001 F–15
Program Segmentation<br />
The common block is placed in the I bank I1:<br />
IBANK I1<br />
IN X<br />
IN Y<br />
DBANK D1<br />
IN X<br />
IN Y<br />
DBANK,C CONTROL<br />
The common block is placed in the control bank.<br />
You can explicitly specify the placement of the text defining the common block by<br />
means of an IN directive. On IN directives (see 3.1.1), common blocks are always<br />
specified without a file name. A common block name must not be identical to an<br />
element name. An unnamed common block (that is, blank common) may be included in<br />
the program and positioned by using IN BLANK$COMMON.<br />
The common block is initialized each time a segment containing the text defining the<br />
common block is loaded. If all the text defining the common block is in the same<br />
segment, the common block is initialized to only one set of the values.<br />
F–16 7830 9887–001
Appendix G<br />
ROR$E-Relocatable Output Routine<br />
G.1. Introduction<br />
The relocatable output routine produces a relocatable element that is used for input to<br />
the <strong>Collector</strong>. The relocatable element is produced from relocatable items generated by<br />
the language processors.<br />
The relocatable output routine contains user interfaces SROR$EB, ROR$EB, EROR$EB,<br />
and TBLWR$EB. The following subsections describe these interfaces. Do not call the<br />
relocatable output routine from a minor register set activity. Registers X8 through X11;<br />
A0 through A5; R1, R2, and R3 define the minor register set.<br />
The <strong>Collector</strong> library element, ROR$E, comes installed in the standard product file<br />
SYS$LIB$*MAP. Since the <strong>Collector</strong>’s product file is not registered with the <strong>Collector</strong> to<br />
be processed during library searching, this relocatable element must be explicitly<br />
included in any collection that needs it.<br />
G.2. SROR$EB—Start Relocatable Output Routine<br />
with External Buffer<br />
SROR$EB initializes ROR$E before writing any relocatable text words.<br />
Calling sequence<br />
L,U A0,k-bit-count<br />
LXI A1,external-buffer-length<br />
LXM A1,address-of-external-buffer<br />
LMJ X11,SROR$EB<br />
error return<br />
normal return<br />
where:<br />
k-bit-count<br />
is the number of bits required to contain either the largest control counter or the<br />
number of undefined symbols for the relocation, whichever is larger.<br />
external-buffer-length<br />
is the length in words of the external buffer provided to ROR$E.<br />
7830 9887–001 G–1
ROR$E-Relocatable Output Routine<br />
address-of-external-buffer<br />
is the address of the external buffer provided to ROR$E.<br />
SROR$EB saves the K-bit count for the relocatable element and establishes the<br />
programfile write location for the element by means of ER PFWL$. (See the Exec<br />
System Software Executive Requests <strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong>.) SROR$EB<br />
adjusts the output buffer to minimize read-before-write operations, if possible.<br />
The error return occurs when a nonzero status code is encountered in register A2.<br />
Register A2 contains the status code from ER PFWL$. (See the Exec System Software<br />
Executive Requests <strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong>.)<br />
G.3. ROR$EB—Generation of Relocatable Output<br />
with External Buffer<br />
ROR$EB formats relocatable items and outputs text to the relocatable element. This<br />
routine uses the external buffer that was passed to SROR$EB.<br />
Calling sequence<br />
L,U A0,address-of-item<br />
LMJ X11,ROR$EB<br />
error return<br />
normal return<br />
ROR$E is called for every text word that will be inserted in the relocatable element.<br />
(Examples of text words are an instruction or data word.) For each call, the calling<br />
program must supply the text word and its relocation information in an item.<br />
The minimum length of the item is three words; however, it may be larger. Any<br />
relocation of a text word, other than a simple relocation of the right address under the<br />
same location counter that applies to the text word, must be handled through special<br />
relocation items. Any number of special relocation items can be appended to the item.<br />
G.3.1. ROR$EB Item Format<br />
The following shows the ROR$EB item format.<br />
00 n not used l r<br />
01 text word<br />
02 f zero lc address<br />
03 special relocation items<br />
.. …<br />
n-1 special relocation items<br />
G–2 7830 9887–001
Word 0<br />
n<br />
l<br />
r<br />
Item length, including any special relocation items.<br />
12 sign bits for a left address or left half-word field.<br />
12 sign bits for a right address or right half-word field.<br />
Word 1<br />
text word<br />
Word 2<br />
f<br />
lc<br />
Bit 3 = 1, right address (bits 20-35) relocatable.<br />
Bit 2 = 1, left address (bits 2-17) relocatable.<br />
ROR$E-Relocatable Output Routine<br />
Contains the location counter the text word is under. Can be overridden by a special<br />
relocation item type 013.<br />
address<br />
Address of the text word. This address can be an 18-bit value.<br />
Words 3, 4, and so forth, can contain special relocation items.<br />
G.3.2. Special Relocation Items<br />
Location Counter<br />
The location counter relocation item, type 011, format is as follows:<br />
01 011 l r lc<br />
This item is used for relocation by a location counter other than the one specified in S3<br />
of word 2.<br />
7830 9887–001 G–3
ROR$E-Relocatable Output Routine<br />
l<br />
r<br />
lc<br />
The left margin of the field of relocation (a bit number in the range 0 through 35).<br />
The right margin of the field of relocation (a bit number in the range 0 through 35,<br />
with r less than or equal to l).<br />
Location counter number; a signed 12-bit integer. The starting address of the<br />
location counter is added if lc is positive or subtracted if lc is negative.<br />
External <strong>Reference</strong><br />
The external reference item (two words), type 012, format is as follows:<br />
02 012 l r signs<br />
sequence number of the external reference in the preamble<br />
This item is used for relocation by the value of an externally defined symbol.<br />
l<br />
r<br />
signs<br />
The left margin of the field of relocation.<br />
The right margin of the field of relocation.<br />
12 bits of all zeros or ones, depending on whether the external reference is to be<br />
added or subtracted respectively.<br />
Large Location Counter<br />
The large location counter item, type 013, format is as follows:<br />
01 013 not used lc<br />
If this special item is used, it must be the first special item appended to the item.<br />
This item overrides the lc in Word 2 of the item. This allows location counters greater<br />
than 63.<br />
G–4 7830 9887–001
lc<br />
Location counter number the text will be under.<br />
ROR$E-Relocatable Output Routine<br />
ROR$E formats the text words and the relocation information into blocks and writes the<br />
blocks to the relocatable element.<br />
The error return is taken when<br />
• An I/O error occurs; A1 contains the status.<br />
• An internal inconsistency occurred in ROR$EB; A1 is zero.<br />
G.4. EROR$EB—End Relocatable Output<br />
Routinewith External Buffer<br />
EROR$EB terminates ROR$E after the last text word has been processed. This routine<br />
uses the external buffer that was passed to SROR$EB.<br />
Calling sequence<br />
L A0, (transfer-addr,transfer-addr-lc)<br />
LMJ X11,EROR$EB<br />
error return<br />
normal return<br />
Note: If a transfer location is not specified (for example, if the element is a subroutine),<br />
A0 must contain negative zero: 0777777777777.<br />
where:<br />
transfer-addr<br />
is the location of the first instruction to be executed in the main program. This can be<br />
an 18-bit value.<br />
transfer-addr-lc<br />
is the location counter to which the address applies.<br />
EROR$EB outputs the last block built by ROR$EB and generates a transfer image. The<br />
transfer image is a special word group. The format is described in the Data Structures<br />
<strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong>.<br />
The error return is taken when an I/O error occurs. The status is returned in A1.<br />
7830 9887–001 G–5
ROR$E-Relocatable Output Routine<br />
G.5. TBLWR$EB—Table Write Subroutine with<br />
External Buffer<br />
TBLWR$EB writes the preamble constructed by the calling program to the program file<br />
that contains the relocatable text. ROR$EB must have already written the element text<br />
to the program file, and EROR$EB must have been called.<br />
The preamble consists of one to five tables and is described in the Data Structures<br />
<strong>Programming</strong> <strong>Reference</strong> <strong>Manual</strong>.<br />
Calling sequence<br />
L,U A0,preamble-addr<br />
L,U A1,preamble-length<br />
LMJ X11,TBLWR$EB<br />
error return<br />
normal return<br />
TBLWR$EB writes the preamble supplied by the calling program to the program file. The<br />
entries in PARTBL+29 through 38 are updated to reflect the preamble length, preamble<br />
location, and the element type (5 = relocatable). For more information on the contents of<br />
PARTBL, see the System Service Routines Library (SYSLIB) <strong>Programming</strong> <strong>Reference</strong><br />
<strong>Manual</strong>. The format of the preamble is described in the Data Structures <strong>Programming</strong><br />
<strong>Reference</strong> <strong>Manual</strong>.<br />
An ER PFI$ is done to update the file’s table of contents.<br />
The error return is taken when<br />
• An I/O error occurs. A1 contains the status.<br />
• An error occurs on the ER PFI$. A1 equals 0 and A2 is the status.<br />
• A TBLWR$EB error occurs. A1 and A2 equal 0 and A3 contains the TBLWR$EB<br />
status.<br />
In the case of a TBLWR$EB error, the base table that was to be written contains invalid<br />
information.<br />
• If A3 contains a 1, the base table indexes point into the base table.<br />
• If A3 contains a 2, the table indexes point beyond the end of the preamble.<br />
• If A3 contains a 3, the relocatable version specified in the base table is not valid.<br />
An externalized tag, ROR$VERSION, is provided by ROR$E which contains the current<br />
valid relocatable version. This value should be used when setting the relocatable version<br />
in the base table.<br />
It is highly recommended to use TBLWR$EB to write the base table of the preamble.The<br />
added checking of the base table helps to ensure that a valid relocatable is generated.<br />
G–6 7830 9887–001
G.6. Optimization Information<br />
ROR$E-Relocatable Output Routine<br />
ROR$E and the <strong>Collector</strong> are more efficient if the instructions and data are coded under<br />
control of location counters one and two respectively. ROR$E has less processing to do<br />
and produces a more compact relocatable element. The <strong>Collector</strong> has a smaller bit<br />
stream to analyze.<br />
7830 9887–001 G–7
ROR$E-Relocatable Output Routine<br />
G–8 7830 9887–001
Index<br />
Symbols<br />
$Ics, 4-10<br />
$n, 4-11<br />
$NONE, $lcs, 4-10<br />
$ODD, $lcs, 4-10<br />
@MAP, 2-7<br />
A option, 2-7<br />
@PREP<br />
of TPF$, 8-1<br />
TPF$, 3-17<br />
Numbers<br />
262K bank restriction, D-1<br />
65K location counter, D-1<br />
A<br />
A attribute, IBANK/DBANK directive<br />
(Table), 4-4<br />
A option, @MAP, 2-7<br />
absolute elements<br />
Arithmetic Fault Mode Determination, 5-5<br />
EXEC action produced by arithmetic fault<br />
mode sensitivity, 5-6<br />
optimization, 6-7<br />
producing extended diagnostic tables, 5-3<br />
quarter-word sensitive, 5-4<br />
setting bank size to 64, 5-2<br />
third-word sensitive, 5-5<br />
absolute output, 2-5<br />
absolute values, entry point, 4-28<br />
access control words, 6-8<br />
allocating<br />
data, 2-2<br />
instructions, 2-2<br />
ALLOWCONTIN, 4-7<br />
Altering the Search Sequence, 3-12<br />
alternate file common banks, 4-5, 4-28, 4-29<br />
arithmetic fault compatibility, setting, 5-1<br />
arithmetic fault noninterrupt, setting, 5-1<br />
array, efficient use of, 8-2, 8-4<br />
array, efficient use of, setting, 8-3<br />
assignment, exclusive, 2-3<br />
attribute-list, BANKINFO, 4-6<br />
attributes, BANKINFO directive, 4-6<br />
7830 9887–001 Index–1<br />
B<br />
B attribute, IBANK/DBANK directive<br />
(table), 4-4<br />
B optionm @MAP, 2-8<br />
bank<br />
address assignments, 4-13<br />
attributes, 4-1<br />
control bank, 4-14<br />
initially based, 4-14<br />
nonconfigured common bank, 4-5<br />
physical, 4-1<br />
structuring, 4-1<br />
switching banks, 4-20<br />
bank descriptor, 4-1<br />
bank descriptor register, 4-3<br />
bank descriptor table, 4-3<br />
bank structuring<br />
DBANK, 4-1<br />
IBANK, 4-1<br />
bank switching<br />
basic mode, 4-20<br />
extended mode, 4-29<br />
bank template<br />
DYNAMIC, 4-7<br />
general information, 4-1<br />
read-only, 4-5<br />
void, 4-5
Index<br />
VOID, 4-9<br />
bank-implied collections<br />
common blocks, 4-13<br />
FRSTIN directive, 3-3<br />
BANKINFO AFCB, using, 4-30<br />
BANKINFO directive<br />
2048BOUNDARY, 4-9<br />
AFCB, 4-2<br />
ALLOWCONTIN, 4-7<br />
attribute-list, 4-6<br />
attributes, 4-6<br />
BDR, 4-7<br />
CODESTRIPPED, 4-7<br />
CONTINGENCY, 4-7<br />
CONTROL, 4-7, 4-14<br />
DYNAMIC, 4-9<br />
EXTENDED, 4-7<br />
GUARANTEED, 4-8<br />
INITIAL, 4-8<br />
LEVEL(#), 4-8<br />
LMJ, 4-8<br />
NCCB, 4-8<br />
NOTEXTENDED, 4-8<br />
OVERRIDEMIN, 4-8<br />
READONLY, 4-9<br />
TSQUEING, 4-9<br />
VECTOR, 4-9<br />
bank-named<br />
example, B-2<br />
general information, 2-3<br />
bank-named collection<br />
segmentation within, F-14<br />
bank-named collections<br />
segmentation consideration, F-10<br />
basic mode<br />
bank switching, 4-23<br />
BDT level, 4-22<br />
BBJ$<br />
general information, 4-21<br />
symbol, 7-1<br />
BDI<br />
DBJ$, 4-24<br />
BDI$<br />
general information, 4-22<br />
symbol, 7-1<br />
BDI, using with<br />
BBJ$, 4-22<br />
IBJ$, 4-22<br />
BDI+entry points<br />
absolute values, 4-28<br />
<strong>Collector</strong>-defined values, 4-28<br />
BDICALL$<br />
allowing collection time definition, 5-4<br />
general information, 4-22, A-4<br />
return, 4-25<br />
symbol, 7-1<br />
using with IBJ$, 4-24<br />
BDIREF$<br />
general information, 4-21, A-4<br />
symbol, 7-1<br />
BDIVECT$<br />
general information, 4-35<br />
symbol, 7-1<br />
BDR, 4-3<br />
BDT level<br />
definition, 4-29<br />
extended mode, 4-26<br />
BLANK$COMMON<br />
general information, 4-13<br />
positioning, 4-13<br />
BLOCKSIZE$ symbol, 7-1<br />
BLOCKSIZE64 parameter, TYPE directive, 5-2<br />
BTD level<br />
basic mode, 4-29<br />
Index–2 7830 9887–001<br />
C<br />
C attribute, IBANK-DBANK directive<br />
(table), 4-4<br />
C option<br />
@MAP, 2-8<br />
C Option<br />
efficient use of, 8-5<br />
CALL<br />
op code, 4-36<br />
using, 4-27<br />
CBEP$$, 4-5, 4-6, 4-7, 4-22, 4-28, 4-30, 4-32,<br />
4-34<br />
CERU$ element, 4-5, 4-6, 4-22, 4-28<br />
character length, 2-3<br />
CLASS directive<br />
element selection determination through<br />
version names, 3-6<br />
valid string characters, 3-6<br />
clear PSR D10 at initial load, 5-5<br />
clear PSR D20, 5-1<br />
clear PSR D32 at initial load, 5-4<br />
CLRAFCM parameter, TYPE directive, 5-1,<br />
5-6<br />
CODESTRIPPED, 4-7<br />
collection<br />
bank-implied, 3-2<br />
bank-named, 3-9
common-banked, suppress error<br />
messages, 5-2<br />
default LEVEL, 6-6<br />
collection, bank-imlpied<br />
general information, 2-2<br />
collection, bank-implied<br />
FRSTIN directive, 3-3<br />
collection, bank-named<br />
general information, 3-9<br />
segmentation within, F-13<br />
<strong>Collector</strong><br />
absolute output, 2-5<br />
control statement options, 2-7<br />
COR directive, 6-1<br />
DEF directive, 6-3<br />
directives, 2-10<br />
entry-point table, C-1<br />
file searching, 3-10<br />
FIRSTBDI directive, A-3<br />
initiation, 2-7<br />
initiation, @MAP, 2-7<br />
input, 2-1<br />
language conventions, 2-2<br />
output, 2-4<br />
relocatable elements, 2-4<br />
RES directive, 6-8<br />
RSEG directive, F-6<br />
sign-off line, 2-6<br />
sign-on line, 2-6<br />
SNAP directive, 6-11<br />
termination, 2-7<br />
TYPE COMSEG directive, F-14<br />
TYPE EXEC directive, definition, A-1<br />
using, 1-1<br />
XSEG directive, A-1<br />
<strong>Collector</strong> defined symbol<br />
BDICALL$, 7-1<br />
<strong>Collector</strong> defined symbols<br />
BBJ$, 7-1<br />
BDIREF$, 7-1<br />
BDIVECT$, 7-1<br />
BLOCKSIZE$, 7-1<br />
COMMN$, 7-1<br />
D$ATE, 7-1<br />
DBJ$, 7-1<br />
ENTRY$, 7-2<br />
FIRST$, 7-2<br />
FIRSTBDI$, 7-2<br />
FRSTD$, 7-2<br />
FRSTI$, 7-2<br />
IBJ$, 7-2<br />
LAST$, 7-2<br />
LASTD$, 7-2<br />
LASTDR$, 7-2<br />
LASTI$, 7-2<br />
LASTIR$, 7-2<br />
LASTR$, 7-3<br />
LBDI$, 7-3<br />
LBDICALL$, 7-3<br />
LBDIREF$, 7-3<br />
MAPBDR$, 7-3<br />
MAPBDT$, 7-3<br />
MAPCALL$, 7-3<br />
MAPGOTO$, 7-3<br />
SLT$, 7-3<br />
T$IME, 7-3<br />
XREF$, 7-3<br />
<strong>Collector</strong> definied symbols<br />
BDI$, 7-1<br />
<strong>Collector</strong> directives<br />
COR, 6-1<br />
DEF, 2-4<br />
DSEG, F-6<br />
END, 6-4<br />
ENT, 6-4<br />
EQU, 6-5<br />
FIRSTBDI, A-3<br />
FRSTIN, 2-4<br />
LEVEL, 6-6<br />
MINGAP, 6-7<br />
MINSIZ, 6-7<br />
REF, 6-11<br />
RLIB, file-searching, 3-10<br />
RSEG, F-6<br />
SEG, F-2<br />
SNAP, 6-11<br />
TYPE, 2-2<br />
XSEG, A-1<br />
<strong>Collector</strong> directives, BANKINFO<br />
AFCB, 4-10<br />
ALLOWCONTIN, 4-7<br />
BDR, 4-7<br />
CODESTRIPPED, 4-7<br />
CONTINGENCY, 4-7<br />
CONTROL, 4-7<br />
DYNAMIC, 4-7<br />
EXTENDED, 4-7<br />
GUARANTEED, 4-8<br />
INITIAL, 4-8<br />
LEVEL(#), 4-8<br />
LMJ, 4-8<br />
NCCB, 4-8<br />
NOTEXTENDED, 4-8<br />
OVERRIDEMIN, 4-8<br />
READONLY, 4-9<br />
TSQUEUING, 4-9<br />
Index<br />
7830 9887–001 Index–3
Index<br />
VOID, 4-9<br />
<strong>Collector</strong> directives, CLASS<br />
general information, 3-6<br />
<strong>Collector</strong> directives, DBANK<br />
attributes parameter, 4-2<br />
bank-list parameter, 4-2<br />
level-# parameter, 4-2<br />
name-1parameter, 4-2<br />
<strong>Collector</strong> directives, DLIB<br />
bank-name parameter, 3-10<br />
<strong>Collector</strong> directives, FORM<br />
bank-name parameter, 3-3<br />
segment-name parameter, 3-3<br />
<strong>Collector</strong> directives, IBANK<br />
attributes parameter, 4-2<br />
bank structuring, 4-1<br />
bank-list parameter, 4-2<br />
general information, 2-2<br />
<strong>Collector</strong> directives, IN<br />
$lcs parameter, 3-1<br />
bank-list parameter, 3-1<br />
efficient use of, 8-1<br />
general information, 3-1<br />
name parameter, 3-1<br />
<strong>Collector</strong> directives, LIB<br />
$lcs parameter, 3-8<br />
bank-name parameter, 3-8<br />
file-name parameter, 3-8<br />
general information, 3-8<br />
<strong>Collector</strong> directives, NOT<br />
DEFAULT$LIBS parameter, 3-5<br />
general information, 3-4<br />
name parameter, 3-5<br />
<strong>Collector</strong> diretives, IBANK<br />
bdr-# parameter, 4-3<br />
<strong>Collector</strong> TYpe directive<br />
CLRAFCM, 5-6<br />
<strong>Collector</strong> TYPE directive<br />
BLOCKSIZE64 parameter, 5-2<br />
COMMONBANK parameter, 5-2<br />
COMSEG parameter, 5-3<br />
EXEC parameter, 5-3<br />
EXTDIAG parameter, 5-3<br />
IBJLNK parameter, 5-4<br />
INSAFCM parameter, 5-6<br />
QUARTER parameter, 5-4<br />
READONLY parameter, 5-5<br />
REALTIME parameter, 5-5<br />
SETAFCM parameter, 5-5<br />
THIRD parameter, 5-4<br />
<strong>Collector</strong>, using<br />
C option efficiently, 8-5<br />
location counters efficiently, 8-5<br />
<strong>Collector</strong>-defined tags, 4-14<br />
<strong>Collector</strong>-produced absolute output, 2-5<br />
<strong>Collector</strong>-produced relocatable elements<br />
DEF directive, 6-3<br />
determining arithmetic fault mode, 5-5<br />
END, 6-4<br />
IN, 3-1<br />
LIB, 3-8<br />
NOT, 3-4<br />
REF directive, 6-10<br />
TYPE directive, 5-1<br />
COMMN$ symbol, 7-1<br />
common blocks<br />
bank-implied collection, 4-12<br />
include text segment, 5-3<br />
loading, F-7<br />
placement, F-15<br />
R option collection, 2-4<br />
TYPE COMSEG, F-14<br />
common-bank collection, suppress error<br />
messages, 5-2<br />
conflicts<br />
local-global, 4-18<br />
CONTINGENCY, 4-7<br />
continuation character, 2-3<br />
CONTROL, 4-7<br />
control bank<br />
common block, F-15<br />
error messages, E-3, E-5, E-13, E-30<br />
FIRSTBDI value, A-3<br />
general information, 4-14<br />
indirect load table, F-11<br />
segment load table, F-13<br />
SNAP$ element, 6-13<br />
using segmentation, F-13<br />
control statement<br />
@MAP, 2-7<br />
options, 2-7<br />
COR directive<br />
corrections, 6-1<br />
corrections, for a relocatable element, 6-3<br />
data images, 6-1<br />
indirectly loaded segment, 6-2<br />
Index–4 7830 9887–001<br />
D<br />
D attribute, IBANK/DBANK directive<br />
(table), 4-4<br />
D bank general information, 4-14, 4-15<br />
D bank symbols<br />
FRSTD, 4-14
LASTD$, 4-14<br />
LASTDR$, 4-14<br />
D option, @MAP, 2-7, 2-8<br />
D$ATE symbol, 7-1<br />
D$BJ, 4-23<br />
D$LOAD/DLOAD$, loading dynamic<br />
segments, F-10<br />
D$REL/DREL$ ,releasing segment program<br />
area, F-12<br />
data allocation, 2-2<br />
data area, 4-15<br />
DBANK directive, 4-15<br />
$EVEN, general information, 4-11<br />
attributes, 4-9<br />
attributes parameter, 4-2<br />
bank-list parameter, 4-2<br />
bdr-# parameter, 4-3<br />
first directive, 4-13<br />
general information, 4-13<br />
level-# parameter, 4-2<br />
location counters, 4-12<br />
name-1parameter, 4-2<br />
options, 4-3<br />
structuring, 4-1<br />
DBANK directive bank-list parameter<br />
name-2 format, 4-2<br />
DBANK directive, bank-list parameter<br />
name-n format, 4-2<br />
no entry format, 4-2<br />
DBJ$ symbol, 7-1<br />
DEF directive<br />
absolute collection, 6-3<br />
COMMN$, 6-3<br />
ENTRY$, 6-4<br />
external defininition collection, 6-3<br />
R option collection, 6-3<br />
definitions<br />
BDI and entry point, 4-28<br />
external, 2-4<br />
destination bank, 4-22<br />
determining search sequence, 3-14<br />
diagnostic messages<br />
ERROR, E-8<br />
FATAL ERROR, E-23<br />
WARNING, E-30<br />
directed LIB directive, 3-8<br />
directive<br />
COR, 6-1<br />
directives<br />
BANKINFO, 4-30<br />
banking, 4-1<br />
<strong>Collector</strong>, 2-2<br />
DBANK, 4-14<br />
DEF, 6-3<br />
directed LIB, 3-9<br />
END, 6-4<br />
ENT, 6-4<br />
EQU, 6-5<br />
IBANK, 4-14<br />
IN, 4-15<br />
INFO Group 3, 4-12<br />
REF, 6-10<br />
RES, 6-8<br />
RSEG, F-6<br />
SEG considerations, F-3<br />
segmentation, F-1<br />
SNAP, 6-11<br />
directives, segmentation<br />
DSEG, F-2<br />
IN, F-2<br />
RSEG, F-2<br />
SEG, F-2<br />
DLIB directive<br />
$lcs parameter, 3-10<br />
bank-name parameter, 3-10<br />
DSEG<br />
considerations, F-6<br />
DSEG directive<br />
considerations, F-6<br />
dynamic segments, F-6<br />
MCORE$ request, F-6<br />
dumps, SNAP directive, 6-13<br />
DYNAMIC, 4-7<br />
dynamic segments<br />
general information, F-10<br />
loading, F-10<br />
Index<br />
7830 9887–001 Index–5<br />
E<br />
E option, @MAP, 2-8<br />
element<br />
exclusion, 3-5<br />
explicitly included, 4-10<br />
global, 4-11<br />
implicitly included, 4-12<br />
inclusion, 3-17<br />
local, 4-16<br />
placement, 4-19<br />
element name rules, 2-3<br />
element placement<br />
arithmetic fault mode determination, 5-5<br />
element search, 3-11<br />
elements, absolute
Index<br />
EXEC action produced by arithmetic fault<br />
mode, 5-6<br />
elements, relocatable<br />
<strong>Collector</strong> produced, 2-4<br />
corrections, 6-1<br />
example<br />
bank-implied collections, B-1<br />
F<br />
F option, @MAP, 2-8<br />
FATAL ERROR Messages, E-1<br />
file name rules, 2-3<br />
file searching<br />
implicit inclusion, 3-8<br />
sequence number, 3-11<br />
files, 2-3<br />
FIRST, 4-14<br />
FIRSTBDI directive, A-3<br />
FIRSTBDI$ symbol, 7-2<br />
FORM directive, 3-3<br />
format<br />
errors for a relocatable element, D-1<br />
SNAP data image, 6-12<br />
FRSTD, 4-14<br />
FRSTD$ symbol, 7-2<br />
FRSTI$, 4-14<br />
FRSTI$ symbol, 7-2<br />
FRSTIN directive<br />
first element included, 3-3<br />
general information, 2-4<br />
G<br />
G attribute, IBANK/DBANK directive<br />
(table), 4-4<br />
G option, SIR$, 2-9<br />
global elements, 4-16<br />
global-local conflicts, 4-18<br />
GOTO, op code, 4-26<br />
group-sequence, 3-11<br />
GUARANTEED, 4-8<br />
H<br />
H attribute, IBANK/DBANK directive<br />
(table), 4-4<br />
H option, SIR$, 2-9<br />
Index–6 7830 9887–001<br />
I<br />
I bank symbols, 4-12<br />
I option, SIR$, 2-9<br />
IBANK directive, 4-12<br />
IBANK directive, bank list parameter, 4-1<br />
IBANK/ DBANK, 4-1<br />
IBJ$, 4-20, 4-23<br />
IBJ$ symbol, 7-2<br />
IBJ$/DBJ$, use of BDI, 4-20<br />
IBJLNK parameter, TYPE directive, 5-4<br />
implicitly included elements, 4-12<br />
implied SEG directive, F-3<br />
IN Directive, 8-1<br />
indirect loading of segments, F-11<br />
INFO Groups, C-1<br />
information messages, E-35<br />
initially based banks, 4-14<br />
input to the <strong>Collector</strong>, 2-7<br />
instruction<br />
allocation, 2-2<br />
area, 4-14<br />
J<br />
J option, SIR$, 2-9<br />
J, op code, 4-37<br />
K<br />
K option, SIR$, 2-9<br />
keywords, INFO group 12, 3-11<br />
L<br />
L attribute, IBANK/DBANK directive<br />
(table), 4-4<br />
L option, @MAP, 2-8<br />
L$OAD/LOAD$, F-8<br />
language conventions, 2-2<br />
LAST$, 4-14<br />
LAST$ symbol, 7-2<br />
LASTD$, 4-12<br />
LASTD$ symbol, 7-2<br />
LASTDR$, 4-12<br />
LASTDR$ symbol, 7-2<br />
LASTI$, 4-12<br />
LASTI$ symbol, 7-2
LASTIR$, 4-12<br />
LASTIR$ symbol, 7-2<br />
LASTR$ symbol, 7-3<br />
LBDI$, 4-26<br />
LBDI$ symbol, 7-3<br />
LBDICALL, 4-26<br />
LBDICALL$ symbol, 7-3<br />
LBDIREF$, 4-26<br />
LBDIREF$ symbol, 7-3<br />
leading blanks, 2-3<br />
length, character, 2-3<br />
LEVEL(#), 4-8<br />
LIB directive, 2-3<br />
library, 3-11<br />
link vector, 4-9<br />
LMJ, 4-8<br />
LOAD$ request, reloading the main<br />
segment, F-10<br />
loading, F-14<br />
local elements, 4-16<br />
Local-Global Conflicts, 4-18<br />
location counter, 4-11<br />
LOCL, 4-26<br />
M<br />
M attribute, IBANK/DBANK directive<br />
(table), 4-4<br />
MAP$PF, 2-1<br />
MAPBDR$ symbol, 7-3<br />
MAPBDT$ symbol, 7-3<br />
MAPCALL$ symbol, 7-3<br />
MASM $INFO group 3 directive, 4-12<br />
MINGAP, 6-7<br />
multibanked program, 4-13<br />
N<br />
N attribute, IBANK/DBANK directive<br />
(table), 4-4<br />
N option, @MAP, 2-8<br />
NCCB, 4-2<br />
negative fields, D-2<br />
Neither P nor Q option, SIR$, 2-9<br />
NITIAL, 4-8<br />
no option listing, @MAP, 2-5<br />
nonconfigured common bank, 4-2, 4-8<br />
notation, 2-3<br />
NOTEXTENDED, 4-8<br />
number on <strong>Collector</strong> directives, 2-3<br />
Index<br />
7830 9887–001 Index–7<br />
O<br />
O attribute, IBANK/DBANK directive<br />
(table), 4-4<br />
odd location counters, 2-2<br />
operation code, 4-36<br />
options<br />
@MAP, 2-7<br />
SIR$, 2-9<br />
output, 2-2<br />
OVERRIDEMIN, 4-39<br />
P<br />
P and Q option, SIR$, 2-9<br />
P option, SIR$, 2-9<br />
physical bank, 4-1<br />
placement, element, 4-19<br />
print diagnostic message, 2-7<br />
procedures, system-provided, 4-23<br />
program segments<br />
direct method, F-8<br />
dynamic release, F-12<br />
indirect method, F-11<br />
segment load table, F-13<br />
PTF$<br />
size of common block, F-14<br />
Q<br />
Q attribute, IBANK/DBANK directive<br />
(table), 4-4<br />
Q option, SIR$, 2-9<br />
QUARTER, 5-4<br />
quarter-word sensitive, 5-4<br />
queuing, test-and-set, 4-4<br />
R<br />
R attribute, IBANK/DBANK directive<br />
(table), 4-5<br />
R option, @MAP, 2-8<br />
READONLY, 4-9, 5-5<br />
REALTIME, 5-5<br />
REF directive, 6-10<br />
reference search, 3-11<br />
references<br />
external, 2-4, 2-6
Index<br />
reloading main segment, F-10<br />
relocatable elements, 2-4<br />
relocatable segments, F-7<br />
relocation order restriction, D-1<br />
RES directive, 6-8<br />
restrictions, D-2<br />
return, 4-25<br />
RSEG, F-2<br />
rules, 2-3<br />
S<br />
S attribute, IBANK/DABNK directive<br />
(table), 4-5<br />
S option, @MAP, 2-8<br />
search, 3-11<br />
search sequence<br />
altering, 3-12<br />
determining, 3-14<br />
searching user-specified search files, 3-16<br />
SEG directive<br />
$MAIN$, F-3<br />
directive, F-2<br />
element inclusion, F-3<br />
example, B-3<br />
implied, F-3<br />
indirect load segment, F-6<br />
indirect loading, F-11<br />
value, F-3<br />
segment load table, 4-14<br />
segmentation, F-1<br />
sensitivity, quarter-word, 5-6<br />
sensitivity, third-word, 5-5<br />
SETAFCM parameter, TYPE directive, 5-1<br />
sign-off line, 2-6<br />
sign-on line, 2-6<br />
SIR$ options, 2-9<br />
SLT$ symbol, 7-3<br />
SNAP data image format, 6-12<br />
SNAP directive, 6-11<br />
snapshot dumps, 6-11<br />
statement options, @MAP, 2-7<br />
static diagnostic text, D-3<br />
storage area, expand, 2-8<br />
subattributes, 4-6<br />
subroutine calls, 4-25<br />
suppresses error messages during commonbanked<br />
collection, 5-2<br />
symbolic element, 5-4<br />
SYS$*DATA$.LIB$NAMES, 3-13<br />
SYS$*RLIB$, 2-4<br />
SYS$LIB$*ACOB, 3-12<br />
SYS$LIB$*FTN, 3-12<br />
SYS$LIB$*SORT, 3-12<br />
SYS$RLIB$ID, 3-1<br />
system library searching, 3-11<br />
system-provided procedures, 4-23<br />
Index–8 7830 9887–001<br />
T<br />
T attribute, IBANK/DBANK directive<br />
(table), 4-5<br />
T option, @MAP, 2-8<br />
T$IME symbol, 7-3<br />
target location, 4-36<br />
template bank, 4-1<br />
termination, 2-7<br />
test-and-set queuing, 4-9<br />
text ACW, 6-8<br />
THIRD parameter, TYPE directive, 5-5<br />
third-word sensitivity, 5-5<br />
TPF$<br />
@PREP of, 8-1<br />
file searching, 3-10<br />
truncation of negative fields, restriction, D-2<br />
TSQUEUING, 4-9<br />
TYPE COMSEG directive, F-14<br />
TYPE EXEC<br />
definition, A-1<br />
general information, 4-37<br />
TYPE EXEC collection, A-4<br />
TYPE IBJLNK<br />
general information, 4-23<br />
using, 4-24<br />
U<br />
U attribute, IBANK /DBANK directive<br />
(table), 4-5<br />
U option, SIR$, 2-9<br />
undefined symbols, C-1<br />
V<br />
V attribute, IBANK /DBANK directive<br />
(table), 4-5<br />
VECTOR attribute, 4-9<br />
VOID, 4-9<br />
void bank template, 4-5, 4-9
W<br />
W option, SIR$, 2-10<br />
WARNING messages, E-30<br />
word count, incorrect, D-1<br />
write function process, 2-3<br />
write-protected, 4-5<br />
X<br />
X attribute, IBANK /DBANK directive<br />
(table), 4-5<br />
X option, @MAP, 2-9<br />
X11,BDICALL$, 4-29<br />
X11,BDIREF$, 4-29<br />
XREF$ symbol, 7-3<br />
XSEG directive, Executive function<br />
arrangement, A-1<br />
Z<br />
Z attribute, IBANK/DBANK directive<br />
(table), 4-5<br />
Z option, @MAP, 2-9<br />
zero-fill<br />
ACW, 6-8<br />
segment, F-11<br />
Index<br />
7830 9887–001 Index–9
Index<br />
Index–10 7830 9887–001
*78309887-001*<br />
7830 9887–001