TOPS-20 LINK Reference Manual AA-4183D-TM This document describes LINK-20, the linking loader for TOPS-20. This document revises the document of the same name, Order No. AA-4183C-TM, published April 1982 and its update, Order No. AD-413C-T1, published March 1983. OPERATING SYSTEM AND VERSION: TOPS-20, Version 4.1, 5.1 SOFTWARE VERSION: LINK-20, Version 6.0 1 First Printing, January 1976 Revised, January 1978 April 1982 Updated, March 1983 Revised, May 1985 The information in this document is subject to change without notice and should not be construed as a commitment by Digital Equipment Corporation. Digital Equipment Corporation assumes no responsibility for any errors that may appear in this document. The software described in this document is furnished under a license and may be used or copied only in accordance with the terms of such license. Digital Equipment Corporation assumes no responsibility for the use or reliability of its software on equipment that is not supplied by DIGITAL. Copyright C 1976, 1985 by Digital Equipment Corporation The postage prepaid READER'S COMMENTS form on the last page of this document requests your critical evaluation to assist us in preparing future documentation. The following are trademarks of Digital Equipment Corporation. DIGITAL TOPS-10 MASSBUS DEC DECtape OMNIBUS PDP DIBOL OS/8 DECUS EDUSYSTEM PHA UNIBUS FLIP CHIP RSTS COMPUTER LABS FOCAL RSX COMTEX INDAC TYPESET-8 DDT LAB-8 TYPESET-10 DECCOMM TOPS-20 TYPESET-11 2 CONTENTS CHAPTER 1 INTRODUCTION TO LINK 1.1 INPUT TO LINK . . . . . . . . . . . . . . . . . . 1-2 1.1.1 Object Modules . . . . . . . . . . . . . . . . . 1-2 1.1.2 Commands to LINK . . . . . . . . . . . . . . . . 1-3 1.1.3 Libraries And Searches . . . . . . . . . . . . . 1-3 1.2 OUTPUT FROM LINK . . . . . . . . . . . . . . . . . 1-4 1.2.1 Executable Program . . . . . . . . . . . . . . . 1-4 1.2.2 Messages . . . . . . . . . . . . . . . . . . . . 1-5 1.2.3 Special Files . . . . . . . . . . . . . . . . . 1-5 1.3 LINK'S OVERLAY FACILITY . . . . . . . . . . . . . 1-5 1.4 LINK AND EXTENDED ADDRESSING . . . . . . . . . . . 1-5 CHAPTER 2 USING LINK AUTOMATICALLY 2.1 COMMAND FORMATS . . . . . . . . . . . . . . . . . 2-1 2.2 COMMAND SWITCHES . . . . . . . . . . . . . . . . . 2-2 2.3 EXAMPLE OF USING LINK AUTOMATICALLY . . . . . . . 2-4 CHAPTER 3 USING LINK DIRECTLY 3.1 RUNNING AND EXITING LINK . . . . . . . . . . . . . 3-1 3.2 COMMAND FORMATS . . . . . . . . . . . . . . . . . 3-2 3.2.1 LINK File Specification Defaults . . . . . . . . 3-3 3.2.2 Logical Names . . . . . . . . . . . . . . . . . 3-4 3.2.3 Translating Directories . . . . . . . . . . . . 3-4 3.3 LINK SWITCHES . . . . . . . . . . . . . . . . . . 3-4 3.3.1 Switch Abbreviation . . . . . . . . . . . . . . 3-4 3.3.2 Switch Arguments . . . . . . . . . . . . . . . . 3-5 3.3.3 Switch Placement . . . . . . . . . . . . . . . . 3-6 3.3.4 Alphabetical Listing of LINK Switches . . . . . 3-8 /ARSIZE . . . . . . . . . . . . . . . . . . . . 3-9 /COMMON . . . . . . . . . . . . . . . . . . . 3-10 /CONTENTS . . . . . . . . . . . . . . . . . . 3-11 /COUNTERS . . . . . . . . . . . . . . . . . . 3-13 /CPU . . . . . . . . . . . . . . . . . . . . . 3-15 /DDEBUG . . . . . . . . . . . . . . . . . . . 3-16 /DEBUG . . . . . . . . . . . . . . . . . . . . 3-17 /DEFAULT . . . . . . . . . . . . . . . . . . . 3-19 /DEFINE . . . . . . . . . . . . . . . . . . . 3-20 /ENTRY . . . . . . . . . . . . . . . . . . . . 3-21 /ERRORLEVEL . . . . . . . . . . . . . . . . . 3-22 /EXCLUDE . . . . . . . . . . . . . . . . . . . 3-23 /EXECUTE . . . . . . . . . . . . . . . . . . . 3-24 /FRECOR . . . . . . . . . . . . . . . . . . . 3-25 /GO . . . . . . . . . . . . . . . . . . . . . 3-26 3 /EXIT . . . . . . . . . . . . . . . . . . . . 3-27 /HASHSIZE . . . . . . . . . . . . . . . . . . 3-28 /HELP . . . . . . . . . . . . . . . . . . . . 3-29 /INCLUDE . . . . . . . . . . . . . . . . . . . 3-30 /LIMIT . . . . . . . . . . . . . . . . . . . . 3-32 /LINK . . . . . . . . . . . . . . . . . . . . 3-35 /LOCALS . . . . . . . . . . . . . . . . . . . 3-36 /LOG . . . . . . . . . . . . . . . . . . . . . 3-37 /LOGLEVEL . . . . . . . . . . . . . . . . . . 3-38 /MAP . . . . . . . . . . . . . . . . . . . . . 3-39 /MAXNODE . . . . . . . . . . . . . . . . . . . 3-40 /MESSAGE . . . . . . . . . . . . . . . . . . . 3-41 /MISSING . . . . . . . . . . . . . . . . . . . 3-43 /NEWPAGE . . . . . . . . . . . . . . . . . . . 3-44 /NODE . . . . . . . . . . . . . . . . . . . . 3-45 /NOENTRY . . . . . . . . . . . . . . . . . . . 3-47 /NOINCLUDE . . . . . . . . . . . . . . . . . . 3-48 /NOINITIAL . . . . . . . . . . . . . . . . . . 3-49 /NOJOBDAT . . . . . . . . . . . . . . . . . . 3-50 /NOLOCAL . . . . . . . . . . . . . . . . . . . 3-51 /NOREQUEST . . . . . . . . . . . . . . . . . . 3-52 /NOSEARCH . . . . . . . . . . . . . . . . . . 3-53 /NOSTART . . . . . . . . . . . . . . . . . . . 3-54 /NOSYMBOL . . . . . . . . . . . . . . . . . . 3-55 /NOSYSLIB . . . . . . . . . . . . . . . . . . 3-56 /NOUSERLIB . . . . . . . . . . . . . . . . . . 3-57 /ONLY . . . . . . . . . . . . . . . . . . . . 3-58 /OPTION . . . . . . . . . . . . . . . . . . . 3-59 /OTSEGMENT . . . . . . . . . . . . . . . . . . 3-60 /OVERLAY . . . . . . . . . . . . . . . . . . . 3-62 /PATCHSIZE . . . . . . . . . . . . . . . . . . 3-64 /PLOT . . . . . . . . . . . . . . . . . . . . 3-65 /PLTTYP . . . . . . . . . . . . . . . . . . . 3-67 /PSCOMMON . . . . . . . . . . . . . . . . . . 3-68 /PVBLOCK . . . . . . . . . . . . . . . . . . . 3-69 /PVDATA . . . . . . . . . . . . . . . . . . . 3-71 /REDIRECT . . . . . . . . . . . . . . . . . . 3-74 /REQUEST . . . . . . . . . . . . . . . . . . . 3-75 /REQUIRE . . . . . . . . . . . . . . . . . . . 3-76 /RUN . . . . . . . . . . . . . . . . . . . . . 3-77 /RUNAME . . . . . . . . . . . . . . . . . . . 3-78 /RUNOFFSET . . . . . . . . . . . . . . . . . . 3-79 /SAVE . . . . . . . . . . . . . . . . . . . . 3-80 /SEARCH . . . . . . . . . . . . . . . . . . . 3-81 /SEGMENT . . . . . . . . . . . . . . . . . . . 3-83 /SET . . . . . . . . . . . . . . . . . . . . . 3-85 /SEVERITY . . . . . . . . . . . . . . . . . . 3-86 /SPACE . . . . . . . . . . . . . . . . . . . . 3-87 /START . . . . . . . . . . . . . . . . . . . 3-88 /SUPPRESS . . . . . . . . . . . . . . . . . . 3-89 /SYFILE . . . . . . . . . . . . . . . . . . . 3-91 /SYMSEG . . . . . . . . . . . . . . . . . . . 3-92 4 /SYSLIB . . . . . . . . . . . . . . . . . . . 3-93 /TEST . . . . . . . . . . . . . . . . . . . . 3-94 /UNDEFINED . . . . . . . . . . . . . . . . . . 3-96 /UPTO . . . . . . . . . . . . . . . . . . . . 3-97 /USERLIB . . . . . . . . . . . . . . . . . . . 3-98 /VALUE . . . . . . . . . . . . . . . . . . . . 3-99 /VERBOSITY . . . . . . . . . . . . . . . . . . 3-100 /VERSION . . . . . . . . . . . . . . . . . . . 3-102 3.5 EXAMPLES USING LINK DIRECTLY . . . . . . . . . . 3-103 CHAPTER 4 OUTPUT FROM LINK 4.1 THE EXECUTABLE PROGRAM . . . . . . . . . . . . . . 4-1 4.2 OUTPUT FILES . . . . . . . . . . . . . . . . . . . 4-2 4.2.1 Sharable Save Files . . . . . . . . . . . . . . 4-2 4.2.1.1 Format of Sharable Save Files . . . . . . . . 4-2 4.2.2 LOG Files . . . . . . . . . . . . . . . . . . . 4-6 4.2.3 Map files . . . . . . . . . . . . . . . . . . . 4-7 4.2.4 Symbol Files . . . . . . . . . . . . . . . . . . 4-7 4.3 MESSAGES . . . . . . . . . . . . . . . . . . . . . 4-7 CHAPTER 5 OVERLAYS 5.1 OVERLAY STRUCTURES . . . . . . . . . . . . . . . . 5-1 5.1.1 Defining Overlay Structures . . . . . . . . . . 5-2 5.1.2 An Overlay Example . . . . . . . . . . . . . . . 5-4 5.1.2.1 Source Files . . . . . . . . . . . . . . . . . 5-5 5.1.2.2 Source File Compilation . . . . . . . . . . . 5-9 5.1.2.3 Interactive use of LINK . . . . . . . . . . . 5-9 5.1.2.4 TEST.LOG . . . . . . . . . . . . . . . . . . 5-11 5.1.2.5 TEST.MAP . . . . . . . . . . . . . . . . . . 5-12 5.1.2.6 Tree Diagram . . . . . . . . . . . . . . . . 5-20 5.1.2.7 Executable File . . . . . . . . . . . . . . 5-21 5.2 WRITABLE OVERLAYS . . . . . . . . . . . . . . . 5-22 5.2.1 Writable Overlay Syntax . . . . . . . . . . . 5-22 5.2.2 Writable Overlay Error Messages . . . . . . . 5-22 5.3 RELOCATABLE OVERLAYS . . . . . . . . . . . . . . 5-22 5.3.1 Relocatable Overlay Syntax . . . . . . . . . . 5-23 5.3.2 Relocatable Overlay Messages . . . . . . . . . 5-23 5.4 RESTRICTIONS ON OVERLAYS . . . . . . . . . . . . 5-23 5.4.1 Restrictions on Absolute Overlays . . . . . . 5-24 5.4.2 Restrictions on Relocatable Overlays . . . . . 5-25 5.4.3 Restrictions on FORTRAN Overlays . . . . . . . 5-25 5.5 SIZE OF OVERLAY PROGRAMS . . . . . . . . . . . . 5-26 5.6 DEBUGGING OVERLAID PROGRAMS . . . . . . . . . . 5-26 5.7 THE OVERLAY HANDLER . . . . . . . . . . . . . . 5-26 5.7.1 Calls to the Overlay Handler . . . . . . . . . 5-27 5.7.2 Overlay Handler Subroutines . . . . . . . . . 5-28 5.7.3 Overlay Handler Messages . . . . . . . . . . . 5-35 5.7.4 The FUNCT. Subroutine . . . . . . . . . . . . 5-40 5 5.8 THE OVERLAY (OVL) FILE . . . . . . . . . . . . . 5-47 5.8.1 The Directory Block . . . . . . . . . . . . . 5-48 5.8.2 The Link Number Table . . . . . . . . . . . . 5-49 5.8.3 The Link Name Table . . . . . . . . . . . . . 5-49 5.8.4 The Overlay Link . . . . . . . . . . . . . . . 5-50 CHAPTER 6 PSECTs 6.1 LOADING PROGRAMS WITH PSECTs . . . . . . . . . . . 6-1 6.2 PSECT ATTRIBUTES . . . . . . . . . . . . . . . . . 6-3 6.2.1 CONCATENATED and OVERLAID . . . . . . . . . . . 6-4 6.2.2 RONLY and RWRITE . . . . . . . . . . . . . . . . 6-5 CHAPTER 7 PDVs 7.1 PDV FORMAT . . . . . . . . . . . . . . . . . . . . 7-3 7.2 THE PDV STATIC MEMORY MAP . . . . . . . . . . . . 7-5 7.3 SYMBOL TABLE VECTOR . . . . . . . . . . . . . . . 7-7 APPENDIX A REL BLOCKS Block Type 0 (Ignored) . . . . . . . . . . . . . . A-4 Block Type 1 (Code) . . . . . . . . . . . . . . . A-5 Block Type 2 (Symbols) . . . . . . . . . . . . . . A-6 Block Type 3 (HISEG) . . . . . . . . . . . . . . A-11 Block Type 4 (Entry) . . . . . . . . . . . . . . A-12 Block Type 5 (End) . . . . . . . . . . . . . . . A-13 Block Type 6 (Name) . . . . . . . . . . . . . . A-14 Block Type 7 (Start) . . . . . . . . . . . . . . A-15 Block Type 10 (Internal Request) . . . . . . . . A-16 Block Type 11 (Polish) . . . . . . . . . . . . . A-18 Block Type 12 (Chain) . . . . . . . . . . . . . A-24 Block Type 14 (Index) . . . . . . . . . . . . . A-31 Block Type 15 (ALGOL) . . . . . . . . . . . . . A-33 Block Type 16 (Request Load) . . . . . . . . . . A-34 Block Type 17 (Request Library) . . . . . . . . A-35 Block Type 20 (Common) . . . . . . . . . . . . . A-36 Block Type 21 (Sparse Data) . . . . . . . . . . A-37 Block Type 22 (PSECT Origin) . . . . . . . . . . A-38 Block Type 23 (PSECT End Block) . . . . . . . . A-39 Block Type 24 (PSECT Header Block) . . . . . . . A-40 Block Type 37 (COBOL Symbols) . . . . . . . . . A-41 Block Type 100 (.ASSIGN) . . . . . . . . . . . . A-42 Block Type 776 (Symbol File) . . . . . . . . . . A-43 Block Type 777 (Universal File) . . . . . . . . A-44 Block Type 1000 (Ignored) . . . . . . . . . . . A-45 Block Type 1001 (Entry) . . . . . . . . . . . . A-46 Block Type 1002 (Long Entry) . . . . . . . . . . A-47 Block Type 1003 (Long Title) . . . . . . . . . . A-48 6 Block Type 1004 (Byte Initialization) . . . . . A-51 Block Types 1010 - 1037 (Code Blocks) . . . . . A-52 Blocks 1010 - 1017 (Right Relocation) . . . . . A-53 Block Types 1020-1027 (Left/Right Relocation Blocks) . . . . . . . . . . . . . . . . . . . . A-55 Block Types 1030 - 1037 (Thirty-bit Relocation Blocks) . . . . . . . . . . . . . . . . . . . . A-57 Block Type 1042 (Request Load for SFDs) . . . . A-59 Block Type 1043 (Request Library for SFDs) . . . A-60 Block Type 1044 (ALGOL Symbols) . . . . . . . . A-61 Block Type 1045 (Writable Links) . . . . . . . . A-62 Block Type 1050 (Long PSECT Name Block) . . . . A-64 Block Type 1051 (Set Current PSECT) . . . . . . A-66 Block Type 1052 (PSECT End) . . . . . . . . . . A-67 Block Type 1060 (Trace Block Data) . . . . . . . A-68 Block Type 1070 (Long Symbol Names) . . . . . . A-69 Block Type 1072 (Long Polish Block) . . . . . . A-74 Block Type 1074 (Long Common Name) . . . . . . . A-78 Block types 1120-1127 (Argument Descriptor Blocks) . . . . . . . . . . . . . . . . . . . . A-79 Block Type 1130 (Coercion Block) . . . . . . . . A-84 Block Type 1131 (TWOSEG Redirection Block) . . . A-87 Block Type 1140 (PL/1 debugger information) . . A-88 Block Type 1160 (Extended Sparse Data Initialization Block) . . . . . . . . . . . . . A-89 Block Type Greater Than 3777 (ASCIZ) . . . . . . A-92 APPENDIX B LINK MESSAGES B.1 DESCRIPTION OF MESSAGES . . . . . . . . . . . . . B-1 B.1.1 Message Levels . . . . . . . . . . . . . . . . B-1 B.1.2 Message Severity . . . . . . . . . . . . . . . . B-2 B.1.3 Message Length . . . . . . . . . . . . . . . . . B-2 B.1.4 Message Conventions . . . . . . . . . . . . . . B-3 B.2 LIST OF MESSAGES . . . . . . . . . . . . . . . . . B-4 B.3 REASON EXPLANATION . . . . . . . . . . . . . . . B-35 APPENDIX C JOB DATA AREA LOCATIONS SET BY LINK C.1 JOB DATA AREA . . . . . . . . . . . . . . . . . . C-1 C.1.1 Vestigial Job Data Area . . . . . . . . . . . . C-2 GLOSSARY INDEX 7 FIGURES 5-1 Example of an Overlay Structure . . . . . . . . . 5-2 TABLES 1-1 Summary of LINK Switches . . . . . . . . . . . . . 1-6 2-1 Switches for TOPS-20 Commands . . . . . . . . . . 2-2 5-1 Summary of LINK's Overlay-Related Switches . . . . 5-2 B-1 Severity Codes . . . . . . . . . . . . . . . . . . B-2 B-2 Special Message Segments . . . . . . . . . . . . . B-4 8 PREFACE This manual is the reference document for LINK, the TOPS-20 linking loader. Document Structure Chapter 1 provides a general introduction to LINK, a discussion of libraries, library searches, and extended addressing. Chapter 1 also contains a summary of LINK switches. Chapter 2 describes automatic use of LINK through one of the TOPS-20 DEBUG, EXECUTE, or LOAD commands. This chapter is sufficient for most loading tasks. Chapter 3 describes running and exiting LINK, LINK's command format, and LINK switches. This chapter contains the alphabetical listing of LINK switches and an example of using LINK directly. Chapter 4 describes output from LINK: executable programs, most output files, and LINK messages. Included are descriptions of the internal format of save (EXE) files. Chapter 5 discusses overlays, including overlay structures, overlay-related output files, the overlay handler and its messages, and the FUNCT. subroutine. This chapter has an extensive example of an overlay load. Many of the elements of this example are of interest outside the context of overlays. Chapter 6 discusses PSECTs (Program SECTions), loading programs with PSECTS, and PSECT attributes. Chapter 7 discusses PDVs (Program Data Vectors), their format, memory map, and symbol table vector. Appendix A gives a technical description of REL (RELocatable) Blocks, the main input to LINK. Appendix B lists all LINK messages except the OVERLAY handler runtime messages that are contained in Chapter 5. Appendix C describes JOBDAT, the Job Data Area. A Glossary follows the appendixes. 9 Reference Material TOPS-20 User's Guide TOPS-20 Commands Reference Manual MACRO Assembler Reference Manual FORTRAN Language Manual COBOL-68 Language Manual COBOL-74 Language Manual DECsystem-10/DECSYSTEM-20 Processor Reference Manual TOPS-20 Monitor Calls Reference Manual Conventions <ESC> indicates that you are to enter an ESCAPE key. <RET> indicates that you are to enter a carriage-return. bold is used in reference section of Chapter 3 to show italic defaults and Digital supported software. Loading Map To load most programs, 1. Become familiar with the concepts in the TOPS-20 User's Guide and TOPS-20 Commands Reference Manual. 2. Refer to Chapter 2 for a review of the DEBUG, EXECUTE, and LOAD commands that automatically use LINK to load programs. To load programs that use overlays, 1. Refer to Chapter 5. 2. Refer to the /ARSIZE, /LINK, /MAXNODE, /NODE, /OVERLAY, /PLOT, and /SPACE switches in Chapter 3. To load programs that use PSECTs, 1. Refer to Chapter 6. 2. Refer to the /SET and /LIMIT switches in Chapter 3. To load extended addressing programs, 10 1. Become familiar with the concepts in the DECsystem-10/DECSYSTEM-20 Processor Reference Manual the Chapter 8 of the TOPS-20 Monitor Calls User's Guide TOPS-20 Monitor Calls Reference Manual 2. Refer to Section 3.7. 3. Refer to Section 6.2 on loading PSECTs. 11 1-1 CHAPTER 1 INTRODUCTION TO LINK LINK is TOPS-20's linking loader. It merges independently compiled or assembled modules into a single executable program. This merging process requires LINK to: 1. Convert relocatable addresses to absolute addresses, and bind program segments and PSECTs (Program SECTions) to addresses. Relocatable addresses are addresses within a module that are specified as an offset from the first location in that module. Absolute addresses are fixed locations in your address space. Program segments define the program as a single-segment or two segment program. PSECTs are programmer- or system-defined regions. 2. Resolve global symbol references using chained fixups, Polish fixups and library searches. Global symbols are defined in one module and used in other modules. LINK resolves the references to global symbols by storing the reference until LINK loads the module that contains the global symbol's definition. After LINK loads that module, it "fixes up" the location in memory where LINK stored the reference. Chained fixups are a list of locations that require the global symbols' definition. One location points to the next location that requires the global symbol's definition. Polish fixups use an algorithm to find the locations that require the global symbol's definition. 1-1 FIELD TEST 3. Produce an executable program, a JOBDAT area or a PDV (Program Data Vector) and a debugger symbol table. An executable program is the memory image of the program. A JOBDAT or PDV contain information about the program such as its version number. A debugger symbol table contains entries and values for the symbols defined or used in a program. 1.1 INPUT TO LINK LINK accepts three kinds of input: o Object modules that are the main input to LINK, and are output by a language translator. o LINK commands o Libraries that contain object modules for specific languages and applications. 1.1.1 Object Modules Object modules contain machine language that corresponds to the source program, and are contained in relocatable binary files. A relocatable binary file can contain many modules or one module, and is formatted into REL (RELocatable) Blocks. LINK recognizes REL Blocks and handles them appropriately. The format of each REL Block Type is described in Appendix A. The default file type for a relocatable binary file is REL, and throughout this manual relocatable binary files are referred to as REL files. As their name implies, REL files contain relocatable code or addresses. LINK converts relocatable addresses to absolute addresses by loading relocatable code at an arbitrary memory address, and adding a constant to each address referenced in the program. In the process of converting addresses, LINK binds program segments, and PSECTS to addresses. A program that uses program segments can be a single-segment or two-segment program. A single segment program uses one relocation counter for LINK to use in the loading process. A two-segment program uses two relocation counters, and is divided into a high-segment or low-segment. The LINK /ONLY, /REDIRECT, /SET, and /SEGMENT switches 1-2 FIELD TEST can be used to manipulate segments during loading. A relocation counter is an address counter that LINK uses while loading relocatable code. A program that uses PSECTs can have one or multiple PSECTs. Each PSECT in a program has its own relocation counter. For example, if a program has 5 PSECTs, it also has 5 relocation counters, one for each PSECT. Refer to Chapter 6 for information on PSECTs. Besides relocating and loading your object modules, LINK resolves values for local, global and entry name symbols. Local symbols are those that are defined and referenced only within a module. Global symbols are those that are defined in one module and used in others. Entry name symbols are special global symbols in a module that contain an entry point name for other modules. 1.1.2 Commands to LINK LINK commands control and modify the loading process. Commands consist of file specifications and switches. LINK commands are summarized at the end of this chapter and are detailed in Chapter 3. 1.1.3 Libraries And Searches Libraries are files that contain object modules that may be needed to resolve global symbol references. LINK only loads the object modules that contain entries for the global symbols to be resolved. There are two kinds of libraries: system or user. System libraries are available to all users for searching. Most language translators also have libraries associated with them. Translators generate calls for subroutines or functions in their corresponding libraries. Library searches find and load the necessary modules. LINK searches system libraries before it finishes loading a program. LINK determines which system library to load from the object module that contains translator information for the program. LINK performs system library searches when it finds a LINK /GO or /LINK switch. For example, if you load a FORTRAN-compiled module, LINK searches the system FORTRAN library SYS:FORLIB.REL when a /GO or /LINK switch is processed. This search resolves requests for FORTRAN-defined subroutines and functions in FORLIB.REL. The /SYSLIB and /NOSYSLIB switches allow you to manipulate system library searches. The /SYSLIB switch requires LINK to search specified system libraries 1-3 FIELD TEST no matter what kind of modules were loaded. The /NOSYSLIB switch prevents searching of specified system libraries. Using these two switches, you can select the order for searching system libraries. User libraries are libraries that you create for LINK to search. The /USERLIB and /NOUSERLIB switches allow you to specify user library searches. /USERLIB specifies that a user library must be searched before the corresponding system library. For example, using the switch MYFORL/USERLIB:FORTRAN requires LINK to search MYFORL.REL before searching FORLIB. The /NOUSERLIB switch suspends the effect of a /USERLIB switch. The /SEARCH and /NOSEARCH switches allow you to specify how an input file is to be loaded. /SEARCH specifies that LINK search input files as libraries, and load only those modules that resolve a global symbol. /NOSEARCH specifies that LINK is to load all modules from each input file. /NOSEARCH is the default. Using combinations of these switches gives you precise control of library searches. See Chapter 3 for information on these switches. 1.2 OUTPUT FROM LINK LINK outputs an executable program in memory, messages, and special files. 1.2.1 Executable Program The main output from LINK is an executable program. In this executable program, all addresses are resolved to absolute memory locations, and all symbols (including subroutine calls) are resolved to absolute values or addresses. The executable program can be executed immediately or saved as a sharable save file. A sharable save file has a default file type of EXE, and is referred to to as an EXE file. LINK automatically creates an EXE file when you use /SAVE with LINK. You can also execute the executable program under the control of a debugger using the /DEBUG or /TEST switch. LINK outputs a debugger symbol table for this purpose. A debugger symbol table contains the program's symbols and their definitions. LINK also generates a JOBDAT or a PDV for a program. Both JOBDAT and PDV contain information about the program such as debugger symbol table pointers, version numbers, and memory use. Refer to Appendix C for JOBDAT information and Chapter 7 for PDV information. 1-4 FIELD TEST 1.2.2 Messages During its processing, LINK generates messages that are output to your terminal or a log file. Some of these give information about LINK's operation. Some warn about possible problems. Some identify errors. LINK messages are described in Appendix B. 1.2.3 Special Files At your option, LINK can generate several special files: o a map file that contains information about where the program was loaded, and what symbols are used in the program modules. o a log file that contains a record of the messages that LINK returned during the linking and loading process. o a symbol file that contains a symbol table for the program that was loaded. o a plotter file that contains a tree diagram of an overlay program. o an overlay file that contains information about the overlay links. LINK's output files are described in Chapter 4. 1.3 LINK'S OVERLAY FACILITY If a program is too large to execute in one piece, you can use LINK's overlay facility to define an overlay structure for the program. To do this, you define a tree structure for the program's modules. Then at execution time, only part of the tree is in memory at one time. This reduces the amount of memory needed for execution. See Chapter 5 for a discussion on overlays. 1.4 LINK AND EXTENDED ADDRESSING The KL Model B processor is capable of using an address space consisting of 32 sections, each containing 512 pages. As of TOPS-20 Version 5, programs have been able to reference this expanded address space. For information on using extended addressing with a programming language, consult the documentation for that language. Use PSECTs to load a program into a nonzero section. See Section 6.1 1-5 FIELD TEST for information on loading PSECTs. When loading a program that uses extended addressing, pay particular attention to the use of 18-bit and 30-bit addresses. If a program uses 30-bit addresses and you reference the 30-bit addresses as a 18-bit address, LINK truncates the 30-bit address and notifies you with the following message: %LNKFTH Fullword value [symbol] truncated to halfword Refer to Appendix B for more information about this message. LINK issues this warning if the truncation results in the loss of a section number. While writing an extended addressing program, keep the following restrictions in mind: o Programs that use overlays cannot use nonzero sections. o LINK does not set up JOBDAT for a program loaded in any nonzero section. LINK stores information about an extended addressing program in a PDV. PDVs are described in Chapter 7. JOBDAT is described in Appendix C. o Programs should not store executable code into locations 0 through 17 of nonzero sections. However, you can store data that is not executed in these locations. If data is stored in locations 0 through 17, use global addresses to reference the locations. If local addresses are used, the locations are referenced as ACs (accumulators). In section one, locations 0 through 17 are ACs. Table 1-1: Summary of LINK Switches +--------------------------------------------------------------------+ | | | Switch Description | +--------------------------------------------------------------------+ | | | /ARSIZE Sets the size of the overlay handler's table of | | multiply-defined global symbols. | +--------------------------------------------------------------------+ | | | /COMMON Allocates words of labeled COMMON storage for | | FORTRAN and FORTRAN-compatible programs. | +--------------------------------------------------------------------+ 1-6 FIELD TEST Table 1-1 (cont.) +--------------------------------------------------------------------+ | | | Switch Description | +--------------------------------------------------------------------+ | | | /CONTENTS Specifies the symbol types to be included in the | | map file if the file is generated. | +--------------------------------------------------------------------+ | | | /COUNTERS Displays relocation counters on the terminal. | +--------------------------------------------------------------------+ | | | /DDEBUG Specifies a default debugger to be loaded if the | | /DEBUG or /TEST switch appears without an argument. | +--------------------------------------------------------------------+ | | | /DEBUG Requests loading of a debugger and sets the start | | address for execution at the start address of the | | debugger. | +--------------------------------------------------------------------+ | | | /DEFAULT Changes default specifications for input or output | | files. | +--------------------------------------------------------------------+ | | | /DEFINE Assigns a decimal value to a symbol. | +--------------------------------------------------------------------+ | | | /ENTRY Displays all entry name symbols that have been | | loaded on the terminal. | +--------------------------------------------------------------------+ | | | /ERRORLEVEL Suppresses terminal display of LINK messages. | +--------------------------------------------------------------------+ | | | /EXCLUDE Prevents loading of the specified modules from the | | current file. | +--------------------------------------------------------------------+ | | | /EXECUTE Directs LINK to execute the loaded program | | beginning at the program's start address. | +--------------------------------------------------------------------+ | | | /EXIT Exits LINK. | +--------------------------------------------------------------------+ | | | /FRECOR Requires LINK to maintain a minimum amount of free | | memory after any expansions. | +--------------------------------------------------------------------+ 1-7 FIELD TEST Table 1-1 (cont.) +--------------------------------------------------------------------+ | | | Switch Description | +--------------------------------------------------------------------+ | | | /GO Ends loading after the current file and exits LINK. | +--------------------------------------------------------------------+ | | | /HASHSIZE Gives a minimum for the initial size of the global | | symbol table. | +--------------------------------------------------------------------+ | | | /HELP Displays information about LINK on the terminal. | +--------------------------------------------------------------------+ | | | /INCLUDE Specifies modules to be loaded regardless of any | | global requests for them. | +--------------------------------------------------------------------+ | | | /LIMIT Specifies an upper bound for a PSECT. | +--------------------------------------------------------------------+ | | | /LINK Closes an overlay link. | +--------------------------------------------------------------------+ | | | /LOCALS Includes local symbols from a module in the symbol | | table. | +--------------------------------------------------------------------+ | | | /LOG Specifies a file specification for the log file. | +--------------------------------------------------------------------+ | | | /LOGLEVEL Suppresses logging of LINK messages. | +--------------------------------------------------------------------+ | | | /MAP Specifies a file specification for the map output | | file. | +--------------------------------------------------------------------+ | | | /MAXNODE Specifies the number of links to be defined when | | the overlayed program requires more than 256 links. | +--------------------------------------------------------------------+ | | | /MESSAGE Displays messages on the terminal in the format | | specified by keyword. | +--------------------------------------------------------------------+ 1-8 FIELD TEST Table 1-1 (cont.) +--------------------------------------------------------------------+ | | | Switch Description | +--------------------------------------------------------------------+ | | | /MISSING Displays on the terminal the number of modules | | requested with the /INCLUDE switch that have not | | yet been loaded. | +--------------------------------------------------------------------+ | | | /NEWPAGE Sets the relocation counter to the first word of | | the next page. | +--------------------------------------------------------------------+ | | | /NODE Opens an overlay link. | +--------------------------------------------------------------------+ | | | /NOENTRY Deletes entry name symbols from LINK's overhead | | tables when loading overlays. | +--------------------------------------------------------------------+ | | | /NOINCLUDE Clears requests for modules that were specified in | | a previous /INCLUDE. | +--------------------------------------------------------------------+ | | | /NOINITIAL Prevents loading of LINK's initial global symbol | | table (JOBDAT). | +--------------------------------------------------------------------+ | | | /NOJOBDAT Prevents LINK from filling in JOBDAT's or vestigial | | JOBDAT's address space, and creates a PDV. | +--------------------------------------------------------------------+ | | | /NOLOCAL Suspends the effect of a preceding /LOCALS switch | | so that local symbol tables are not loaded with | | their modules. | +--------------------------------------------------------------------+ | | | /NOREQUEST Deletes references to overlay links from LINK's | | overhead tables when loading overlay programs. | +--------------------------------------------------------------------+ | | | /NOSEARCH Suspends the effect of a previous /SEARCH switch. | +--------------------------------------------------------------------+ | | | /NOSTART Directs LINK to disregard any start addresses found | | after the /NOSTART switch. | +--------------------------------------------------------------------+ 1-9 FIELD TEST Table 1-1 (cont.) +--------------------------------------------------------------------+ | | | Switch Description | +--------------------------------------------------------------------+ | | | /NOSYMBOL Prevents construction of user symbol tables. | +--------------------------------------------------------------------+ | | | /NOSYSLIB Prevents automatic searching of system libraries. | +--------------------------------------------------------------------+ | | | /NOUSERLIB Discontinues automatic searching of files at each | | /LINK or /GO switch. | +--------------------------------------------------------------------+ | | | /ONLY Directs LINK to load the specified segment of | | two-segment modules. | +--------------------------------------------------------------------+ | | | /OPTION Reads the SWITCH.INI file to determine switch | | defaults for LINK. | +--------------------------------------------------------------------+ | | | /OTSEGMENT Specifies the time and manner of loading the | | object-time system. | +--------------------------------------------------------------------+ | | | /OVERLAY Initiates construction of an overlay structure. | +--------------------------------------------------------------------+ | | | /PATCHSIZE Allocates words of storage to precede the symbol | | table. | +--------------------------------------------------------------------+ | | | /PLOT Directs LINK to output a tree diagram of an overlay | | structure. | +--------------------------------------------------------------------+ | | | /PLTTYP Specifies the type of plot file to be generated by | | the /PLOT switch. | +--------------------------------------------------------------------+ | | | /PSCOMMON Specifies where LINK is to load COMMON blocks. | +--------------------------------------------------------------------+ | | | /PVBLOCK Requests a PDV (Program Data Vector) from LINK and | | gives you control over where the vector goes. | +--------------------------------------------------------------------+ 1-10 FIELD TEST Table 1-1 (cont.) +--------------------------------------------------------------------+ | | | Switch Description | +--------------------------------------------------------------------+ | | | /PVDATA Changes the contents of a PDV block. | +--------------------------------------------------------------------+ | | | /REDIRECT Loads two-segment formatted REL files as part of a | | program using PSECTs. | +--------------------------------------------------------------------+ | | | /REQUEST Displays external overlay link references on the | | terminal. | +--------------------------------------------------------------------+ | | | /REQUIRE Generates global requests for the specified | | symbols. | +--------------------------------------------------------------------+ | | | /RUN Directs LINK to run a program after it is loaded. | +--------------------------------------------------------------------+ | | | /RUNAME Assigns a job name for execution of your program. | +--------------------------------------------------------------------+ | | | /RUNOFFSET Runs the program specified in a /RUN switch with an | | offset. | +--------------------------------------------------------------------+ | | | /SAVE Directs LINK to create an EXE file. | +--------------------------------------------------------------------+ | | | /SEARCH Directs LINK to search the input files and load | | only the modules whose entry point names resolves a | | global symbol reference. | +--------------------------------------------------------------------+ | | | /SEGMENT Specifies whether the high segment or the low | | segment of a two-segment program is to be used for | | loading the following modules. | +--------------------------------------------------------------------+ | | | /SET Sets the origin of a PSECT, or sets the .HIGH. or | | .LOW. relocation counter. | +--------------------------------------------------------------------+ | | | /SEVERITY Specifies that messages of a certain severity level | | terminate the load. | +--------------------------------------------------------------------+ 1-11 FIELD TEST Table 1-1 (cont.) +--------------------------------------------------------------------+ | | | Switch Description | +--------------------------------------------------------------------+ | | | /SPACE Specifies that n words of memory follow the current | | link at execution time. | +--------------------------------------------------------------------+ | | | /START Specifies the start address for the loaded program. | +--------------------------------------------------------------------+ | | | /SUPPRESS Suppresses a previously defined global symbol. | +--------------------------------------------------------------------+ | | | /SYFILE Requests LINK to output a symbol file to the given | | filespec, and sets the /SYMSEG:DEFAULT switch. | +--------------------------------------------------------------------+ | | | /SYMSEG Allows you to specify where the symbol table is to | | be placed. | +--------------------------------------------------------------------+ | | | /SYSLIB Forces searching of one or more system libraries, | | immediately after you end the command line. | +--------------------------------------------------------------------+ | | | /TEST Loads a debugger. | +--------------------------------------------------------------------+ | | | /UNDEFINED Displays undefined global symbols on the terminal. | +--------------------------------------------------------------------+ | | | /UPTO Sets an upper limit to which the symbol table can | | expand. | +--------------------------------------------------------------------+ | | | /USERLIB Directs LINK to search a user library. | +--------------------------------------------------------------------+ | | | /VALUE Displays global symbol values on the terminal. | +--------------------------------------------------------------------+ | | | /VERBOSITY Specifies the length of LINK messages. | +--------------------------------------------------------------------+ | | | /VERSION Allows you to specify a version number. | +--------------------------------------------------------------------+ 1-12 CHAPTER 2 USING LINK AUTOMATICALLY The TOPS-20 LOAD, EXECUTE, and DEBUG commands invoke LINK automatically. Each of these commands uses a simple command string that the system converts into more complicated LINK commands. This discussion of the LOAD, EXECUTE, and DEBUG commands does not attempt to describe them completely. Only those switches applying directly to loading are discussed here. For a full discussion, see the TOPS-20 Commands Reference Manual. Each of these commands invoke LINK: o The LOAD command uses LINK to load your object modules into memory. LOAD compiles source files first if necessary, but does not execute the program. o The EXECUTE command uses LINK to load your program, and then executes the loaded program. Before loading, your source files are compiled, if necessary. o The DEBUG command loads your program into memory along with a debugger. The program is then executed under the control of the debugger. The debugger that is loaded depends on the type of program being loaded. See the /TEST switch for a list of languages. TOPS-20 uses the file type to determine the language in which the program is written. Therefore, it is highly recommended that you use standard file types when naming your programs' files. Standard file types are listed in the TOPS-20 Commands Reference Manual. 2.1 COMMAND FORMATS The LOAD, EXECUTE, and DEBUG commands follow the same format. Each can accept a list of input file specifications and switches. The format for these commands is: 2-1 FIELD TEST @command/switches input-filespec/switches, input-filespec/switches,... Where: command is LOAD, EXECUTE, or DEBUG. input-spec is the file specification of the program you want to load. This input file specification accepts a 6-character device name, 39-character directory name, a 6-character filename and a 3-character extension. switches are any of the valid switches for the command. Table 2-1 contains switches that apply to LINK. If you separate the input file specifications with commas, each source file is compiled into a separate object (relocatable) file. For example, @LOAD PROGA,PROGB,PROGC compile into separate object modules, PROGA.REL, PROGB.REL and PROGC.REL. If you separate the input file specifications with plus signs, they will be compiled into a single object file. @LOAD PROGD+PROGE+LIBRAY compile into a single object module, LIBRAY.REL Section 2.3 shows additional examples of using LINK automatically. 2.2 COMMAND SWITCHES You can use switches with the LOAD, EXECUTE, and DEBUG commands to control the program's loading. Table 2-1 briefly describes some of the command switches that apply to LINK. Refer to the TOPS-20 Commands Reference Manual for complete descriptions of the switches for these commands. Table 2-1: Switches for TOPS-20 Commands +-------------------------------------------------------------------+ | | | Switch Meaning | +-------------------------------------------------------------------+ 2-2 FIELD TEST Table 2-1 (cont.) +-------------------------------------------------------------------+ | | | Switch Meaning | +-------------------------------------------------------------------+ | | | /COMPILE Forces compilation of source files even if a | | sufficiently recent REL file exists. | +-------------------------------------------------------------------+ | | | /DDT Loads DDT. This supersedes the default debugger | | selection that is based on the file type of the | | first file in the command string. | +-------------------------------------------------------------------+ | | | /MAP Produces a map file at the end of loading. | +-------------------------------------------------------------------+ | | | /NOCOMPILE Compiles source files only if their REL files are | | older than the source files. /NOCOMPILE is the | | default. | +-------------------------------------------------------------------+ | | | /NOSEARCH Suspends the effect of an earlier global /SEARCH | | switch. This is the default action. | +-------------------------------------------------------------------+ | | | /NOSYMBOLS Prevents loading of symbol tables with their | | modules. | +-------------------------------------------------------------------+ | | | /SEARCH Loads only the modules from the specified library | | file that satisfy global references in the program. | +-------------------------------------------------------------------+ You can use any LINK program switches with LOAD, EXECUTE, or DEBUG by using a special switch format. This format requires that you use a percent sign (%) instead of the usual slash (/), and that the entire switch specification be enclosed in double quotation marks ("). For example, you can pass the /SYMSEG:HIGH switch to LINK by using the command: @EXECUTE MYPROG %"SYMSEG:HIGH"<RET> If you give more than one switch in this format, succeeding switches within the quotation marks must have the usual slashes: @EXECUTE MYPROG %"SYMSEG:HIGH/COUNTERS"<RET> LINK program switches are described in Chapter 3. 2-3 FIELD TEST 2.3 EXAMPLE OF USING LINK AUTOMATICALLY For this example, the following program, named MYPROG.FOR, is used: TYPE 10 10 FORMAT (' This is written by MYPROG') STOP END The following example shows an interactive execution of the program using the EXECUTE command: @EXE<ESC>CUTE (FROM) MYPROG.FOR<RET> FORTRAN: MYPROG MAIN. LINK: Loading [LNKXCT MYPROG execution] This is written by MYPROG CPU time 0.21 Elapsed time 1.31 The following example shows how to load a program for debugging using the DEBUG command: @DEBUG MYPROG.FOR<RET> FORTRAN: MYPROG MAIN. LINK: Loading [LNKDEB FORDDT execution] STARTING FORTRAN DDT >>START<RET> This is written by MYPROG CPU time 0.17 Elapsed time 0.46 2-4 CHAPTER 3 USING LINK DIRECTLY You can choose to use the TOPS-20 LOAD, EXECUTE, and DEBUG commands to load a program, or you can use LINK directly. Using LINK directly is useful when you have a large or complicated program, are loading overlays, or are using PSECTs because you can better control the loading process. For example, in the case of a program that uses PSECTs, you can use LINK switches to specify the origins of the PSECTs. In the case of an overlay program, you can use LINK switches to define the program's tree structure. Before you load a program with LINK, you must have compiled or assembled all required object modules. 3.1 RUNNING AND EXITING LINK To run LINK, type LINK after the TOPS-20 system prompt. LINK returns an asterisk (*) and waits for you to enter commands. For example, @LINK<RET> * To exit LINK, use the /GO switch. The /GO switch finishes loading the program and exits. /GO exits to TOPS-20 command level, the loaded program for execution, or to a debugger. /GO passes control to the loaded program if you specified /EXECUTE, and to a debugger if you specified /DEBUG. For example, in the following /GO passes control to the loaded program. @LINK<RET> *MYPROG/EXECUTE/GO [LNKXCT MYPROG execution] This is written by MYPROG CPU time 0.21 Elapsed time 0.82 If LINK encounters a fatal error, LINK prints an error message and 3-1 FIELD TEST exits to TOPS-20. 3.2 COMMAND FORMATS A LINK command can contain file specifications and switches. The general format of a LINK command is: */switch input-filespec /switch output-filespec /switch where: switch is a LINK switch. LINK switches are described in Section 3.3. Section 3.3 also discusses switch arguments, abbreviations, and placement. filespec consists of 1- to 6-character device name, 1- to 6-character filename, a 1- to 3-character file type, and a PPN (project-programmer number). You only need to supply a filename as LINK supplies the missing parts of the file specifications from its defaults. These defaults are listed in Section 3.2. You can use a logical name to specify a device name, and the TOPS-20 TRANSLATE command to determine a PPN. See Sections 3.2.2 and 3.2.3 for additional information on logical names and TRANSLATE respectively. You can continue a command, include a comment, or use indirect command files with LINK. By typing a hyphen before entering a carriage return, you can continue a command onto the next line. LINK continues the line by prompting with a hash sign (#). For example, @LINK<RET> *MYPROG,MYMAP/MAP/CONTENTS:ALL-<RET> #/ERRORLEVEL:0/LOG/LOGLEVEL:5<RET> * You can include a comment in a command by beginning the comment with a semicolon. LINK does not process the text after the semicolon. Commenting commands can be useful in indirect command files. For example, /CONTENTS:(LOCALS,UNDEFINED) ;Include local and undefined ;symbols in my map file. PROMAP/MAP:ERROR ;Give me a map file named PROMAP ;when LINK encounters an error. 3-2 FIELD TEST PROGAM /GO ;Load my program These commands and comments when placed in an indirect command file provide you with a description of how you want a program loaded. To have LINK read commands from an indirect command file, prefix the command file specification with an at-sign (@) and enter it after the LINK prompt. For example, @LINK<RET> *@LNKPRG LINK reads the commands in LNKPRG and processes them. LNKPRG can have a .CCL or .CMD file type. Both are default file types for indirect command files. LINK first looks for a .CCL file type and then a .CMD file type. 3.2.1 LINK File Specification Defaults For input files, the defaults are: device logical name (DSK:) type REL directory the connected directory. If you are using a PPN, refer to Section 3.3.3 for information on translating directories. For output files, the defaults are: device logical name (DSK:) filename name of last module with start address or, if none, then nnnLNK where nnn is your job number in decimal, with any leading zeros. type one or all of the following depending on the switches you use. /EXECUTE executable file EXE /LOG log file LOG /MAP map file MAP /PLOT plotter file PLT /SYFILE symbol file SYM directory the connected directory. If you are using a PPN, refer to Section 3.3.3 for information on translating directories. 3-3 FIELD TEST You can change these defaults by using the /DEFAULT switch. See Section 3.3.4. 3.2.2 Logical Names To use a logical name: 1. Give the TOPS-20 DEFINE command to define a logical name. A logical name cannot be longer than six characters. 2. Use the logical name as the device name whenever giving the file specification. See the TOPS-20 User's Guide for more information. 3.2.3 Translating Directories To find a corresponding PPN: 1. Use the TOPS-20 TRANSLATE command to find the corresponding PPN for the given directory name. 2. Include the PPN enclosed in square brackets ([]) at the end of the file specification in the format: device:filename.type[PPN] 3.3 LINK SWITCHES LINK switches control and modify the loading process. This section describes switch abbreviations, arguments, and placements followed by an alphabetical listing of the LINK switches. 3.3.1 Switch Abbreviation You can abbreviate switches to save typing. However, when abbreviating a switch, you must must include enough characters to make the abbreviation unique for the switch. For example, both /NOSYMBOL and /NOSYSLIB begin with the characters /NOSY, therefore you cannot abbreviate the /NOSYMBOL switch to /NOSY. You can abbreviate /NOSYMBOL to /NOSYM because /NOSYM is a unique set of characters for /NOSYMBOL. The following switches can be abbreviated to a single letter by 3-4 FIELD TEST default: /D for /DEBUG /E for /EXECUTE /G for /GO /H for /HELP /L for /LOCALS /M for /MAP /N for /NOLOCAL /S for /SEARCH /T for /TEST /U for /UNDEFINE /V for /VERSION Use the full switch name when placing switches in batch or indirect command files to avoid incorrect or ambiguous abbreviations. 3.3.2 Switch Arguments Many LINK switches require arguments. An argument can be a value, a symbol name, a module name, an output file specification, a PSECT name, a keyword, or an address. The specific requirements of each switch are discussed in the FORMAT section of the switch's description. A value can be specified in decimal or octal. The default is provided in the FORMAT information. If the value can be specified in octal, this is noted in the OPTIONAL NOTATIONS section of the switch description. To specify an octal value, type a hash sign (#) before the octal number. For example, /ARSIZE:39 can be specified in octal as /ARSIZE:#47. A symbol name, a module name, or a PSECT name consists of from 1 to 72 SIXBIT-compatible ASCII characters. You cannot embed spaces in any of the names. If the name is not Radix-50 compatible, you must enclose it in double quotes. For example, NOT^RADIX would be specified as "NOT^RADIX" in a LINK command. If you enclose a name in quotes, be aware that how you enter the name (all in UPPERCASE, all in lowercase, or in Mixed cAse) affect the interpretation of the symbol. For example, "DIFFERENT" "different" "Different" all define individual symbols. However, if you do not enclose a name in quotes and enter the name in mixed case, the name defines the same symbol. For example, SAME same Same all define the symbol same and are equivalent to the quoted name 3-5 FIELD TEST "SAME". An overlay link name consists of from 1- to 6-Radix-50 characters that are compatible with ASCII characters. A keyword is a unique argument that is associated with the switch. For example, /DEBUG's keywords identify the debugger to be loaded with the program. An address is an octal number. An output file specification specifies a file that LINK is to create. See Section 3.2 for format and default information on output file specifications. The following switches produce an output file: /DEFAULT /LOG /MAP /OVERLAY /PLOT /NOUSERLIB /SAVE /SYFILE /USERLIB When specifying output file specifications with these switches, append the switch to the output file specification in the format: outputfilespec/switch For example, *LOGFIL/LOG directs LINK to write LINK messages into the output file LOGFIL.LOG. The other file specifications in a LINK command specify input files. For example, the following command tells LINK to use an input file called MYREL.REL to generate a saved output file called MYEXE.EXE. /SAVE specifies MYEXE as the output filename, and .EXE is the default file type: *MYREL,MYEXE/SAVE/GO 3.3.3 Switch Placement The /LOCALS, /NOLOCAL, /NOSTART, /SEGMENT, /INCLUDE, /ONLY, /SEARCH, /START and /NOSEARCH switches can be local or global switches. A local switch applies to a single file specification and is appended to that file specification in the command. The switch is appended before the comma in a list of file specifications. For example, in the following command, /SEARCH is used as a local switch to load FILE2 in search mode. /SEARCH is appended to FILE2 before the comma. 3-6 FIELD TEST *FILE1,FILE2/SEARCH,FILE3<RET> A global switch applies to all the files in a command and is disabled at the end of the command when you enter a carriage-return. A global switch is not appended to a file specification, and can be placed after the LINK prompt (*), or after a filename. A global switch is appended after the comma in a list of file specifications. For example, in the following commands /SEARCH is a global switch used to load all the files in search mode. In the first command, /SEARCH is placed after the LINK prompt. In the second, note that /SEARCH is placed after the comma following the first file specification. */SEARCH FILE4,FILE5,FILE6<RET> *FILE4,/SEARCH FILE5,FILE6<RET> A global switch applies to all the files entered after the asterisk and before the carriage-return, unless it is overridden by another switch. If this second switch is a global switch, it persists for all the files that follow in the command. For example, in the following command, the /NOSEARCH disables the /SEARCH switch for files FILE10 and FILE11. *FILE7,/SEARCH FILE8, FILE9,/NOSEARCH FILE10, FILE11<RET> If the second switch is a local switch, it overrides the first switch only for the file to which it is appended. For example, in the following command string, the global /SEARCH switch is overridden by the local /NOSEARCH switch, but only for FILE2. FILE1 and FILE3 are loaded in search mode. */SEARCH FILE1,FILE2/NOSEARCH,FILE3 NOTE When the /GO switch is present in the same command as a global switch, /GO causes the effects of the global switch to go beyond the command and apply to any modules loaded during library searches. For example, */SEGMENT:LOW FILEA,FILEB,FILEC/60<RET> causes the input files on this line and files loaded during a library search to be loaded in the program's low-segment. However, defaults for certain languages can override the global switches that you specify. 3-7 FIELD TEST 3.3.4 Alphabetical Listing of LINK Switches In this section the following information is shown, if appropriate, for each switch: FORMAT FUNCTION EXAMPLES OPTIONAL NOTATIONS RELATED SWITCHES 3-8 FIELD TEST /ARSIZE FORMAT /ARSIZE:n n is a positive decimal integer. FUNCTION Sets the size of the overlay handler's table of multiply-defined global symbols. Use this switch if you have received LNKARL, LNKTMA, and LNKABT messages in a previous attempt to load your program. These messages give instructions for the argument to the /ARSIZE switch. EXAMPLES @LINK<RET> */ARSIZE:39<RET> * Allocates 39 words for the multiply-defined global symbol table in each link of an overlay structure. OPTIONAL You can specify the table size in octal. NOTATIONS 3-9 FIELD TEST /COMMON FORMAT /COMMON:name:n name is a common name. The symbol name rules described in Section 3.3.2 apply to common name. n is a positive decimal integer. FUNCTION Allocates n words of labeled COMMON storage for FORTRAN and FORTRAN-compatible programs. The COMMON label is a name which becomes defined as a global symbol. For unlabeled COMMON storage, use .COMM. as the name, or simply omit the name. You cannot expand a given COMMON area during loading. If your program modules define a given COMMON area to have different sizes, the module giving the largest definition must be loaded first. If the /COMMON switch gives the largest definition, it must precede the loading of the modules. EXAMPLES @LINK<RET> */COMMON:ALPHA:1000<RET> * Creates a labeled COMMON area of 1000 words. @LINK<RET> */COMMON:.COMM.:1000<RET> * Creates an unlabeled COMMON area of 1000 words. @LINK<RET> */COMMON::1000<RET> * Creates an unlabeled COMMON area of 1000 words. OPTIONAL You can specify the number of words in octal. NOTATIONS RELATED /PSCOMMON SWITCHES 3-10 FIELD TEST /CONTENTS FORMAT /CONTENTS:(keyword,...,keyword) FUNCTION specifies the symbol types to be included in the map file if the file is generated. To generate the map file, use the /MAP switch. The keywords ALL, NONE, and DEFAULT reset all symbol types. Otherwise, using the /CONTENTS switch resets only those symbol types specified by keywords. In the following list of keywords, the defaults are shown in bold: Keyword Description ABSOLUTE Include absolute symbols. ALL Include all symbols. COMMON Include COMMON symbols. DEFAULT Reset to LINK's defaults. ENTRY Include entry-name symbols. GLOBAL Include global symbols. LOCALS Include local symbols. The local symbols cannot be included in the map file unless the /LOCALS switch is also given. NOABSOLUTE Exclude absolute symbols. NOCOMMON Exclude COMMON symbols. NOENTRY Exclude entry-name symbols. NOGLOBAL Exclude global symbols. NOLOCAL Exclude local symbols. NONE Exclude all symbols. NORELOCATABLE Exclude relocatable symbols. NOUNDEFINED Exclude undefined symbols. NOZERO Exclude symbols in zero-length programs. (a zero-length program contains no code or data; it contains only symbol definitions, for example, JOBDAT.) RELOCATABLE Include relocatable symbols. UNDEFINED Include undefined symbols. ZERO Include symbols in zero-length programs. Only those symbols that satisfy all conditions in the keyword list will appear in the MAP file. For example, if both the NOGLOBAL and RELOCATABLE settings are in force, all global symbols are excluded regardless of their relocatability. 3-11 FIELD TEST EXAMPLES @LINK<RET> */CONTENTS:(NOCOMMON,NOENTRY)<RET> * Excludes COMMON and entry-name symbols. @LINK<RET> */CONTENTS:ALL<RET> * Includes all symbols. OPTIONAL You can omit the parentheses if you give only one keyword. NOTATIONS RELATED /MAP SWITCHES 3-12 FIELD TEST /COUNTERS FORMAT /COUNTERS FUNCTION Displays information about relocation counters on the terminal. A relocation counter is an address counter that LINK uses while loading relocatable code. /COUNTERS returns the name, initial value, current value, and limit value of each counter. /COUNTERS first prints a header: Reloc. ctr. initial value current value limit value Reloc. ctr. gives the name of relocation counter. initial value is the origin of the relocation counter. current value is the address of the next free location after the relocation counter has been loaded. limit value is an upper bound that you set using /LIMIT or that LINK sets by default for the relocation counter. This upper bound defines a point the relocation counter should not load beyond. If /LIMIT is used and the counter loads beyond this bound, LINK returns messages. See /LIMIT for more information. /COUNTERS may be used to determine the size of overlays when loading large programs that might be too large for the allocated memory space. Refer to Section 5.4 for more information. You can also use /COUNTERS to determine the size of PSECTs when loading extended addressing programs or programs that use PSECTs to conserve memory space. Refer to Chapter 6. EXAMPLES The following examples illustrate the various /COUNTERS displays. The following display results from loading a module that does not contain code. @LINK<RET> */COUNTERS<RET> [LNKRLC No relocation counters set] 3-13 FIELD TEST The following display results from loading only absolute code. @LINK<RET> *ABCODE/COUNTERS<RET> [LNKRLC No relocation counters set Absolute code loaded] * The following display results from loading only PSECT code. @LINK<RET> *PSCODE/COUNTERS<RET> [LNKRLC Reloc. ctr. initial value current value limit value PSCODE 20 25 1000000] * The following display results from loading code that contains both absolute and PSECT code. @LINK<RET> *MIXED/COUNTERS<RET> [LNKRLC Reloc. ctr. initial value current value limit value PSECTA 1400000 1400001 4000000 PSECTB 2500000 2500001 4000000 PSECTC 3600000 3600001 4000000 Absolute code loaded] * The following display results from loading two-segmented formatted code. @LINK<RET> *TWOPRT/COUNTERS<RET> [LNKRLC Reloc. ctr. initial value current value limit value .LOW. 0 1642 1000000 .HIGH. 400000 400753 1000000] * RELATED /NEWPAGE, /SET, /LIMIT SWITCHES 3-14 FIELD TEST /CPU FORMAT /CPU:(keyword,keyword) Keyword: KA10 KI10 KL10 KS10 FUNCTION Overrides LINK's handling of the processor information found in the REL files being loaded. (See the description of Block Type 6 in Appendix A). Ordinarily, LINK prints a warning if all REL files being loaded together do not have identical CPU types. This switch can be used either to make LINK flag certain modules built for a specific CPU type (by specifying all but that CPU type as keywords to /CPU) or to suppress LINK's warning message (by specifying all the CPU types associated with the REL files being loaded). EXAMPLES @LINK<RET> */CPU:KI10<RET> * Causes LINK to issue the %LNKCCD message if any modules with the KL10 CPU type are encountered. OPTIONAL You can omit the parentheses if you specify only one CPU. NOTATIONS 3-15 FIELD TEST /DDEBUG FORMAT /DDEBUG:keyword FUNCTION Specifies a default debugger to be loaded if the /DEBUG or /TEST switch appears without an argument. The keywords and the debuggers they specify are listed below. Only those shown in bold are supported by DIGITAL. Keyword Debugger ALGDDT ALGDDT ALGOL ALGDDT COBDDT COBDDT COBOL COBDDT DDT DDT FAIL SDDT (SAIL debugger) FORDDT FORDDT FORTRAN FORDDT MACRO DDT PASCAL PASDDT PASDDT PASDDT SAIL SDDT (SAIL debugger) SDDT SDDT (SAIL debugger) SIMDDT SIMDDT SIMULA SIMDDT EXAMPLES @LINK<RET> */DDEBUG:FORTRAN<RET> * Specifies FORDDT as the default debugger for the /DEBUG or /TEST switch. RELATED /DEBUG, /TEST SWITCHES 3-16 FIELD TEST /DEBUG FORMAT /DEBUG:keyword FUNCTION Requests loading of a debugger and sets the start address for execution at the start address of the debugger. The /DEBUG switch also sets the /EXECUTE switch because it is assumed that the program is to be executed. The /GO switch is still required to end loading and begin execution. The /DEBUG switch turns on the /LOCALS switch for the remainder of the load. You can override this by using the /NOLOCAL switch, but the override lasts only during processing of the current command. Local symbols for the debugger itself are never loaded. If debugging overlaid programs, you must specify /DEBUG when loading the root node. (Refer to Section 5.4 for more information.) The keywords and the programs they load are listed below. Only those shown in bold supported by DIGITAL. Keyword Debugger ALGDDT ALGDDT ALGOL ALGDDT COBDDT COBDDT COBOL COBDDT DDT DDT FAIL SDDT (SAIL debugger) FORDDT FORDDT FORTRAN FORDDT MACRO DDT PASCAL PASDDT PASDDT PASDDT SAIL SDDT (SAIL debugger) SDDT SDDT (SAIL debugger) SIMDDT SIMDDT SIMULA SIMDDT If you give no keyword with /DEBUG, the default is either DDT or the debugger specified by the /DDEBUG switch. 3-17 FIELD TEST EXAMPLES @LINK<RET> */DEBUG:FORDDT<RET> * Loads FORDDT, sets the /EXECUTE switch, and specifies that FORDDT control execution. OPTIONAL You can abbreviate /DEBUG to /D. NOTATIONS RELATED /DDEBUG, /TEST SWITCHES 3-18 FIELD TEST /DEFAULT FORMAT filespec/DEFAULT:keyword FUNCTION Changes default specifications for input or output files. The defaults specified remain in effect until changed by another /DEFAULT switch. The keywords allowed are: INPUT Specifies the defaults for input file specifications. OUTPUT Specifies the defaults for output file specifications. For input files, the initial defaults are: device DSK: file type REL directory Your connected directory For output files, the initial defaults are: device DSK: filename Name of main program directory Your connected directory EXAMPLES @LINK<RET> */DEFAULT:INPUT .BIN<RET> * Resets input file default extension to BIN. @LINK<RET> */DEFAULT:OUTPUT MYSTR:<RET> * Resets output file default device to MYSTR:. OPTIONAL If you omit the keyword, INPUT is assumed. NOTATIONS 3-19 FIELD TEST /DEFINE FORMAT /DEFINE:(symbol:value,...,symbol:value) symbol is a global symbol. value is a decimal number. FUNCTION Assigns a decimal value to a symbol. This assignment causes the symbols to be global symbols. To get a list of any undefined symbols, use the /UNDEFINED switch. Defining an already defined symbol with /DEFINE generates an error message. EXAMPLES */UNDEFINED<RET> [LNKUGS 2 UNDEFINED GLOBAL SYMBOLS] ALPHA 400123 BETA 402017 */DEFINE:(ALPHA:591,BETA:1)<RET> * Gives the decimal values 591 and 1 to ALPHA and BETA, respectively. OPTIONAL You can give the value in octal by typing a hash sign (#) NOTATIONS before the value. You can omit the parentheses if you define only one symbol. RELATED /UNDEFINED, /VALUE SWITCHES 3-20 FIELD TEST /ENTRY FORMAT /ENTRY FUNCTION Displays all entry name symbols that have been loaded on the terminal. Each entry name symbol is defined by an ENTRY statement (MACRO, FORTRAN, or BLISS), a FUNCTION statement (FORTRAN), a SUBROUTINE statement (FORTRAN, or COBOL), or a PROCEDURE declaration (ALGOL, or PASCAL). If you are using the overlay facility, /ENTRY requests only the entry name symbols for the current overlay link. EXAMPLES @LINK<RET> /ENTRY<RET> [LNKLSS LIBRARY SEARCH SYMBOLS (ENTRY POINTS)] SQRT. 3456 * RELATED /NOENTRY SWITCHES 3-21 FIELD TEST /ERRORLEVEL FORMAT /ERRORLEVEL:n n is a positive decimal integer. FUNCTION Suppresses the terminal display of LINK messages with message level less than n, where n is a decimal number between 0 and 31 inclusive. You cannot suppress level 31 messages. LINK's default is /ERRORLEVEL:8. See Appendix B for the level of each LINK message. EXAMPLES @LINK<RET> */ERRORLEVEL:15<RET> * Suppresses all messages less than level 15. @LINK<RET> */ERRORLEVEL:0<RET> * Permits typeout of all messages. RELATED /VERBOSITY, /MESSAGE SWITCHES 3-22 FIELD TEST /EXCLUDE FORMAT /EXCLUDE:(module,...,module) FUNCTION Prevents loading of the specified modules from the current file even if they are required to resolve global symbol references. You can use the /EXCLUDE switch for any of the following purposes: o If a library has several modules with the same search symbols, you can select the module you want by excluding the others. o If several modules contain the same symbol, you can select the module with the symbol definition you want by excluding the others. This also prevents modules from giving multiple definitions of a symbol. o In defining an overlay structure, you can delay loading of a module until a later overlay link by excluding the module. EXAMPLES @LINK<RET> */SEARCH LIBFIL.REL/EXCLUDE:(MOD1,MOD2)<RET> * Searches LIBFIL as a library but prevents loading of MOD1 and MOD2 even if they resolve global symbol references. OPTIONAL You can omit the parentheses if you specify only one NOTATIONS module. RELATED /INCLUDE, /NOINCLUDE SWITCHES 3-23 FIELD TEST /EXECUTE FORMAT /EXECUTE FUNCTION Directs LINK to execute the loaded program beginning at the program's start address. LINK continues loading until a /GO switch is found. Use either the /EXECUTE or /DEBUG switches to load and execute a program. EXAMPLES @LINK<RET> */EXECUTE<RET> *PROGRM/GO OPTIONAL You can abbreviate /EXECUTE to /E. NOTATIONS RELATED /DEBUG, /GO, /RUN, /TEST SWITCHES 3-24 FIELD TEST /FRECOR FORMAT /FRECOR:nK n is a positive decimal integer. K is the representation for 1024. FUNCTION Requires LINK to maintain a minimum amount of free memory after any expansions. LINK's default free memory is 4K. If you use the /FRECOR:nK switch, LINK computes n times 1024 words and maintains the resulting number of words of free memory, if possible. If the modules to be loaded are quite large, a larger amount of free memory avoids some moving of areas. LINK has ten areas that may be expanded during loading: 1. ALGOL symbol information (AS). + 2. Bound global symbols (BG). 3. Dynamic area (DY). 4. Fixup area (FX). 5. Global symbol tables (GS). 6. User's high segment code (HC). + 7. User's low segment code (LC). + 8. Local symbol tables (LS). + 9. Relocation tables (RT). 10. Argument typechecking (TP). + Areas that can overflow are marked with a +. Each of these areas has a lower bound, an actual upper bound, and a maximum upper bound. LINK normally maintains space between the actual and maximum upper bounds for each area. The total of these ten spaces is at least the space given by the /FRECOR switch, if possible. LINK recovers free memory by concatenating these ten free areas. When all this recovered space is used and one or more of the ten areas overflows then free memory is no longer maintained because the free memory has been used. EXAMPLES @LINK<RET> */FRECOR:7K<RET> * Maintains 7K of free memory, if possible. OPTIONAL You can specify the free memory in octal using a hash sign NOTATIONS (#). For example, /FRECOR:#11K. 3-25 FIELD TEST /GO FORMAT /GO FUNCTION Ends loading after the current file and exits LINK. LINK then performs any required library searches, generates any required output files, and does one of the following: o Begins execution at the start address of the loaded program if you used /EXECUTE. o Begins execution at the start address of the debugger if you used /DEBUG. o Exits to the monitor if you used no execution switch. EXAMPLES @LINK<RET> *MYPROG/EXECUTE/GO<RET> [LNKXCT MYPROG execution] Begins execution of the loaded program at its start address. @LINK<RET> *MYPROG/DEBUG/GO<RET> [LNKDEB DDT execution] Begins execution of the loaded program at the start address of DDT. OPTIONAL You can abbreviate /GO to /G. NOTATIONS RELATED /DEBUG, /EXECUTE, /RUN SWITCHES 3-26 FIELD TEST /EXIT FORMAT /EXIT FUNCTION Exits LINK. LINK does not finish loading the program. To finish loading the program and to exit LINK, use /GO. EXAMPLES @LINK *MYPROG<RET> */EXIT @ 3-27 FIELD TEST /HASHSIZE FORMAT /HASHSIZE:n n is a positive decimal integer. FUNCTION Gives a minimum for the initial size of the global symbol table. LINK selects a prime number larger than n for the initial size. LINK automatically expands a symbol table. However, if you know that you need a large global symbol table, you can save time and space by allocating space for it with /HASHSIZE. You should give a hash size at least 10 percent larger than the number of global symbols in the table. If LINK gives the message [LNKRGS Rehashing Global Symbol Table] during a load, you should use the /HASHSIZE switch for future loads of the same program. The minimum hash size for loading a program appears in the header lines of the map file. The default hash size is a LINK assembly parameter (initially 251 decimal). EXAMPLES @LINK<RET> /HASHSIZE:1000<RET> * Sets the hash size to the prime number 1021. 3-28 FIELD TEST /HELP FORMAT /HELP:keyword DEFAULTS /HELP:TEXT FUNCTION Displays information about LINK on the terminal. The keywords are: Keyword Description SWITCHES prints a list of valid switches. TEXT prints a more detailed description of command formats and switches. OPTIONAL You can abbreviate /HELP to /H. NOTATIONS 3-29 FIELD TEST /INCLUDE FORMAT /INCLUDE:(module,...,module) FUNCTION Requires the loading of the specified modules whether or not there are any global requests for them. For example, */INCLUDE:(MODU6,MODU9)<RET> requires that modules MODU6 and MODU9 be loaded. /INCLUDE can be used as a local or global switch. If /INCLUDE is used as a local switch the request for the module is cleared after the file is loaded. For example, *FILE8/INCLUDE:(MODU7,MODU8)<RET> loads module MODU7 and MODU8 from FILE8. If /INCLUDE is used as a global switch, the request for the modules are not cleared until the modules are loaded. For example, */INCLUDE:(MODU2,MODU3,MODU4) FILEA,FILEB,FILEC<RET> requires loading of MODU2, MODU3, and MODU4. If these modules do not exist in FILEA, FILEB, and FILEC, /INCLUDE request continues until they are loaded. If you used /SEARCH specifying library search mode and specify /INCLUDE, the /INCLUDE switch causes the modules specified in the switch to be loaded in addition to modules that are loaded to satisfy global symbol references. For example, *LIBARY/SEARCH/INCLUDE:(DATMOD,NAMMOD,NUMMOD)<RET> Causes LIBARY to be searched and DATMOD, NAMMOD, and NUMMOD to be loaded along with other modules that are needed to resolve global symbol references. You can use /INCLUDE in an overlay load to force a module to be loaded in an ancestor link common to successor links that reference that module. This makes the module available to all links that are successors to its link. EXAMPLES @LINK<RET> */SEARCH LIB1/INCLUDE:(MOD1,MOD2)<RET> * Searches LIB1 and loads MOD1 and MOD2 even if they are not needed to resolve global symbol references. 3-30 FIELD TEST OPTIONAL You can omit the parentheses if you specify only one NOTATIONS module. RELATED /EXCLUDE, /NOINCLUDE, /MISSING SWITCHES 3-31 FIELD TEST /LIMIT FORMAT /LIMIT:psect:origin psect is a PSECT name. origin is a thirty-bit octal address or a defined symbol. FUNCTION specifies an upper bound for a PSECT. If the PSECT loads beyond this bound, LINK returns error messages. Before using /LIMIT, the PSECT name must be defined with either the /SET switch or in one of the modules already loaded. The upper bound can be expressed in either numeric or symbolic form. This address is one greater than the highest location which may be loaded in the PSECT and need not be in the same section as the PSECT origin. If the PSECT grows beyond the address specified in the /LIMIT switch, LINK sends a warning to your terminal, but continues to process input files and to load code. The warning message takes the following form: %LNKPEL PSECT <psect> exceeded limit of <address> Although LINK does continue to process input files and load code, the program is incomplete and should NOT be used. LINK produces the following fatal error: ?LNKCFS Chained fixups have been suppressed Chained fixups are a method that LINK uses to resolve symbol references. Using /LIMIT to define an upper bound prevents unintended PSECT overlaps. PSECT overlaps can cause LINK to loop and produces other unpredictable behavior, because LINK uses the unresolved address relocation chains in the user program being built. EXAMPLES In the following example, the LRGPRO and BIGPRO programs each contain two PSECTs, BIG and GRAND. LRGPRO is loaded first using /COUNTERS to check the origin and the current value of the PSECTs. The PSECT origin is found by looking under the initial value column and the current value is found by looking under the current value of the /COUNTERS output. @LINK<RET> */SET:BIG:1000<RET> 3-32 FIELD TEST */SET:GRAND:5400<RET> *LRGPRO<RET> */COUNTERS<RET> [LNKRLC Reloc. ctr. initial value current value limit value .LOW. 0 140 1000000 BIG 1000 5100 1000000 GRAND 5400 10500 1000000 Absolute code loaded] /COUNTERS shows that the current value for PSECT BIG and the initial value for PSECT GRAND are close together in memory. The current value for BIG is 5100 and the PSECT origin for GRAND is 5400. The /LIMIT switch can now be used to restrict PSECT BIG upper bound to PSECT GRAND's initial value using: */LIMIT:BIG:GRAND<RET> This prevents an unintended overlap when PSECT BIG from BIGPRO is loaded because the upper bound for BIG is set to GRAND's origin. Now when BIGPRO is loaded, if PSECT BIG exceeds the limit, LINK produces the LNKPEL warning indicating that the upper bound needs to be increased. The /COUNTERS switch shows a new current value greater than 5400. Notice that the limit set with the /LIMIT switch is shown in the LIMIT VALUE column. *BIGPRO<RET> %LNKPEL PSECT BIG exceeded limit of 5100 detected in module .MAIN from file BIGPRO.REL */COUNTERS<RET> [LNKRLC Reloc. ctr. initial value current value limit value .LOW. 0 140 1000000 BIG 1000 6300 5400 GRAND 5400 10500 1000000] Absolute code loaded] /GO continues loading the program, and LINK produces the POV warning message and the CFS fatal error message. */GO<RET> %LNKPOV PSECTs BIG and GRAND overlap from address 5400 to 6300 ?LNKCFS chained fixups have been suppressed To avoid the overlap, move the PSECTs farther apart in memory. In this example, GRAND's origin is reset from 5400 to 7000. @LINK<RET> */SET:BIG:1000<RET> */SET:GRAND:7000<RET> */LRGPRO<RET> 3-33 FIELD TEST */LIMIT:BIG:GRAND<RET> *BIGPRO<RET> */GO<RET> @ 3-34 FIELD TEST /LINK FORMAT /LINK:name name is up to 6 Radix-50 compatible characters. FUNCTION Closes an overlay link. /LINK directs LINK to give the specified overlay link name to the current memory image and outputs the memory image to the overlay file. LINK first performs any required library searches and assigns a number to the overlay link. For a discussion of overlay structures, see Chapter 5. The current memory image has all modules loaded since the beginning of the load or since the last /LINK switch. EXAMPLES @LINK<RET> *SPEXP/LINK:ALPHA<RET> * Loads module SPEXP and outputs the memory image to the overlay file as an overlay link named ALPHA. OPTIONAL If you omit the overlay link name, LINK uses the overlay NOTATIONS link's assigned number. RELATED /NODE SWITCH 3-35 FIELD TEST /LOCALS FORMAT /LOCALS FUNCTION Includes local symbols from a module in the symbol table. LINK does not need these tables, but you may want them for debugging. /LOCALS and /NOLOCAL may be used as either local or global switches. If the switch is appended to a file specification, it applies only to that file; if it is not appended to a file specification, it applies to all the files that follow in the same command line. EXAMPLES @LINK<RET> */LOCALS ALPHA,BETA/NOLOCAL,CAPPA,/NOLOCAL DELTA<RET> * Loads ALPHA with local symbols, BETA without local symbols, CAPPA with local symbols, and DELTA without local symbols. OPTIONAL You can abbreviate /LOCALS to /L. NOTATIONS RELATED /NOLOCAL, /SYMSEG SWITCHES 3-36 FIELD TEST /LOG FORMAT logfilespec/LOG FUNCTION Specifies a file specification for the log file (see Section 4.2.2). Any LINK messages output before the /LOG switch is encountered are not entered in the log file. Any messages output after the LOG file is closed are also not entered in the file. EXAMPLES @LINK<RET> *LOGFIL/LOG<RET> * Specifies the file DSK:LOGFIL.LOG in the user's directory. @LINK<RET> *TTY:/LOG<RET> * Directs log messages to the user's terminal. OPTIONAL You can omit all or part of the logfilespec. NOTATIONS The defaults are: device DSK: filename name of main program file type LOG directory your connected directory You can change the defaults using the /DEFAULT switch. RELATED /LOGLEVEL SWITCHES 3-37 FIELD TEST /LOGLEVEL FORMAT /LOGLEVEL:n n is a positive decimal integer. FUNCTION Suppresses logging of LINK messages with message level less than n, where n is a decimal number between 0 and 31 inclusive. You cannot suppress level 31 messages. See Appendix B for the level of each LINK message. The default is /LOGLEVEL:8. EXAMPLES @LINK<RET> */LOGLEVEL:0<RET> * Logs all messages. RELATED /ERRORLEVEL, /LOG SWITCHES 3-38 FIELD TEST /MAP FORMAT mapfilespec/MAP:keyword FUNCTION Specifies a file specification for the map output file (see Section 4.2). The contents of the file are determined by the /CONTENTS switch or its defaults. Keyword Description END Produces a map file at the end of the load. This is the default if you omit the keyword. ERROR Produces a map file if a fatal error occurs. Any modules loaded after this switch do not appear in the log. To ensure that a MAP file is generated, specify this switch before the loading of REL files. NOW Produces a map file immediately. Library searches are not performed unless forced. EXAMPLES @LINK<RET> *MAPFIL/MAP:END<RET> * Generates a map in the file DSK:MAPFIL.MAP in your disk area at the end of loading. OPTIONAL You can omit all or part of the mapfilespec. NOTATIONS The defaults are: device DSK: filename name of main program file type MAP directory user's connected directory You can change the defaults using the /DEFAULT switch. You can abbreviate /MAP to /M. RELATED /CONTENTS SWITCHES 3-39 FIELD TEST /MAXNODE FORMAT /MAXNODE:n n is a positive decimal integer. FUNCTION Specifies the number of overlay links to be defined when the overlayed program requires more than 256 overlay links. LINK allocates extra space in the OVL file for certain fixed-length tables based on the number of overlay links specified with this switch. Note that this switch must be placed after the /OVERLAY switch and it must precede the first /NODE switch in the set of commands to LINK. EXAMPLES @LINK<RET> *TEST/OVERLAY/MAXNODE:500<RET> * Reserves space for 500 defined overlay links. See Chapter 5 for a discussion on overlays. RELATED /OVERLAY SWITCHES 3-40 FIELD TEST /MESSAGE FORMAT /MESSAGE:keyword FUNCTION Displays messages on the terminal in the format specified by keyword. Both /MESSAGE and /VERBOSITY display messages on the terminal, but use different keywords and return slightly different output. Keyword Description PREFIX displays the message code. NOPREFIX prevents the display of the message code. FIRST displays the short message. NOFIRST prevents the display of the short message. CONTINUATION displays the longer message. NOCONTINUATION prevents the display of the longer message. EXAMPLES In all the following examples, an incorrect file specification (KSD:MISTKE) is entered. In the following example, /NOPREFIX prevents the display of the message code. @LINK<RET> */MESSAGE:NOPREFIX<RET> *KSD:MISTKE<RET> % Non-existent device KSD: [ Please retype the incorrect parts of the file specification ] * In the next example, a short message is returned. @LINK<RET> */MESSAGE:FIRST<RET> *KSD:MISTKE<RET> %LNKNED Non-existent device KSD: [ Please retype the incorrect parts of the file specification] In this example, a long message is returned. 3-41 FIELD TEST @LINK<RET> */MESSAGE:CONTINUATION<RET> *KSD:MISTKE<RET> %LNKNED Non-existent device KSD: You gave a device that does not exist on this system. Correct your input files and reload. [ Please retype the incorrect parts of the file specification] RELATED /ERRORLEVEL, /VERBOSITY SWITCHES 3-42 FIELD TEST /MISSING FORMAT /MISSING FUNCTION Displays on the terminal the number of modules requested with the /INCLUDE switch that have not yet been loaded. EXAMPLES In the following example, MYPROG is loaded, library searches are requested, MOD1 and MOD2 are to be loaded during the search, and LIB1 is to be loaded. @LINK<RET> *MYPROG<RET> */SEARCH/INCLUDE:(MOD1,MOD2) LIB1<RET> Next, /MISSING is used to check if both modules were loaded. */MISSING<RET> [LNKIMM 1 included module missing] Now, LIB2 is loaded, MOD2 is to be included, and /MISSING is used to check if MOD2 was loaded. *LIB2/INCLUDE:(MOD2)<RET> */MISSING<RET> [LNKIMM no included modules missing] * RELATED /EXCLUDE, /INCLUDE, /UNDEFINED SWITCHES 3-43 FIELD TEST /NEWPAGE FORMAT /NEWPAGE:keyword FUNCTION Sets the relocation counter to the first word of the next page. If the counter is already at a new page, this switch is ignored. Keyword Description LOW Resets the low-segment counter to new page. If you omit the keyword, this is the default. HIGH Resets the high-segment counter to new page. EXAMPLES @LINK<RET> */NEWPAGE:HIGH<RET> *SUBR1<RET> */NEWPAGE:LOW<RET> *SUBR2<RET> * Sets the high-segment counter to a new page, loads SUBR1, sets the low-segment counter to a new page, and loads SUBR2. Note that SUBR1 and SUBR2 are not necessarily loaded into the high and low segments respectively; the /NEWPAGE switch sets a counter, but does not force the next loaded module into the specified segment. RELATED /SET, /COUNTERS SWITCHES 3-44 FIELD TEST /NODE FORMAT /NODE:argument FUNCTION Opens an overlay link. /NODE places LINK's relocation counter at the end of a previously defined overlay link in an overlay structure, which becomes the immediate ancestor to the next overlay link defined. (For a discussion of overlay structures, see Chapter 5.) The /NODE switch must precede any modules to be placed in the new overlay link. Argument Description name is a name given with a previous /LINK switch. LINK places the relocation counter at the end of the specified overlay link. negative number is a negative number (-n). LINK backs up n overlay links along the current path. positive number is a positive number n or 0. LINK begins further loading at the end of overlay link number n. You can use 0 to begin loading at the root link. NOTE It is recommended that you use an overlay link name (or 0 for the root link) rather than a nonzero number. This is because a change in commands defining an overlay may change some of the overlay link numbers. EXAMPLES In the following example, /NODE opens overlay link FATHER, SON1 and SON2 are loaded, and /LINK closes the overlay link. @LINK<RET> */NODE:FATHER<RET> *SON1<RET> *SON2<RET> */LINK:FATHER<RET> * 3-45 FIELD TEST See Chapter 5 for more examples. RELATED /LINK, /OVERLAY, /PLOT SWITCHES 3-46 FIELD TEST /NOENTRY FORMAT /NOENTRY:(symbol,symbol,...) symbol is an entry name symbol. FUNCTION Deletes entry name symbols from LINK's overhead tables when loading overlays, thereby saving space at run time. If you know that execution of the current load does not reference certain entry points, you can use /NOENTRY to delete them. /NOENTRY differs from /NOREQUEST in that /NOREQUEST deletes requests for symbols, while /NOENTRY deletes symbols that might be requested. EXAMPLES @LINK<RET> */ENTRY<RET> [LNKLSS LIBRARY SEARCH SYMBOLS (ENTRY POINTS)] SQRT. 3456 */NOENTRY:(SQRT.)<RET> */ENTRY<RET> * Deletes SQRT. so that it cannot be used to fulfill a symbol request. OPTIONAL You can omit the parentheses if only one symbol is given. NOTATIONS RELATED /ENTRY, /EXCLUDE, /NOEXCLUDE, /INCLUDE, /NOINCLUDE, SWITCHES /MISSING, /REQUEST, /NOREQUEST 3-47 FIELD TEST /NOINCLUDE FORMAT /NOINCLUDE FUNCTION Clears requests for modules that were specified in a previous /INCLUDE. EXAMPLES @LINK<RET> *LIB1/INCLUDE:(MOD1,MOD3)<RET> */NOINCLUDE<RET> * Loads MOD1 and MOD3 from LIB1. However, if the modules are not found immediately, LINK stops searching. RELATED /INCLUDE, /EXCLUDE, /MISSING SWITCHES 3-48 FIELD TEST /NOINITIAL FORMAT /NOINITIAL FUNCTION Prevents loading of LINK's initial global symbol table (JOBDAT). The /NOINITIAL switch cannot operate after the first file specification because JOBDAT is already loaded. The initial global symbol table contains the JBxxx symbols described in Appendix C. The /NOINITIAL switch is commonly used for: o Loading LINK itself (to get the latest copy of JOBDAT). o Loading a private copy of JOBDAT (to alter if necessary). o Building an EXE file that eventually runs in executive mode (for example, a monitor or bootstrap loader). o Building a TOPS-20 native program which does not use a JOBDAT area. EXAMPLES @LINK<RET> */NOINITIAL<RET> * RELATED /NOJOBDAT SWITCHES 3-49 FIELD TEST /NOJOBDAT FORMAT /NOJOBDAT FUNCTION Prevents LINK from filling in JOBDAT's or vestigial JOBDAT's address space and causes LINK to create a PDV. JOBDAT contains program information such as debugger symbol table location and version number. Vestigial JOBDAT is used in two segment programs. LINK creates either a JOBDAT or a PDV (Program Data Vector) when loading a program. LINK creates a JOBDAT for most section zero programs. LINK creates a PDV: o for extended addressing programs. o if a PSECT has an origin below 140. o if you specify a PDV using /PVBLOCK or /PVDATA. o if you specify /NOJOBDAT. /NOJOBDAT does not suppress symbols. EXAMPLES @LINK<RET> *PROGAM/NOJOBDAT<RET> * Loads PROGAM and keeps LINK from filling in JOBDAT information during loading. RELATED /NOINITIAL SWITCHES 3-50 FIELD TEST /NOLOCAL FORMAT /NOLOCAL FUNCTION Suspends the effect of a preceding /LOCALS switch so that local symbol tables are not loaded with their modules. The /LOCALS and /NOLOCAL switches may be used as local or global switches. If the switch is appended to a file specification, it applies only to that file; if it is not appended to a file specification, it applies to all the following files in the same command. This switch is useful if you need to conserve memory space, because local symbols are loaded into the low segment by default. EXAMPLES @LINK<RET> */LOCALS MODA,MODB/NOLOCAL,MODC,/NOLOCAL MODD<RET> * Loads MODA with local symbols, MODB without local symbols, MODC with local symbols, and MODD without local symbols. OPTIONAL Abbreviate /NOLOCAL to /N. NOTATIONS RELATED /LOCALS SWITCHES 3-51 FIELD TEST /NOREQUEST FORMAT /NOREQUEST:(symbol,symbol,...) FUNCTION Deletes references to overlay links from LINK's overhead tables when loading overlay programs. If you know that the execution of the current load does not require certain overlay links, you can use /NOREQUEST to delete references to them. /NOREQUEST differs from /NOENTRY in that /NOENTRY deletes symbols that might be requested, while /NOREQUEST deletes the requests for them. EXAMPLES @LINK<RET> */REQUEST<RET> [LNKRER REQUEST EXTERNAL REFERENCES] ROUTN. SQRT. */NOREQUEST:(ROUTN.,SQRT.) */REQUEST * Deletes references to ROUTN. and SQRT. OPTIONAL You can omit the parentheses if only one symbol is given. NOTATIONS RELATED /NOENTRY SWITCH 3-52 FIELD TEST /NOSEARCH FORMAT /NOSEARCH FUNCTION Suspends the effect of a previous /SEARCH switch. Files named between a /SEARCH and the next /NOSEARCH are searched as libraries, so that modules are loaded only to resolve global references. The /SEARCH and /NOSEARCH switches may be used either locally or globally. If the switch is appended to a file specification, it applies only to that file; if it is not appended to a file specification, it applies to all following files in the same command string. EXAMPLES @LINK<RET> */SEARCH ALPHA,BETA/NOSEARCH,CAPPA,/NOSEARCH DELTA<RET> * Searches ALPHA, loads BETA, searches CAPPA, and loads DELTA. RELATED /SEARCH SWITCHES 3-53 FIELD TEST /NOSTART FORMAT /NOSTART FUNCTION Directs LINK to disregard any start addresses found after the /NOSTART switch. Normally LINK keeps the most recent start address found, overwriting any previously found. The /NOSTART switch prevents this replacement. EXAMPLES @LINK<RET> MAIN1,/NOSTART MAIN2,MAIN3<RET> * Directs LINK to save the start address from MAIN1 instead of replacing it with other start addresses from MAIN2 and MAIN3. RELATED /START SWITCHES 3-54 FIELD TEST /NOSYMBOL FORMAT /NOSYMBOL FUNCTION Prevents construction of user symbol tables. Symbols are then not available for the map file, but the header for the file can still be generated by the /MAP switch. The /NOSYMBOL switch prevents writing an ALGOL SYM file if it would otherwise have been written. If you do not need the map file or symbols, you can free some memory space using the /NOSYMBOL switch. EXAMPLES @LINK<RET> */NOSYMBOL<RET> * 3-55 FIELD TEST /NOSYSLIB FORMAT /NOSYSLIB:(keyword,...,keyword) FUNCTION Prevents automatic search of the system libraries named as keywords. LINK searches system libraries at the end of loading to satisfy unresolved global references. The /NOSYSLIB switch prevents this search. The /NOSYSLIB switch can also be used to terminate searching of libraries that were specified in a previous /SYSLIB switch. When you specify searching of a library with /SYSLIB, that library continues to be searched for every module you load. You can use /NOSYSLIB to specify libraries that should not be searched. Refer to /SYSLIB for more information. The keywords and the libraries they specify are listed below. Only those shown in bold specify libraries supported by DIGITAL. Keyword Library ANY all ALGOL ALGLIB BCPL BCPLIB COBOL LIBOL or C74LIB FORTRAN FORLIB NELIAC LIBNEL PASCAL PASLIB SAIL SAILIB SIMULA SIMLIB EXAMPLES @LINK<RET> */NOSYSLIB:(ALGOL,COBOL)<RET> * Prevents search of the system libraries ALGLIB and LIBOL. OPTIONAL If you omit keyword it defaults to ANY. NOTATIONS You can omit parentheses if only one keyword is given. RELATED /SYSLIB SWITCHES 3-56 FIELD TEST /NOUSERLIB FORMAT /NOUSERLIB FUNCTION Discontinues automatic searching of the user libraries at each /LINK or /GO switch. You can specify which library to stop searching by appending /USERLIB to a file specification. For example, *MYLIB/NOUSERLIB stops searching MYLIB. For programs that use overlays, if you need a file searched for some overlay links but not others, you can use the /USERLIB and /NOUSERLIB switches to enable and disable automatic searching of the file. EXAMPLES @LINK<RET> *FILE/OVERLAY<RET> *FILE4/USERLIB:FORTRAN<RET> *LINKA/LINK:ROOT<RET> */NODE:ROOT<RET> *LINKB/LINK:ONE<RET> */NODE:ROOT<RET> *LINKA,LINKB/NOUSERLIB<RET> * OPTIONAL If you omit the filespec, LINK discontinues search of all NOTATIONS user libraries. RELATED /USERLIB SWITCHES 3-57 FIELD TEST /ONLY FORMAT /ONLY:keyword FUNCTION Directs LINK to load the specified segments of two-segment modules. The keywords are: Keyword Segments HIGH high LOW low BOTH both If you are loading a module using /ONLY:HIGH or /ONLY:LOW, it cannot contain chained fixups that cross segments. /ONLY and /SEGMENT are incompatible switches. EXAMPLES @LINK<RET> */ONLY:HIGH MOD1,MOD2<RET> *MOD3/ONLY:BOTH<RET> * Loads high segment for MOD1 and MOD2; loads both segments for MOD3. RELATED /SEGMENT SWITCHES 3-58 FIELD TEST /OPTION FORMAT /OPTION:name FUNCTION Reads the SWITCH.INI file to determine the specified switch defaults for LINK. /NOOPTION ignores the SWITCH.INI file. A SWITCH.INI contains switches for LINK to use, and allows you to override system defaults. For example, the following line when placed in SWITCH.INI changes the default for input files from DSK: to MYSTR:. LINK/DEFAULT:INPUT MYSTR: The name argument specifies which line to read in SWITCH.INI file. For example, /OPTION:LINK reads the LINK line in the SWITCH.INI file. EXAMPLES: @LINK<RET> */OPTION:LINK<RET> *INPUT<RET> * 3-59 FIELD TEST /OTSEGMENT FORMAT /OTSEGMENT:keyword FUNCTION Specifies the time and manner of loading the object-time system. An object-time system is a collection of modules that is called by compiled code for a particular language in order to perform various utility functions such as I/O and trap-handling. For example, FOROTS is the object-time system for FORTRAN. For more information on object-time systems for the language you are using, refer to the appropriate language manual. Keyword Description DEFAULT Suspends the effect of a previous /OTSEGMENT:SHARABLE or /OTSEGMENT:NONSHARABLE switch. NONSHARABLE Loads the object-time system into the executable program at load time. Both the user program and the object-time system may have code in both the high and low segments. SHARABLE Binds the object-time system at execution time. The user program is in the low segment and the object-time system is in the high segment. LINK's default action is to bind the object-time system at execution time, except in the following cases. If any of the following cases occur, a non-sharable object-time system is loaded as part of the program. o You specify /OTSEGMENT:NONSHARABLE. o You have loaded any code into the high segment. o You have specified /SYMSEG:HIGH. o Your low segment is too big for the sharable object-time systems to fit, and your program is loaded in section 0. EXAMPLES @LINK<RET> *MYPROG/SYSLIB/OTSEGMENT:NONSHAR<RET> * Loads a non-sharable copy of the object-time system as part of your program. 3-60 FIELD TEST RELATED /SEGMENT SWITCHES 3-61 FIELD TEST /OVERLAY FORMAT /OVERLAY:(keyword,...,keyword) FUNCTION Initiates construction of an overlay structure. For a discussion of overlay structures, see Chapter 5. You can append the /OVERLAY switch to a file specification in the form: filespec/OVERLAY:(keyword,...keyword) The keywords and their meanings are listed below. The default settings are shown in bold Keyword Description ABSOLUTE Specifies that links are absolute. This is the default situation when overlays are loaded. The inverse situation is to use /OVERLAY:RELOCATABLE. Relocatable overlays are described in Chapter 5. LOGFILE Outputs runtime overlay messages to your terminal. NOLOGFILE Suppresses output of runtime overlay messages. NOWARNING Suppresses overlay warning messages. RELOCATABLE Specifies that links are relocatable. TREE Specifies that the overlay has a tree structure. WARNING Outputs overlay warning messages to user terminal. WRITABLE Specifies that the links are writable. Refer to Chapter 5 for more information. EXAMPLES @LINK<RET> */OVERLAY:(TREE,LOGFILE) Specifies that an overlay is to be constructed, and that 3-62 FIELD TEST runtime messages are to be printed on the terminal. OPTIONAL You can omit the parentheses if only one keyword is given. NOTATIONS RELATED /LINK, /NODE, /PLOT SWITCHES 3-63 FIELD TEST /PATCHSIZE FORMAT /PATCHSIZE:n n is a positive decimal integer. FUNCTION Allocates n words of storage to precede the symbol table. The allocated storage is in the same segment (high or low) as the symbol table. The default is /PATCHSIZE:64. The storage allocated is available for patching or for defining new symbols with DDT, and is identified by the global symbol "PAT.." EXAMPLES @LINK<RET> */SYMSEG:HIGH/PATCHSIZE:200<RET> * Loads the symbol table in the high segment after allocating 200 words between the last loaded module and the symbol table. OPTIONAL You can specify the patchsize in octal. NOTATIONS RELATED /SYMSEG SWITCHES 3-64 FIELD TEST /PLOT FORMAT filespec/PLOT FUNCTION Directs LINK to output a tree diagram of your overlay structure. You can have the diagram formatted for a plotter (by default) or for a line printer (by giving the device as LPT:). Each box in the diagram shows a link number, its name (if you gave one with the /LINK switch), and its relationship to other links (as defined by your commands). The /PLOT switch cannot precede the /OVERLAY switch. EXAMPLES @LINK<RET> *OVLPRO/OVERLAY:(TREE,LOGFILE)<RET> *LPT:OVLPRO/PLOT<RET> * requests a tree diagram for the overlay. The diagram is formatted for the line printer because LPT: is specified. OPTIONAL LINK has default settings for the size of the overlay NOTATIONS diagram and the increment for drawing lines. You can override these by giving the /PLOT switch in the form: filespec/PLOT:(LEAVES:value,INCHES:value,STEPS:value) where the values for each parameter define: INCHES Width of diagram in inches. The defaults are INCHES:29 for plotter and INCHES:12 for line printer. LEAVES Number of links without successors that can appear in one row. The defaults are LEAVES:16 for plotter and LEAVES:8 for line printer. STEPS Increments per inch for drawing lines. The defaults are STEPS:100 for plotter and STEPS:20 for line printer. For line printer diagrams, you cannot give INCHES or LEAVES different from the defaults. The STEPS parameter should be between 10 and 25. For plotter diagrams, you should give INCHES and LEAVES in a ratio of about 2 to 1. For example, INCHES:40 and LEAVES:20. 3-65 FIELD TEST If LINK cannot design the diagram on one page, it automatically designs subtrees for diagrams on more pages. RELATED /LINK, /NODE, /OVERLAY SWITCHES 3-66 FIELD TEST /PLTTYP FORMAT /PLTTYP:keyword FUNCTION Specifies the type of plot file to be generated by the /PLOT switch. KEYWORDS DEFAULT Generate output for a printer only if the device is a printer or terminal. PLOTTER Generate output for a plotter. PRINTER Generate output for a printer. EXAMPLES @LINK *OVLPRO/OVERLAY *OVLPRO/PLOT/PLTTYP:PRINTER Causes all output from the /PLOT switch to be in line printer format. RELATED /PLOT SWITCHES 3-67 FIELD TEST /PSCOMMON FORMAT /PSCOMMON:psect:common FUNCTION Specifies where LINK is to load COMMON blocks. This switch causes the FORTRAN common specified by the argument common to be loaded into the PSECT specified in the argument psect. Use the /PSCOMMON switch before loading the specified common and before declaring the common's size with the /COMMON switch. /PSCOMMON only affects common blocks defined with the /COMMON switch. If the common block is created by a REL block, /PSCOMMON is ignored, and the PSECT specified by the REL file is used. EXAMPLES In the following example, /SET defines the SECTA PSECT's origin, /PSCOMMON specifies that SECTA is loaded into COMABC, and /COMMON defines the common size. @LINK<RET> */SET:SECTA:3000000 */PSCOMMON:SECTA:COMABC */COMMON:COMABC:10000 *PROG * RELATED /COMMON SWITCHES 3-68 FIELD TEST /PVBLOCK FORMAT /PVBLOCK:keyword FUNCTION Requests a PDV (Program Data Vector) from LINK and gives you control over where the vector goes. NOTE PDVs are useful only with TOPS-20 Version 5 and later monitors. Earlier monitors ignore PDVs. Refer to Chapter 7 for more information about PDVs. Keyword Description DEFAULT disables the previous /PVBLOCK:HIGH or /PVBLOCK:LOW, and restores the default. LINK supplies a PDV by default: o for an extended addressing program, o if /PVDATA is specified o if /NOJOBDAT is specified. o if a PSECT's start address is below 140. The default PDV is placed at the end of the low segment even for programs that use PSECTs. HIGH places the PDV at the end of the high segment. LOW places the PDV at the end of the low segment. NONE prevents loading of the PDV. PSECT:name places the PDV at the end of the named PSECT. EXAMPLES In the following example, PVTEST is loaded and a PDV is requested. The PDV is placed at the end of the low segment as indicated by the LOW keyword. @LINK<RET> 3-69 FIELD TEST *PVTEST<RET> */PVBLOCK:LOW/GO<RET> Next, the TOPS-20 INFORMATION VERSION command is used to display the program and PDV name. @INFO VERSION<RET> . . . Program is PVBLCK PDVs: Program name PVTEST, version @ OPTIONAL If you specify /PVBLOCK with no keyword, DEFAULT is the NOTATION default. RELATED /PVDATA, /NOJOBDAT SWITCHES 3-70 FIELD TEST /PVDATA FORMAT /PVDATA:keyword:value FUNCTION Changes the contents of a PDV block. The /PVDATA switch also allocates storage for the PDV. If the storage to be allocated conflicts with any PSECT, LINK issues a message with the severity level of 16, and does not write the PDV information into the executable program or sharable save (EXE) file. Refer to Chapter 7 for more information on PDVs. NOTE PDVs are useful only with TOPS-20 Version 5 and later monitors. Earlier monitors ignore PDVs. Refer to Chapter 7 for more information about PDVs. Keyword Description NAME is an optionally quoted ASCII string that identifies the PDV. This string is not converted to uppercase. If you do not quote the program name, you can use only alphanumerics and the period (.), dollar sign ($), and percent sign (%) characters to specify program name. VERSION is a hash sign (#) followed by an octal value, a version number that starts with a number, or a global symbol. MEMORY is the address of the user supplied memory map in octal, or a previously defined global symbol that contains the address of a user supplied memory map. The user supplied memory map suppresses the map generated by LINK. PROGRAM is the address of a program-specific data block in octal value, or a previously defined global symbol that contains the address of a program-specific data block. 3-71 FIELD TEST CBLOCK is the address of a customer-defined block in octal, or a previously defined global symbol that contains the address of a customer-defined block. EXPORT is the address of a block of information defined by a program in octal, or a previously defined global symbol that contains the address of a block of information defined by a program. EXAMPLES In the following example, a PDV name and version number are defined. /PVDATA:NAME:T.S$T% defines the T.S$T% as the PDV name, and /PVDATA:VERSION:1A(3) defines 1.1(3) as the version number. @LINK<RET> */PVDATA:NAME:T.S$T%<RET> */PVDATA:VERSION:1A(3)<RET> *PVTEST/GO<RET> Next, the TOPS-20 INFORMATION VERSION command is used to display the PDV name and version. @INFO VERSION<RET> . . . Program is PVBLCK PDVs: Program name T.S$T%, version 1.1(3) @ The next example also specifies a PDV name and version, but in a different format. @LINK<RET> */PVDATA:NAME:"TST@ "<RET> */PVDATA:VERSION: 101000003<RET> *PVTEST/GO<RET> @INFO VERSION<RET> . . . Program is PVBLCK PDVs: Program name TST@ , version 1.1(3) @ RELATED /PVBLOCK 3-72 FIELD TEST SWITCHES 3-73 FIELD TEST /REDIRECT FORMAT /REDIRECT:Lowpsect:Highpsect FUNCTION Loads two-segmented formatted REL files as part of a program using PSECTs. The argument Lowpsect is the name of the PSECT to receive the low segment code and Highpsect is the name of the PSECT to receive the high segment code. You must redirect both segments, you cannot redirect just the high or the low segment. EXAMPLES The following example loads a two-segment program (TWOPRT), and displays the low- and high-segment values using /COUNTERS. @LINK<RET> *TWOPRT<RET> */COUNTERS<RET> [LNKRLC Reloc. ctr. initial value current value limit value .LOW. 0 1642 1000000 .HIGH. 400000 400753 1000000] * Next, PSECT origins are set for PSHI and PSLO, .LOW. is redirected into PSLO, .HIGH. is redirected into PSHI, and /COUNTERS is used to display PSHI and PSLO values. @LINK<RET> */SET:PSHI:400010<RET> */SET:PSLO:3500<RET> */REDIRECT:PSLO:PSHI<RET> *TWOSEG<RET> */COUNTERS<RET> [LNKRLC Reloc. ctr. initial value current value limit value PSHI 400010 400753 1000000 PSLO 3500 5202 1000000] 3-74 FIELD TEST /REQUEST FORMAT /REQUEST FUNCTION Displays external global symbol references on the terminal. Use /REQUEST to determine if a module uses a global symbol that is loaded in another module. If you use /REQUEST to get the names of external references, you can then either delete the references with the /NOREQUEST switch, or load the referenced modules. EXAMPLES @LINK<RET> */REQUEST<RET> [LNKRER REQUEST EXTERNAL REFERENCES] ROUTN. SQRT. */NOREQUEST:ROUTN.<RET> */SEARCH LIB1<RET> * Obtains the external references ROUTN. and SQRT.; deletes the request for ROUTN.; searches the file LIB1 for a module containing the entry point SQRT. RELATED /NOREQUEST SWITCHES 3-75 FIELD TEST /REQUIRE FORMAT /REQUIRE:(symbol,...,symbol) FUNCTION Generates global requests for the specified symbols. LINK uses these symbols as library search symbols (entry points). /REQUIRE differs from /INCLUDE in that /INCLUDE requests a module by name, while /REQUIRE requests an entry name symbol. Thus you can use /REQUIRE to specify a function (for example, SQRT.) even if you do not know the module name. You can use /REQUIRE to load a module into an overlay link common to all overlay links that reference the module. Note that the global requests generated by the /REQUIRE switch do not use the standard FORTRAN calling sequence, and are therefore not visible to the /REQUEST switch. EXAMPLES @LINK<RET> */UNDEFINED<RET> [LNKUGS NO UNDEFINED GLOBAL SYMBOLS] */REQUIRE:(ROUTN.,SQRT.)<RET> */UNDEFINED<RET> [LNKUGS 2 UNDEFINED GLOBAL SYMBOLS] SQRT. 0 ROUTN. 0] * OPTIONAL You can omit the parentheses if only one symbol is given. NOTATIONS RELATED /SEARCH, /NOSEARCH SWITCHES 3-76 FIELD TEST /RUN FORMAT /RUN:file FUNCTION Directs LINK to run the program after it is loaded. LINK ignores this switch if you used /EXECUTE or /DEBUG. EXAMPLES: @LINK<RET> */RUN:MYPROG<RET> *MYPROG<RET> * 3-77 FIELD TEST /RUNAME FORMAT /RUNAME:name FUNCTION Assigns a job name for execution of your program. This job name is used in the SYSTAT display. EXAMPLES @LINK<RET> */RUNAME:LNKDEV<RET> *PROGRM * Assigns the name LNKDEV for program execution regardless of the file names that are loaded. 3-78 FIELD TEST /RUNOFFSET FORMAT /RUNOFFSET:n FUNCTION Runs the program specified in a /RUN switch with an offset of n. If you omit the switch the default is 0. If you omit the n argument, the default is 1. EXAMPLES In the following example, MACRO is run with an offset of 1 after MCPROG is loaded. @LINK<RET> *MCPROG<RET> */RUN:MACRO/RUNOFFSET:1/GO<RET> 3-79 FIELD TEST /SAVE FORMAT filespec/SAVE FUNCTION Directs LINK to create a sharable save file using the specified file specification. If you omit the file type, LINK uses EXE. To run the sharable save file with the TOPS-20 RUN command, the file must have an EXE file type. EXAMPLES @LINK<RET> *MYPROG<RET> *DSKZ:RUNPRO.EXE/SAVE/GO<RET> @ Directs LINK to save the loaded version of MYPROG as RUNPRO.EXE on DSKZ:. 3-80 FIELD TEST /SEARCH FORMAT /SEARCH FUNCTION Directs LINK to search the input files and load only the modules whose entry point names resolves a global symbol request. The /NOSEARCH discontinues library searching of input files, and loads all the modules in the input files. Although /NOSEARCH is used, LINK continues to search system libraries unless you used the /NOSYSLIB, and searches user libraries if you used the /USERLIB switch. For example, the FILE9, FILE8, and FILE7 input files are to be searched as libraries and only the modules that resolve global symbols are to be loaded, but all the modules in FILE1, FILE2, and FILE3 are to be loaded. @LINK<RET> */SEARCH FILE9,FILE8,FILE7<RET> */NOSEARCH FILE1,FILE2,FILE3<RET> The /SEARCH and /NOSEARCH switches can be used as local or global switches. See Section 3.3.3 for a discussion of switch placement. Note that search requests in .TEXT blocks may be processed in the reverse order of entered /SEARCH switches. Keep this in mind when specifying the order in which modules are to be searched. See Block types greater than 3777 for more information. EXAMPLES @LINK<RET> */SEARCH MODA,MODB/NOSEARCH,MODC,/NOSEARCH MODD<RET> * Searches MODA, loads MODB, searches MODC, and loads MODD. This examples illustrates the use of /SEARCH and /NOSEARCH as local and global switches. The /SEARCH switch is a global switch because it is entered after the asterisk, and applies to MODA and MOBC. The first /NOSEARCH switch is a local switch because it is appended to MODB. Notice its placement before the comma. The second /NOSEARCH switch is a global switch and applies to the remainder of the line. OPTIONAL You can abbreviate /SEARCH to /S. NOTATIONS RELATED /NOSEARCH 3-81 FIELD TEST SWITCHES 3-82 FIELD TEST /SEGMENT FORMAT /SEGMENT:keyword FUNCTION Specifies whether the high segment or the low segment of a two-segment program is to be used for loading the modules that follow. If /SEGMENT is omitted, LINK follows the specifications in the program. LINK does not follow the programs specifications for FORTRAN object code, but loads both segments into the low segment. LINK does not load FORTRAN object code into the low segment if: o You used the /OTSEGMENT:NONSHARABLE switch. o You used the /SEGMENT:HIGH switch to load code into the high segment. o You used the /SEGMENT:DEFAULT switch to load code into both segments. o A high segment already exists. The keywords for the /SEGMENT switch are: Keyword Description DEFAULT Suspends effect of /SEGMENT:LOW or /SEGMENT:HIGH. HIGH Loads into high segment. LOW Loads into low segment. NONE Same as DEFAULT. If the switch is appended to a file specification, it applies only to that file; if it is not appended to a file specification, it applies to all following files in the same command string. /SEGMENT and /ONLY are incompatible. EXAMPLES @LINK<RET> */SEGMENT:LOW MOD1,MOD2,/SEGMENT:HIGH MOD3<RET> * Loads MOD1 and MOD2 into the low segment; loads MOD3 into the high segment. RELATED /OTSEGMENT 3-83 FIELD TEST SWITCHES 3-84 FIELD TEST /SET FORMAT /SET:name:address name is .HIGH., .LOW., or a PSECT name. address is a thirty-bit octal address or a defined symbol. FUNCTION Sets the origin of a PSECT, or sets the .HIGH. or .LOW. relocation counter. For setting the origin of a PSECT, name is the name of the PSECT, and address is a virtual memory address. The /SET switch must precede the modules that make up the specified PSECT. The /SET switch is not needed if the REL files already contain the PSECT origin information. EXAMPLES @LINK<RET> */SET:MEMLOCA:200000<RET> * Specifies that the PSECT named MEMLOCA is to be loaded with an origin of address 200000. */SET:.HIGH.:400000<RET> * Sets the high segment relocation counter .HIGH. to the address 400000. Note that saying /SET:.HIGH. causes a high segment to appear and a vestigial JOBDAT area to be built. RELATED /COUNTERS, /LIMIT SWITCHES 3-85 FIELD TEST /SEVERITY FORMAT /SEVERITY:n n is a positive decimal integer. FUNCTION Specifies that errors of severity level greater than or equal to n terminate the load, where n is a decimal number between 0 and 31 inclusive. Level 31 errors always terminate the load. The defaults are /SEVERITY:28 for timesharing jobs, and /SEVERITY:16 for batch jobs. See Appendix B for a list of severity codes. EXAMPLES @LINK<RET> */SEVERITY:29<RET> * Specifies that level 29 errors and above are fatal. 3-86 FIELD TEST /SPACE FORMAT /SPACE:n n is a positive decimal integer. FUNCTION Specifies that n words of memory follow the current overlay link at execution time. This memory allocation does not increase the size of the overlay file, but it does increase the size of the program at run time. The /SPACE switch is used to allocate space for use by the object time system. The OTS uses this space for I/O buffers, and as scratch space in FORTRAN and heap space in ALGOL. You should place the /SPACE switch before the first /LINK switch, to ensure allocation for the root link. It is possible to allocate space after one or more overlays are linked. This might be useful if an overlay has unusual storage requirements: such as buffers for a file which is open only while that overlay is resident, or a large local matrix. To allocate space between overlays, use /SPACE when loading the overlay that use this file or matrix. LINK allows one /SPACE switch for the root node, and one for each overlay. The default amount of memory allocated, if you do not specify /SPACE, is 2000 for the root link and 0 (zero) for other overlay links. If the space allocated for a relocatable link is too small, the overlay handler can relocate it. If the space allocated for an absolute link is too small, a fatal error occurs. EXAMPLES @LINK<RET> */OVERLAY<RET> *TEST/SPACE:90/LINK:MAIN<RET> Allocates 90 words of memory to follow the root link for the program. See Chapter 5 for a discussion on overlay. OPTIONAL You can specify the number of words in octal. NOTATIONS 3-87 FIELD TEST /START FORMAT /START:symbol /START:address /START symbol is thirty-bit octal address or a symbol. FUNCTION Specifies the start address for the loaded program, and prevents replacement by any start addresses found in later modules. The /START switch without an argument disable a previously given /NOSTART switch. LINK starts a program using a TOPS-10 style entry vector if the entry length vector is zero. LINK starts a program using a TOPS-20 style entry vector: o if the program contains nonzero sections and the length of the entry vector is not specified o if the length of the entry vector is 1 o if /NOJOBDAT equals 1 See the TOPS-20 Monitor Calls Reference Manual for more information on entry vectors. EXAMPLES @LINK<RET> *MAIN1/START:ENTRY1,MAIN2,MAIN3<RET> * Defines the start address as ENTRY1 in MAIN1, and prevents replacement of this start address by any others found in MAIN2 or MAIN3. OPTIONAL You can specify the start address in octal. NOTATIONS RELATED /NOSTART SWITCHES 3-88 FIELD TEST /SUPPRESS FORMAT /SUPPRESS:symbol Where symbol is a previously defined global symbol. FUNCTION Suppresses a previously defined global symbol. If the symbol is unknown, this switch has no effect. Use this switch if the same global symbol is defined in two modules and you wish to suppress one of the definitions. LINK suppresses a defined global symbol by setting its definition to undefined in the global symbol table. LINK does not remove the symbol definition from the symbol table. As a result, the symbol table built for debugging contains both the old and new values of the symbol. Since LINK sets the symbol to undefined in the symbol table, it expects that a subsequent module will be loaded that contains a global definition for the symbol. If the symbol is not defined later, LINK issues the Undefined Global Symbol (LNKUGS) error. EXAMPLES In the following example, the ENTPTR symbol is used in both the TEST and TEST2 programs. First, TEST is loaded, and the value of ENTPTR is show using the /VALUE switch. @LINK<RET> *TEST<RET> */VALUE:ENTPTR<RET> [LNKVAL Symbol ENTPTR 140 defined] Next, ENTPTR's value is suppressed using /SUPPRESS and its current value is shown. Note that the value is now undefined. */SUPPRESS:ENTPTR<RET> */VALUE:ENTPTR<RET> [LNKVAL Symbol ENTPTR 0 undefined] Finally TEST2 is loaded and the value is shown again. *TEST2<RET> */VALUE:ENTPTR<RET> [LNKVAL Symbol ENTPTR 200 defined] In the next example, TEST and TEST2 are loaded, but ENTPTR is not suppressed after TEST is loaded. In this example, LINK issues the Multiply-defined global symbol warning. @LINK<RET> TEST<RET> 3-89 FIELD TEST TEST2<RET> %LNKMDS Multiply-defined global symbol ENTPTR Detected in module .MAIN from file TEST2.REL.1 Defined value = 140, this value = 200 * 3-90 FIELD TEST /SYFILE FORMAT filespec/SYFILE:keyword FUNCTION Requests LINK to output a symbol file to the given file specification, and sets the /SYMSEG:DEFAULT switch. If you previously specified /NOSYM, the /SYFILE switch has no effect. The symbol file contains global symbols sorted for DDT, and has a SYM file type. If you used the /LOCALS switch, this file also contains local symbols, module names, and module lengths. Keyword Description ALGOL Requests symbols in ALGOL's format. RADIX-50 Requests symbols in Radix-50 format. TRIPLET Requests symbols in triplet format. See Chapter 4 for symbol table formats. EXAMPLES @LINK<RET> *SYMBOL/SYFILE<RET> * Creates a symbol file called SYMBOL with the symbols in Radix-50 format and a file type of .SYM. OPTIONAL If you omit the keyword, Radix-50 is assumed. NOTATIONS 3-91 FIELD TEST /SYMSEG FORMAT /SYMSEG:keyword FUNCTION Allows you to specify where the symbol table is to be placed. Keyword Description DEFAULT Places the symbol table in the low segment, except for overlayed programs, in which case symbols are not loaded by default. HIGH Places the symbol table in the high segment. LOW Places the symbol table in the low segment. NONE Prevents loading of the symbol table. PSECT:name Places the symbol table at the end of the PSECT after allocating the patch space. EXAMPLES @LINK<RET> */SYMSEG:LOW<RET> * Places the symbol table in the program low segment. RELATED /LOCALS, /NOLOCALS SWITCHES 3-92 FIELD TEST /SYSLIB FORMAT /SYSLIB:keyword FUNCTION Forces searching of one or more system libraries immediately after you enter a carriage-return ending the command. LINK automatically searches a system library, by default, if code from the corresponding translator has been loaded. This search is performed after all the modules of the program are loaded. /SYSLIB forces this search to take place immediately rather than after all the program modules are loaded. After you specify a library with /SYSLIB, the library you specified is searched every time you load a module, until you use /NOSYSLIB to end searching of that library. The keywords and the libraries they specify are listed below. Keywords shown in bold indicate libraries supported by DIGITAL. Keyword Library ANY all ALGOL ALGLIB BCPL BCPLIB COBOL LIBOL or C74LIB FORTRAN FORLIB NELIAC LIBNEL PASCAL PASLIB SAIL SAILIB SIMULA SIMLIB EXAMPLES @LINK<RET> *MAIN/SYSLIB:COBOL<RET> *SUB1<RET> *SUB2/NOSYSLIB<RET> * OPTIONAL You can omit the keyword. LINK searches all libraries NOTATIONS for which corresponding code has been loaded. RELATED /NOSYSLIB SWITCHES 3-93 FIELD TEST /TEST FORMAT /TEST:keyword FUNCTION Loads the debugger indicated by keyword. Unlike the /DEBUG switch, /TEST causes execution to begin in the loaded program (not in the debugging module). This switch is useful if you expect the program to run successfully, but want the debugger available in case the program has errors. The /TEST switch turns on the /LOCALS switch for the remainder of the load. You can override this by using the /NOLOCAL switch, but the override lasts only during processing of the current command. Local symbols for the debugging module itself are never loaded. The keywords and the programs they load are listed below. Only those shown in bold are supported by DIGITAL. Keyword Debugger ALGDDT ALGDDT ALGOL ALGDDT COBDDT COBDDT COBOL COBDDT DDT DDT FAIL SDDT (SAIL debugger) FORDDT FORDDT FORTRAN FORDDT MACRO DDT PASCAL PASDDT PASDDT PASDDT SAIL SDDT (SAIL debugger) SDDT SDDT (SAIL debugger) SIMDDT SIMDDT SIMULA SIMDDT EXAMPLES @LINK<RET> *MYPROG/TEST:FORTRAN<RET> * Loads MYPROG and FORDDT. OPTIONAL If you give no keyword with /TEST, the default is either NOTATIONS DDT or the debugger specified by the /DDEBUG switch. You can abbreviate /TEST to /T. RELATED /DDEBUG, /DEBUG 3-94 FIELD TEST SWITCHES 3-95 FIELD TEST /UNDEFINED FORMAT /UNDEFINED FUNCTION Displays undefined global symbols on the terminal. An undefined global symbol is one that LINK has not yet resolved. You can use /UNDEFINED to get a list of undefined symbols, and then define them with the /DEFINE switch. EXAMPLES @LINK<RET> */UNDEFINED<RET> [LNKUGS 2 undefined global symbols] ALPHA 400123 IOTA 402017 */DEFINE:(ALPHA:591,IOTA:1)<RET> * Displays two undefined global symbols (ALPHA and IOTA), and defines a decimal value of 591 to ALPHA and a decimal value of 1 to IOTA. OPTIONAL You can abbreviate /UNDEFINE to /U. NOTATIONS RELATED /DEFINE, /VALUE SWITCHES 3-96 FIELD TEST /UPTO FORMAT /UPTO:address address is a thirty-bit octal address or a defined symbol. FUNCTION Sets an upper limit to which the symbol table can expand. EXAMPLES @LINK<RET> */UPTO:550000<RET> *FORPRO<RET> Defines a 550,000 upper limit for the FORTRAN symbol table. This switch overrides the default upper bound for the FORTOS symbol table. This might be used if FOROTS begins above 400000. RELATED /SYMSEG SWITCH 3-97 FIELD TEST /USERLIB FORMAT filespec/USERLIB:(keyword,...,keyword) FUNCTION Directs LINK to search the user library given in the file specification before searching system libraries. The keyword indicates that the given library is to be searched only if code from the corresponding translator was loaded. Keywords and their meanings are given below. Only those shown in bold are supported by DIGITAL. Keyword Library ALGOL ALGOL ANY This library BCPL BCPL COBOL COBOL FORTRAN FORTRAN NELIAC NELIAC PASCAL PASCAL SAIL SAIL SIMULA SIMULA EXAMPLES @LINK<RET> *MYFORL/USERLIB:FORTRAN<RET> * Directs LINK to search the user library MYFORL (before searching FORLIB) if any FORTRAN-compiled code is loaded. OPTIONAL You can omit the parentheses if only one keyword is given. NOTATIONS RELATED /NOUSERLIB, /SYSLIB SWITCHES 3-98 FIELD TEST /VALUE FORMAT /VALUE:(symbol,symbol,...) FUNCTION Displays the values of each specified global symbol on the terminal. LINK issues the LNKVAL message, giving the symbol, the symbol's current value, and symbol's status. Status is one of the following: defined The symbol and its value are known. undefined The symbol is known, but has no value. common The symbol is known and is defined as COMMON. unknown The symbol is not in the symbol table. EXAMPLES @LINK<RET> *TEST<RET> *SPEXP<RET> *SPEX2<RET> */VALUE:(SPEX2,DPEXP,X2,X)<RET> [LNKVAL SPEX2 460 DEFINED] [LNKVAL DPEXP 221 UNDEFINED] [LNKVAL X2 324 COMMON, LENGTH 1 (DECIMAL)] [LNKVAL X UNKNOWN] * OPTIONAL You can omit the parentheses if only one NOTATIONS symbol is given. 3-99 FIELD TEST /VERBOSITY FORMAT /VERBOSITY:keyword FUNCTION Specifies the length of LINK messages. This switch is similar to /MESSAGE. Both switches determine message length, but use different keywords and output. Keyword Description SHORT Output only the 6-letter code. MEDIUM Output the 6-letter code and the medium-length message (usually one line or less). LONG Output the 6-letter code, the medium-length message, and the long message (usually several lines). For a few messages no long message exists; in these cases the LONG specification is ignored. EXAMPLES In all the examples that follow an incorrect file specification (ABC:WRONG) is used. In the following example, only the 6-letter code and instructions for correcting the error is returned. @LINK<RET> */VERBOSITY:SHORT *ABC:WRONG<RET> %LNKNED [ Please retype the incorrect parts of the file specification] * In the next example, a medium length message is returned. @LINK<RET> */VERBOSITY:MEDIUM<RET> *ABC:WRONG<RET> %LNKNED Non-existent device ABC: [ Please retype the incorrect parts of the file specification] * In this example, a longer explanation is returned. @LINK<RET> /VERBOSITY:LONG<RET> 3-100 FIELD TEST *ABC:WRONG<RET> %LNKNED Non-existent device ABC: You gave a device that does not exist on this system. Correct your input files and reload. [ Please retype the incorrect parts of the file specification] * RELATED /ERRORLEVEL, /MESSAGE SWITCHES 3-101 FIELD TEST /VERSION FORMAT /VERSION:ic(j)-k i = an octal number between 0 and 777 inclusive. c = one or two alphabetic characters. j = an octal number between 0 and 777777 inclusive. k = an octal number between 0 and 7 inclusive. FUNCTION Allows you to specify a version number. /VERSION changes the value of .JBVER (location 137 in JOBDAT) and .JBHVR in the vestigial job data area. If the switch is appended to an input specification, or with no specification, the version number is entered in .JBVER and .JBHVR (location 4 in the vestigial job data area). There are four parts to the version arguments, given as i, c, j, and k above. The first number (i) gives the major version number. The character (c) gives the minor version. The second number (j) gives the edit number. The last number (k), which must be preceded by a hyphen (-), shows which group last modified the file (0 = DIGITAL development, 1 = other DIGITAL personnel, 2-7 = customer use). EXAMPLES @LINK<RET> */VERSION:3A(461)-0<RET> * Sets the version so that the major version is 3, the minor version is A, the edit number is 461, and the last group to modify the file was DIGITAL development. OPTIONAL You can abbreviate /VERSION to /V. NOTATIONS 3-102 FIELD TEST 3.5 EXAMPLES USING LINK DIRECTLY For the following examples, the loaded program is a FORTRAN program called MYPROG that writes the following: This is written by MYPROG. The following example shows an interactive execution of the program using a LINK command. After running LINK, the command calls for MYPROG to be loaded. Then the string MYLIB/USERLIB requests searching of the library DSK:MYLIB.REL at the end of loading. The /NOSYSLIB switch prevents searching the default system library. Finally the /EXECUTE switch directs LINK to execute the loaded program, and the /GO switch tells LINK that there are no more commands. @LINK<RET> *MYPROG,MYLIB/USERLIB/NOSYSLIB/EXECUTE/GO<RET> [LNKXCT MYPROG execution] This is written by MYPROG CPU time 0.21 Elapsed time 1.31 @ The example below shows how to use LINK to load the program exactly as above, except that the program is executed under the control of a debugger (FORDDT for FORTRAN programs): @LINK<RET> */DEBUG:FORDDT MYPROG,MYLIB/USERLIB/NOSYSLIB/GO<RET> [LNKDEB FORDDT execution] STARTING FORTRAN DDT >>START<RET> This is written by MYPROG CPU time 0.17 Elapsed time 0.46 @ 3-103 4-1 CHAPTER 4 OUTPUT FROM LINK The primary output from LINK is the executable program formed from input modules and switches. During its processing, LINK gives errors, warnings, and informational messages. At your option, LINK can generate any of several files. 4.1 THE EXECUTABLE PROGRAM The executable program that LINK generates consists mostly of data and machine instructions from your object modules. In the executable program, all relocatable addresses have been resolved to absolute addresses, and the values of all global references have been resolved. You have several options for loading the program, depending on the purpose of the load. Those options are: o Execute the program. To do this, include the /EXECUTE switch any place before the /GO switch. LINK passes control to your program for execution. o Execute the program under the control of a debugger. To do this, use the /DEBUG switch before the first input file specification. o Execute the program and debug it after execution. To do this, use the /TEST and /EXECUTE switches before the first input file specification. After execution, type DEBUG to the system to enter the debugger. o Save the executable as a sharable save file or an EXE file. To do this, use the /SAVE switch. See Section 4.2. 4-1 FIELD TEST 4.2 OUTPUT FILES At your option, LINK can produce any of the following output files: o Sharable save file. o Log file. o Map file. o Symbol file. o Plotter file (see Section 5.1). o Overlay file (see Section 5.1). 4.2.1 Sharable Save Files The sharable file, save file or EXE file, is a copy of the completed executable program generated by LINK. You can create a sharable save file by supplying the /SAVE switch before the /GO switch when you are loading the program with direct commands to LINK. The sharable save file retains the same file name as the source program, with a file type of EXE. Alternatively, you can type the file specification, followed by /SAVE, and the sharable save file is written to the file you specified. If you load the program with the executable LOAD TOPS-20 command, you may then save the sharable save file by typing the TOPS-20 SAVE command. You can run the sharable save file later, without running LINK, by using the TOPS-20 RUN command, or the two TOPS-20 GET and START commands. The following section describes the internal format of the sharable save file. 4.2.1.1 Format of Sharable Save Files - A sharable save file is divided into two main areas: the directory area contains information about the structure of the file, and the data area contains the data of the file. 4-2 FIELD TEST The following diagram illustrates the general format of a sharable save file: Directory ======================== Area: ! Directory Section ! ! ! ! ! ------------------------ ! Entry Vector Section ! ------------------------ ! PDV ! ! Section ! ------------------------ ! Terminating Section ! ======================== Data Area: ! Data Section ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ======================== NOTE The PDV area is useful only with TOPS-20 version 5 and later monitors. Earlier monitors ignore this area. See Chapter 7 for more information on PDVs. The directory area of the sharable save file has four distinct sections: the directory section, the entry vector section, the PDV section, and the terminating section. The size of the directory area depends on the access characteristics of the pages in the data area of the save file. Each of the sections in the directory area begins with a header word containing its identifier code in the left half and its length in the right half. Each section is described in the following paragraphs. The directory section is the first of the four sections and describes groups of contiguous pages that have identical access. The length of this section varies according to the number of groups that can be generated from the data portion of the save file. The more data pages that can be combined into a single group, the fewer groups required, and the smaller the directory section. The format of the directory section is as follows: 4-3 FIELD TEST 0 8 9 17 18 35 !=======================================================! ! Identifier code ! Number of words ! ! 1776 ! (including this word) ! ! ! in directory section ! !=======================================================! ! Access ! Page number in file, or 0 if group ! ! bits ! of pages is all zero ! !=======================================================! ! Repeat ! Page number in the process ! ! count ! ! !=======================================================! . . . !=======================================================! ! Access bits ! Page number in the file ! !=======================================================! ! Repeat count ! Page number in the process ! !=======================================================! PSECT attributes are used to set the access bits. Refer to the description of Block Type 24 in Appendix A. The bits currently defined in the directory section are: B1 The process pages in this group are sharable B2 The process pages in this group are writable The remaining access bits in the directory section are zero. The repeat count is the number (minus 1) of consecutive pages in the group described by the word pair. Pages are considered to be in a group when the following three conditions are met: 1. The pages are contiguous. 2. The pages have the same access. 3. The pages are allocated but not loaded. A group of all zero pages is indicated by a file page number of 0. The word pairs are repeated for each group of pages in the address space. The entry vector section follows the directory section and points to the first word of the entry vector and gives the length of the vector. 0 17 18 35 !=======================================================! 4-4 FIELD TEST ! Identifier code ! Number of words ! ! 1775 ! (including this word) ! ! ! in entry vector section ! !=======================================================! ! 254000 ! !=======================================================! ! Starting Address ! !=======================================================! This format is the default. However, if you make special provisions in your program, the format becomes the following. (Refer to the description of Block Type 7 in Appendix A and the description of the SFRKV% JSYS in the TOPS-20 Monitor Calls Reference Manual for further information.) 0 17 18 35 !=======================================================! ! Identifier code ! Number of words ! ! 1775 ! (including this word) ! ! ! in entry vector section ! !=======================================================! ! Number of words in entry vector ! !=======================================================! ! Address of entry vector ! !=======================================================! The data for this section is the address of the entry vector. 4-5 FIELD TEST The PDV section may follow the entry vector section and contains the addresses at which the PDVs begin (PDVAs). This section is optional and only appears for an extended addressing program, if the program declared a PDV, or if /NOJOBDAT is used causing LINK to create a PDV. The format of the PDV section is as follows: 0 17 18 35 !=======================================================! ! Identifier code ! Number of words ! ! 1774 ! (including this word) ! ! ! in data vector section ! !=======================================================! ! Address of PDV 1 ! !=======================================================! ! Address of PDV 2 ! !=======================================================! . . . !=======================================================! ! Address of PDV n ! !=======================================================! For information on the format of a PDV, see Chapter 7. The terminating section, called the end section, always immediately precedes the data section. The format of the terminating section is the following: !=======================================================! ! Identifier code ! ! ! 1777 ! 1 ! !=======================================================! The data area follows the terminating section, beginning at the next page boundary. 4.2.2 LOG Files A LOG file, .LOG, is generated if you use the /LOG switch. LINK then writes most of its messages into the specified file. You can control the kinds of messages entered in the LOG file by using the /LOGLEVEL switch. For an example of a LOG file, see Section 5.1. 4-6 FIELD TEST 4.2.3 Map files The map file, .MAP, is generated if you use the /MAP switch. LINK constructs a symbol map in this file. The kinds of symbols included depends on your use of the /CONTENTS, /LOCALS, /NOLOCALS, /NOINITIAL, and /NOSYMBOLS switches. For an example of a map file, see Section 5.1. For a list of /MAP options, refer to Chapter 3. 4.2.4 Symbol Files The symbol file, SYM file, is generated if you use the /SYFILE switch. This file contains all global symbols, module names, and module lengths, and, if you used the /LOCALS switch, all local symbols. The format of the symbol file is defined using /SYFILE:ALGOL, /SYFILE:RADIX-50, or /SYFILE:TRIPLET. /SYSFILE:ALGOL creates a symbol file where the first word of the table is XWD 1044, count. The remaining words are copied out of Type 1044 REL blocks. If an ALGOL main program has been loaded, then /SYFILE:ALGOL becomes the default. /SYFILE:RADIX-50 creates a symbol file where the first word of the table is negative. Each symbol requires two words in the table: the first is the symbol name in Radix-50 format; the second is the symbol value. This is the default if just /SYFILE is used. /SYFILE:TRIPLET creates internal format used by LINK. 4.3 MESSAGES During its processing, LINK issues messages about what it is doing, and about errors or possible errors it finds. LINK also responds to query switches such as /COUNTERS, /ENTRY, /MISSING, /REQUEST, and /UNDEFINED. Each LINK message has an assigned level and an assigned severity. See Appendix B for the level and severity of each message. The level of a message determines whether the message is output to your terminal, the log file, or both. You can control this output by using the /ERRORLEVEL switch for the terminal and the /LOGLEVEL switch for the log file. LINK's defaults are /ERRORLEVEL:8 and /LOGLEVEL:8. 4-7 FIELD TEST Responses to query switches and messages that require you to do something immediately are never output to the LOG file. For example, if you use the /UNDEFINE switch, LINK responds with the LNKUGS message; this message is output to the terminal but not to the log file. The severity of a message determines whether LINK considers the message fatal (that is, whether the job is terminated). You can set the fatal severity with the /SEVERITY switch. The default severities are 24 for interactive jobs and 16 for batch jobs. For both terminal messages and log file entries, LINK can issue short, medium, or long messages, depending on your use of the /VERBOSITY switch. For /VERBOSITY:SHORT, LINK gives only a 6-letter code; for /VERBOSITY:MEDIUM, LINK gives the code and a medium-length message; for /VERBOSITY:LONG, LINK gives the code, a medium-length message, and a long message. The /MESSAGE switch can also be used to specify message length. See Chapter 3 for more information on /MESSAGE and the other switches discussed in this section. Appendix B gives each 6-letter message code, its level and severity, and its medium-length and long messages. 4-8 CHAPTER 5 OVERLAYS If your loaded program is too large to execute in one piece, you may be able to define an overlay structure for it. This permits the system to execute the program with only some parts at a time in your virtual address space. The overlay handler removes and reads in parts of the program, according to the overlay structure. NOTE You only need an overlay structure if your program is too large for your virtual address space. If the program can fit in your virtual space, you should not define an overlay structure for it; the monitor's page swapping facility is faster than overlay execution. 5.1 OVERLAY STRUCTURES An overlay program has a tree structure. (The tree is usually pictured upside down.) The tree is made up of links, each containing one or more program modules. These links are connected by paths. Using LINK switches, you define each link and each path. At the top of the (upside down) tree is the root link, which must contain the main program. First-level links are below the root link; each first-level link is connected to the root link by one path. Second-level links are below the first-level links, and each is connected by a path to exactly one first-level link. A link at level n is connected by a path to exactly one link at level n-1. Notice that a link can have more than one downward path (to successor links), but only one upward path (to predecessor links). Figure 5-1 shows a diagram of an overlay structure with 5 links. The root link is TEST; the first-level links are LEFT and RIGHT; the second-level links are LEFT1 and LEFT2. 5-1 FIELD TEST Art work number: MRS-2595-83 Figure 5-1: Example of an Overlay Structure Defining an overlay structure allows your program to execute in a smaller space. This is because the code in a given link is allowed to make reference to memory only in links along a direct upward or downward path. In the structure in Figure 5-1, the link LEFT can reference memory in itself, in the root link (TEST), or in its successor links LEFT1 and LEFT2. More generally, a link can reference memory in any link that is vertically connected to it. Referencing memory in any other link is not allowed. For example, a path from LEFT1 to LEFT2 is not a direct upward or downward path. Because of this restriction on memory references, only one complete vertical path (at most) is required in the virtual address space at any one time. The remaining links can be stored on disk while they are not needed. 5.1.1 Defining Overlay Structures LINK has a family of overlay-related switches. These switches are summarized in Table 5-1 below and described in detail in Section 3.2.2. In addition to the overlay-related switches, you can use other LINK switches such as /ERRORLEVEL or /LOG when loading overlays. Table 5-1: Summary of LINK's Overlay-Related Switches Switch Description 5-2 FIELD TEST Table 5-1 (cont.) Switch Description /ARSIZE Sets the size of the overlay handler's table of multiply-defined global symbols. /LINK Closes an overlay link. /MAXNODE Specifies the number of links to be defined when the overlayed program requires more than 256 links. /NODE Opens an overlay link. /NOREQUEST Deletes references to links from LINK's overhead tables when loading overlay programs. /OVERLAY Initiates construction of an overlay structure. /PLOT Directs LINK to output a tree diagram of your overlay structure. /PLTTYP Specifies the type of plot file to be generated by the /PLOT switch. The following example shows commands for defining the overlay diagrammed in Figure 5-1. Each command is followed by an explanation. *TEST/LOG/LOGLEVEL:2 Defines the log file for the overlay. TEST/LOG specifies that the file is named TEST.LOG. The /LOGLEVEL:2 switch directs that messages of level 2 and above be entered in the log file. */ERRORLEVEL:5 Directs LINK to return messages of level 5 and above to the terminal. *TEST/OVERLAY Tells LINK that an overlay structure is to be defined, and that the file for the overlay is to be TEST.OVL. *TEST/MAP Defines the to contain symbol maps for each link. *LPT:TEST/PLOT Directs that a tree diagram of the overlay links be printed on the line printer. 5-3 FIELD TEST *OVL0,OVL1/LINK:TEST Loads the OVL0.REL and OVL1.REL files into the root link. The /LINK:TEST switch tells LINK that no more modules are to be in the root link, and that the link name is TEST. */NODE:TEST OVL2/LINK:LEFT Defines a link named LEFT. /NODE:TEST tells LINK that the link being defined (LEFT) is to be an immediate successor to TEST, the root link. OVL2/LINK:LEFT loads the OVL2.REL file, ends the link, and names it LEFT. */NODE:LEFT OVL5/LINK:LEFT1 Defines a link named LEFT1. /NODE:LEFT tells LINK that the link being defined (LINK1) is an immediate successor to LEFT. OVL5/LINK:LEFT1 loads the OVL5.REL file, ends the link, and names it LEFT1. */NODE:LEFT OVL6/LINK:LEFT2 Defines another immediate successor to LEFT named LEFT2. */NODE:TEST OVL3,OVL4/LINK:RIGHT Defines the last link, RIGHT. /NODE:TEST defines RIGHT as an immediate successor to TEST, loads the OVL3.REL and OVL4.REL files, and names the link RIGHT. *TEST/SAVE Directs LINK to create the saved file TEST.EXE. */EXECUTE/GO Specifies that the loaded program (TEST) is to be executed, and that all commands to LINK are completed. This process also produced an executable file TEST.EXE, which can be run using the RUN system command. However, to run the program, the file TEST.OVL must be present, because it provides the code for the links. 5.1.2 An Overlay Example The following pages show samples of the files used in the previous example. 5-4 FIELD TEST 5.1.2.1 Source Files - Copies of the FORTRAN source files used in the overlay are displayed on the terminal using the TOPS-20 TYPE command. @TYPE OVL0.FOR<RET> CTHIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED C OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE. C CCOPYRIGHT (C) DIGITAL EQUIPMENT CORPORATION 1982, 1983 C Simple overlay tests C OVL0 C / \ C OVL2A OVL4 C / \ \ C OVL5 OVL6 OVL1 C \ / C OVL2B OVL3 IMPLICIT DOUBLE PRECISION (D) IMPLICIT COMPLEX (C) IMPLICIT INTEGER (A) TYPE 1 1 FORMAT ('1','Execution begins in main program OVL0') TYPE 11 11 FORMAT (1X,'OVL0 CALLS OVL2A') IVAR=0 CALL OVL2A(IVAR) TYPE 2 2 FORMAT (/1X,'RETURN TO OVL0') IF (IVAR.NE.1) TYPE 100 100 FORMAT(' ?Error. Value not returned from OVL2A') TYPE 21 21 FORMAT (1X,'OVL0 CALLS OVL4') NUMB=0 CALL OVL4(NUMB) TYPE 2 IF (IVAR.NE.1) TYPE 200 200 FORMAT(' ?Error. Value not returned from NUMB') TYPE 3 3 FORMAT (/1X,'Execution ends in main program OVL0'//) STOP END 5-5 FIELD TEST @TYPE OVL1.FOR SUBROUTINE OVL1(IVAR) C THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED C OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE. C C COPYRIGHT (C) DIGITAL EQUIPMENT CORPORATION 1982, 1983 IMPLICIT DOUBLE PRECISION (D) IMPLICIT COMPLEX (C) IMPLICIT INTEGER (A) TYPE 1 1 FORMAT (30x,' OVL1 CALLS OVL3'/) NUM=0 CALL OVL3(NUM) TYPE 2 2 FORMAT (30x,' RETURN TO OVL1'/) IF (NUM.NE.1) TYPE 100 100 FORMAT(' ?Error. Variable not returned from OVL3.') IVAR=1 RETURN END @TYPE OVL2.FOR SUBROUTINE OVL2A(ARG) C THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED C OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE. C C COPYRIGHT (C) DIGITAL EQUIPMENT CORPORATION 1982, 1983 IMPLICIT DOUBLE PRECISION (D) IMPLICIT COMPLEX (C) IMPLICIT INTEGER (A) INTEGER OVL6 TYPE 1 1 FORMAT (1X,' OVL2A CALLS OVL5'/) ARG=0 CALL OVL5(ARG) TYPE 2 2 FORMAT (1X,' RETURN TO OVL2A'/) IF (ARG.NE.1) TYPE 100 100 FORMAT(' ?Error. Value not returned from OVL5') 5-6 FIELD TEST TYPE 3 3 FORMAT (1X,' OVL2A CALLS OVL6'/) NUM=0 NUM=OVL6(NUM) TYPE 2 IF (NUM.NE.1) TYPE 300 300 FORMAT(' ?Error. Value not returned from OVL6') ARG=1 !Return value RETURN END SUBROUTINE OVL2B IMPLICIT DOUBLE PRECISION (D) IMPLICIT COMPLEX (C) IMPLICIT INTEGER (A) TYPE 1 1 FORMAT (/1X,' OVL2B DOESN''T CALL ANYTHING') RETURN END @TYPE OVL3.FOR SUBROUTINE OVL3(IVAR) C THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED C OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE. C C COPYRIGHT (C) DIGITAL EQUIPMENT CORPORATION 1982, 1983 IMPLICIT DOUBLE PRECISION (D) IMPLICIT COMPLEX (C) IMPLICIT INTEGER (A) IVAR=1 !Got here! TYPE 1 1 FORMAT (30x,' OVL3 DOESN''T CALL ANYTHING'/) RETURN END @TYPE OVL4.FOR SUBROUTINE OVL4(ARGU) C THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED 5-7 FIELD TEST C OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE. C C COPYRIGHT (C) DIGITAL EQUIPMENT CORPORATION 1982, 1982 IMPLICIT DOUBLE PRECISION (D) IMPLICIT COMPLEX (C) IMPLICIT INTEGER (A) TYPE 1 1 FORMAT (30x,' OVL4 CALLS OVL1') NUM=0 CALL OVL1(NUM) IF (NUM.NE.1) TYPE 100 100 FORMAT(' ?Error. Value not returned from OVL1') TYPE 2 2 FORMAT (30x,' RETURN TO OVL4') ARGU=1 RETURN END @TYPE OVL5.FOR SUBROUTINE OVL5(NUM) C THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED C OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE. C C COPYRIGHT (C) DIGITAL EQUIPMENT CORPORATION 1982, 1983 IMPLICIT DOUBLE PRECISION (D) IMPLICIT COMPLEX (C) IMPLICIT INTEGER (A) COMMON C C=(1,1) C=C**C TYPE 1 1 FORMAT (30x,' OVL5 CALLS CEXP3.'/) NUM=1 RETURN END @TYPE OVL6.FOR INTEGER FUNCTION OVL6(ARG) 5-8 FIELD TEST C THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED C OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE. C C COPYRIGHT (C) DIGITAL EQUIPMENT CORPORATION 1982, 1983 IMPLICIT DOUBLE PRECISION (D) IMPLICIT COMPLEX (C) IMPLICIT INTEGER (A) TYPE 1 1 FORMAT (30x,' OVL6 CALLS OVL2B'/) NUM=0 CALL OVL2B(NUM) TYPE 2 2 FORMAT (30x,' RETURN TO OVL6'/) IF (NUM .NE. 0) TYPE 100 100 FORMAT(' ?Error. Value not returned from OVL2A') OVL6=1 RETURN END 5.1.2.2 Source File Compilation - Source files are compiled using the TOPS-20 COMPILE command. @compile ovl0,ovl1,ovl2,ovl3,ovl4,ovl5,ovl6 FORTRAN: OVL0 OVL0 FORTRAN: OVL1 OVL1 FORTRAN: OVL2 OVL2A OVL2B FORTRAN: OVL3 OVL3 FORTRAN: OVL4 OVL4 FORTRAN: OVL5 OVL5 FORTRAN: OVL6 OVL6 5.1.2.3 Interactive use of LINK - LINK is run and used to define and execute the overlay. @LINK TEST/LOG/LOGLEVEL:5 /ERRORLEVEL:5 5-9 FIELD TEST TEST/OVERLAY TEST/MAP LPT:TEST/PLOT OVL0,OVL1/LINK:TEST [LNKLMN Loading module OVL0 from file OVL0.REL.1] [LNKLMN Loading module OVL1 from file OVL1.REL.1] [LNKLMN Loading module OVRLAY from file SYS:OVRLAY.REL.10] [LNKLMN Loading module FORHST from file SYS:FORLIB.REL.1] [LNKLMN Loading module FORSHR from file SYS:FORLIB.REL.1] [LNKLMN Loading module FORGET from file SYS:FORLIB.REL.1] [LNKLMN Loading module FDBDUM from file SYS:FORLIB.REL.1] [LNKLMN Loading module KSORT from file SYS:FORLIB.REL.1] [LNKLMN Loading module FORMSL from file SYS:FORLIB.REL.1] [LNKLMN Loading module FORPSE from file SYS:FORLIB.REL.1] [LNKELN End of link number 0 name TEST] NODE:TEST OVL2/LINK:LEFT [LNKLMN Loading module OVL2A from file OVL2.REL.1] [LNKLMN Loading module OVL2B from file OVL2.REL.1] [LNKELN End of link number 1 name LEFT] /NODE:LEFT OVL5/LINK:LEFT1 [LNKLMN Loading module OVL5 from file OVL5.REL.1] [LNKLMN Loading module CEXP3. from file SYS:FORLIB.REL.1] [LNKLMN Loading module CDLOG from file SYS:FORLIB.REL.1] [LNKLMN Loading module CGLOG from file SYS:FORLIB.REL.1] [LNKLMN Loading module CGLOG from file SYS:FORLIB.REL.1] [LNKLMN Loading module GATAN. from file SYS:FORLIB.REL.1] [LNKLMN Loading module GLOG. from file SYS:FORLIB.REL.1] [LNKLMN Loading module DATAN. from file SYS:FORLIB.REL.1] [LNKLMN Loading module DEXP. from file SYS:FORLIB.REL.1] [LNKLMN Loading module DLOG. from file SYS:FORLIB.REL.1] [LNKLMN Loading module DSIN. from file SYS:FORLIB.REL.1] [LNKLMN Loading module DFL.4 from file SYS:FORLIB.REL.1] [LNKLMN Loading module EXP2. from file SYS:FORLIB.REL.1] [LNKLMN Loading module MTHMSG from file SYS:FORLIB.REL.1] [LNKELN End of link number 2 name LEFT1] /NODE:LEFT OVL6/LINK:LEFT2 [LNKLMN Loading module OVL6 from file OVL6.REL.1] [LNKELN End of link number 3 name LEFT2] /NODE:TEST OVL3,OVL4/LINK:RIGHT [LNKLMN Loading module OVL3 from file OVL3.REL.1] [LNKLMN Loading module OVL4 from file OVL4.REL.1] [LNKELN End of link number 4 name RIGHT] TEST/SAVE /EXECUTE/GO [LNKXCT OVL0 execution] Execution begins in main program OVL0 OVL0 CALLS OVL2A OVL2A CALLS OVL5 OVL5 CALLS CEXP3. 5-10 FIELD TEST RETURN TO OVL2A OVL2A CALLS OVL6 OVL6 CALLS OVL2B OVL2B DOESN'T CALL ANYTHING RETURN TO OVL6 RETURN TO OVL2A RETURN TO OVL0 OVL0 CALLS OVL4 OVL4 CALLS OVL1 OVL1 CALLS OVL3 OVL3 DOESN'T CALL ANYTHING RETURN TO OVL1 RETURN TO OVL4 RETURN TO OVL0 Execution ends in main program OVL0 CPU time 0.85 Elapsed time 11.85 5.1.2.4 TEST.LOG - LINK generated the following TEST.LOG file. It shows the log messages issued during the load. 15:30:48 6 1 LMN Loading module OVL0 from file OVL0.REL.1 15:30:49 6 1 LMN Loading module OVL1 from file OVL1.REL.1 15:30:50 6 1 LMN Loading module OVRLAY from file SYS:OVRLAY.REL.10 15:30:52 6 1 LMN Loading module FORHST from file SYS:FORLIB.REL.1 15:30:52 6 1 LMN Loading module FORSHR from file SYS:FORLIB.REL.1 15:30:52 6 1 LMN Loading module FORGET from file SYS:FORLIB.REL.1 15:30:53 6 1 LMN Loading module FDBDUM from file SYS:FORLIB.REL.1 15:30:53 6 1 LMN Loading module KSORT from file SYS:FORLIB.REL.1 15:30:54 6 1 LMN Loading module FORMSL from file SYS:FORLIB.REL.1 15:30:54 6 1 LMN Loading module FORPSE from file SYS:FORLIB.REL.1 15:31:23 7 1 ELN End of link number 0 name TEST 15:31:42 6 1 LMN Loading module OVL2A from file OVL2.REL.1 15:31:42 6 1 LMN Loading module OVL2B from file OVL2.REL.1 15:31:48 7 1 ELN End of link number 1 name LEFT 5-11 FIELD TEST 15:32:04 6 1 LMN Loading module OVL5 from file OVL5.REL.1 15:32:06 6 1 LMN Loading module CEXP3. from file SYS:FORLIB.REL.1 15:32:06 6 1 LMN Loading module CDLOG from file SYS:FORLIB.REL.1 15:32:07 6 1 LMN Loading module CGLOG from file SYS:FORLIB.REL.1 15:32:07 6 1 LMN Loading module CGLOG from file SYS:FORLIB.REL.1 15:32:07 6 1 LMN Loading module GATAN. from file SYS:FORLIB.REL.1 15:32:08 6 1 LMN Loading module GLOG. from file SYS:FORLIB.REL.1 15:32:09 6 1 LMN Loading module DATAN. from file SYS:FORLIB.REL.1 15:32:09 6 1 LMN Loading module DEXP. from file SYS:FORLIB.REL.1 15:32:09 6 1 LMN Loading module DLOG. from file SYS:FORLIB.REL.1 15:32:09 6 1 LMN Loading module DSIN. from file SYS:FORLIB.REL.1 15:32:10 6 1 LMN Loading module DFL.4 from file SYS:FORLIB.REL.1 15:32:10 6 1 LMN Loading module EXP2. from file SYS:FORLIB.REL.1 15:32:10 6 1 LMN Loading module MTHMSG from file SYS:FORLIB.REL.1 15:32:12 7 1 ELN End of link number 2 name LEFT1 15:32:36 6 1 LMN Loading module OVL6 from file OVL6.REL.1 15:32:37 7 1 ELN End of link number 3 name LEFT2 15:32:55 6 1 LMN Loading module OVL3 from file OVL3.REL.1 15:32:56 6 1 LMN Loading module OVL4 from file OVL4.REL.1 15:32:56 7 1 ELN End of link number 4 name RIGHT 5.1.2.5 TEST.MAP - LINK generated the following TEST.MAP file. It shows symbol maps for the overlay. LINK symbol map of OVL0 page 1 Produced by LINK version 6(2353) on 11-Feb-85 at 11:53:18 Overlay no. 0 name TEST Overlay is absolute Low segment starts at 0 ends at 10243 length 10244 = 9P Control Block address is 10202, length 32 (octal), 26. (decimal) 348 words free in Low segment 188 Global symbols loaded, therefore min. hash size is 209 Start address is 235, located in program OVL0 ************* JOBDAT-INITIAL-SYMBOLS %JOBDT 43200000454 Global Absolute Suppressed .JB41 41 Global Absolute .JBAPR 125 Global Absolute .JBBLT 45 Global Absolute .JBCHN 131 Global Absolute .JBCNI 126 Global Absolute .JBCOR 133 Global Absolute .JBCST 136 Global Absolute .JBDA 140 Global Absolute .JBDDT 74 Global Absolute .JBEDV 112 Global Absolute .JBERR 42 Global Absolute .JBFF 121 Global Absolute .JBH41 1 Global Absolute Suppressed .JBHCR 2 Global Absolute Suppressed .JBHDA 10 Global Absolute Suppressed .JBHGA 7 Global Absolute Suppressed .JBHGH 400000 Global Absolute Suppressed .JBHNM 5 Global Absolute Suppressed .JBHRL 115 Global Absolute 5-12 FIELD TEST .JBHRN 3 Global Absolute Suppressed .JBHSA 0 Global Absolute Suppressed .JBHSM 6 Global Absolute Suppressed .JBHVR 4 Global Absolute Suppressed .JBINT 134 Global Absolute .JBOPC 130 Global Absolute .JBOPS 135 Global Absolute .JBOVL 131 Global Absolute .JBPFH 123 Global Absolute .JBPFI 74 Global Absolute .JBREL 44 Global Absolute .JBREN 124 Global Absolute .JBSA 120 Global Absolute .JBSYM 116 Global Absolute .JBTPC 127 Global Absolute .JBUSY 117 Global Absolute .JBUUO 40 Global Absolute .JBVER 137 Global Absolute ************* OVL0 from DSK:OVL0.REL created by FORTRAN on 11-Feb-85 at 11:52:27 Low segment starts at 140 ends at 234 length 75 (octal), 61. (decimal) High segment starts at 235 ends at 345 length 111 (octal), 73. (decimal) MAIN. 235 Global Relocatable OVL0 235 Entry Relocatable ************* OVL1 from DSK:OVL1.REL created by FORTRAN on 11-Feb-85 at 11:52:28 Low segment starts at 346 ends at 377 length 32 (octal), 26. (decimal) High segment starts at 400 ends at 442 length 43 (octal), 35. (decimal) OVL1 401 Entry Relocatable FOROT% 400010 Global Absolute ************* OVRLAY from SYS:OVRLAY.REL created by MACRO on 25-Jan-85 at 5:25:39 Low segment starts at 4252 ends at 5245 length 774 (octal), 508. (decimal) High segment starts at 443 ends at 4150 length 3506 (octal), 1862. (decimal) LINK symbol map of OVL0 page 2 OVRLAY BOUT% 104000000051 Global Absolute CLOSF% 104000000022 Global Absolute CLROV. 2501 Entry Relocatable ERJMP 320700000000 Global Absolute ERSTR% 104000000011 Global Absolute GCVEC% 104000000300 Global Absolute GETOV. 2376 Entry Relocatable GJ%FOU 400000000000 Global Absolute Suppressed GJ%OLD 100000000000 Global Absolute Suppressed GJ%SHT 1000000 Global Absolute Suppressed GJ%TMP 10000000000 Global Absolute Suppressed GTJFN% 104000000020 Global Absolute HALTF% 104000000170 Global Absolute INIOV. 2354 Entry Relocatable JFNS% 104000000030 Global Absolute JS%DEV 300000000000 Global Absolute Suppressed JS%DIR 70000000000 Global Absolute Suppressed JS%NAM 7000000000 Global Absolute Suppressed JS%PAF 1 Global Absolute Suppressed LOGOV. 2520 Entry Relocatable OF%BSZ 770000000000 Global Absolute Suppressed OF%RD 200000 Global Absolute Suppressed OF%WR 100000 Global Absolute Suppressed OPENF% 104000000021 Global Absolute PA%EX 20000000000 Global Absolute Suppressed PA%PRV 200000000 Global Absolute Suppressed PBOUT% 104000000074 Global Absolute REMOV. 2412 Entry Relocatable RMAP% 104000000061 Global Absolute RPACS% 104000000057 Global Absolute RUNOV. 2430 Entry Relocatable RUNTM% 104000000015 Global Absolute SAVOV. 2454 Entry Relocatable SFPTR% 104000000027 Global Absolute 5-13 FIELD TEST SIN% 104000000052 Global Absolute SOUT% 104000000053 Global Absolute %OVRLA 501000212 Global Absolute Suppressed .FHJOB 777773 Global Absolute Suppressed .FHSLF 400000 Global Absolute Suppressed .GJEXT 5 Global Absolute Suppressed .GJGEN 0 Global Absolute Suppressed .JSAOF 1 Global Absolute Suppressed .NULIO 377777 Global Absolute Suppressed .OVRLA 4273 Entry Relocatable .OVRLO 4314 Global Relocatable .OVRLU 3254 Entry Relocatable .OVRWA 4313 Global Relocatable ************* FORHST from SYS:FORLIB.REL created by MACRO on 25-Jan-85 at 5:24:29 Zero length module ************* FORSHR from SYS:FORLIB.REL created by MACRO on 25-Jan-85 at 5:24:29 Zero length module ************* FORGET from SYS:FORLIB.REL created by MACRO on 25-Jan-85 at 5:24:29 Low segment starts at 5725 ends at 7134 length 1210 (octal), 648. (decimal) High segment starts at 5246 ends at 5724 length 457 (octal), 303. (decimal) ABORT. 5603 Entry Relocatable ALCHN. 5557 Entry Relocatable ALCOR. 5553 Entry Relocatable CFIBF% 104000000100 Global Absolute CHRPT. 5725 Global Relocatable CLOSE. 5515 Entry Relocatable DEC. 5533 Entry Relocatable DECHN. 5561 Entry Relocatable DECOR. 5555 Entry Relocatable ENC. 5531 Entry Relocatable ERROR. 5511 Entry Relocatable ESOUT% 104000000313 Global Absolute EXIT. 5551 Entry Relocatable EXIT1. 5517 Entry Relocatable FDBMS. 5567 Entry Relocatable FIN. 5543 Entry Relocatable FIND. 5547 Entry Relocatable FORER. 5511 Entry Relocatable FOROP. 5573 Entry Relocatable FOROT$ 5610 Entry Relocatable FOROT. 5246 Entry Relocatable FUNCT. 5565 Entry Relocatable GET% 104000000200 Global Absolute LINK symbol map of OVL0 page 3 FORGET GEVEC% 104000000205 Global Absolute GJ%PHY 10000000 Global Absolute Suppressed GT%NOV 40000 Global Absolute Suppressed IFI. 5575 Entry Relocatable IFO. 5577 Entry Relocatable IN. 5521 Entry Relocatable INIT. 5507 Entry Relocatable INQ. 5571 Entry Relocatable IOLST. 5541 Entry Relocatable MTHER. 5601 Entry Relocatable MTOP. 5545 Entry Relocatable NLI. 5535 Entry Relocatable NLO. 5537 Entry Relocatable OPEN. 5513 Entry Relocatable OUT. 5523 Entry Relocatable PA%PEX 10000000000 Global Absolute Suppressed PM%CNT 400000000000 Global Absolute Suppressed PM%RD 100000000000 Global Absolute Suppressed PM%RWX 160000000000 Global Absolute Suppressed PM%WR 40000000000 Global Absolute Suppressed PMAP% 104000000056 Global Absolute PSOUT% 104000000076 Global Absolute RD%JFN 4000000000 Global Absolute Suppressed RD%TOP 200000000000 Global Absolute Suppressed 5-14 FIELD TEST RF%LNG 400000000000 Global Absolute Suppressed RFSTS% 104000000156 Global Absolute RTB. 5525 Entry Relocatable SEVEC% 104000000204 Global Absolute TEXTI% 104000000524 Global Absolute TRACE. 5563 Entry Relocatable WTB. 5527 Entry Relocatable .PRIIN 100 Global Absolute Suppressed .PRIOU 101 Global Absolute Suppressed .RFSFL 4 Global Absolute Suppressed ************* FDBDUM from SYS:FORLIB.REL created by MACRO on 25-Jan-85 at 5:24:29 High segment starts at 7135 ends at 7135 length 1 (octal), 1. (decimal) FDBMS% 7135 Global Relocatable KDBMS. 7135 Global Relocatable %DBSTP 7135 Entry Relocatable ************* KSORT from SYS:FORLIB.REL created by MACRO on 25-Jan-85 at 5:24:29 Low segment starts at 7152 ends at 7154 length 3 (octal), 3. (decimal) High segment starts at 7136 ends at 7151 length 14 (octal), 12. (decimal) KSORT. 7136 Entry Relocatable %PASRT 7154 Global Relocatable %SRTAD 7152 Global Relocatable ************* FORMSL from SYS:FORLIB.REL created by MACRO on 25-Jan-85 at 5:24:29 High segment starts at 7155 ends at 7714 length 540 (octal), 352. (decimal) F.AQS 7267 Entry Relocatable F.CFS 7360 Entry Relocatable F.CGP 7333 Entry Relocatable F.CGS 7367 Entry Relocatable F.CLE 7233 Entry Relocatable F.CPP 7376 Entry Relocatable F.CWU 7223 Entry Relocatable F.ICE 7242 Entry Relocatable F.IDU 7173 Entry Relocatable F.IJE 7424 Entry Relocatable F.IOE 7155 Entry Relocatable F.IPN 7405 Entry Relocatable F.MXD 7342 Entry Relocatable F.NCA 7260 Entry Relocatable F.NCS 7251 Entry Relocatable F.NOF 7213 Entry Relocatable F.NOR 7164 Entry Relocatable F.NSS 7351 Entry Relocatable F.SNH 7415 Entry Relocatable F.SRE 7311 Entry Relocatable F.SSE 7276 Entry Relocatable F.TMA 7324 Entry Relocatable F.UNO 7203 Entry Relocatable ************* LINK symbol map of OVL0 page 4 FORPSE from SYS:FORLIB.REL created by MACRO on 25-Jan-85 at 5:24:29 Low segment starts at 10121 ends at 10201 length 61 (octal), 49. (decimal) High segment starts at 7715 ends at 10120 length 204 (octal), 132. (decimal) PAUS. 7716 Entry Relocatable RFMOD% 104000000107 Global Absolute SFMOD% 104000000110 Global Absolute STOP. 7721 Entry Relocatable TT%OSP 400000000000 Global Absolute Suppressed 5-15 FIELD TEST ************* Index to LINK symbol map of OVL0 page 5 Name Page Name Page Name Page Name Page FDBDUM 3 FORMSL 3 KSORT 3 OVL1 1 FORGET 2 FORPSE 4 OVL0 1 OVRLAY 1 FORHST 2 FORSHR 2 LINK symbol map of OVL0 #1 page 6 Overlay no. 1 name LEFT Overlay is absolute Low segment starts at 14244 ends at 14501 length 236 = 1P Control Block address is 14440, length 30 (octal), 24. (decimal) Path is 0 190 words free in Low segment 6 Global symbols loaded, therefore min. hash size is 7 ************* OVL2A from DSK:OVL2.REL created by FORTRAN on 11-Feb-85 at 11:52:30 Low segment starts at 14244 ends at 14315 length 52 (octal), 42. (decimal) High segment starts at 14316 ends at 14412 length 75 (octal), 61. (decimal) OVL2A 14317 Entry Relocatable ************* OVL2B from DSK:OVL2.REL created by FORTRAN on 11-Feb-85 at 11:52:30 Low segment starts at 14413 ends at 14425 length 13 (octal), 11. (decimal) High segment starts at 14426 ends at 14437 length 12 (octal), 10. (decimal) OVL2B 14427 Entry Relocatable ************* LINK symbol map of OVL0 #2 page 7 Overlay no. 2 name LEFT1 Overlay is absolute Low segment starts at 14502 ends at 22675 length 6174 = 7P Control Block address is 22510, length 20 (octal), 16. (decimal) Path is 0, 1 66 words free in Low segment 53 Global symbols loaded, therefore min. hash size is 59 ************* 5-16 FIELD TEST OVL5 from DSK:OVL5.REL created by FORTRAN on 11-Feb-85 at 11:52:36 Low segment starts at 14502 ends at 14517 length 16 (octal), 14. (decimal) High segment starts at 14520 ends at 14547 length 30 (octal), 24. (decimal) .COMM. 14502 Common length 2. OVL5 14521 Entry Relocatable ************* CEXP3. from SYS:FORLIB.REL created by MACRO on 25-Jan-85 at 5:24:29 Low segment starts at 16062 ends at 16144 length 63 (octal), 51. (decimal) High segment starts at 14550 ends at 16061 length 1312 (octal), 714. (decimal) CEXP2. 14551 Entry Relocatable CEXP3. 14655 Entry Relocatable ************* CDLOG from SYS:FORLIB.REL created by MACRO on 25-Jan-85 at 5:24:29 Low segment starts at 16515 ends at 16544 length 30 (octal), 24. (decimal) High segment starts at 16145 ends at 16514 length 350 (octal), 232. (decimal) CDLOG 16146 Entry Relocatable ************* CGLOG from SYS:FORLIB.REL created by MACRO on 25-Jan-85 at 5:24:29 Zero length module ************* CGLOG from SYS:FORLIB.REL created by MACRO on 25-Jan-85 at 5:24:29 Low segment starts at 17112 ends at 17145 length 34 (octal), 28. (decimal) High segment starts at 16545 ends at 17111 length 345 (octal), 229. (decimal) CGLOG. 16546 Entry Relocatable ************* GATAN. from SYS:FORLIB.REL created by MACRO on 25-Jan-85 at 5:24:29 Low segment starts at 17715 ends at 17723 length 7 (octal), 7. (decimal) High segment starts at 17146 ends at 17714 length 547 (octal), 359. (decimal) GATAN. 17147 Entry Relocatable GATN2. 17242 Entry Relocatable ************* LINK symbol map of OVL0 #2 page 8 GLOG. from SYS:FORLIB.REL created by MACRO on 25-Jan-85 at 5:24:29 Low segment starts at 20075 ends at 20102 length 6 (octal), 6. (decimal) High segment starts at 17724 ends at 20074 length 151 (octal), 105. (decimal) 5-17 FIELD TEST GLG10. 17725 Entry Relocatable GLOG. 17730 Entry Relocatable ************* DATAN. from SYS:FORLIB.REL created by MACRO on 25-Jan-85 at 5:24:29 Low segment starts at 20652 ends at 20660 length 7 (octal), 7. (decimal) High segment starts at 20103 ends at 20651 length 547 (octal), 359. (decimal) DATAN. 20104 Entry Relocatable DATN2. 20177 Entry Relocatable ************* DEXP. from SYS:FORLIB.REL created by MACRO on 25-Jan-85 at 5:24:29 Low segment starts at 21042 ends at 21044 length 3 (octal), 3. (decimal) High segment starts at 20661 ends at 21041 length 161 (octal), 113. (decimal) DEXP. 20662 Entry Relocatable ************* DLOG. from SYS:FORLIB.REL created by MACRO on 25-Jan-85 at 5:24:29 Low segment starts at 21217 ends at 21222 length 4 (octal), 4. (decimal) High segment starts at 21045 ends at 21216 length 152 (octal), 106. (decimal) DLG10. 21046 Entry Relocatable DLOG. 21051 Entry Relocatable ************* DSIN. from SYS:FORLIB.REL created by MACRO on 25-Jan-85 at 5:24:29 Low segment starts at 21450 ends at 21454 length 5 (octal), 5. (decimal) High segment starts at 21223 ends at 21447 length 225 (octal), 149. (decimal) DCOS. 21224 Entry Relocatable DSIN. 21236 Entry Relocatable ************* DFL.4 from SYS:FORLIB.REL created by MACRO on 25-Jan-85 at 5:24:29 High segment starts at 21455 ends at 21464 length 10 (octal), 8. (decimal) DFL.4 21456 Entry Relocatable ************* EXP2. from SYS:FORLIB.REL created by MACRO on 25-Jan-85 at 5:24:29 Low segment starts at 21606 ends at 21610 length 3 (octal), 3. (decimal) High segment starts at 21465 ends at 21605 length 121 (octal), 81. (decimal) EXP2. 21466 Entry Relocatable ************* LINK symbol map of OVL0 #2 page 9 5-18 FIELD TEST MTHMSG from SYS:FORLIB.REL created by MACRO on 25-Jan-85 at 5:24:29 High segment starts at 21611 ends at 22507 length 677 (octal), 447. (decimal) L.888 22106 Entry Relocatable L.999 22077 Entry Relocatable L.AII 21762 Entry Relocatable L.AIR 21753 Entry Relocatable L.AIZ 21735 Entry Relocatable L.AOI 22043 Entry Relocatable L.ARZ 21744 Entry Relocatable L.ATI 21710 Entry Relocatable L.ATZ 21701 Entry Relocatable L.AZM 21771 Entry Relocatable L.BAZ 22052 Entry Relocatable L.BPI 22016 Entry Relocatable L.BPO 21663 Entry Relocatable L.BPU 21672 Entry Relocatable L.IPO 21645 Entry Relocatable L.IPU 21627 Entry Relocatable L.MFX 22124 Entry Relocatable L.NAA 22025 Entry Relocatable L.NNA 22061 Entry Relocatable L.NOR 22115 Entry Relocatable L.ROV 21611 Entry Relocatable L.RPO 21654 Entry Relocatable L.RPU 21636 Entry Relocatable L.RTI 21717 Entry Relocatable L.RTR 21726 Entry Relocatable L.RUN 21620 Entry Relocatable L.ZCI 22007 Entry Relocatable L.ZIZ 22034 Entry Relocatable L.ZNI 22070 Entry Relocatable L.ZZZ 22000 Entry Relocatable ************* Index to LINK symbol map of OVL0 #2 page 10 Name Page Name Page Name Page Name Page CDLOG 7 DATAN. 8 DSIN. 8 GLOG. 8 CEXP3. 7 DEXP. 8 EXP2. 8 MTHMSG 9 CGLOG 7 DFL.4 8 GATAN. 7 OVL5 7 CGLOG 7 DLOG. 8 LINK symbol map of OVL0 #3 page 11 Overlay no. 3 name LEFT2 Overlay is absolute Low segment starts at 14502 ends at 14666 length 165 = 1P Control Block address is 14637, length 20 (octal), 16. (decimal) Path is 0, 1 73 words free in Low segment 4 Global symbols loaded, therefore min. hash size is 5 ************* OVL6 from DSK:OVL6.REL created by FORTRAN on 11-Feb-85 at 11:52:37 Low segment starts at 14502 ends at 14550 length 47 (octal), 39. (decimal) High segment starts at 14551 ends at 14636 length 66 (octal), 54. (decimal) OVL6 14552 Entry Relocatable ************* 5-19 FIELD TEST LINK symbol map of OVL0 #4 page 12 Overlay no. 4 name RIGHT Overlay is absolute Low segment starts at 14244 ends at 14426 length 163 = 1P Control Block address is 14375, length 22 (octal), 18. (decimal) Path is 0 233 words free in Low segment 5 Global symbols loaded, therefore min. hash size is 6 ************* OVL3 from DSK:OVL3.REL created by FORTRAN on 11-Feb-85 at 11:52:32 Low segment starts at 14244 ends at 14257 length 14 (octal), 12. (decimal) High segment starts at 14260 ends at 14277 length 20 (octal), 16. (decimal) OVL3 14261 Entry Relocatable ************* OVL4 from DSK:OVL4.REL created by FORTRAN on 11-Feb-85 at 11:52:34 Low segment starts at 14300 ends at 14331 length 32 (octal), 26. (decimal) High segment starts at 14332 ends at 14374 length 43 (octal), 35. (decimal) OVL4 14333 Entry Relocatable ************* Index to overlay numbers of OVL0 page 13 Overlay Page Overlay Page Overlay Page Overlay Page #0 5 #2 10 #3 11 #4 12 #1 6 Index to overlay names of OVL0 Name Page Name Page Name Page Name Page LEFT 6 LEFT2 11 RIGHT 12 TEST 5 LEFT1 10 [End of LINK map of OVL0] 5.1.2.6 Tree Diagram - The tree diagram requested by the LPT:TEST/PLOT switch. 5-20 FIELD TEST 5.1.2.7 Executable File - The process also produced an executable file TEST.EXE, which can be run using the RUN system command. However, to run the program, the file TEST.OVL must be present, because it provides the code for the links. 5-21 FIELD TEST 5.2 WRITABLE OVERLAYS Ordinarily each overlay link built by LINK is copied by the overlay handler from the OVL file to the address space at runtime. The contents of any locations that have been modified are lost each time the overlay link is copied from the OVL file. This can be prevented by the use of writable overlays. If a link is specified as writable, the overlay handler copies that link to a temporary file on disk before overwriting it. Later, when the copied link is needed, the overlay handler retrieves the link from the temporary file rather than the OVL file. In this way, any modified values are preserved. Because writable overlays involve more file I/O, they are slower than the default (nonwritable) overlays and should only be used when the program structure and storage requirements demand dynamic storage in overlay links. To specify that an overlay is writable, use the FORTRAN SAVE statement in the program, and specify /OVERLAY:WRITABLE when loading the program with LINK. 5.2.1 Writable Overlay Syntax To build a writable overlay, specify the keyword WRITABLE with the /OVERLAY switch in the LINK command: filespec/OVERLAY:WRITABLE 5.2.2 Writable Overlay Error Messages The overlay handler must write and update a temporary file. In addition to the error messages associated with all overlays, there are two additional error messages for writable overlays: ? OVLCWF Cannot write file [filename]: [reason] ? OVLCUF Cannot update file [filename]: [reason] If either of these messages appears, you should check for disk quota violations or other conditions that could prevent the overlay handler from writing a temporary file. 5.3 RELOCATABLE OVERLAYS LINK ordinarily allocates 2000 extra words at the end of the root link 5-22 FIELD TEST and no extra space at the end of each subsequent link. This is adequate for programs with static storage requirements. If a link requires extra storage at run-time, you can use the /SPACE switch to make the necessary allowances for the program's requirements. The /SPACE switch allows you to specify the number of words to be allocated after the current link is loaded. However, there are programs whose dynamic run-time storage requirements are unpredictable. For example, a program's run-time storage requirements may vary according to the program's input. For this class of programs, relocatable overlays can be useful. For relocatable overlays LINK places extra relocation information in the OVL file, permitting overlay links to be relocated at runtime. The overlay handler, using the FUNCT. subroutine, can determine where the link will fit in the address space and resolve relocatable addresses within the link. This extra processing causes relocatable overlays to run slower than nonrelocatable overlays. Relocatable overlays should only be used when you cannot determine the dynamic storage requirements of a program. 5.3.1 Relocatable Overlay Syntax To build a relocatable overlay, specify the RELOCATABLE keyword to the /OVERLAY switch in the LINK command: filespec/OVERLAY:RELOCATABLE 5.3.2 Relocatable Overlay Messages If /OVERLAY:(LOGFILE,RELOCATABLE) is specified during the loading of a program, informational messages of the following form are sent to the your terminal: %OVLRLL Relocating link [linkname] at [address] 5.4 RESTRICTIONS ON OVERLAYS The following restrictions apply to all overlaid programs: o Overlaid programs cannot be run execute-only. o Overlaid programs cannot use PDVs. o PSECTed programs cannot be overlaid. 5-23 FIELD TEST o Overlaid programs with large buffer requirements must use the /SPACE switch. If an %OVLMAN (Memory not available) error is encountered, the program should be reloaded using the /SPACE switch with each link. o If the program uses more than 256 links, use the /MAXNODE switch to specify the number of links necessary for the program. LINK allocates extra space in the the OVL file for tables that require it, based on the number of links you specify. o If the program uses argument checking, the callee argument checking block must be seen in the same overlay node as the definition of the global symbol of the same name. o If the program uses character fixup, the argument block and the character descriptor must be in the same segment (low or high), and they must both be either relocatable or absolute. 5.4.1 Restrictions on Absolute Overlays The following restrictions apply to absolute overlaid programs: 1. Any intermediate results stored in non-root links are lost as soon as the links are overlaid. Do not expect to retain a value stored in a non-root link unless /OVERLAY:WRITABLE has been specified. 2. Certain forms of global, inter-overlay references are not recommended because you cannot be sure that the necessary modules will be in memory at the right time. Some of these references are: o Additive fixups, in the form ABC##+XYZ where ABC is in another overlay. o Left-hand fixups, in the form XWD ABC##,XYZ, where ABC is in another overlay. o Fullword fixups, in the form EXP ABC##, where ABC is in another overlay. o Similarly, MOVEI 1,ABC##, where ABC is in a different overlay, should not be used, because the necessary module may not be in memory. In fact, the only predictable inter-overlay global reference is one that brings the necessary module into memory, such as PUSHJ P,ABC##. 5-24 FIELD TEST 5.4.2 Restrictions on Relocatable Overlays The following restriction applies to relocatable overlays: o Complex expressions involving relocatable symbols are not relocated properly in a relocatable overlay. No standard DIGITAL compiler produces such expressions. MACRO programmers should avoid using them in modules that are to be loaded as part of an overlaid program. Any expression that causes MACRO to generate a Polish fixup block is not properly relocated at runtime. The following are examples of such complex expressions: MOVEI 1,A##+B##+C## A,,0 5.4.3 Restrictions on FORTRAN Overlays The following restrictions apply to FORTRAN programs that are written with associate variables and using the overlay facility. o If the associate variable is declared in a subroutine, that subroutine must be loaded in the root link of the overlay structure. Accessing a file opened with an associate variable changes the value of the specified variable. If this variable is in a nonresident overlay link when the access is made, program execution produces unpredictable results. Moreover, the value of the variable is reset to zero each time its overlay link is removed from memory. Only variables declared in routines that are loaded into the root link are always resident. However, variables declared in COMMON and in the root link are always resident, and may be safely used as associate variables. o If you place COMMON in a writable overlay, be sure that all references to the variables in that COMMON are in the same overlay or its successors. o A FORTRAN ASSIGN statement may be used in a relocatable overlay. If the ASSIGN is made in a subroutine, the value of the assigned variable may be preserved from one call of that subroutine to the next. However, the overlay containing that subroutine could then be replaced in memory by a different overlay. If the overlay containing the subroutine is relocated differently when brought back into memory, any subsequent GOTO may fail. 5-25 FIELD TEST 5.5 SIZE OF OVERLAY PROGRAMS Although most programs have a consistent size, the size of an overlay program depends on which overlays are in memory. This can be ascertained by using the /COUNTER switch when linking the program. To do this, place /COUNTER after the /LINK switch for the overlay of which you want to know the size, but before the next /NODE switch. For example, *OVLAY/LINK */COUNTER */NODE:TOP This gives you the size of the program when the overlay is actually loaded into memory. The display includes all routines loaded from the runtime libraries. This allows you to determine which overlay is the largest, and whether the program can be loaded without restructuring. 5.6 DEBUGGING OVERLAID PROGRAMS COBDDT and ALGDDT can be used to debug overlay programs, but FORDDT cannot. To use DDT with an overlaid program, the program should be loaded using /SYMSEG:LOW, with local symbols for the desired modules. To set breakpoints in an overlay, put a subroutine in the root node, and call the subroutine from the overlay. Such a subroutine need consist only of a SUBROUTINE statement, a RETURN, and an END. The breakpoint can be set at this subroutine before the program starts running. RESET. in FOROTS removes the symbol table when a FORTRAN program starts running. The symbol table will return after the first overlay is called. If you need the symbols for debugging the root link, insert a CALL INIOVL at the beginning of the main program (refer to Section 5.7.1 for more information). This call will reinstall the symbol table. LINK builds a separate symbol table for each overlay, so that all the symbols known to DDT are for modules that are currently in memory. Note that it is not possible to single-step through RESET. The DDT commands $X and $$X do not work. Set a breakpoint after RESET. if you are debugging a root link, and use the DDT command $G. 5.7 THE OVERLAY HANDLER LINK's overlay handler is the program that supervises execution of overlay structures defined by LINK switches. The overlay handler is in the file SYS:OVRLAY.REL. Some installations 5-26 FIELD TEST will install LINK Version 5 or later without the overlay handler that was shipped with it. To find the version of the overlay handler, type the following: @LINK<RET> *SYS:OVRLAY<RET> */VALUE:%OVRLA<RET> [LNKVAL Symbol %OVRLA 501000210 defined] * The left halfword of $OVRLA contains the version number of the overlay handler, and should be 501, corresponding to the Version 6 of LINK. The right halfword is the edit number, and should be 000210 if field image, or greater if edits have been installed. When you load an overlay structure, the overlay handler is loaded into the root link of the structure. From there it can supervise overlaying operations, because the root link is always in your virtual address space during execution. During execution, when a link not in memory is called, the overlay handler brings in the link, possibly overlaying one or more links already in memory. The overlay handler consists of self-modifying code and data, and two 128-word buffers. One of these buffers, IDXBFR, contains a 128-word section of the link number index table. This allows 256 links to be directly referenced at any one time. The second buffer, INBFR, contains the preambles and relocation tables, if required, of the individual links. There are two ways of overlaying links during execution: 1. A call to a link not in memory implicitly calls the overlay handler to overlay one or more links with the required links. This action of the overlay handler is transparent to the user. 2. An explicit call to one of several entry points in the overlay handler can cause one or more links to be overlaid. These entry points and calls to them are discussed in the sections below. 5.7.1 Calls to the Overlay Handler Overlays can be used transparently, or they can be explicitly called from the program. Such calls are made to one of the entry points in the overlay handler. The overlay handler has five entry points that are available for calls from user programs. To call the overlay handler from a MACRO program, you must use the standard calling sequence, which is: MOVEI 16,arglst 5-27 FIELD TEST PUSHJ 17,entry-name Where arglst is the address of the first argument in the argument list, and entry-name is the entry-point name. The argument list must be of the form: -n,,0 ;n is number of arguments arglst: Z code,addr1 ;For first argument . . . Z code,addrn ;For nth argument Where addr... is the address of the argument. The legal values of "code" are 2 (for a link number), 17 (for an ASCIZ string), and 15 (for a character string descriptor). For each word of the argument list, the code indicates the type of argument. The code occupies the AC field, bits 9 through 12. The address gives the location of the argument; it can be indirect and indexed. To call the overlay handler from a FORTRAN program, the call must be of the form: CALL subroutine (arglst) Where subroutine is the name of the desired subroutine, and arglst is a list of arguments separated by commas. 5.7.2 Overlay Handler Subroutines Each of the seven callable subroutines in the overlay handler has an entry name symbol for use with MACRO, and a subroutine name for use with FORTRAN, as follows: 5-28 FIELD TEST MACRO Entry FORTRAN Subroutine Name Symbol Subroutine Function CLROV. CLROVL Specifies a non-writable overlay. GETOV. GETOVL Brings specified links into memory. INIOV. INIOVL Specifies the file from which the overlay program is read, if the load time specification is to be overridden. LOGOV. LOGOVL Specifies or closes the file in which runtime messages from the overlay handler are written. REMOV. REMOVL Removes specified links from memory. RUNOV. RUNOVL Moves into memory a specified link and begins execution at its start address. SAVOV. SAVOVL Specifies a writable overlay. Declaring a Non-Writable Link (CLROV.) You can declare an overlay link to be non-writable, using the CLROV. entry point. This does not immediately affect the program, but waits until the link is about to be overlaid or read in. If the link is already non-writable, this entry point has no effect. 5-29 FIELD TEST Example MOVEI 16,arglst PUSHJ 17,CLROV. -n,,0 ;n is number of arguments arglst: Z 17,addr1 ;for first ASCIZ linkname . . . Z 17,addrn ;for nth ASCIZ linkname OR -n,,0 ;n is number of arguments arglst: Z 2,addr1 ;for first link number . . . Z 2,addrn ;for nth link number Where addr... is the address of the argument. Getting a Specific Path (GETOV.) The subroutine to bring a specific path into core can be used to make sure that a particular path is used when otherwise the overlay handler might have a choice of paths. It is illegal to specify a path that overlays the calling link. To call the subroutine from a FORTRAN program, use: CALL GETOVL (linkname,...,linkname) where each linkname is the ASCIZ name of a link in the desired path. To call the subroutine from a MACRO program, use the standard FORTRAN calling sequence: MOVEI 16,arglst PUSHJ 17,GETOV. The argument list has one word for each link required to be in the path. Example -n,,0 ;n is number of arguments arglst: Z 17,addr1 . . . 5-30 FIELD TEST Z 17,addrn OR -n,,0 ;n is number of arguments arglst: Z 2,addr1 . . . Z 2,addrn Where addr... is the address of the argument. Initializing an Overlay (INIOV.) The overlay initializing subroutine specifies a file from which the overlay program is read. This subroutine is used to override the file specified at load time. The file specified to INIOV. can have any valid specification, but it must be in the correct format for an overlay (OVL) file. To call the subroutine from a FORTRAN program, use: CALL INIOVL ('filespec') where `filespec' is a literal constant that can give a 39-character device, a 39-character filename, a 39-character file type, and a 39-character directory. To call the subroutine from a MACRO program, use the standard FORTRAN calling sequence: MOVEI 16,arglst PUSHJ 17,INIOV. The argument list is of the form: -1,,0 arglst: Z 17,address of ASCIZ filespec where filespec is an ASCIZ string (ASCII ending with nulls) that can give a 39-character device, a 39-character filename, a 39-character file type, and a 39-character directory. NOTE If you call INIOV. with no arguments, it initiates the overlay handler and reads in the symbols for the root link, using the overlay file specified at load time. This can be useful for debugging the root link before any successor links have been read in, because symbols are not normally available until the first link comes 5-31 FIELD TEST into memory. Specifying an Overlay Log File (LOGOV.) You can specify an output file for runtime messages from the overlay handler. These messages are listed in Section 5.5. The log file entry includes the elapsed run time since the first call to the overlay handler. To call this subroutine from a FORTRAN program, use: CALL LOGOVL ('filespec') where `filespec' is a literal constant that can give a device, a filename, a file type, and a PPN. To close the file, use CALL LOGOVL (0) You can omit the (0) argument to close the file. To call the subroutine from a MACRO program, use the standard FORTRAN calling sequence: MOVEI 16,arglst PUSHJ 17,LOGOV. The argument list is of the form: -1,,0 arglst: Z 17,address of ASCIZ filespec Where filespec is an ASCIZ string that can give a device, a filename, a file type, and a PPN. To close the log file, the argument list is: -1,,0 arglst: Z 17,address of word containing zero Removing Specific Links from Memory (REMOV.) The subroutine to remove specific links from memory, once they are no longer required, can be used to reduce core image size for faster execution. Specifying removal of the calling link causes an error. To call the subroutine from a FORTRAN program, use: CALL REMOVL (linkname,...,linkname) 5-32 FIELD TEST Where each linkname is the ASCIZ name of a link to be removed from memory. To call the subroutine from a MACRO program, use the standard FORTRAN calling sequence: MOVEI 16,arglst PUSHJ 17,REMOV. The argument list has one word for each link to be removed. Example -n,,0 ;n is number of arguments arglst: Z 17,addr1 . . . Z 17,addrn OR -n,,0 ;n is number of arguments arglst: Z 2,addr1 . . . Z 2,addrn Where addr... is the address of the argument. Running a Specific Link (RUNOV.) The subroutine for running a specific link allows you to transfer program execution to the start address of a particular link. (An error occurs if the link has no start address.) If the link is not already in memory, it and its path are brought in. You can use this subroutine to overlay the calling link, because the next instruction executed is the start address of the named link; therefore, there is no automatic return to the calling link. NOTE The FORTRAN compiler does not generate start addresses for subroutines. FORTRAN main programs cannot be loaded into non-root links. Therefore, to use RUNOVL to transfer control to a FORTRAN subroutine in a non-root link, you must use the /START switch at load time to define a start address for the link. 5-33 FIELD TEST To call the subroutine RUNOVL from a FORTRAN program, use: CALL RUNOVL (linkname) Where linkname is the ASCIZ name of the link to be run. To call the subroutine from a MACRO program, use the standard FORTRAN calling sequence: MOVEI 16,arglst PUSHJ 17,RUNOV. The argument list is of the form: -1,,0 arglst: Z 17,address of ASCIZ linkname OR -1,,0 arglst: Z 2,address of link number Declaring A Writable Link (SAVOV.) You can dynamically declare an overlay link to be writable by calling SAVOV. This does not affect the current state of the code immediately, but waits until the link is about to be overlaid. If the link is already writable, this symbol has no effect. Example MOVEI 16,arglst PUSHJ 17,SAVOV. -n,,0 ;n is number of arguments arglst: Z 17,addr1 ;for first ASCIZ linkname . . . Z 17,addrn ;for nth ASCIZ linkname OR -n,,0 ;n is number of arguments arglist: Z 2,addr1 ;for first link number . . . Z 2, addrn ;for nth link number 5-34 FIELD TEST Where addr... is the address of the argument. If called with no arguments, SAVOV. only initializes the temporary file. 5.7.3 Overlay Handler Messages This section lists all of the overlay handler's messages. LINK messages, which have the LNK prefix, are given in Appendix B. For each overlay handler message, the last three letters of the six-letter code, the severity, and the text of the message are given in boldface. Then, in lightface type, comes an explanation of the message. When a message is issued, the three letters are suffixed to the letters OVL, forming a 6-letter code of the form OVLxxx. The explanation of the message is printed only if you use the /OVERLAY:LOG switch. The severity of a message determines whether the job is terminated when the message is issued. Level 31 messages terminate program execution. Level 8 messages are warnings: they do not terminate execution, but the error may affect the execution of the program. Level 1 messages are informational and are printed on the terminal only if you specified /OVERLAY:LOGFILE. 5-35 FIELD TEST Code Sev Message and Explanation ARC 31 Attempt to remove caller from link [name or number] The named link attempted to remove the link that called it. This error occurs when the call to the REMOV. subroutine requests removal of the calling link. ARL 8 Ambiguous request in link number [number] for [symbol], using link number [number] More than one successor link satisfies a call from a predecessor link, and none of these successors is in memory. Since all their paths are of equal length, the overlay handler has selected an arbitrary link. CDL 31 Cannot delete link [name or number], FUNCT. return status [number] This is an internal LINK error, and is not expected to occur. If it does, please notify your Software Specialist, or send a Software Performance Report (SPR) to DIGITAL. Return status is one of the following: 1 Core already deallocated 3 Illegal argument passed to FUNCT. module CGM 31 Cannot get memory from OTS, FUNCT. return status [octal] The system does not have enough free memory to load the link. The status is returned from the object-time system and depends on the particular FUNCT. function the overlay handler used. See Section 5.7.4 for the FUNCT. function codes and status messages. CRF 31 Cannot read file [file] [reason] An error occurred when reading the overlay file. The file was closed after the last successful read operation. CSM 31 Cannot shrink memory, FUNCT. return status [octal] A request to the object-time system to reduce memory, if possible, failed. This error is not expected to occur. If it does, please notify your Software Specialist or send a Software Performance Report (SPR) to DIGITAL. CUF 31 Cannot update file [file] [reason] An error occurred when updating the TMP file into which 5-36 FIELD TEST non-resident writable overlay links are written. CWF 31 Cannot write file [file] [reason] An error occurred when creating the TMP file used to store non-resident writable overlay links. DLN 1 Deleting link [name or number] after [hh:mm:ss] The named link has been removed from memory as a result of a call to the REMOV. subroutine. The time given is elapsed time since the first call to the overlay handler. This message is output only to the overlay log file, if any. IAT 31 Illegal argument type on call to [subroutine] A user call to the named overlay handler subroutine gave an illegal type of argument. IEF 31 Input error for file [file] [reason] An error occurred while reading the OVL or TMP file. ILN 31 Illegal link number [number] A user call to one of the overlay handler subroutines gave an illegal link number as an argument. IMP 31 Impossible error condition at PC=[address] This is an internal error caused by monitor call error returns that should not occur. This message is issued instead of the HALT message. This error is not expected to occur. If it does, please notify your Software Specialist or send a Software Performance Report (SPR) to DIGITAL. IPE 31 Input positioning error for file [file] [reason] An error occurred while reading the OVL or TMP file. IVN 8 Inconsistent version numbers The OVL and EXE files found were not created at the same time, and may not be compatible. LNM 31 Link number [decimal] not in memory A call to the REMOV. subroutine has removed the named link from memory. It must be restored by a call to GETOV. or RUNOV. 5-37 FIELD TEST MAN 31 Memory not available for absolute [link], FUNCT. return status [octal] There is not enough room for the overlay handler to load the specified link into the part of memory the link was built for. Two options are available: a) Use the /SPACE switch at load time to reserve more space for the link, or b) Build a relocatable overlay using the RELOCATABLE option to the /OVERLAY switch at load time. MEF 31 Memory expansion failed, FUNCT. return status [octal] The overlay handler was unable to get free space from the memory manager. Restructure your overlay so that the minimum number of links are in memory at any time. NMS 8 Not enough memory to load symbols, FUNCT. return status [octal] There was not enough free space available to load symbols into memory. NRS 31 No relocation table for symbols A relocation table was not included for the symbol table. It is possible that LINK failed to load the relocation table because there wasn't enough room in memory. NSA 31 No start address for link [name or number] A user call to the RUNOV. subroutine requests execution to continue at the start address of the named link, but that link has no start address. NSD 31 No such device for [file] An invalid device was specified. OEF 31 Output error for file [file] [reason] An error occurred when writing the overlay file. The file was closed after the last successful write operation. OPE 31 Output positioning error for file [file] [reason] An error occurred while writing the TMP file used to hold non-resident writable overlay links. OPP 31 Overlay handler in private page The overlay handler has been loaded into a non-sharable page of the program. Your program should not write into 5-38 FIELD TEST the pages occupied by the overlay handler. Ask LINK for a map of your program if there is doubt. If the program is not writing into these pages, this error may reflect an internal LINK error. This error is not expected to occur. If it does, please notify your Software Specialist or send a Software Performance Report (SPR) to DIGITAL. RLL 1 Relocating link [name or number] at [address] The named relocatable link has been loaded at the given address. This message is output only to the overlay log file. RLN 1 Reading in link [name or number] after [time] The named link has been loaded. The time given is elapsed time since the first call to the overlay handler. This message is output only to the overlay log file. RMP 31 RMAP JSYS failed This is an internal error and is not expected to occur. If it does, please notify your Software Specialist or send a Software Performance Report (SPR) to DIGITAL. RPA 31 RPACS JSYS failed This is an internal error and is not expected to occur. If it does, please notify your Software Specialist or send a Software Performance Report (SPR) to DIGITAL. STS 8 OTS reserved space too small The object-time system does not have space for its minimum number of buffers. Reload, using the /SPACE switch for the root link with an argument greater than 2000 (octal). ULN 31 Unknown link name [name] A call to one of the overlay handler subroutines gave an invalid link name as an argument. Correct the call. USC 8 Undefined subroutine [name] called from [address] A required subroutine was not loaded. The instruction at the given program counter address calls for an undefined subroutine. Correct the call or load the required subroutine. WLN 1 Writing [link] after [time] The overlay handler is writing out a writable overlay 5-39 FIELD TEST link. 5.7.4 The FUNCT. Subroutine Each DIGITAL-supplied object-time system has a subroutine that the overlay handler uses for memory management, I/O, and message handling. This subroutine has a single entry point, FUNCT., and is called by the sequence: MOVEI 16,arglst PUSHJ 17,FUNCT. The format of the argument list is: -<n+3>,,0 arglst: Z 2,address of integer function code Z 2,address for error code on return Z 2,address for status code on return Z code,address of first argument . . . Z code,address of nth argument Where function code is one of the function codes described below; error code is a 3-letter ASCII mnemonic output by the object-time system (after ?, %, or [); and status (on return) contains one of the following values: -1 Function not implemented 0 Successful return n Number of the error message Most object-time systems allocate separate space for their own use and for the use of the overlay handler. This minimizes the possibility that the overlay handler requests space that the object-time system is already using. The permitted function code arguments, their names, and their meanings are: Code Name Function 0 ILL Illegal function; returns -1 status. 1 GAD Get a specific segment of memory. 2 COR Get a given amount of memory from anywhere in the space allocated to the overlay handler. 5-40 FIELD TEST 3 RAD Return a specific segment of memory. 4 GCH Get an I/O channel. 5 RCH Return an I/O channel. 6 GOT Get memory from the space allocated to the object-time system. 7 ROT Return memory to the object-time system. 10 RNT Get the initial runtime, in milliseconds, from the object-time system. 11 IFS Get the initial runtime file specification of the program being run. 12 CBC Cut back core (if possible) to reduce job size. 13 RRS Read retain status (DBMS) 14 WRS Write retain status (DBMS) 15 GPG Get pages 16 RPG Return pages 17 GPSI Get TOPS-20 PSI channel 20 RPSI Return TOPS-20 PSI channel 21 MPG Get contiguous set of pages All FUNCT. codes are reserved to DIGITAL. The following subsections describe each function of the FUNCT. subroutine (except the reserved functions). ILL (0) Function This function is illegal. The argument list is ignored, and the status returned is -1. GAD (1) Function The GAD function gets memory from a specific address in the space allocated to the overlay handler. The argument list points to: arg 1 Address of requested memory arg 2 Size of requested allocation (in words) 5-41 FIELD TEST A call to GAD with arg 2 equal to -1 requests all available memory. On return, the status is one of the following: 0 Successful allocation 1 Not enough memory available 2 Memory not available at specified address 3 Illegal arguments (address + size > 256K) COR (2) Function The COR function gets memory from any available space allocated to the overlay handler. The arguments are: arg 1 Undefined (address of allocated memory on return) arg 2 Size of requested allocation On return, the status is: 0 Core allocated 1 Not enough memory available 3 Illegal argument (size > 256K) RAD (3) Function The RAD function returns the memory starting at the specified address to the overlay handler. The arguments are: arg 1 Address of memory to be returned arg 2 Size of memory to be returned (in words) On return, the status is one of the following: 0 Successful return of memory 1 Memory cannot be returned 3 Illegal argument (address or size > 256K) GCH (4) Function Returns a status of 1. The channel is not available. RCH (5) Function Returns a status of 1. The channel is not available. GCH (4) Function 5-42 FIELD TEST The GCH function gets an input/output channel. The arguments are: arg 1 Undefined (channel number allocated on return) arg 2 Ignored On return, the status is one of the following: 0 Successful channel allocation 1 No channels available RCH (5) Function The RCH function returns an input/output channel. Its arguments are: arg 1 Number of channel to be returned arg 2 Ignored On return, the status is one of the following: 0 Channel released 1 Channel number invalid for user GOT (6) Function The GOT function gets memory from the space allocated to the object-time system. Its arguments are: arg 1 Undefined (address of allocated memory on return) arg 2 Size of memory requested On return, the status is one of the following: 0 Successful allocation 1 Not enough memory available 3 Illegal argument (size > 256K) ROT (7) Function The ROT function returns memory to the object-time system. Its arguments are: arg 1 Address of memory to be returned arg 2 Size of memory to be returned (in words) On return, the status is one of the following: 0 Successful return of memory 1 Memory cannot be returned 3 Illegal argument (address or size > 256K) 5-43 FIELD TEST RNT (10) Function The RNT function returns the initial runtime, in milliseconds, from the object-time system. (At the beginning of the program, the object-time system will have executed a RUNTIM UUO; the result is the time returned by RNT.) Its arguments are: arg 1 Undefined (contains initial runtime on return) arg 2 Ignored On return, the runtime is in arg 1, and the status is 0. The status is 0. IFS (11) Function Always returns a value of -1. This function is not implemented. CBC (12) Function The CBC function cuts back memory if possible, which reduces the size of the job. It uses no arguments, and the returned status is 0. RRS (13) Function ( Reserved for DBMS ) Returns ARG1 = 0. On return, the status is always 0. WRS (14) Function ( Reserved for DBMS ) Returns ARG1 = 0. On return, the status is always 0. GPG (15) Function The GPG function is used to fetch a page. The arguments are: arg2: size to be allocated, in words On return, arg1 = address of allocated memory, on page boundary and the status is one of the following: 0 if allocated OK 1 if not enough memory 3 if argument error RPG (16) Function 5-44 FIELD TEST The RPG function is used to return pages. The arguments are: arg1: address (a word) arg2: size (in words) On return, the status is: 0 if deallocated OK 1 if wasn't allocated 3 if argument error GPSI (17) The GPSI function can be used to get a PSI channel for programs running in a TOPS-20 environment. This entry point provides only controlled access to the PSI tables. GPSI arranges that the tables exist and that SIR and EIR have been done but does not do AIC or any other JSYS necessary to set up the channel (ATI or MTOPR, for example). The arguments are: arg1: channel number, or -1 to allocate any user-assignable channel arg2: level number arg3: address of interrupt routine On return, arg1 contains the channel number allocated (if -1 was originally specified). On return, the status is: 0 if OK 1 if channel was already assigned 2 if no free channels 3 if argument error NOTE This function is used by TOPS-20 programs. It is a reserved function in the TOPS-10 environment. RPSI (20) Function This entry point provides only controlled access to the PSI tables. It does not do DIC or any other JSYS necessary to release a channel. It just clears the level and interrupt address fields in CHNTAB. This function accepts the following argument: arg1: channel number On return the status is one of the following: 0 if OK 1 if channel wasn't in use 5-45 FIELD TEST 3 if argument error NOTE This function is used by TOPS-20 programs. It is a reserved function in the TOPS-10 environment. MPG (21) Function This function gets a contiguous set of pages. The pages requested are always allocated from the section FOROTS is in. The user cannot depend upon this call to either create or destroy the pages. arg 1 first page number to allocate. The page number must be in the range 0 to 777. arg 2 number of pages to allocate On return, the status is one of the following: 0 successful deallocation of all given pages 1 one or more pages was not allocated through MPG 3 illegal argument (bad page number count) 5-46 FIELD TEST 5.8 THE OVERLAY (OVL) FILE This section contains diagrams of the contents of the overlay file output by LINK as a result of the /OVERLAY switch. The following diagram shows the overall scheme of the file: Scheme of the Overlay (OVL) File |=======================================================| | | | Directory Block | | | |=======================================================| | | | Link Number Table | | | |=======================================================| | | | Link Name Table | | | |=======================================================| | | | Writable Link Flags Table | | | |=======================================================| | | | Link | | | |-------------------------------------------------------| . . . |-------------------------------------------------------| | | | Link | | | |=======================================================| 5-47 FIELD TEST 5.8.1 The Directory Block The following diagram shows the contents of the Directory Block: Directory Block |=======================================================| .DIHDR: | 0 (Reserved) | Length of Directory Block | |-------------------------------------------------------| .DIRGN: | 0 (Reserved) | |-------------------------------------------------------| .DIVER: | Version Number of Corresponding EXE file | |-------------------------------------------------------| .DILPT: | -(Size of Link No. Table) |Link Number Table Block No.| |-------------------------------------------------------| .DINPT: |-(Size of Link Name Table) | Link Name Table Block No. | |-------------------------------------------------------| .DIWPT: |-(Size of Writable Flg Tbl)| Writable Flg Tbl Block No | |-------------------------------------------------------| .DIFLG: | Flags | |-------------------------------------------------------| | 0 (Reserved) | |=======================================================| In the fourth word above, the size of the Link Number Table (in words) is half the number of links (rounded upward); the Link Number Table Block No. is the number of the 128-word disk block containing the Link Number Table. (There are four disk blocks per disk page.) In the fifth word above, the size of the Link Name Table (in words) is twice the number of links; the Link Name Table Block No. is the number of the 128-word disk block containing the Link Name Table. The table defined by the .DIWPT word above consists of a string of two-bit bytes. The first bit, OW.WRT, indicates whether the corresponding overlay link is writable. This bit is set under the control of a REL block of type 1045 (writable links). The second bit, OW.PAG, indicates whether the corresponding overlay link is currently paged into the runtime overlay temporary file. This is strictly a run-time flag and should be zero in the overlay file. This flag is defined in the overlay file to allow the overlay handler to set up its flag table with a single read operation. The .DIFLG word in the directory block contains a single bit flag (bit 0). If this bit is set, the overlay file contains at least one writable overlay. This information is also contained in the Writable Link Table. However, by having the information available in the directory block the overlay handler can determine if any links are writable without scanning the Writable Link Table. All other bits in the .DIFLG word are reserved and must be zero. 5-48 FIELD TEST NOTE If you request both writable and relocatable overlays, only halfwords known to be relocatable at load time will be correctly relocated when the link is refetched. 5.8.2 The Link Number Table The following diagram shows the contents of the Link Number Table: Link Number Table |=======================================================| | Pointer to Link 0 | Pointer to Link 1 | |-------------------------------------------------------| | Pointer to Link 2 | Pointer to Link 3 | |-------------------------------------------------------| . . . |-------------------------------------------------------| | Pointer to Link n-1 | Pointer to Link n | |=======================================================| Each pointer is a disk block number. Any unused words in the last disk block of the Link Number Table are zeros. 5.8.3 The Link Name Table The following diagram shows the contents of the Link Name Table: Link Name Table |=======================================================| | Link Number | |-------------------------------------------------------| | SIXBIT Link Name | |=======================================================| . . . |=======================================================| | Link Number | 5-49 FIELD TEST |-------------------------------------------------------| | SIXBIT Link Name | |=======================================================| Any unused words in the last disk block of the Link Name Table are zeros. 5.8.4 The Overlay Link The following diagram shows the overall scheme of each overlay link in the overlay file: Scheme of an Overlay Link |=======================================================| | | | Preamble | | | |=======================================================| | | | Code for Link | | | |=======================================================| | | | Link Control Section | | | |=======================================================| | | | EXTTAB | | | |=======================================================| | | | INTTAB | | | |=======================================================| | | | Relocation Table | | | |=======================================================| | | | Other Relocation Tables | | | |=======================================================| 5-50 FIELD TEST The Preamble The following diagram shows the contents of the preamble for an overlay link: Preamble |=======================================================| | 0 (Reserved) | Length of Preamble | |-------------------------------------------------------| | 0 (Reserved) | 0 (Reserved) | |-------------------------------------------------------| | 0 (Reserved) | Link Number | |-------------------------------------------------------| | SIXBIT Link Name | |-------------------------------------------------------| |Pointer to List of Bound Links Starting with Root Link | |-------------------------------------------------------| | Pointer to List of Bound Links Ending with Root Link | |-------------------------------------------------------| | Equivalence Pointer | |-------------------------------------------------------| | Address of Control Section | |-------------------------------------------------------| | Flags | |-------------------------------------------------------| | Absolute Address at Which Link Loaded | |-------------------------------------------------------| | Length of Link (Code through INTTAB) | |-------------------------------------------------------| | Disk Block Number of Start of Link Code | |-------------------------------------------------------| | 0 (Reserved) | |-------------------------------------------------------| | Disk Block Number of Relocation Table | |-------------------------------------------------------| | Disk Block Number of Other Relocation Tables | |-------------------------------------------------------| | 0 (Reserved) | |-------------------------------------------------------| | Disk Block Number of Radix-50 Symbols | |-------------------------------------------------------| |Block Number of Relocation Tables for Radix-50 Symbols | |-------------------------------------------------------| | Next Free Memory Location for Next Link | |=======================================================| 5-51 FIELD TEST Code for the Link The code for each link consists of a core image that was constructed from the REL files placed in the link. This core image contains the code and data for the link. The Control Section The following diagram shows the contents of the Control Section: Control Section |=======================================================| | 0 (Reserved) | Length of Header | |-------------------------------------------------------| | 0 (Reserved) | 0 (Reserved) | |-------------------------------------------------------| | 0 (Reserved) | Link Number | |-------------------------------------------------------| | SIXBIT Link Name | |-------------------------------------------------------| | Ptr to Ancestor in Core | Ptr to Successor in Core | |-------------------------------------------------------| | -(Length of Symbol Table) | Address of Symbol Table | |-------------------------------------------------------| | 0 (Reserved) | Start Address for Link | |-------------------------------------------------------| |Memory Needed to Load Link | First Address in Link | |-------------------------------------------------------| | -(Length of EXTTAB) | Pointer to EXTTAB | |-------------------------------------------------------| | -(Length of INTTAB) | Pointer to INTTAB | |-------------------------------------------------------| | Address of Symbols on Disk | |-------------------------------------------------------| | Relocation Address | |-------------------------------------------------------| | Copy of Block Number for Code | |-------------------------------------------------------| |-(Length of Radix-50 SymTab)|Blk No. of Radix-50 SymTab| |=======================================================| Ptr = Pointer 5-52 FIELD TEST The EXTTAB Table The following diagram shows the contents of the EXTTAB table: EXTTAB |=======================================================| | JSP 1,.OVRLA | |-------------------------------------------------------| | Flags |Address of Callee's INTTAB | |-------------------------------------------------------| | Callee's Link Number |Ptr to Callee's Control Sec| |-------------------------------------------------------| | Backward Pointer | Forward Pointer | |=======================================================| . . . |=======================================================| | JSP 1,.OVRLA | |-------------------------------------------------------| | Flags |Address of Callee's INTTAB | |-------------------------------------------------------| | Callee's Link Number |Ptr to Callee's Control Sec| |-------------------------------------------------------| | Backward Pointer | Forward Pointer | |=======================================================| Ptr = Pointer The flags in the left half of the second word have the following meanings: Bit Meaning (if bit is on) 0 Module is in core. 1 Module is in more than one link. 2 Relocatable link is already relocated. 5-53 FIELD TEST The INTTAB Table The following diagram shows the contents of the INTTAB table: INTTAB |=======================================================| | 0 (Reserved) | Address of Entry Point | |-------------------------------------------------------| | 0 (Reserved) | Forward Pointer | |=======================================================| . . . |=======================================================| | 0 (Reserved) | Address of Entry Point | |-------------------------------------------------------| | 0 (Reserved) | Forward Pointer | |=======================================================| 5-54 FIELD TEST The Relocation Table The following diagram shows the contents of the Relocation Table: Relocation Table |=======================================================| | Relocation Word | |-------------------------------------------------------| . . . |-------------------------------------------------------| | Relocation Word | |=======================================================| The Relocation Table contains one bit for each halfword of the link. If the bit is on, the halfword is relocatable; if it is off, the halfword is not relocatable. The first word contains the relocation bits for the first 22 (octal) words of the link; the second word contains the relocation bits for the next 22 (octal) words; and so forth for all words in the link. This table exists only when relocatable overlays are requested with the /OVERLAY:RELOCATABLE switch. 5-55 FIELD TEST The Other Relocation Tables The following diagram shows the contents of the Other Relocation Tables: Other Relocation Tables |=======================================================| | Number of Words Following for This Link | |-------------------------------------------------------| | Link Number | Planned Load Address | |-------------------------------------------------------| | Relocation Halfword | Ptr to Words of Code | |-------------------------------------------------------| . . . |-------------------------------------------------------| | Relocation Halfword | Ptr to Words of Code | |=======================================================| . . . |=======================================================| | Number of Words Following for This Link | |-------------------------------------------------------| | Link Number | Planned Load Address | |-------------------------------------------------------| | Relocation Halfword | Ptr to Words of Code | |-------------------------------------------------------| . . . |-------------------------------------------------------| | Relocation Halfword | Ptr to Words of Code | |=======================================================| Ptr = Pointer This table exists only when relocatable overlays have been requested with the OVERLAY/RELOCATABLE switch. The Other Relocation Tables are used to hold internal LINK references. 5-56 CHAPTER 6 PSECTs PSECTs (Program SECTions) are programmer- or system-defined regions of code and data that LINK relocates in memory. PSECTs are used for two reasons: o To load extended addressing programs. o To structure a program's memory space. 6.1 LOADING PROGRAMS WITH PSECTs When loading programs with PSECTs (including extended addressing programs), you must specify the origin of the PSECT. LINK then uses this PSECT origin to store the data in the PSECTs. To specify a PSECT origin, include the origin in the source program or use the LINK /SET switch. See the appropriate language manual for including the origin in the source program and Chapter 3 for the /SET switch. Defining an upper bound is also important when loading PSECTs. The LINK /LIMIT switch defines an upper bound for a PSECT. If the PSECT loads to this bound, LINK returns a warning and an error message. Despite these messages, LINK continues to process input files and to load code. The warning is: %LNKPEL PSECT [psect] exceeded limit of [address] Although LINK does continue to process input files and load code, the program is incomplete and should not be used. LINK does produce the following fatal error: ?LNKCFS Chained fixups have been suppressed Chained fixups are a method that LINK uses to resolve symbol references. See the Glossary for a definition of chained fixups. 6-1 FIELD TEST Using /LIMIT to define an upper bound prevents unintended PSECT overlaps. PSECT overlaps can cause LINK to loop and produce other unpredictable behavior. For example, the LRGPRO and BIGPRO modules each contain two PSECTs, BIG and GRAND. LRGPRO is loaded and /COUNTERS is used to check PSECT origins and current values. PSECT origins are found by looking under the initial value column and PSECT current values are found by looking under the current value column of the /COUNTERS output. The upper bound is found by looking under the limit value column. @LINK<RET> */SET:BIG:1000<RET> */SET:GRAND:5400<RET> *LRGPRO<RET> */COUNTERS<RET> [LNKRLC Reloc. ctr. initial value current value limit value .LOW. 0 140 1000000 BIG 1000 5100 1000000 GRAND 5400 10500 1000000 Absolute code loaded] * /COUNTERS shows that the current value for PSECT BIG and the initial value for PSECT GRAND are close together in memory. The current value for BIG is 5100 and the PSECT origin for GRAND is 5400. The /LIMIT switch can now be used to restrict PSECT BIG's current value to PSECT GRAND's initial value using the following: */LIMIT:BIG:GRAND<RET> /LIMIT prevents an unintended overlap because it causes LINK to issue a warning if the current value for BIG exceeds GRAND's origin. The warning is: %LNKPEL PSECT [psect] exceeded limit of [address] The warning message indicates that the PSECTs overlapped, and that BIG and GRAND need to be farther apart in memory. The /COUNTERS switch shows a new current value greater than 5400. Notice that the limit set with the /LIMIT switch is shown in the limit value column. *BIGPRO<RET> %LNKPEL PSECT BIG exceeded limit of 5400 detected in module .MAIN from file BIGPRO.REL.1 */COUNTERS<RET> [LNKRLC Reloc. ctr. initial value current value limit value .LOW. 0 140 1000000 BIG 1000 6300 5400 GRAND 5400 10500 1000000] Absolute code loaded] 6-2 FIELD TEST /GO continues loading the program, and LINK issues a warning and fatal error message. The warning is: %LNKPOV Psects [psect] and [psect] overlap from address [address] to [address] The fatal error message is: ?LNKCFS chained fixups have been suppressed For example, */GO<RET> %LNKPOV Psects BIG and GRAND overlap from address 5400 to 6300 ?LNKCFS chained fixups have been suppressed @ Now, LINK is re-run and the PSECTs are moved farther apart in memory. In this example, GRAND's origin is reset from 5400 to 7000. @LINK<RET> */SET:BIG:1000<RET> */SET:GRAND:7000<RET> *LRGPRO<RET> */COUNTERS<RET> [LNKRLC Reloc. ctr. initial value current value limit value .LOW. 0 140 1000000 BIG 1000 5100 1000000 GRAND 7000 10500 1000000] */LIMIT:BIG:GRAND<RET> *BIGPRO<RET> */COUNTERS<RET> [LNKRLC Reloc. ctr. initial value current value limit value .LOW. 0 140 1000000 BIG 1000 6300 5400 GRAND 7000 10500 1000000] */GO<RET> @ 6.2 PSECT ATTRIBUTES PSECT attributes specify how LINK stores a PSECT in memory, and the page access of the PSECT. The CONCATENATED or OVERLAID attribute specifies how LINK stores PSECTs, and the RONLY and RWRITE attributes specify the page access. 6-3 FIELD TEST 6.2.1 CONCATENATED and OVERLAID LINK uses the CONCATENATED or OVERLAID attributes when loading PSECTs into memory. These attributes are specified when the PSECT is defined in the source program, and are contained in REL Blocks 24 and 1050. See Appendix A for information on these blocks. If the attribute is not specified, LINK uses CONCATENATED. The following example illustrates how PSECTs are stored in memory. In this example, modules MAINKO and MAINKC contain three PSECTs, ALPHA, BETA, and GAMMA. There is an additional module named SUBMD1. The ALPHA and BETA PSECTs have the CONCATENATE attribute. The GAMMA PSECT, which is a data PSECT declared in each module, has attributes defined differently in each module to illustrate the differences in memory storage. GAMMA has the OVERLAID attribute defined in MAINKO and the CONCATENATED attribute defined in MAINKC. First, LINK is run and the origin is set for PSECTs ALPHA, BETA, and GAMMA. @LINK<RET> */SET:ALPHA:3000/SET:BETA:5000/SET:GAMMA:7000<RET> Next, MAINKO is loaded with GAMMA defined as OVERLAID, and /COUNTERS is used to display the initial, current, and limit values. *MAINKO ;OVERLAID GAMMA<RET> */COUNTERS<RET> [LNKRLC Reloc. ctr. initial value current value limit value ALPHA 3000 3017 1000000 BETA 5000 5011 1000000 GAMMA 7000 7025 1000000] Now, SUBMD1 is loaded, /COUNTERS is used, and /GO is used to load the modules and exit LINK. Notice that the current values for ALPHA and BETA have increased, and that the current value for GAMMA remains the same. *SUBMD1<RET> */COUNTERS<RET> [LNKRLC Reloc. ctr. initial value current value limit value ALPHA 3000 3033 1000000 BETA 5000 5041 1000000 GAMMA 7000 7025 1000000] */GO<RET> @ In the following example, LINK is run and the origin is set for PSECTs ALPHA, BETA, and GAMMA. @LINK<RET> */SET:ALPHA:3000/SET:BETA:5000/SET:GAMMA:7000<RET> 6-4 FIELD TEST Now, MAINKC is loaded with GAMMA defined as CONCATENATE, and /COUNTERS is used. *MAINKC ;CONCATENATED GAMMA<RET> */COUNTERS<RET> [LNKRLC Reloc. ctr. initial value current value limit value ALPHA 3000 3017 1000000 BETA 5000 5011 1000000 GAMMA 7000 7025 1000000] * Next, SUBMD1 is loaded, /COUNTERS is used, and /GO is used to load the modules and exit LINK. Notice that all current values have increased. *SUBMD1<RET> */COUNTERS<RET> [LNKRLC Reloc. ctr. initial value current value limit value ALPHA 3000 3033 1000000 BETA 5000 5041 1000000 GAMMA 7000 7035 1000000] */GO<RET> @ 6.2.2 RONLY and RWRITE The RONLY and RWRITE attributes set the page access for PSECTs. RONLY defines the page access to be read-only and RWRITE defines the page access to be read/write. These attributes are set in the source program. If the attribute is not set, LINK uses RWRITE. For example, the following MACRO statement defines read/write access for the RED PSECT. .PSECT RED/RWRITE,1000 1000 is the PSECT's origin. LINK sets the page access to read-only if a memory page contains part or all of a read-only PSECT even if a read/write PSECT exists on the same page. 6-5 7-1 CHAPTER 7 PDVs LINK stores information about the program that it is loading into a PDV or JOBDAT. A PDV (Program Data Vector) is a block of information. JOBDAT is the job data area. LINK stores information in a PDV: o for extended addressing programs. o if a PSECT has an origin below 140. o if you specify a PDV using /PVBLOCK or /PVDATA. o if /NOJOBDAT is used. LINK stores information in JOBDAT for most section zero programs. LINK stores such information as debugger symbol table pointers, version numbers, and memory use. Although LINK builds no more than one PDV per load, a program can use the TOPS-20 PDVOP% JSYS at runtime to build new PDVs or to find PDVs associated with object time systems and utilities merged into the address space. LINK cannot build a PDV for a program that uses overlays. At link time, you can use the /PVBLOCK and /PVDATA switches to request a PDV, control its memory location, or change its contents. See Chapter 3 for information on these switches. Each PDV contains location .PVCST reserved for customer use. A typical use for this location might be to point to the address of a transfer vector that contains entry points to a utility package. Any program that wants to call the utility can then use the PDVOP% JSYS to find the address of the transfer vector. This eliminates the need to build the transfer vector address of the utility package into a program. 7-1 FIELD TEST For more information about the PDVOP% JSYS, refer to the TOPS-20 Monitor Calls Reference Manual. 7-2 FIELD TEST 7.1 PDV FORMAT The format of a PDV follows: Word Symbol Meaning 0 .PVCNT is the length of the PDV including this word. 1 .PVNAM points to the name in ASCIZ of this PDV. The default PDV name is nnnLNK, where nnn is the job name. The following rules apply to the assignment of PDV names. If these rules are followed, conflicting PDV names can be avoided: 1. PDV names assigned by DIGITAL will contain the percent character (%). PDV names assigned by users should not contain the percent character. 2. All PDV names containing the period character (.) are reserved to DIGITAL for future use. 3. The dollar sign character ($) is reserved for special use: PDV names of the form string1$string2 are reserved for the special class of use named by string1. Rules 1 and 2 still apply in this case. As a general guideline, PDV names should be as specific as possible to avoid name conflicts and confusion. If bit 0 is 1, this word contains a section-local address. If bit 0 is 0, this word contains a global address. A section-local address is an 18-bit address. A global address is a 30-bit address. 2 .PVEXP points to a counted vector of exported information. A counted vector is a contiguous block of information where the length of the block is contained in the first word. A PDV is an example of a counted vector. Exported information is information that is available for use by other programs. By convention the remainder of the block is defined by the program. If a program class exists, the program class defines the remainder of the program. See the third rule in the PDV naming rules above for program class. 7-3 FIELD TEST If bit 0 is 1, this word contains a section-local address. If bit 0 is 0, this word contains a global address. A section-local address is an 18-bit address. A global address is a 30-bit address. 3 .PVREE is a word reserved for DIGITAL and must be zero. 4 .PVVER is the program's version number. See .JBVER in Appendix C for more information. 5 .PVMEM points to the static memory map for this program. See Section 7.2 for a description of the memory map. If bit 0 is 1, this word contains a section-local address. If bit 0 is 0, this word contains a global address. A section-local address is an 18-bit address. A global address is a 30-bit address. 6 .PVSYM points to the symbol table vector for this program. See Section 7.3 for a description of this vector. If bit 0 is 1, this word contains a section-local address. If bit 0 is 0, this word contains a global address. A section-local address is an 18-bit address. A global address is a 30-bit address. 7 .PVCTM is the time that your program was compiled in TOPS-20 format. 10 .PVCVR is the version number of the main program's compiler. See .JBVER in Appendix C for more information. 11 .PVLTM is the time that the program was loaded in TOPS-20 format. 12 .PVLVR is LINK's version number. 13 .PVMON points to a monitor data block. (Reserved for DIGITAL.) 14 .PVPRG points to a program data block. If bit 0 is 1, this word contains a section-local address. If bit 0 is 0, this word contains a global address. A section-local address is an 18-bit address. A global address is a 30-bit address. 7-4 FIELD TEST 15 .PVCST points to a customer-defined data block. If bit 0 is 1, this word contains a section-local address. If bit 0 is 0, this word contains a global address. A section-local address is an 18-bit address. A global address is a 30-bit address. 7.2 THE PDV STATIC MEMORY MAP LINK creates the static memory map along with the PDV. This static memory map can be used as a resource in dynamic memory allocation. In addition to containing information about allocated pages in use, this memory map contains information about pages that are allocated but zero. In the PDV, the .PVMEM (5) word points to the program's memory map. The memory map is a variable length table of variable length subtables. =================================== ^ | Memory Map Table | | |---------------------------------| ^ | | | | Variable | | Subtable | | | | | | Lengths | |---------------------------------| V | . | . | . | |---------------------------------| ^ | | | | | | Subtable | | | | | | | |---------------------------------| V | =================================== V A subtable defines the beginning and end of a block of contiguous words of memory with the same read/write attributes. The addresses in the subtable are ordered from lowest to highest with the lowest block of memory entered into the subtable first and the highest entered into the subtable last. 7-5 FIELD TEST The format of the memory map is illustrated below. -- 0 17|18 35 | |========================================= | | Length Of Table In Words | | -- ------------------------------------------ | | | Access Bits | Subtable Length "n" | |Sub- | ------------------------------------------ |table | | Lowest Address Of Block | | n | ------------------------------------------ Memory | | | Highest Address Of Block | Map | | ------------------------------------------ | | / / | | / / | -- ------------------------------------------ | . | . | . | -- ------------------------------------------ | | | Access Bits | Subtable Length "n" | |Sub- | ------------------------------------------ |table | | Lowest Address Of Block | | n | ------------------------------------------ | | | Highest Address Of Block | | | ------------------------------------------ | | / / | -- / / -- ========================================== Memory Map Word Symbol Meaning 0 .MMLEN is the length in words of the entire memory map table, including this word. Subtable Word Symbol Meaning 0 .MMDAT is the first subtable word and contains two half-words: MM%ACC and MM%LEN. MM%ACC contains the block access bits. The access bits define the block attributes, namely, whether this block is read-only or read/write. 7-6 FIELD TEST These bits are set according to how the PSECT attributes are set in the source program. LINK defaults read and write attributes if the source program does not explicitly set attributes. All blocks in the memory map implicitly have read and execute access. If bit 3, MM%WR, is set, the block is writable. Undefined access bits are reserved for DIGITAL and must be zero. MM%LEN contains the subtable length including the first word. The length of a subtable is normally 3, but can be greater if additional information is stored after .MMHGH. This area after .MMHGH is reserved for DIGITAL. To obtain the address of the next subtable, add the length of the current subtable to the address of the current subtable. For example, if the length of the current subtable is 5 and its address is 15672, the address of the subtable following is 15677. 1 .MMLOW is the address of the first word of a contiguous block of memory with the same read/write or read-only attributes. If bit 0 is 1, this word contains a section-local address. If bit 0 is 0, this word contains a global address. A section-local address is an 18-bit address. A global address is a 30-bit address. 2 .MMHGH is the address of the last word of the block. If bit 0 is 1, this word contains a section-local address. If bit 0 is 0, this word contains a global address. A section-local address is an 18-bit address. A global address is a 30-bit address. 7.3 SYMBOL TABLE VECTOR A symbol table vector is a pointer to the symbol tables of a program. There is one symbol table vector, and an undefined and defined symbol table per program. The .PVSYM (6) word in the PDV points to the symbol table vector. If there is no symbol table (for example, when you use /NOSYM at link time), the .PVSYM word is 0. If LINK builds the symbol table vector, 7-7 FIELD TEST it always contains the defined and undefined symbol table pointers. The symbol table vector contains subtables that point to each symbol table and gives their length and type. Each subtable is three words long, although only the first two words are currently used. The format of a symbol table vector is illustrated below. 0 5|6 35 -- =================================== Symbol | | Vector Length In Words | Table | -- ----------------------------------- Vector | | | Type | Symbol Table Length | | Sub- | ----------------------------------- | Table| | Symbol Table Pointer | | n | ----------------------------------- | | | Reserved For DIGITAL, Must Be 0 | | -- ----------------------------------- | . | . | . | | Sub- -- ----------------------------------- | Table| | Type | Symbol Table Length | | n | ----------------------------------- | | | Symbol Table Pointer | | | ----------------------------------- | | | Reserved For DIGITAL, Must Be 0 | -- -- =================================== Symbol Table Word Symbol Meaning 0 .STLEN defines the length in words of the symbol table vector including this word. Subtable Word Symbol Meaning 0 .STDAT is the first subtable word and contains two fields: ST%TYP and ST%LEN. ST%TYP is a 6-bit field that contains the symbol table type. The types are: 7-8 FIELD TEST Code Name Type 0 .UNDFD Undefined 1 .R50D Radix-50 defined symbols 2 .R50U Radix-50 undefined symbols 3-37 Reserved for DIGITAL 40-77 Reserved for customers ST%LEN is a 30-bit field that contains the length in words of the particular symbol table. 1 .STPTR is the lowest word in the table. If bit 0 is 1, this word contains a section-local address. If bit 0 is 0, this word contains a global address. A section-local address is an 18-bit address. A global address is a 30-bit address. The Reserved word is reserved for DIGITAL and must be zero. 7-9 A-1 APPENDIX A REL BLOCKS REL (RELocatable) Blocks are the main input to LINK and contain information that LINK uses to load a program. This appendix describes each type of REL Block and gives its format. Terms used throughout this discussion are defined as follows: Header Word: a fullword that contains the REL Block Type in its left half and a short count or long count in its right half. Short Count: a halfword that contains the length of the REL Block, excluding relocation words. The short count appears before each group of 18 decimal, or 22 octal words and excludes the header word. Long Count: a halfword that contains the length of the REL Block, including all words in the block except the header word itself. Relocation Word: a fullword that contains the relocation bits for up to 18 decimal or 22 octal following words. Each relocation bit is either 1, indicating a relocatable halfword, or 0, indicating a nonrelocatable halfword. The first two relocation bits give the relocatability of the left and right halves, respectively, of the next following word; the next two bits give the relocatability of the two halves of the second following word; and so forth for all bits in the word, except any unused bits, which are zero. If a REL Block has relocation words, the first one follows the header word. If more than 18 (decimal) data words follow this relocation word, the next word (after the 18 words) is another A-1 FIELD TEST relocation word. Thus, a REL Block that has relocation words will have one for each 18 words of data that it contains. If the REL Block does not contain an integral multiple of 18 words, the last relocation word has unused bits. NOTE A block with a zero short count does not include a relocation word. Data Word: Any word other than a header word or a relocation word. MBZ: Must Be Zero. NOTE All numbers in this appendix are octal unless specifically noted as decimal. The diagram below shows a REL Block having a short count of 7, and a relocation word. |=======================================================| | Block Type | 7 | |-------------------------------------------------------| | Relocation Word | |-------------------------------------------------------| | Data Word 1 | |-------------------------------------------------------| | Data Word 2 | |-------------------------------------------------------| | Data Word 3 | |-------------------------------------------------------| | Data Word 4 | |-------------------------------------------------------| | Data Word 5 | |-------------------------------------------------------| | Data Word 6 | |-------------------------------------------------------| | Data Word 7 | |=======================================================| A-2 FIELD TEST The diagram below shows a REL Block having a short count of 31 (octal) and two relocation words. |=======================================================| | Block Type | 31 | |-------------------------------------------------------| | Relocation Word | |-------------------------------------------------------| | Data Word 1 | |-------------------------------------------------------| . . . |-------------------------------------------------------| | Data Word 22 | |-------------------------------------------------------| | Relocation Word | |-------------------------------------------------------| | Data Word 23 | |-------------------------------------------------------| . . . |-------------------------------------------------------| | Data Word 31 | |=======================================================| REL Block Types must be numbered in the range 0 to 777777. The following list shows which numbers are reserved for DIGITAL, and which for customers: Type Numbers Use 0 - 37 Reserved for DIGITAL 40 - 77 Reserved for customers 100 - 401 Reserved for DIGITAL 402 - 577 Reserved for customers 600 - 677 Reserved for customer files 700 - 777 Reserved for DIGITAL files 1000 - 1777 Reserved for DIGITAL 2000 - 3777 Reserved for customers 4000 - 777777 Reserved for ASCII text A-3 FIELD TEST Block Type 0 (Ignored) |=======================================================| | 0 | Short Count | |-------------------------------------------------------| | Optional Relocation Word | |-------------------------------------------------------| | Data Word | |-------------------------------------------------------| . . . |-------------------------------------------------------| | Data Word | |=======================================================| Block Type 0 is ignored by LINK. If the short count is 0, then no relocation word follows, and the block consists of only one word. This is how LINK bypasses zero words in a REL file. A-4 FIELD TEST Block Type 1 (Code) |=======================================================| | 1 | Short Count | |-------------------------------------------------------| | Relocation Word | |-------------------------------------------------------| | 0 | Address Word | |-------------------------------------------------------| . . . |-------------------------------------------------------| | Data Word | |=======================================================| Block Type 1 contains data and code. The address is where LINK is to load the data. This address can be relocatable or absolute, depending on the value of bit 1 of the relocation word. LINK loads the remaining data words beginning at that address. If a symbol is used to specify the start address, the following format of Block Type 1 is used: |=======================================================| | 1 | Short Count | |-------------------------------------------------------| | Relocation Word | |-------------------------------------------------------| | Symbol | |-------------------------------------------------------| | Offset | |-------------------------------------------------------| . . . |-------------------------------------------------------| | Data Word | |=======================================================| In this alternate format, the first four bits of the first data word (Symbol) are 1100 (binary), and the word is assumed to be a Radix-50 symbol of type 60. The load address is calculated by adding the value of the global symbol to the offset given in the following word. The third and following data words are loaded beginning at the resulting address. The global symbol must be defined when the Type 1 Block is found. A-5 FIELD TEST Block Type 2 (Symbols) |=======================================================| | 2 | Short Count | |-------------------------------------------------------| | Relocation Word | |-------------------------------------------------------| |Code | Radix-50 Symbol | |-------------------------------------------------------| | Second Word of Pair | |-------------------------------------------------------| . . . |-------------------------------------------------------| |Code | Radix-50 Symbol | |-------------------------------------------------------| | Second Word of Pair | |=======================================================| The first word of each pair has a code in bits 0 to 3 and a Radix-50 symbol in bits 4 to 35 (decimal). The contents of the second word of a pair depends on the given code. The octal codes and their meanings are: Code Meaning 00 This code is illegal in a symbol block. 04 The given symbol is a global definition. Its value, contained in the second word of the pair, is available to other programs. 10 The given symbol is a local definition, and its value is contained in the second word of the pair. If the symbol is followed by one of the special pairs or by a Polish REL Block (as explained below, under code 24), the symbol is considered a partially defined local symbol. Otherwise, it is considered fully defined. 14 The given symbol is a block name (from a translator that uses block structure). The second word of the pair contains the block level. The symbol is considered local; if local symbols are loaded, the value of the block name is entered in the symbol table as its block level. 24 The given symbol is a global definition. However, it is only partially defined at this time, and LINK cannot yet use its value. If the symbol is defined in terms of another symbol, then the next entry in the REL file must be a word pair in a Block Type 2 as follows: |=======================================================| A-6 FIELD TEST | 60 | Other Symbol | |-------------------------------------------------------| | 50 | This Symbol | |=======================================================| In this format, code 50 indicates that the right half of the word depends on the other symbol. If the partially defined symbol is defined in terms of a Polish expression, then the next entry in the REL file must be Block Type 11 (Polish), whose store operator gives this symbol as the symbol to be fixed up. A fixup resolves the symbol. The store operator must be -4 or -6. 30 The given symbol is a global definition. However, it is only partially defined at this time, and LINK cannot yet use its value. If the symbol is defined in terms of another symbol, then the next entry in the REL file must be a word pair in a Block Type 2 as follows: |=======================================================| | 60 | Other Symbol | |-------------------------------------------------------| | 70 | This Symbol | |=======================================================| In this format, code 70 indicates that the left half of the word depends on the other symbol. If the partially defined symbol is defined in terms of a Polish expression, then the next entry in the REL file must be Block Type 11 (Polish), whose store operator gives this symbol as the symbol to be fixed up. The store operator must be -5. 34 The given symbol is a global definition. However, it is only partially defined at this time, and LINK cannot yet use its value. If the symbol is defined in terms of another symbol, then the next entry in the REL file must be a word pair in a Block Type 2 as follows: |=======================================================| | 60 | Other Symbol | |-------------------------------------------------------| | 50 | This Symbol | |-------------------------------------------------------| | 60 | Other Symbol | |-------------------------------------------------------| | 70 | This Symbol | |=======================================================| This format indicates that both halves of the word depend on the other symbol. A-7 FIELD TEST 44 The given symbol is a global definition exactly as in code 04, except that DDT does not output the symbol. 50 The given symbol is a local symbol exactly as in code 10, except that DDT does not output the symbol. 60 The given symbol is a global request. LINK's handling of the symbol depends on the value of the code in the first four bits of the second word of the pair. These codes and their meanings are: 00 The right half of the word gives the address of the first word in a chain of requests for the global memory address. In each request, the right half of the word gives the address of the next request. The chain ends when the address is 0. 40 The right half of the word contains an address. The right half of the value of the requested symbol is added to the right half of this word. 50 The rest of the word contains a Radix-50 symbol whose value depends on the requested global symbol. (If the given Radix-50 symbol is not the one defined in the previous word pair, then this word is ignored.) When the value of the requested symbol is resolved, it is added to the right half of the value of the Radix-50 symbol. 60 The right half of the word contains an address. The right half of the value of the requested symbol is added to the left half of this word. 70 The rest of the word contains a Radix-50 symbol whose value depends on the requested global symbol. (If the given Radix-50 symbol is not the one defined in the previous word pair, then this word is ignored.) When the value of the requested global symbol is resolved, it is added to the left half of the value of the Radix-50 symbol. 64 The given symbol is a global definition exactly as in code 24, except that DDT does not output the symbol. 70 The given symbol is partially defined, where the left half is deferred, as in code 30, except that DDT does not output the symbol. 74 The given symbol is partially defined, where the right half is deferred, as in code 34, except that DDT does not output the symbol. A-8 FIELD TEST Symbols are placed in the symbol table in the order that LINK finds them. However, DDT expects to find the symbols in a specific order. For a non-block-structured program, that order is: Program Name Symbols for Program For a block-structured program whose structure is: Begin Block 1 (same as program name) Begin Block 2 End Block 2 Begin Block 3 Begin Block 4 End Block 4 End Block 3 End Block 1 the order is: Program Name (Block 1) Block Name 2 Symbols for Block 2 Block Name 4 Symbols for Block 4 Block Name 3 Symbols for Block 3 Block Name 1 Symbols for Block 1 This ordering follows the rule that the name and symbols for each block must occur in the symbol table in the order of the block endings in the program. The following fixup rules apply to this block: 1. Only one fixup by a Type 2, 10, 11, 12, 15, 1070, 1072, or 1120 Block is allowed for a given word. (There can be separate fixups for the left and right halves of the same word.) 2. Fixups are not necessarily performed in the order LINK finds them. 3. Chained halfword fixups cannot cross section boundaries. Also, they cannot fixup a location which resolves to word zero of a section unless it is the only address in the chain. 4. Chained fixups must be in strict descending address order. A-9 FIELD TEST 5. A location must contain data before the location can be fixed up. A-10 FIELD TEST Block Type 3 (HISEG) |=======================================================| | 3 | Short Count | |-------------------------------------------------------| | Relocation Word | |-------------------------------------------------------| |High-Segment Program Break | High-Segment Origin | |-------------------------------------------------------| |(Low-Segment Program Break)| (Low-Segment Origin) | |=======================================================| Block Type 3 tells LINK that code is to be loaded into the high segment. The Short Count is either 1 or 2. If the left half of the first data word is 0, subsequent Type 1 blocks found are assumed to have been produced by the MACRO pseudo-op HISEG. This usage is not recommended. It means that the addresses in the blocks are relative to 0, but are to be placed in the program high segment. The right half of the first data word is the beginning of the high segment (usually 400000). If the left half of the first data word is nonzero (the preferred usage), subsequent Type 1 blocks found are assumed to have been produced by the MACRO pseudo-op TWOSEG. The right half is interpreted as the beginning of the high segment, and the left half is the high-segment break; the high-segment length is the difference of the left and right halves. (One-pass translators that cannot calculate the high-segment break should set the left half equal to the right half.) If the second word appears in the HISEG block, its left half shows the low-segment program break, and its right half shows the low-segment origin (usually 0). A-11 FIELD TEST Block Type 4 (Entry) |=======================================================| | 4 | Short Count | |-------------------------------------------------------| | Relocation Word (Zero) | |-------------------------------------------------------| | Radix-50 Symbol | |-------------------------------------------------------| . . . |-------------------------------------------------------| | Radix-50 Symbol | |=======================================================| Block Type 4 lists the entry name symbols for a program module. If a Type 4 block appears in a module, it must be the first block in the module. A library file contains a Type 4 block for each of its modules. When LINK is in library search mode, the symbols in the block are compared to the current list of global requests for the load. If one or more matches occur, the module is loaded. The 4 high order bits of the symbol are 0 and are ignored. A-12 FIELD TEST Block Type 5 (End) |=======================================================| | 5 | Short Count | |-------------------------------------------------------| | Relocation Word | |-------------------------------------------------------| | First Data Word | |-------------------------------------------------------| | (Second Data Word) | |=======================================================| Block Type 5 ends a program module. A Block Type 6 (Name) must be encountered earlier in the module than the Type 5 block. The Short Count is 1 or 2. If the module contains a two-segment program, the first data word is the high-segment break and the second data word is the low-segment break. If the module contains a one-segment program, the first data word is the program break and the second data word is the absolute break. If the count is 1, then the second word is assumed to be 0. If the module contains a program that uses PSECTs, Block Type 5 has no effect except if the /REDIRECT switch was used. If /REDIRECT was used, the break information is used to set the highest location to be loaded for the PSECT specified in /REDIRECT. Each PRGEND pseudo-op in a MACRO program generates a Type 5 REL block. Therefore, a REL file may contain more than one pair of Type 6 and Type 5 blocks. A library REL file has a Type 5 block at the end of each of its modules. A-13 FIELD TEST Block Type 6 (Name) |=======================================================| | 6 | Short Count | |-------------------------------------------------------| | Relocation Word | |-------------------------------------------------------| | Radix-50 Symbol | |-------------------------------------------------------| | (CPU) | (Compiler) | (Length of Blank Common) | |-------------------------------------------------------| Block Type 6 contains the program name, and must precede any Type 2 blocks. (A module should begin with a Type 6 or 1003 block and end with a Type 5 block.) The Short Count is 1 or 2. The first data word is the program name in Radix-50 format; this name cannot be blanks. The second data word is optional; if it appears, it contains CPU codes in bits 0 to 5, a compiler code in bits 6 to 17 (decimal), and the length of the program's blank COMMON in the right halfword. The CPU codes specify processors for program execution as: Bit 2 KS10 Bit 3 KL10 Bit 4 KI10 Bit 5 KA10 If none of these bits are on, then any of the processors can be used for execution. The compiler code specifies the compiler that produced the REL file. The defined codes are: 0 Unknown 10 FORTRAN 20 BLISS-36 1 Not used 11 MACRO 21 BASIC 2 COBOL-68 12 FAIL 22 SITGO 3 ALGOL 13 BCPL 23 (Reserved) 4 NELIAC 14 MIDAS 24 PASCAL 5 PL/I 15 SIMULA 25 JOVIAL 6 BLISS 16 COBOL-7 26 ADA 7 SAIL 17 COBOL A-14 FIELD TEST Block Type 7 (Start) |=======================================================| | 7 | Short Count | |-------------------------------------------------------| | Relocation Word | |-------------------------------------------------------| | Start Address | |-------------------------------------------------------| |(60) | (Optional Radix-50 Symbol) | |=======================================================| Block Type 7 contains the start address for program execution. LINK uses the start address in the last such block processed by the load, unless /START or /NOSTART switches specify otherwise. Short Count is 2. If the Optional Radix-50 Symbol word is present, it must be a Radix-50 symbol with the code 60. LINK forms the start address by adding the value of the symbol to the value in the right half of the preceding word (Start Address). LINK defaults a TOPS-10 style entry vector if the entry length vector is zero. LINK defaults a TOPS-20 style entry vector: o if the program contains nonzero sections and the length of the entry vector is not specified o if the length of the entry vector is 1 o if /NOJOBDAT equals 1 A-15 FIELD TEST Block Type 10 (Internal Request) |=======================================================| | 10 | Short Count | |-------------------------------------------------------| | Relocation Word | |-------------------------------------------------------| | Pointer to Last Request | Value | |-------------------------------------------------------| . . . |-------------------------------------------------------| | Pointer to Last Request | Value | |=======================================================| Block Type 10 is generated by one-pass translators to resolve requests caused by forward references to internal symbols. The MACRO assembler also generates Type 10 blocks to resolve requests for labels defined in literals; a separate chain is required for each PSECT in a program that contains PSECTs. Each data word contains one request for an internal symbol. The left half is the address of the last request for a given symbol. The right half is the value of the symbol. The right half of the last request contains the address of the next-to-last request, and so on, until a zero right half is found. (This is exactly analogous to Radix-50 code 60 with second-word code 00 in a Block Type 2.) If a data word contains -1, then the following word contains a request for the left (rather than right) half of the specified word. In this case, the left half of the word being fixed up contains the address of the next-to-last left half request, and so on, until a zero left half is found. (This is a left half chain analogous to the right half chain described above.) The following fixup rules apply to this block: 1. Only one fixup by a Type 2, 10, 11, 12, 15, 1070, 1072, or 1120 Block is allowed for a given field. (There can be separate fixups for the left and right halves of the same word.) 2. Fixups are not necessarily performed in the order LINK finds them. 3. These are halfword fixups and cannot cross section boundaries. They wrap within a section. Also, halfword fixups cannot fixup a location which resolves to word zero of a section unless it is the only address in the chain. A-16 FIELD TEST 4. Chained fixups must be in strict descending address order. 5. A location must contain data before the location can be fixed up. A-17 FIELD TEST Block Type 11 (Polish) |=======================================================| | 11 | Short Count | |-------------------------------------------------------| | Relocation Word | |-------------------------------------------------------| | Data Halfword | Data Halfword | |-------------------------------------------------------| . . . |-------------------------------------------------------| | Data Halfword | Data Halfword | |=======================================================| Block Type 11 defines Polish fixups for operations on relocatable values or external symbols. Only one store operator code can appear in a Block Type 11; this store operator code can be either a symbol fixup code or a chained fixup code. The store operator code appears at the end of the block. The following fixup rules apply to this block: 1. Only one fixup by a Type 2, 10, 11, 15, 1070, 1072, or 1120 Block is allowed for a given field. (There can be separate fixups for the left and right halves of the same word.) 2. Fixups are not necessarily performed in the order LINK finds them. 3. Chained halfword fixups cannot cross section boundaries. Also, they cannot fixup a location which resolves to word zero of a section unless it is the only address in the chain. 4. Chained fixups must be in strict descending address order. 5. A location must contain data before the location can be fixed up. The data words of a Type 11 block form one Polish string of halfwords. Each halfword contains one of the following: 1. A symbol fixup store operator code. A symbol fixup defines the value to be stored in the value field of the symbol table for the given symbol. A symbol fixup store operator code is followed by two or four data halfwords. 2. A chained fixup store operator code. A-18 FIELD TEST A chained fixup takes a relocatable address whose corrected virtual address is the location for storing or chaining. A chained fixup store operator code is followed by one data halfword. 3. A data type code. Data type code 0 is followed by a data halfword; a data type code 1 or 2 is followed by two data halfwords. 4. An arithmetic or logical operator code. 5. A PSECT index code. This code defines a PSECT index to be used for calculating the relocated addresses that appear in this block. PSECT indexes are needed only for PSECTed programs. A global PSECT index is associated with a Block Type 11. This index appears as the first halfword after the relocation word, and it defines the PSECT for the store address or store symbol. Any addresses for a different PSECT must be preceded by a different PSECT index. Thus, a relocatable data halfword in a different PSECT must appear in one of the following formats: |-------------------------------------------------------| | 400nnn | (operator code) | |-------------------------------------------------------| | (operands) | |-------------------------------------------------------| OR |-------------------------------------------------------| | . . . | 400nnn | |-------------------------------------------------------| | (operator code) | (operands) | |-------------------------------------------------------| where the different PSECT index is nnn+1. Any relocatable address that does not have an explicit preceding PSECT index code preceding its data type code is assumed to be in the same PSECT as the store address for the block. The current PSECT may be set by a previous REL Block type. 6. A halfword of data (preceded by a data type 0 halfword) or two halfwords of data (preceded by a data type 1 or 2 halfword). A-19 FIELD TEST A sequence of halfwords containing a data type code 0 and a data halfword can begin in either half of a word. The codes and their meanings are: .LINK fixup codes -10 does a store into the link that was specified if the address is negative. Stores the address as a link-end. Links the result of the Polish Block. -7 Fullword replacement. No chaining is done. Symbol Fixup Store Operator Codes: -6 Fullword symbol fixup. The following one or two words contain the Radix-50 symbol(s) (with their 4-bit codes). The first is the symbol to be fixed up, and the second is the block name for a block-structured program (0 or nonexistent for other programs). -5 Left half symbol fixup. The following one or two words contain the Radix-50 symbols. The first is the symbol to be fixed up, and the second is the block name for a block-structured program (0 or nonexistent for other programs). -4 Right half symbol fixup. The following one or two words contain the Radix-50 symbols. The first is the symbol to be fixed up, and the second is the block name for a block-structured program (0 or nonexistent for other programs). Chained Fixup Store Operator Codes: -3 Fullword chained fixup. The halfword following points to the first element in the chain. The entire word pointed to is replaced, and the old right half points to the next fullword. -2 Left half chained fixup. The halfword following points to the first element in the chain. -1 Right half chained fixup. The halfword following points to the first element in the chain. Data Type Codes: 0 The next halfword is an operand. 1 The next two halfwords form a fullword operand. A-20 FIELD TEST 2 The next two halfwords form a Radix-50 symbol that is a global request. The operand is the value of the symbol. Arithmetic and Logical Operator Codes: 3 Add. 4 Subtract. The first operand is subtracted by the second. 5 Multiply. 6 Divide. The first operand is divided by the second. 7 Logical AND. 10 Logical OR. 11 Logical shift. The first operand is shifted by the second. A positive second operand causes a shift to the left. A negative operand causes a shift to the right. 12 Logical XOR. 13 Logical NOT (one's complement). 14 Arithmetic negation (two's complement). 15 Count leading zeros (like JFFO instruction). Refer to the MACRO Assembler Reference Manual for information about the ^L operand, which this code implements. 16 Remainder. The first operand is REM by the second. 17 Magnitude. 20 Maximum. 21 Minimum. 22 Comparison. Returns 0 if the two operands are different; -1 if they are equal. 23 Used to resolve the links in a chain. The address of the specified link is used. See -10. 24 Symbol definition test. Returns 0 if the operand (a Radix-50 symbol) is unknown; 1 if it is known but undefined; -1 if it is known and defined. 25 Skip N words of Polish. A-21 FIELD TEST 26 Skip the remainder of the REL module if the argument is nonzero, otherwise return the argument. Undefined symbols are not allowed with this store operator in data type 2 operands. 27 Return contents of location N. No fixups may be done on location N. PSECT Index Codes: 400nnn PSECT index nnn, where nnn is a 3-digit octal integer. For an example of a Type 11 block, the MACRO statements EXTERN B A: EXP <A*B+A> Generate (assuming that A has a relocatable value of zero): |=======================================================| | 11 | 6 | |-------------------------------------------------------| |00|01|00|00|10|10| 0 | |-------------------------------------------------------| | 3 (Add) | 5 (Multiply) | |-------------------------------------------------------| | 0 (Halfword Operand Next) | 0 (Relocatable) | |-------------------------------------------------------| |2 (Fullword Radix-50 Next) | 1st Half of Radix-50 B | |-------------------------------------------------------| | 2nd Half of Radix-50 B | 0 (Halfword Operand Next) | |-------------------------------------------------------| | 0 (Relocatable) | -3 ( Chained Fixup Next) | |-------------------------------------------------------| | 0 (Chain Starts at 0') | . . . | |=======================================================| The first word contains the block type (11) and the short count (6). The second word is the relocation word; it shows that the following halfwords are to be relocated: right half of second following word, left half of fifth following word, left half of sixth following word. The next word shows that the two operations to be performed are addition and multiplication; because this is in Polish prefix format, the multiplication is to be performed on the first two operands first, then addition is performed on the product and the third operand. The next two halfwords define the first operand. The first halfword is a data type code 0, showing that the operand is a single halfword; the next halfword is the operand (relocatable 0). The next three halfwords define the second operand. The first of A-22 FIELD TEST these halfwords contains a data type code 2, showing that the operand is two halfwords containing a Radix-50 symbol with code 60. The next two halfwords give the symbol (B). The next two halfwords define the third operand. The first of these halfwords contains a data type code 0, showing that the operand is a single halfword; the next halfword gives the value of the operand (relocatable 0). The next two halfwords give the store operator for the block. The first of these halfwords contains the chained fixup store operator code -3, showing that a fullword chained fixup is required; the next halfword contains the operand (relocatable 0), showing that the chain starts at relocatable zero. The last halfword is irrelevant, and should be zero. If it is not, LINK issues the LNKJPB error message. A-23 FIELD TEST Block Type 12 (Chain) |=======================================================| | 12 | Short Count | |-------------------------------------------------------| | Relocation Word | |-------------------------------------------------------| | Chain Number | |-------------------------------------------------------| | Chain Address | Store Address | |-------------------------------------------------------| . . . |-------------------------------------------------------| | Chain Number | |-------------------------------------------------------| | Chain Address | Store Address | |=======================================================| Block Type 12 chains together data structures from separately compiled modules. (The MACRO pseudo-ops .LINK and .LNKEND generate Type 12 blocks.) Block Type 12 allows linked lists that have entries in separately compiled modules to be constructed so that new entries can be added to one module without editing or recompiling any other module. The data words in a Type 12 block are paired. The first word of each pair contains a chain number between 1 and 100 (octal). (The chain number is negative if the pair was generated by a .LNKEND pseudo-op.) The second word contains a store address in the right half, and a chain address in the left half. The store address points to the location where LINK will place the chain address of the last entry encountered for the current chain. The first entry in a chain has a zero in the word pointed to by the store address. A MACRO statement of the form: .LINK chain-number,store-address,chain-address generates a word pair in a Type 12 block as shown above. A MACRO statement of the form: .LINK chain-number,store-address generates a word pair in a Type 12 block with a 0 for the chain address field in the REL block. A MACRO statement of the form: .LNKEND chain-number,store-address generates a word pair in a Type 12 Block with a 0 for the chain address and a negative chain number. A-24 FIELD TEST As LINK processes a load, it performs a separate chaining for each different chain number found; thus a word pair in a Type 12 block is related to all other word pairs having the same chain number (even in other loaded modules). Type 12 pairs having different chain numbers (even in the same module), are not related. The following fixup rules apply to this block: 1. Only one fixup by a Type 2, 10, 11, 12, 15, 1070, 1072, or 1120 Block is allowed for a given field. (There can be separate fixups for the left and right halves of the same word.) 2. Fixups are not necessarily performed in the order LINK finds them. 3. Chain numbers above 100 (octal) are reserved by DIGITAL. 4. These are halfword fixups and cannot cross section boundaries. They wrap within a section. Also, halfword fixups cannot fixup a location which resolves to word zero of a section unless it is the only address in the chain. 5. A location must contain data before the location can be fixed up. To show how the chains are formed, we will take some pairs from different programs having the same chain number (1 in the example). The following four programs contain .LINK or .LNKEND pseudo-ops for the chain numbered 1. After each program, the word pair generated in the Type 12 block appears. NOTE When LINK stores an address resulting from a Type 12 REL Block, only the right half of the receiving location is written. You can safely store another value in the left half; it will not be overwritten. A-25 FIELD TEST Example TITLE MOD0 . . . TAG0: BLOCK 1 . . . .LNKEND 1,TAG0 . . . END |=======================================================| | -1 | |-------------------------------------------------------| | 0 | Value of TAG0 | |=======================================================| TITLE MOD1 . . . TAG1: BLOCK 1 . . . .LINK 1,TAG1 . . . END |=======================================================| | 1 | |-------------------------------------------------------| | 0 | Value of TAG1 | |=======================================================| TITLE MOD2 . . . TAG2: BLOCK 1 . . . .LINK 1,TAG2 . A-26 FIELD TEST . . END A-27 FIELD TEST |=======================================================| | 1 | |-------------------------------------------------------| | 0 | Value of TAG2 | |=======================================================| TITLE MOD3 . . . TAG3: BLOCK 1 . . . TAG33: BLOCK 1 . . . .LINK 1,TAG33,TAG3 . . . END |=======================================================| | 1 | |-------------------------------------------------------| | Value of TAG3 | Value of TAG33 | |=======================================================| A-28 FIELD TEST Suppose we load MOD0 first. The .LNKEND statement for MOD0 generates a negative chain number. LINK sees the negative chain number (-1) and recognizes this as the result of a .LNKEND statement for chain number 1. LINK remembers the store address (value of TAG0) as the base of the chain. Next we load MOD1. The .LINK statement for MOD1 does not use the third argument, so the chain address is 0. LINK sees that this is the first entry for chain number 1. Because it is the first entry, LINK places a 0 in the store address (value of TAG1). LINK then remembers the value of TAG1 for use in the next chain entry. (If the chain address is 0, as it is in MOD1, LINK remembers the store address; if the chain address is nonzero, LINK remembers the chain address.) Next we load MOD3. The .LINK statement in MOD3 uses a third argument (TAG3), therefore, the value of TAG3 is used as the chain address. LINK places its remembered address (value of TAG1) in the store address (value of TAG33). Because the chain address (value of TAG3) is nonzero, LINK remembers it for the next entry. Finally we load MOD2. Like MOD1, the .LINK statement for MOD2 does not take a third argument, and thus the chain address is 0. LINK places the remembered address (value of TAG3) in the store address (value of TAG2). Because the chain address is 0, LINK remembers the store address (value of TAG2). At the end of loading, LINK places the last remembered address (value of TAG2) at the address (value of TAG0) given by the .LNKEND statement in MOD0. The results of the chaining can be seen in the following diagram of the loaded core image: MOD0 MOD2 ----------------- ---------------- | | | | | | | | TAG0: |Value of TAG2 | TAG2:|Value of TAG3 | | | | | | | | | | | | | ----------------- ---------------- MOD3 MOD1 ----------------- ---------------- | | | | | | | | TAG3: | | TAG1:| 0 | | | | | TAG33: |Value of TAG1 | | | | | | | ----------------- ---------------- A-29 FIELD TEST Note that the order of loading for modules with .LINK statements is critical. (A module containing a .LNKEND statement can be loaded any time; its treatment is not affected by the order of loading.) For example, if we load the four programs in the order MOD2, MOD3, MOD0, MOD1, we get a different resulting core image: MOD0 MOD1 ----------------- ---------------- | | | | | | | | TAG0: |Value of TAG1 | TAG1:|Value of TAG3 | | | | | | | | | | | | | ----------------- ---------------- MOD3 MOD2 ----------------- ---------------- | | | | | | | | TAG3: | | TAG2:| 0 | | | | | TAG33: |Value of TAG2 | | | | | | | ----------------- ---------------- A-30 FIELD TEST Block Type 14 (Index) |=======================================================| | 14 | 177 | |-------------------------------------------------------| | Sub-Block | | | |-------------------------------------------------------| . . . |-------------------------------------------------------| | | | Sub-Block | | | |-------------------------------------------------------| | -1 | Ptr To Nxt Rel Blk Typ 14 | |=======================================================| Each sub-block is of the form: |=======================================================| | Index-Version Number | Count of Symbols | |-------------------------------------------------------| | Radix-50 Symbol | |-------------------------------------------------------| . . . |-------------------------------------------------------| | Radix-50 Symbol | |-------------------------------------------------------| | Pointer to Module Containing Entry Symbols | |=======================================================| Block Type 14 contains a list of all entry points in a library produced by MAKLIB. The block contains 177 (octal) data words (with no relocation words); if the index requires more entries, additional Type 14 blocks are used. If 177 data words are not needed, zero words pad the block to a length of 177. -1 indicates the end of the sub-block information. The Type 14 block consists of a header word, a number of sub-blocks, and a trailer word containing the disk block address of the next Type 14 block, if any. Each disk block is 128 words. Each sub-block is like a Type 4 block, with three differences: A-31 FIELD TEST 1. The sub-block has no relocation words. 2. The last word of the sub-block points to the module that contains the entry points listed in the sub-block. The right half of the pointer has the disk block number of the module within the file; the left half has the number of words (in that block) that precede the module. If there is no next block, then the word after the last sub-block is -1. 3. The index-version number is used so that old blocks can still be loaded, even if the format changes in the future. A-32 FIELD TEST Block Type 15 (ALGOL) |=======================================================| | 15 | Short Count | |-------------------------------------------------------| | Relocation Word | |-------------------------------------------------------| | Load Address | Length | |-------------------------------------------------------| | Chain Address | Offset | |-------------------------------------------------------| . . . |-------------------------------------------------------| | Chain Address | Offset | |=======================================================| Block Type 15 is used to build the special ALGOL OWN block. The first data word contains the length of the module's OWN block in the right half, and the desired load address for the current OWN block in the left half. Each following word contains an offset for the start of the OWN block in the right half, and the address of a standard righthalf chain of requests for that word of the OWN block in the left half. When LINK sees a REL Block Type 15, it allocates a block of the requested size at the requested address. The length of the block is then placed in the left half of the first word, and the address of the last OWN block seen is placed in the right half. If this is the first OWN block seen, 0 is stored in the right half of the first word. The remaining data words are then processed by adding the address of the first word of the OWN block to each offset, and then storing the resulting value in all the locations chained together, starting with the chain address. At the end of loading, LINK checks to see if the symbol %OWN is undefined. If it is undefined, then it is defined to be the address of the last OWN block seen. In addition, if LINK is creating an ALGOL symbol file, the file specification of the symbol file is stored in the first OWN block loaded. This file specification must use the standard TOPS-10 format below: device:name.type[project-programmer number] A-33 FIELD TEST Block Type 16 (Request Load) |=======================================================| | 16 | Short Count | |-------------------------------------------------------| | Relocation Word (Zero) | |-------------------------------------------------------| | SIXBIT Filename | |-------------------------------------------------------| | Project-Programmer Number | |-------------------------------------------------------| | SIXBIT Device | |-------------------------------------------------------| . . . |-------------------------------------------------------| | SIXBIT Filename | |-------------------------------------------------------| | Project-Programmer Number | |-------------------------------------------------------| | SIXBIT Device | |=======================================================| Block Type 16 contains a list of files to be loaded. The data words are arranged in triplets; each triplet contains information for one file: file name, project-programmer number, and device. The file type is assumed to be .REL. LINK saves the specifications for the files to be loaded, discarding duplicates. At the end of loading, LINK loads all specified files immediately before beginning library searches. The MACRO pseudo-op .REQUIRE generates a Type 16 REL Block. A-34 FIELD TEST Block Type 17 (Request Library) |=======================================================| | 17 | Short Count | |-------------------------------------------------------| | Relocation Word (Zero) | |-------------------------------------------------------| | SIXBIT Filename | |-------------------------------------------------------| | Project-Programmer Number | |-------------------------------------------------------| | SIXBIT Device | |-------------------------------------------------------| . . . |-------------------------------------------------------| | SIXBIT Filename | |-------------------------------------------------------| | Project-Programmer Number | |-------------------------------------------------------| | SIXBIT Device | |=======================================================| Block Type 17 is identical to Block Type 16 except that the specified files are loaded in library search mode. The specified files are searched after loading files given in Type 16 blocks, but before searching system or user libraries. The MACRO pseudo-op .REQUEST generates a Type 17 REL Block. A-35 FIELD TEST Block Type 20 (Common) |=======================================================| | 20 | Short Count | |-------------------------------------------------------| | Relocation Word (Zero) | |-------------------------------------------------------| | Radix-50 Symbol | |-------------------------------------------------------| | Length of Labeled Common Block | |-------------------------------------------------------| . . . |-------------------------------------------------------| | Radix-50 Symbol | |-------------------------------------------------------| | Length of Labeled Common Block | |=======================================================| Block Type 20 allocates labeled COMMON areas. The label for unlabeled COMMON is ".COMM.". If a Block Type 20 appears in a REL file, it must appear before any other block that causes code to be loaded or storage to be allocated in the core image. LINK allocates the specified COMMON into the current PSECT only when allocating COMMON areas in a program that contains PSECTs. The current PSECT is defined as the PSECT specified in a previous Type 22 PSECT Origin Block or Type 1051 Set PSECT Block. If the program does not use PSECTs, the COMMON areas are allocated into the HISEG or LOSEG as specified with the /SEGMENT switch. The data words are arranged in pairs. The first word of each pair contains a COMMON name in Radix-50 format (the four-bit code field must contain 60). The second contains the length of the area to be allocated. For each COMMON entry found, LINK first determines whether the COMMON area is already allocated. If not, LINK allocates it. If the area has been allocated, the allocated area must be at least as large as the current requested allocation. COMMON blocks can be referenced from other block types as standard globally defined symbols. However, a COMMON block must be initially allocated by Block Type 20, Block Type 1074, Block Type 6 (for blank COMMON), or by the /COMMON switch to LINK. Any attempt to initially define a COMMON block with a standard global symbol definition causes the LNKSNC error when the redefining Block Type 20 is later seen. A-36 FIELD TEST Block Type 21 (Sparse Data) |=======================================================| | 21 | Short Count | |-------------------------------------------------------| | Relocation Word (Zero) | |-------------------------------------------------------| | | | Sub-Block | | | |-------------------------------------------------------| . . . |-------------------------------------------------------| | | | Sub-Block | | | |=======================================================| Each sub-block is of the form: |=======================================================| | Long Count | Address | |-------------------------------------------------------| | Data Word | |-------------------------------------------------------| . . . |-------------------------------------------------------| | Data Word | |=======================================================| Block Type 21 contains data to be loaded sparsely in a large area. The first word of each sub-block contains the long count for the sub-block in the left half, and the address for loading the data words in the right half. If the first four bits of the first data word of each sub-block are 1100 (binary) then the word is assumed to be a previously defined Radix-50 symbol of type 60; in this case the left half of the second word is the sub-block count, and the right half plus the value of the symbol is the load address. A-37 FIELD TEST Block Type 22 (PSECT Origin) |=======================================================| | 22 | Short Count | |-------------------------------------------------------| | Relocation Word | |-------------------------------------------------------| | (SIXBIT PSECT Name) or (PSECT Index) | |-------------------------------------------------------| | PSECT Origin | |=======================================================| Block Type 22 contains the PSECT origin (base address). Block Type 22 tells LINK to set the value of the relocation counter to the value of the counter associated with the given PSECT name. All following TWOSEG REL blocks are relocated with respect to this PSECT until the next Block Type 22, 23, or 1051 is found. When data or code is being loaded into this PSECT, all relocatable addresses are relocated for the PSECT counter. MACRO generates a Block Type 22 for each .PSECT and .ENDPS pseudo-op it processes. These Type 22 blocks are interleaved with the other blocks to indicate PSECT changes. A Type 22 block is also generated at the beginning of each symbol table to show to which PSECT the table refers. A-38 FIELD TEST Block Type 23 (PSECT End Block) |=======================================================| | 23 | Short Count | |-------------------------------------------------------| | Relocation Word | |-------------------------------------------------------| | PSECT Index | |-------------------------------------------------------| | PSECT Break | |=======================================================| Block Type 23 contains information about a PSECT. The PSECT index uniquely identifies the PSECT within the module being loaded. The Type 24 block assigns the index. The PSECT break gives the length of the PSECT. This break is interpreted as being relative to the PSECT's origin in the current module. A-39 FIELD TEST Block Type 24 (PSECT Header Block) |=======================================================| | 24 | Short Count | |-------------------------------------------------------| | Relocation Word | |-------------------------------------------------------| | PSECT Name (SIXBIT) | |-------------------------------------------------------| | Attributes | PSECT Index | |-------------------------------------------------------| | PSECT Origin (optional) | |=======================================================| Block Type 24 contains information concerning a specified PSECT. The first word contains the block type number and the number of words associated with the block. The second word contains the relocation information. The third word contains the PSECT name in SIXBIT. The fourth word is the PSECT origin specified for this module. Bit Interpretation MACRO .PSECT Keyword 11 PSECT is all within one section. This is the default. 12 PSECT is in a nonzero section. 13 PSECT is page-aligned. PALIGNED 14 Concatenate parts of CONCATENATE PSECTs seen in distinct modules. 15 Overlay parts of PSECTs OVERLAY seen in distinct modules. 16 Read-only RONLY 17 Read and write RWRITE LINK must find a Type 24 or 1050 block for a PSECT before it finds the index for that PSECT. (MACRO generates a complete set of Type 24 blocks for all PSECTs in a module before generating Type 2 (Symbol Table) Blocks and Type 11 (POLISH) Blocks.) A-40 FIELD TEST Block Type 37 (COBOL Symbols) |=======================================================| | 37 | Short Count | |-------------------------------------------------------| | Relocation Word | |-------------------------------------------------------| | Data Word | |-------------------------------------------------------| . . . |-------------------------------------------------------| | Data Word | |=======================================================| Block Type 37 contains a debugging symbol table for COBDDT, the COBOL debugging program. If local symbols are being loaded, the table is loaded. If a REL file contains a Block Type 37, it must appear after all other blocks that cause code to be loaded or storage to be allocated in the core image. This block is in the same format as the Type 1 REL Block. A-41 FIELD TEST Block Type 100 (.ASSIGN) |=======================================================| | 100 | Short Count | |-------------------------------------------------------| | Relocation Word | |-------------------------------------------------------| |Code | Radix-50 Symbol 1 | |-------------------------------------------------------| |Code | Radix-50 Symbol 2 | |-------------------------------------------------------| | Offset | |=======================================================| Block Type 100 defines Symbol 1 (in the diagram above) as a new global symbol with the current value of Symbol 2, and then increases the value of Symbol 2 by the value of the given offset. LINK ignores Code in Symbol 2. NOTE Symbol 2 must be completely defined when the Block Type 100 is found. The MACRO pseudo-op .ASSIGN generates a Type 100 REL Block. A-42 FIELD TEST Block Type 776 (Symbol File) |=======================================================| | 776 | Long Count | |-------------------------------------------------------| | .JBSYM-Style Symbol Table Pointer | |-------------------------------------------------------| | .JBUSY-Style Symbol Table Pointer | |-------------------------------------------------------| | Data Word | |-------------------------------------------------------| . . . |-------------------------------------------------------| | Data Word | |=======================================================| Block Type 776 must begin in the first word of the file, if it occurs at all. This block type shows that the file is a Radix-50 symbol file. The data words form a Radix-50 symbol table for DDT in the same format as the table loaded for the switches /LOCALS/SYMSEG or the switch /DEBUG. A-43 FIELD TEST Block Type 777 (Universal File) |=======================================================| | 777 | Long Count | |-------------------------------------------------------| | Data Word | |-------------------------------------------------------| . . . |-------------------------------------------------------| | Data Word | |=======================================================| Block Type 777 is included in a universal (UNV) file that is produced by MACRO so that LINK will recognize when a UNV file is being loaded inadvertently. When a Block Type 777 is encountered, LINK produces a ?LNKUNS error. A-44 FIELD TEST Block Type 1000 (Ignored) |=======================================================| | 1000 | Long Count | |-------------------------------------------------------| | Data Word | |-------------------------------------------------------| . . . |-------------------------------------------------------| | Data Word | |=======================================================| Block Type 1000 is ignored by LINK. A-45 FIELD TEST Block Type 1001 (Entry) |=======================================================| | 1001 | Long Count | |-------------------------------------------------------| | Symbol | |-------------------------------------------------------| . . . |-------------------------------------------------------| | Symbol | |=======================================================| Block type 1001 is used to declare symbolic entry points. Each word contains one SIXBIT symbol. This block is similar in function to block type 4. A-46 FIELD TEST Block Type 1002 (Long Entry) |=======================================================| | 1002 | Long Count | |-------------------------------------------------------| | Symbol Name | |-------------------------------------------------------| . . . |-------------------------------------------------------| | Symbol Name | |=======================================================| Block type 1002 is used to declare a symbolic entry point with a long name in SIXBIT. The count reflects the symbol length in words. A-47 FIELD TEST Block Type 1003 (Long Title) ======================================================= | 1003 | Long Count | |-----------------------------------------------------| | 1 | Count of Title words | |-----------------------------------------------------| | Program Title | |-----------------------------------------------------| | Additional Program Title | |-----------------------------------------------------| | Additional Program Title | |-----------------------------------------------------| . . . |-----------------------------------------------------| | | Count of | | 2 | ASCII Comment Words | |-----------------------------------------------------| | More Comment Words | |-----------------------------------------------------| | More Comment Words | |-----------------------------------------------------| . . . |-----------------------------------------------------| | 3 | Count Of Compiler Words | |-----------------------------------------------------| | Compiler Code | CPU Bits | |-----------------------------------------------------| | Compiler Name (in ASCII) | |-----------------------------------------------------| | Additional Compiler Name | |-----------------------------------------------------| | Additional Compiler Name | |-----------------------------------------------------| . . . ------------------------------------------------------ | 4 | 0 | |----------------------------------------------------| | Compile Date and Time | |----------------------------------------------------| | Compiler Version Number | |----------------------------------------------------| | 5 | 0 | |----------------------------------------------------| | Device Name | |----------------------------------------------------| A-48 FIELD TEST | UFD or 0 for TOPS-20 | |----------------------------------------------------| | 6 | 0 | |----------------------------------------------------| | TOPS-10 File Name | |----------------------------------------------------| | File Extension | 0 | |----------------------------------------------------| | 7 | number of SFDs | |----------------------------------------------------| | SIXBIT SFD 1 | |----------------------------------------------------| | SIXBIT SFD 2 | |----------------------------------------------------| . . . |----------------------------------------------------| | 10 | Count of TOPS-20 File | | | Spec Words (in ASCII) | |----------------------------------------------------| | TOPS-20 File Spec | |----------------------------------------------------| | TOPS-20 File Spec | |----------------------------------------------------| . . . |----------------------------------------------------| | 11 | 0 | |----------------------------------------------------| | Source Version Number | |----------------------------------------------------| | Date and Time | |====================================================| Block type 1003 is used to declare long title symbols in SIXBIT and to furnish other information about the source module. This Block Type contains the information that LINK prints in the map file. Block type 1003 consists of sub-blocks 1 through 11 (octal). The Title sub-block must be the first sub-block specified and cannot be omitted. You can omit other sub-blocks, but the sub-blocks must remain in numerical order. The Program Title is a one word title from 1- to 72-SIXBIT characters long. You can specify a title of 0, and LINK defaults to .MAIN, but you may want to enter a more specific title. For the compiler code and the CPU code, refer to the explanation of Block Type 6, where these codes are listed. A-49 FIELD TEST In sub-block 5, the Device name is where the source file resides and the UFD and SFD words are 0 for TOPS-20. In sub-block 10, the TOPS-20 file specification must be specified in the following format: <directory.subdirectories>filename.filetype.version number;attributes This specification identifies the source file. LINK outputs this file specification to the map file in the order you enter it. The Time and Date are in TOPS-10 format. The date is derived from a code. That is given by the following formula: code = 31[12(year-1964)+(month-1)]+(day-1) You can obtain the current day, month, and year using the formulas: day = mod(code,31)+1 month = mod(code/31,12)+1 year = (code/372)+1964 The Time is the time in milliseconds that has elasped since midnight. See the TOPS-10 Monitor Calls Reference Manual for additional information on date and time. A-50 FIELD TEST Block Type 1004 (Byte Initialization) |======================================================| | 1004 | Long Count | |------------------------------------------------------| | Relocation Word | |------------------------------------------------------| | Byte Count | |------------------------------------------------------| | Byte Pointer | |------------------------------------------------------| | Byte String | |------------------------------------------------------| . . . The above Block Type 1004 format is used to move a character string into static storage. This format uses old style relocation. The byte count is the number of bytes in the string. The byte pointer is relocated and used to initialize a string in the user's program. A second format for Block Type 1004 follows: |=======================================================| | 1004 | Long Count | |-------------------------------------------------------| | Relocation Word | |-------------------------------------------------------| | Global Symbol | |-------------------------------------------------------| | Byte Count | |-------------------------------------------------------| | Byte Pointer | |-------------------------------------------------------| | Byte String | |-------------------------------------------------------| . . . In this format, the global symbol (in SIXBIT) is used to relocate the byte pointer. The symbol must be defined when this REL block is encountered. A-51 FIELD TEST Block Types 1010 - 1037 (Code Blocks) Block types 1010 through 1037 are similar in function to blocks of Type 1. They contain code and data to be loaded. These blocks also contain relocation bytes that permit inclusion of PSECT indexes local to the module. For PSECTed programs with many inter-PSECT references this permits a substantial decrease in the size of the REL files. The number of PSECTs that can be encoded in this manner is limited by the size of the relocation byte. A set of parallel code blocks differing only in the size of the relocation byte permits the compiler or assembler to select the most space efficient representation according to the number of PSECTs referenced in a given load module. This set of blocks is divided by the type of relocation: Right Relocation Block types 1010 - 1017 Left/Right Relocation Block types 1020 - 1027 Thirty-bit Relocation Block types 1030 - 1037 A-52 FIELD TEST Blocks 1010 - 1017 (Right Relocation) |=======================================================| | 1010 | Long Count | |-------------------------------------------------------| | b1 | b2 | b3 | . . . | bi | |-------------------------------------------------------| | Beginning Address | |-------------------------------------------------------| | Data 1 | |-------------------------------------------------------| | Data 2 | |-------------------------------------------------------| . . . |-------------------------------------------------------| | Data (i-1) | |=======================================================| Block Types 1010 - 1017 are identical in function. They differ only in the size and number of relocation bytes. Each relocation byte applies to the right half of the corresponding data word. Long Count is the length of the REL block, including all words in the block except the Header word. b1,b2...bi are the relocation bytes. Each relocation byte contains a PSECT index number. A PSECT index must be explicitly specified. There is no default for PSECT index. A zero byte means no relocation (absolute data). All PSECT index numbers must reference predefined PSECTs. In the table below, I-value is the maximum number of PSECT indexes that can be referenced in a field. Size I-value Block Type 2 18 1010 3 12 1011 6 6 1012 9 4 1013 18 2 1014 A size of 2 allows 3 PSECTs; a size of 3 allows 7 (2**3-1) PSECTs, etc. A-53 FIELD TEST Beginning Addr is the address where the block of code is to be loaded. This address is relocated with respect to the 30-bit address for the PSECT in "b1". It is not necessary to declare the current PSECT with a block of Type 22. Data1...Data(i-1) are the words to be loaded. The right halves of these words are relocated with respect to the various PSECTs that are specified by the corresponding relocation bytes, b2,b3,...bi. A-54 FIELD TEST Block Types 1020-1027 (Left/Right Relocation Blocks) |=======================================================| | 1020 | Long Count | |-------------------------------------------------------| | L1 | R1 | L2 | R2 | . . . | Li | Ri | |-------------------------------------------------------| | Beginning Address | |-------------------------------------------------------| | Data 1 | |-------------------------------------------------------| | Data 2 | |-------------------------------------------------------| . . . |-------------------------------------------------------| | Data (i-1) | |=======================================================| Block Types 1020 - 1027 are identical in function. They differ only in the size and number of relocation bytes. Each pair of bytes applies to the left and right halves, respectively, of the corresponding data word. Long Count is the length of the REL block, including all words except the Header word. L1,R1 are the relocation byte pairs for the left and right halves respectively. In the table below, I-value is the maximum number of PSECT indexes that can be referenced in a field. Size I-Value Block Type 2 9 1020 3 6 1021 6 3 1022 9 2 1023 (Block Types 1024-1027 are reserved) Polish blocks must be used to do left relocation if there are more than (2**9)-1 (decimal 511) PSECTs local to the module. Beginning Addr is the address of the block of code to be loaded. This address is relocated with respect to the 30-bit address for the PSECT in "R1". "L1" must be zero. A-55 FIELD TEST Data1,..Data(i-1) is the block of code to be loaded, whose left and right halves are relocated with respect to the various PSECTs as specified by the corresponding byte pairs. The L2 index relocates the left half of data word 1 and R2 relocates the right half of data word 1. Note that these blocks contain 2 bytes for each data word as compared to one byte for Block Types 1010 - 1017. A-56 FIELD TEST Block Types 1030 - 1037 (Thirty-bit Relocation Blocks) |=======================================================| | 1030 | Long Count | |-------------------------------------------------------| | b1 | b2 | . . . | bi | |-------------------------------------------------------| | Beginning Address | |-------------------------------------------------------| | Data 1 | |-------------------------------------------------------| | Data 2 | |-------------------------------------------------------| . . . |-------------------------------------------------------| | Data (i-1) | |=======================================================| Block Types 1030 - 1037 are identical in function. They differ only in the size and number of relocation bytes. Each relocation byte applies to the entire 30-bit address field of the corresponding data word. 103x is the Block Type number Long Count is the length of the REL block, including all words in the block except the Header word. b1,b2..bi are the relocation bytes. Each relocation byte contains a PSECT index number. A zero byte means no relocation (absolute data). All PSECT index numbers must reference predefined PSECTs. In the table below, I-value is the maximum number of PSECT indexes that can be referenced in a field. Size I-Value Block Type Maximum No. of PSECTs 2 18 1030 3 3 12 1031 7 6 6 1032 63 9 4 1033 511 18 2 1034 More than 511 (Block Types 1035 - 1037 are reserved) Beginning Addr is the address where the block of code is to A-57 FIELD TEST be loaded. This address is relocated with respect to the PSECT in "b1". It is not necessary to declare the current PSECT with a block of Type 22. Data1...Data(i-1) are the words to be loaded. The 30-bit address field of these words is relocated with respect to the various PSECTs that are specified by the corresponding relocation bytes, b2,b3,...bi. A-58 FIELD TEST Block Type 1042 (Request Load for SFDs) |=======================================================| | 1042 | Long Count | |-------------------------------------------------------| | Device | |-------------------------------------------------------| | SIXBIT Filename | |-------------------------------------------------------| | File Extension | Directory Count | |-------------------------------------------------------| | Project-Programmer Number | |-------------------------------------------------------| | SFD1 | |-------------------------------------------------------| | SFD2 | |-------------------------------------------------------| . . . Block Type 1042 contains a list of files to be loaded. It is similar to blocks of Type 16, but it supplies TOPS-10 sub-file directories for the files being requested. The first three data words (device, file name, and extension) are required. The right half of the third word (directory count) specifies the number of directory levels that are included. For example, the directory [27,5434,SFD1,SFD2] would have a directory count of 3. LINK saves the specifications for the files to be loaded, discarding duplicates. LINK loads all specified files at the end of loading, and immediately before beginning library searches. A-59 FIELD TEST Block Type 1043 (Request Library for SFDs) |=======================================================| | 1043 | Long Count | |-------------------------------------------------------| | Device | |-------------------------------------------------------| | SIXBIT Filename | |-------------------------------------------------------| | File Extension | Directory Count | |-------------------------------------------------------| | Project-Programmer Number | |-------------------------------------------------------| | SFD1 | |-------------------------------------------------------| | SFD2 | |-------------------------------------------------------| . . . Block Type 1043 specifies the files to be searched as libraries. It is similar to Type 17 Blocks, except that it provides TOPS-10 sub-file directories. The first three data words (device, file name, and extension) are required. The right half of the third word (directory count) specifies the number of directory levels that are included. For example, the directory [27,5434,SFD1,SFD2] would have a directory count of 3. The specified files are searched after requested files are loaded, but before user and system libraries are searched. A-60 FIELD TEST Block Type 1044 (ALGOL Symbols) |=======================================================| | 1044 | Long Count | |-------------------------------------------------------| | Data Word | |-------------------------------------------------------| . . . |-------------------------------------------------------| | Data Word | |=======================================================| Block Type 1044 contains a debugging symbol table for ALGDDT, the ALGOL debugging program. If an ALGOL main program has been loaded, or if you have used the /SYFILE:ALGOL switch, LINK writes the data words into a SYM file. In addition, if any Type 15 (ALGOL OWN) REL blocks have been seen, LINK stores the file specification of the file into the first OWN block loaded. NOTE If you have specified the /NOSYMBOLS switch, or if you have specified the /SYFILE switch with an argument other than ALGOL, then LINK ignores any Type 1044 blocks found. A-61 FIELD TEST Block Type 1045 (Writable Links) |=======================================================| | 1045 | Long Count | |-------------------------------------------------------| | Flags | |-------------------------------------------------------| | Symbol | |-------------------------------------------------------| | Symbol | |-------------------------------------------------------| . . . |-------------------------------------------------------| | Symbol | |=======================================================| Block type 1045 declares as writable either the link containing the current module or the links containing the definitions of the specified symbols or both. This block type must follow any common block declarations (Types 20 or 6) in a module. The flag word indicates which links are writable. If bit one is set then the link containing the current module and the links containing the definitions of the specified symbols are writable. If bit one of the flag word is not set then the link containing the current module is not writable, but the links containing the specified symbols are writable. All unused flag bits are reserved and should be zero. Any symbols specified in a block of Type 1045 must be defined in the path of links leading from the root link to the current link. A module cannot declare a parallel or inferior link to be writable. If the symbol name contains six or fewer characters it is represented in a single word, left justified, with the following format: |=======================================================| | SIXBIT Symbol Name | |=======================================================| A-62 FIELD TEST If the symbol name contains more than six characters it is represented in the following format: Bits 0 5 6 29 30 35 |=======================================================| | 0 | Reserved (0) | Long Count | |-------------------------------------------------------| | Word 1 of SIXBIT Symbol Name | |-------------------------------------------------------| | Word 2 of SIXBIT Symbol Name | |-------------------------------------------------------| . . . |-------------------------------------------------------| | Word (Long Count -1) of SIXBIT Symbol Name | |=======================================================| The first six bits of a long symbol are always 0. This distinguishes a long symbol name from a single word symbol name. N is the length of the symbol name including the header word. The remaining words contain the symbol name in SIXBIT, six characters to a word, left justified. A-63 FIELD TEST Block Type 1050 (Long PSECT Name Block) 0 17 18 35 |=======================================================| | 1050 | Long Count | |-------------------------------------------------------| | Reserved for DIGITAL, MBZ | Index | |-------------------------------------------------------| | SIXBIT Symbol Name | |-------------------------------------------------------| | Attributes | |-------------------------------------------------------| | Origin (Optional) | |=======================================================| where SIXBIT Symbol Name may be either a word of up to six SIXBIT characters, or the following block. 0 5 6 29 30 35 |=======================================================| | 0 | Reserved for DIGITAL, MBZ | Long Count | |-------------------------------------------------------| | First word of SIXBIT Symbol Name | |-------------------------------------------------------| | Second word of SIXBIT Symbol Name | |-------------------------------------------------------| |-------------------------------------------------------| | Nth word of SIXBIT Symbol Name | |=======================================================| Block Type 1050 creates a PSECT with the given name, if none currently exists. It also assigns a unique index number to the PSECT. This index is binding only in the current module. LINK clears PSECT indexes at the end of each module. PSECT indexes in any given module must be declared in consecutive order starting at index "1". Blocks Type 1050 also assigns attributes to a PSECT and specifies the PSECT's origin address. The attributes that can be assigned are: Bit Description 11 PSECT is confined to one section. If this bit is set, LINK gives an error if the PSECT overflows. You can set Bit 11 or Bit 12, but not both. Bit 11 is the default. There is no equivalent MACRO .PSECT Keyword. 12 PSECT is in a nonzero section. If this bit is set, LINK gives a warning if the PSECT is placed in section zero. There is no equivalent MACRO .PSECT Keyword. A-64 FIELD TEST 13 PSECT is PAGE-ALIGNED. PALIGNED is the equivalent MACRO .PSECT Keyword. 14 CONCATENATE parts of PSECTs seen in distinct modules. You can set Bit 14 (CONCATENATED) or Bit 15 (OVERLAID), but not both. The CONCATENATE and OVERLAID (listed below) attributes are mutually exclusive. These attributes also span modules; so if one module sets an attribute and a later module sets a mutually exclusive attribute, LINK issues the warning: %LNKCOE Both CONCATENATE and OVERLAY attributes specified for psect [name]. If neither is set, CONCATENATED is the default, and a warning message is not returned if subsequent pieces of the PSECT are marked OVERLAID. CONCATENATED is the equivalent MACRO .PSECT Keyword. 15 OVERLAID parts of PSECTs seen in distinct modules. OVERLAID is the equivalent MACRO .PSECT Keyword. 16 This PSECT must be READ-ONLY. You can set Bit 16 (READ-ONLY) or Bit 17 (WRITABLE), but not both. The READ-ONLY and WRITABLE (listed below) attributes are mutually exclusive. These attributes also span modules; so if one module sets an attribute and a later module sets a mutually exclusive attribute, LINK issues the warning: %LNKRWA Both READ-ONLY and WRITABLE attributes specified for psect [name]. If neither is set, WRITABLE is the default, and a warning message is not returned if subsequent pieces of the PSECT are marked READ-ONLY. RONLY is the equivalent MACRO .PSECT Keyword. 17 This PSECT must be WRITABLE. RWRITE is the equivalent MACRO .PSECT Keyword. All other bits in the Attributes word must be 0. The origin specified in this block is absolute. At least one block type 1050 (or the related block 24) is required for each PSECT being loaded, and this block must be loaded prior to any other blocks that reference its PSECT (that is, use the unique index number). A-65 FIELD TEST Block Type 1051 (Set Current PSECT) |=======================================================| | 1051 | Long Count | |-------------------------------------------------------| | Reserved For DIGITAL, MBZ | Index | |=======================================================| Block type 1051 resets the "current PSECT" against which LINK relocates subsequent REL blocks if no PSECT is explicitly specified. A-66 FIELD TEST Block Type 1052 (PSECT End) |=======================================================| | 1052 | Long Count | |-------------------------------------------------------| | MBZ | PSECT Index Number | |-------------------------------------------------------| | PSECT Break | |-------------------------------------------------------| . . . |-------------------------------------------------------| | MBZ | PSECT Index Number | |-------------------------------------------------------| | PSECT Break | |=======================================================| Block Type 1052 allocates additional space for a given PSECT. This space is located between the last address in the PSECT containing data and the address given by the PSECT break. A block of Type 1052 can contain more than one pair of PSECT indexes and breaks. A module must contain a block of Type 24 (PSECT Name) or Type 1050 (Long PSECT Name) with the given PSECT index before a block of Type 1052 is generated. If a given PSECT has more than one block 1052 in a single module, the block with the largest break address is used. The break is interpreted as being relative to the PSECT's origin in the current module. A-67 FIELD TEST Block Type 1060 (Trace Block Data) |=======================================================| | 1060 | Long Count | |-------------------------------------------------------| | SIXBIT Edit Name | |-------------------------------------------------------| | Active Code | Last Changer | |-------------------------------------------------------| | Creator Code | 15-Bit Date Created | |-------------------------------------------------------| | Installer Code | 15-Bit Date Installed | |-------------------------------------------------------| | Reserved | |-------------------------------------------------------| | Edit Count | PCO Group Count | |-------------------------------------------------------| | | \ / Associated Edit Names And Codes / \ | | |-------------------------------------------------------| | | \ / Program Change Order Groups / \ | | |=======================================================| Block Type 1060 contains data used by the MAKLIB program. LINK ignores this block type. A-68 FIELD TEST Block Type 1070 (Long Symbol Names) |====================================================================| | 1070 ! Long Count | |--------------------------------------------------------------------| | Code ! 0 ! N !P! R ! V ! 0 | |--------------------------------------------------------------------| | Left PSECT index ! Right PSECT index | |--------------------------------------------------------------------| | Value | |--------------------------------------------------------------------| | Name | |--------------------------------------------------------------------| \ \ \ N additional name words \ \ \ |--------------------------------------------------------------------| \ \ \ V additional value words \ \ \ |====================================================================| This block defines a long symbol. A symbol defined with this block can: o be output to the DDT symbol table. Symbols longer than 6 characters are truncated when output to the DDT symbol table. o be output to LINK MAP if requested. o have its value relocated as specified. o resolve global requests. The Long Symbol Name Block is divided into two sections, the basic and the extension sections. The basic section consists of four words: the flag word, an optional PSECT index word, the value word, and name word. The Flags word contains information about the type of symbol, the length of the symbol name, and relocation. The optional word defines the PSECT index. The Value word contains the symbol's value. The Name word contains the symbol's name. If the name or the value cannot fit in a single word, the block contains an extension section that consists of as many words as are necessary to accommodate the symbol name and the value. The length of the symbol name and value is stored in the Flag word and determines how many words are allocated for the long symbol name in the extension section. The maximum size for the symbol is 72 characters. In the case of a short symbol name only the basic section is used. A-69 FIELD TEST The following pages provide detailed information on the block. For each word, the field, bits, and description is given. Field Bits Header Word Description Block Type 0-17 1070 Block Length 18-35 Number of words used in this block Flag Word Description Code 0-8 A nine-bit code field: bit 0 Must Be Zero 000 Program name 100 Local symbol definitions 110 Suppressed to DDT 120 MAP only 200 Global symbols completely defined by one word 202 Undefined 203 Right fixup 204 Left fixup 205 Right and left fixups 206 30-bit fixup 207 Fullword fixup 210-217 Suppress to DDT 220-227 MAP only 240 to Global symbol request for 247 chain fixup 240 Ignored (No fixup) 241 Undefined 242 Undefined 243 RH fixup 244 LH fixup 245 Undefined 246 30-bit fixup 247 Fullword fixup 250 to Global request for A-70 FIELD TEST 257 additive fixups (the value of x has the same meaning as in 0-7 above) 260 to Global request for additive 267 symbol fixups (the value of x has the same meaning as in 0-7 above) 300 Block names A-71 FIELD TEST NOTE All symbols that require a fixup for their definition must have the fixup block immediately following the entry. Field Bits Description Flag Word (Continued) 0 9-10 Must Be Zero N--Name length 11-17 If not zero, extended name field of length n words is used, so that the name occupies N+1 words. P--PSECT Flag 18 If bit 18=0, relocate with respect to the current PSECT. No PSECT numbers are needed. If bit 18=1, relocate with respect to the PSECT specified in the next word. R--Relocation Type 19-21 3-bit relocation type field. 0 Absolute 1 Right half 2 Left half 3 Both halves 4 30-bit 5 Fullword V--Value field 22-28 Number of additional value words if value is a long symbol. 0 29-35 Not used PSECT Indexes PSECT Indexes Exists only if bit 18 equals 1 in the Flag word. Contains Left and Right PSECT numbers. Bit 0 and bit 18 of this word are zeros. Value Value Word Contains the symbol value, it may be relocated as specified by the relocation type and the PSECT numbers provided. Contains a symbol for 26x A-72 FIELD TEST codes. Name Name Word Contains the symbol name in SIXBIT. N Additional Name Words Additional name field Optional. It exists only if N > 0. It contains the additional characters when a long symbol name is used. V Additional Value Words Additional value field Optional. It exist only if the V field is greater than 0. This field contains the additional characters when a long symbol name is being resolved. The first word contains the length of the extended field. The following fixup rules apply to this block: 1. Only one fixup by a Type 2, 10, 11, 12, 15, 1070, 1072, or 1120 Block is allowed for a given field. (There can be separate fixups for the left and right halves of the same word.) 2. Fixups are not necessarily performed in the order LINK finds them. 3. A location must contain data before the location can be fixed up. A-73 FIELD TEST Block Type 1072 (Long Polish Block) |=======================================================| | 1072 | Long Count | |-------------------------------------------------------| | Half-Word Polish String | |-------------------------------------------------------| . . . |=======================================================| Long Polish Blocks of type 1072 define Polish fixups for operations on relocatable long external symbols. This Block Type is interpreted as a string of 18-bit operators and operands. The block is in Polish prefix format, with the store operator at the end of the block. Each halfword can contain one of the following: o A halfword code in which the first 9 bits contain the data length (when applicable) and the second 9 bits contain the code telling LINK how to interpret the data that follows. o A halfword data or a part of a larger data packet to be interpreted by LINK as indicated by the code that immediately precedes it. o A PSECT index of the format 400000+N. The PSECT index field of a long Polish block causes LINK to relocate addresses against the PSECT number specified in the "N" of the PSECT index 400000+N. o A Polish operator. NOTE Operations are performed in the order in which they are encountered. A-74 FIELD TEST CODE DEFINITIONS Data Packet Codes Category Code Description Operand xxxyyy next "xxx+1" halfwords contain data of type "yyy" 000000 halfword - absolute 001000 fullword - absolute 000001 halfword - relocatable 001001 fullword - relocatable 000010 fullword symbol name in Radix-50 xxx010 xxx+1 halfwords of symbol name in SIXBIT NOTE You cannot store a symbol in a single halfword. You must place the symbol in the first halfword and fill the second halfword with zeroes. Polish Operator Codes Category Code Description Operator 000100 Add 000101 Subtract 000102 Multiply 000103 Divide 000104 Logical AND 000105 Logical OR 000106 Logical shift 000107 Logical XOR 000110 One's complement (not) 000111 Two's complement (negative) 000112 Count leading zeros 000113 Remainder 000114 Magnitude 000115 Maximum 000116 Minimum 000117 Equal relation 000120 Link 000121 Defined 000122-00177 Reserved A-75 FIELD TEST Store Operator Codes Store Operator xxx=0 or 1 For xxx=0 Next two halfwords contain a Radix-50 symbol to be resolved. xxx777-xxx770 Chained fixup with relocatable addresses. Next xxx+1 halfwords contain the start address of the chain. 000777 Right half chained fixup with relocatable address. Next halfword contains a relocatable address. 000776 Left half chained fixup with relocatable address. Next halfword contains a relocatable address. 000775 30-bit chained fixup with relocatable address. Next halfword contains a relocatable address. 000774 Fullword chained fixup with relocatable address. Next halfword contains a relocatable address. 001777 Right half chained fixup with relocatable address. Next fullword contains a relocatable address. 001776 Left half chained fixup with relocatable address. Next fullword contains a relocatable address. 001775 30-bit chained fixup with relocatable address. Next fullword contains a relocatable address. 001774 Fullword chained fixup with relocatable address. Next halfword contains a relocatable address. xxx767-xxx764 Chained fixups with absolute addresses. 000767-000764 Chained fixup with absolute address. Next halfword contains an absolute address. 001767-001764 Chained fixup with absolute fullword A-76 FIELD TEST address. Next two halfwords contain absolute address. xxx757-xxx754 Symbol fixup. For 1<=xxx<=377 the next xxx+1 halfwords contain a SIXBIT symbol name to be resolved. xxx757 Right half symbol fixup. xxx756 Left half symbol fixup. xxx755 30-bit symbol fixup. xxx754 Fullword symbol fixup. xxx747-xxx700 Not defined PSECT index 4000000+N PSECT index for PSECT N. The following fixup rules apply to this block: 1. Only one fixup by a Type 2, 10, 11, 12, 15, 1070, 1072, or 1120 Block is allowed for a given field. (There can be separate fixups for the left and right halves of the same word.) 2. Fixups are not necessarily performed in the order LINK finds them. 3. A location must contain data before the location can be fixed up. A-77 FIELD TEST Block Type 1074 (Long Common Name) |=======================================================| | 1074 | Long Count | |-------------------------------------------------------| | PSECT Index | Symbol Length | |-------------------------------------------------------| | Common Block Length | |-------------------------------------------------------| | Symbol | | (More Symbol) | ========================================================== Block Type 1074 defines a long COMMON name. A-78 FIELD TEST Block types 1120-1127 (Argument Descriptor Blocks) |=======================================================| | 1120 - 1127 | Long Count | |-------------------------------------------------------| | N-Bit Byte Relocation Information | |-------------------------------------------------------| | Argument Block Address or 0 | |-------------------------------------------------------| | Associated Call Address or 0 | |-------------------------------------------------------| | Loading Address or 0 | |-------------------------------------------------------| | Length of Function Name (in bytes) | |-------------------------------------------------------| | Function Name (ASCIZ) | |-------------------------------------------------------| . . . |-------------------------------------------------------| | Flag Bits | Argument Count | |-------------------------------------------------------| | First Argument's Primary Descriptor | |-------------------------------------------------------| | First Argument's Secondary Descriptor | |-------------------------------------------------------| | Second Argument's Primary Descriptor | |-------------------------------------------------------| | Second Argument's Secondary Descriptor | |-------------------------------------------------------| . . . |-------------------------------------------------------| | nth Argument's Primary Descriptor | |-------------------------------------------------------| | nth Argument's Secondary Descriptor | |=======================================================| A block of this type is generated for the argument list to each subroutine call. The subroutine entry point also specifies one block with this format, though for the callee the argument block address is zero. If a descriptor block is associated with an argument list it must always follow the loading of the argument list. The associated call address is used by LINK in diagnostic error messages and its value is determined by the compiler. The argument block address is nonzero if the descriptor block is associated with a call. In this case the argument block address points to the base of the argument block. A-79 FIELD TEST The argument block address, associated call address and the loading address are all relocatable. The argument descriptors in these type blocks describe the properties of each formal (in the case of an entry point) or actual (in the case of a call). In either case the name of the associated routine is specified as a byte count followed by an ASCIZ string. Each primary description is optionally followed by a secondary descriptor. There are five flag bits in the Descriptor Block: Bit Usage 0 If bit 0 is 1 then a difference between the actual number of arguments and the expected number of arguments is flagged as a warning at load time. If bit 0 is 0 no action is taken. 1 If bit 1 is 1 then the block is associated with a function call. If bit 1 is 0 then the block is associated with the function definition. 2 If bit 2 is 1 then the descriptor block is loaded into user memory at the loading address. This bit is ignored. 3 If bit 3 is 1 then the callee returns a value and the value's descriptor is the last descriptor specified. 4 If bit 4 is 1, and the caller expects a return value, which is not provided by the called function, or if the called function unexpectedly returns a value, then LINK will issue an error. The severity of the error is controlled by the coercion block. A-80 FIELD TEST The format for the argument descriptors is as follows: Bit Usage 0 (Reserved) 1 No update. In a caller block the argument is a literal, constant, or expression. In a callee block the argument won't be modified. 2-4 Passing mechanism 000 - pass by address 001 - pass by descriptor 010 - pass immediate value Others - reserved 5 Compile-time constant 6-11 Argument type code (see below) 12-18 (Reserved) 19-26 (Reserved) 27-35 Number of secondary descriptors The argument type codes are as follows: Type-Code Usage 0 No use 1 FORTRAN logical 2 Integer 3 (Reserved) 4 Real 5 (Reserved) 6 36-bit string 7 Alternate return (label) 10 Double real 11 Double integer 12 Double octal 13 G-floating real 14 Complex 15 COBOL format byte string descriptor (for constant strings), or FORTRAN character for a program compiled with FORTRAN /NOEXTEND switch 16 BASIC shared string descriptor 17 ASCIZ string A-81 FIELD TEST 20 Seven-bit ASCII string 21 FORTRAN character, one-word global byte pointer for a program compiled with /EXTEND A-82 FIELD TEST Secondary descriptors are used to convey information about the length of a data object passed as an argument and (in the case of the callee's argument descriptor block) whether or not a mismatched length is permissible. Secondary descriptors have the following format: Bit Pos Usage 0-2 (For callee only) Defines the permissible relationships between formal and actual lengths. The values are: 000 - Any relationships are allowed 001 - Lengths must be equal 010 - Actual < formal 011 - Actual <= formal 100 - Actual > formal 101 - Actual >= formal 110 - Reserved 111 - Reserved 3-5 Length of argument (in words) A-83 FIELD TEST Block Type 1130 (Coercion Block) |=======================================================| | 1130 | Long Count | |-------------------------------------------------------| | Field Code | Action | |-------------------------------------------------------| | Formal Attribute | Actual Attribute | |-------------------------------------------------------| | Field Code | Action | |-------------------------------------------------------| | Formal Attribute | Actual Attribute | |-------------------------------------------------------| . . . |-------------------------------------------------------| | Field Code | Action | |-------------------------------------------------------| | Formal Attribute | Actual Attribute | |=======================================================| Block Type 1130 specifies which data type associations are permissible and what action LINK should take if an illegal type association is attempted. It may also specify actions to be taken by LINK to modify an actual parameter. The Coercion Block must be placed before any instance of the caller/callee descriptor block in the REL file. If more than one coercion block is seen during a load, the last block seen is used for type checking. If the description block and command strings are not in the same section, no error message is given. When a caller's argument descriptor block is compared to the descriptor block provided by the callee, LINK first checks bit 0 and the argument counts of the descriptor block. If bit 0 is set and the argument counts differ, a warning is given. However, if a byte description is not word-aligned, no warning is given. Next LINK compares the argument descriptors. The particular formal/actual pair is looked up in the internal table LINK builds using the information in the coercion block. The item field code designates which field of the argument descriptor is being checked. The field codes are defined as follows: Field Code Condition 0 Check update 1 Check passing mechanism 2 Check argument type code A-84 3 Check if compile-time constant 4 Check number of arguments 5 Check for return value 6 Check length of argument If the fields of the formal/actual pair do not match, LINK searches the internal table set up by the coercion block. If the table does not specify an action to take in the event of such a mismatch, LINK issues an informational message. If the formal/actual pair differs in more than one field then LINK takes the most severe action specified for the mismatches. If an actual/formal pair differ and no coercion block has been seen, LINK ignores the difference. If the caller has specified a descriptor block but the subroutine has not, or if the subroutine has specified a descriptor and the caller has not, LINK does not flag the condition as an error and does not take any special action. If LINK finds an entry in its internal table for a particular actual/formal mismatch, it uses the action code found in the entry to select one of the following five possible responses: Code (18 Bits) Action 0 Informational message 1 Warning 2 Error 3 Reserved for the specific conversion of static descriptor pointers (in the argument list) into addresses. The descriptor pointers are supplied by FORTRAN blocks of types 112x. NOTE The actual conversion process involves the following actions: o If byte descriptor's P field is not word-aligned, issue a warning and continue. o Pick up word address of start of string. o If the string is not in the same section as the argument block, nonfatal error and continue. A-85 FIELD TEST o Put the address of the string into the associated argument block in place of the address of the string descriptor. 4 Suppress the message. 5-777776 Reserved 777777 Fatal error These messages can be displayed or suppressed. Refer to the descriptions of the /ERRORLEVEL and /LOGLEVEL switches. A-86 FIELD TEST Block Type 1131 (TWOSEG Redirection Block) |=====================================================| | 1131 | Long Count | |-----------------------------------------------------| | Name of PSECT for low segment, or 0 | |-----------------------------------------------------| | Name of PSECT for high segment, or 0 | |=====================================================| where each PSECT name has the form: |=====================================================| | SIXBIT Symbol Name | |=====================================================| or 0 5 6 17 18 29 30 35 |=======================================================| | 0 | Reserved for DIGITAL, MBZ | Long Count | |-------------------------------------------------------| | First word of SIXBIT Symbol Name | |-------------------------------------------------------| | Second word of SIXBIT Symbol Name | |-------------------------------------------------------| |-------------------------------------------------------| | Nth word of SIXBIT Symbol Name | |=======================================================| Block Type 1131 permits TWOSEG REL modules to be loaded into PSECTs by a compiler. You must redirect both the high and the low segment, you cannot redirect one or the other. Also, you cannot redirect both the high and low segment into the same PSECT. This block does not affect the current module, but all subsequent modules to be loaded. A-87 FIELD TEST Block Type 1140 (PL/1 debugger information) |=====================================================| | 1140 | Long Count | |-----------------------------------------------------| | Data Word | |-----------------------------------------------------| . . . |-----------------------------------------------------| | Data Word | |=====================================================| Block Type 1140 is ignored by LINK. A-88 FIELD TEST Block Type 1160 (Extended Sparse Data Initialization Block) ======================================================= | 1160 | Long Count | |-----------------------------------------------------| | R | F | B | P | 0 | SYMLEN | PSECT | |-----------------------------------------------------| | Symbol (SYMLEN words) | |-----------------------------------------------------| | S | Origin Address | |-----------------------------------------------------| | Repetition Count if R=1 | |-----------------------------------------------------| | Fill Count if F=1 | |-----------------------------------------------------| | Fill Byte if F=1 | |-----------------------------------------------------| | Byte Count if B=1 | |-----------------------------------------------------| | Data Bytes | ======================================================= Block Type 1160 supports the loading of data into different PSECTs and sections. This REL Block allow separate program units to load data into different bytes in the same word of memory at different times during the loading process. Block Type 1160 fields are described below. Field Name Position Description R Bit 0 is a 1-bit field. If R is one, the Repetition Count word exists. If R is zero, the Repetition Count is assumed to be 1. F Bit 1 is a 1-bit field. If F is one, the Fill Count and Fill Byte words exist. If F is zero, no fill is used. B Bit 2 is a 1-bit field. If B is one, the Byte Count word exits. If B is zero, one Data Byte is assumed. P Bits 3-8 is a 6-bit field. This is the position within the word where the first byte is to stored. Unused Bit 9 is an unused bit that must be A-89 FIELD TEST zero. SYMLEN Bits 10-17 is an 8-bit field. SYMLEN is the length in words of the global symbol to be used to calculate the address to store the byte string. If SYMLEN is zero, there is no global symbol. The value of the symbol is added to the origin address. The symbol must be completely defined before this addition occurs. PSECT Bits 18-35 is an 18-bit field. PSECT is the PSECT to relocate the Origin Address against. The relocation is 30-bit. If PSECT is zero, the Origin Address is absolute. Symbol Bits 0-35 is a SIXBIT symbol name of the length specified in SYMLEN. The value of this symbol is added to the Origin Address. The symbol must be defined when the block is seen, or a fatal error occurs. S Bits 0-5 is a 6-bit field. S is the size of the data bytes. Origin Address Bits 6-35 is a 30-bit field. Origin Address is the address where LINK begins to store Data Bytes. Repetition Count Bits 0-35 is a 36-bit field. If flag bit R is one, Repetition Count exists and contains the number of times to repeat the data store. The Data Bytes are stored and the fill operation is performed as many times as specified in the Repetition Count. Fill Count Bits 0-35 is a 36-bit field. If flag bit F is one, Fill Count exists and specifies how many times to store the Fill Byte after storing Data Bytes. A-90 FIELD TEST Fill Byte Bits 0-35 is a 36-bit field. If flag bit F is one, Fill Byte exists and contains the right justified value to be used in the fill operation. Byte Count Bits 0-35 is a 36-bit field. If flag bit B is one, Byte Count exits and specifies the number of Data Bytes to be stored. Data Bytes Bits 0-35 are the data to be stored, of the length specified by the Byte Count, or 1 if flag bit B is not set. This data is stored left-justified, packed as many to a word as will fit without overlapping a word boundary. A-91 FIELD TEST Block Type Greater Than 3777 (ASCIZ) |=======================================================| | ASCII | ASCII | ASCII | ASCII | ASCII | 0 | |-------------------------------------------------------| | ASCII | ASCII | ASCII | ASCII | ASCII | 0 | |-------------------------------------------------------| . . . |-------------------------------------------------------| | ASCII | ASCII | ASCII | ASCII | 0 | 0 | |=======================================================| When LINK reads a number larger than 3777 in the left half of a REL Block header word, the block is assumed to contain ASCIZ text. If the module containing the text is being loaded, LINK reads the ASCII characters as if they were a command string, input from the user's terminal. LINK reads the string as five 7-bit ASCII characters per word; bit 35 of each word is ignored. The string and the block end when the first null ASCII character (000) is found in the fifth 7-bit byte of a word (bits 28-34). After loading the current REL file, LINK processes text statements in the reverse order in which they are encountered -- from the end to the beginning of the module. For example, the first, second, and third statements from the beginning of a module are processed third, second, and first. As a result, search requests in .TEXT blocks may be processed in the reverse order of entered /SEARCH switches. Keep this in mind when specifying the order the modules are to be searched. A-92 APPENDIX B LINK MESSAGES This appendix lists all of LINK's messages except the messages from the overlay handler. Overlay handler messages have the OVL prefix and appear in Chapter 5. Section B.1 describes the format of messages and Section B.2 lists LINK's messages. B.1 DESCRIPTION OF MESSAGES For each message, the last three letters of the 6-letter code, the level, the severity, and its medium-length message are given in bold. The long message follows, and appears beneath the medium message. CODE LEV SEV MEDIUM MESSAGE LONG MESSAGE When a message is issued, the three letters are appended to the letters LNK, forming a 6-letter code of the form LNKxxx. For example, EXS is the 3-letter code for EXIT segment. EXS is appended to LNK to form the 6-letter code LNKEXS. B.1.1 Message Levels The level of a message determines whether it is returned to the terminal, the log file, or both. You can use /ERRORLEVEL to control message output to the terminal and /LOGLEVEL to control message output to the log file. Both switches suppress messages with a level of 8 or below. For some messages an asterisk (*) is given for the level or severity. This means that the value is variable, and depends on the conditions that generated the message. B-1 FIELD TEST B.1.2 Message Severity The severity of a message determines whether the load is terminated when the message is issued. Table B-1 lists the severity codes used in LINK, with their meanings. Severity codes are decimal. The /SEVERITY switch provides a means for lowering the severity that is considered fatal. For example, if the severity is set at 28 (the default for timesharing jobs) and you want to terminate the load if you receive a warning message, you can lower the severity to 16. This causes LINK to terminate the load if a message with a severity of 16 is issued. The severity also determines the first character on the message line output to the terminal. This character can then be detected by the batch system. For all informational messages, the character is a square bracket ([). Informational messages also end in a square bracket (]). Warnings use percent sign (%), and fatal errors use question mark (?). Table B-1: Severity Codes Decimal Meaning Code 1-7 Informational; messages of this severity generally indicate LINK's progress through the load. 8-15 Warning; LINK is able to recover by itself and continue the load. 16 Warning if timesharing, but fatal and stops the load if running under batch. 20 Fatal; LINK can only partially recover and continue the load. The loaded program may be incorrect. Undefined symbols cause this action. 24 This is for file access errors. Under batch, this is fatal and stops the load. Under timesharing, this is a warning, and LINK prompts for the correct file specification if possible. 31 Always fatal; LINK stops the load. B.1.3 Message Length The /VERBOSITY switch determines whether the medium-length and long B-2 FIELD TEST messages are issued. If you use /VERBOSITY:SHORT, only the 6-letter code is issued. For example, [LNKEXS] If you use /VERBOSITY:MEDIUM, the medium-length message is also issued. For example, [LNKEXS EXIT segment] If you use /VERBOSITY:LONG, the code, medium-length message, and long message are issued. For example, [LNKEXS EXIT segment LINK is in the last stages of loading your program (for example, creating .EXE and symbol files, preparing execution if requested).] The /MESSAGE switch also specifies message length. B.1.4 Message Conventions {} indicate optional portions of the medium-length message, and are printed only in appropriate circumstances. The JSYS error text optional message is a monitor call message. Refer to the TOPS-20 Monitor Calls Reference Manual for a description of these messages. [] contain information pertinent to the particular error. This portion of the medium-length messages is filled in at runtime. Table B-2 describes each of these bracketed quantities. file identifies the module or file where the error occurred. Whenever possible, LINK attempts to indicate the module and file associated with an error. This information represents the module currently being processed by LINK, and may not always be the actual module containing the error. For instance, if LINK detects a multiply-defined symbol, either value may be the incorrect one. In this case, LINK reports only the last and latest redefinition and the module containing it. B-3 FIELD TEST Table B-2: Special Message Segments Segment Description [area] The name of one of LINK's internal memory management areas. See the /FRECOR switch in Chapter 3 for a list of these areas. [date] The date when LINK is running. [decimal] A decimal number. [device] A device name. [file] A file specification. [label] An internal label in LINK. [memory] A memory size, such as 17P. [name] The name of the loaded program or a node in an overlaid program. [octal] An octal number. [reason] The reason for a file access failure, one of the messages shown in Section B.3. [switch] The name of a switch associated with the error. [symbol] The name of a symbol, such as a subroutine or common block name. [type] The type or attribute associated with a symbol. B.2 LIST OF MESSAGES Code Lev Sev Message ABT 31 31 Load aborted due to %LNKTMA errors, max. /ARSIZE: needed was [decimal] You loaded programs containing more ambiguous subroutine requests than can fit in the tables of one or more overlay links. You received a LNKARL message for each ambiguous request, and a B-4 FIELD TEST LNKTMA message for each link with too many requests. You can solve this problem by using the /ARSIZE switch just before each /LINK switch to expand the tables separately. AIC 31 31 Attempt to increase size of {blank common} {common [symbol]} from [decimal] to [decimal] {Detected in module [symbol] from file [file]} FORTRAN common areas cannot be expanded once defined. Either load the module with the largest definition first, or use the /COMMON: switch to reserve the needed space. AMM + + Argument mismatch in argument [decimal] in call to routine [symbol] called from module [symbol] at location [octal] The caller supplied argument does not match the argument expected by the callee. [1] AMP 8 8 ALGOL main program not loaded You loaded ALGOL procedures, but no main program. The missing start address and undefined symbols will cause termination of execution. ANM 31 31 Address not in memory LINK expected a particular user address to be in memory, but it is not there. This is an internal LINK error. This message is not expected to occur. If it does, please notify your Software Specialist or send a Software Performance Report (SPR) to DIGITAL. ARL 8 8 Ambiguous request in link [decimal] {name [name]} for [symbol] defined in links [decimal], [decimal], ... More than one successor link can satisfy a call from a predecessor link. The predecessor link requested an entry point that is contained in --------------- [1] + The level and severity of this message is determined by a compiler-generated coercion block. A coercion block specifies which data type associations are permissible and what action LINK should take if an illegal type association is attempted. See Block Type 1130 in Appendix A for more information. B-5 FIELD TEST two or more of its successors. You should revise your overlay structure to remove the ambiguity. If you execute the current load, one of the following occurs when the ambiguous call is executed: o If only one module satisfying the request is in memory, that module will be called. o If two or more modules satisfying the request are in memory, the one with the most links in memory will be called. o If no modules satisfying the request are in memory, the one with the most links in memory will be called. If a module cannot be selected by the methods 2 or 3 above, an arbitrarily selected module will be called. AZW 31 31 Allocating zero words LINK's memory manager was called with a request for 0 words. This is an internal LINK error. This message is not expected to occur. If it does, please notify your Software Specialist or send a Software Performance Report (SPR) to DIGITAL. CBO 31 31 Cannot build overlays outside section zero You have tried to build an overlay structure for a program that is either too large to fit in section zero or which loads outside section zero by default. Check your LINK commands and also the assembly or compiler commands used to produce the program modules. CCD 31 31 CPU conflict {Detected in module [symbol] from file [file]} You have loaded modules compiled with conflicting CPU specifications, such as loading a MACRO program compiled with the statement .DIRECTIVE KL10 and another compiled with .DIRECTIVE KI10. Recompile the affected modules with compatible CPU specifications. CCE 8 8 Character constant not word aligned in call to routine [routine] called from module [module] at B-6 FIELD TEST location [address] Link has detected a character constant that did not begin on a word boundary. This error is most likely the result of a language translator error. This error is not expected to occur. If it does, please notify your Software Specialist or send a Software Performance Report CCS 31 31 Cannot create section [octal] {Detected in module [symbol] from file [file]} LINK is unable to create the specified section. This could be because your system does not have extended addressing hardware, or because there are insufficient resources to create a section. CFS 31 31 Chained fixups have been suppressed The specified PSECT grew beyond the address specified in the /LIMIT switch. The program is probably incorrect. Use the /MAP or /COUNTER switch to check for accidental PSECT overlaps. Refer to Section 3.2.2 for more information about the /LIMIT switch. CLD 31 28 Cannot load DDT {JSYS error text} DDT could not be loaded into memory with your program. The second line of the error message is the last TOPS-20 process error and indicates why the error occurred.> ;[2304] CLF 1 1 Closing log file, continuing on file [file] You have changed the log file specification. The old log file is closed; further log entries are written in the new log file. CMC 31 31 Cannot mix COBOL-68 and COBOL-74 compiled code {Detected in module [symbol] from file [file]} You cannot use COBOL-68 and COBOL-74 files in the same load. Compile all COBOL programs with the same compiler and reload. CMF 31 31 COBOL module must be loaded first {Detected in module [symbol] from file [file]} You are loading a mixture of COBOL-compiled B-7 FIELD TEST files and other files. Load one of the COBOL-compiled files first. CMP 31 28 Common [symbol] declared in multiple psects {Detected in module [symbol] from file [file]} You have loaded a module which specifies that the named common block must be loaded in a PSECT which is not compatible with the psect in which it was originally loaded. Compile the module with the common in the same PSECT as the original. CMX 8 8 Cannot mix GFloating FORTRAN compiled code with FORTRAN compiled code You cannot load modules produced by FORTRAN with modules produced by GFLoating FORTRAN. Compile all FORTRAN modules the same way, then reload. CNW 31 31 Code not yet written at [label] You attempted to use an unimplemented feature. This is an internal LINK error. This message is not expected to occur. If it does, please notify your Software Specialist or send a Software Performance Report (SPR) to DIGITAL. COE 8 8 Both CONCATENATE and OVERLAY attributes specified for psect [ name ] One of the modules you have already loaded explicitly sets an attribute for the named PSECT which conflicts with the declaration of PSECT attributes in the current module. Check the compiler switches or assembly language directives that were used in the generation of these modules. COF + + Cannot open file [file] {JSYS error text} LINK cannot open the specified file for input CPU 31 31 Module incompatible with specified CPU {Detected in module [symbol] from file [file]} The module you are attempting to load does not contain a .DIRECTIVE for any of the CPUs you specified with the /CPU switch. Recompile the module with the proper .DIRECTIVE, or use a different /CPU switch. B-8 FIELD TEST CRS 1 1 Creating section [octal] LINK prints this informational message when a module is loaded into a new section. The message is printed only if you have specified /ERROR:0. CSF 1 1 Creating saved file LINK is generating your executable (.EXE) file. CSP 31 28 Cannot setup UDDT symbol table pointers {JSYS error text} An error occurred while writing UDDT's symbol table pointers. Symbols may not be available for use now. This is probably because the symbol table pointers were on a write-protected memory page. DEB 31 1 [name] execution LINK is beginning program execution at the named debugger. DLT 31 1 Execution deleted Although you have asked for program execution, LINK cannot proceed due to earlier fatal compiler or LINK errors. Your program is left in memory or in an executable file. DNA 31 28 DDT not available {JSYS error text} SYS:UDDT.EXE could not be found. DRC 8 8 Decreasing relocation counter [symbol] from [octal] to [octal] {Detected in module [symbol] from file [file]} You are using the /SET switch to reduce the value of an already defined relocation counter. Unless you know exactly where each module is loaded, code may be overwritten. DSC 31 31 Data store to common [symbol] not in link number [decimal] {Detected in module [symbol] from file [file]} You loaded a FORTRAN-compiled module with DATA statement assignments to a common area. The B-9 FIELD TEST common area is already defined in an ancestor link. Restructure the load so that the DATA statements are loaded in the same link as the common area to which they refer. DSL 31 * Data store to location [octal] not in link number [decimal] {Detected in module [symbol] from file [file]} You have a data store for an absolute location outside the specified link. Load the module into the root link. NOTE If the location is less than 140, this message has level 8 and severity 8. DUZ 31 31 Decreasing undefined symbol count below zero LINK's undefined symbol count has become negative. This message is not expected to occur. If it does, please notify your Software Specialist or send a Software Performance Report (SPR) to DIGITAL. EAS 31 31 Error creating area AS overflow file [file] {JSYS error text} LINK could not make the ALGOL symbol table on disk. You could be over your disk quota, or the disk could be full or have errors. ECE 31 31 Error creating EXE file [file] {JSYS error text} LINK could not write the saved file on disk. You could be over your disk quota, or the disk could be full or have errors. EIF 31 31 Error for input file [file] {JSYS error text} A read error has occurred on the input file. Use of the file is terminated and the file is released. ELF 1 1 End of log file LINK has finished writing your log file. The file is closed. B-10 FIELD TEST ELN 1 1 End of link number [decimal] {name [name]} The link is loaded. ELS 31 31 Error creating area LS overflow file [file] {JSYS error text} LINK could not write your local symbol table on the disk. You could be over your disk quota, or the disk could be full or have errors. EMS 1 1 End of MAP segment The map file is completed and closed. EOE 31 31 EXE file output error [file] {JSYS error text} LINK could not write the saved file on the disk. EOI 31 31 Error on input [file] An error has been detected while reading the named file. EOO 31 31 Error on output [file] An error has been detected while writing the named file. EOV 31 31 Error creating overlay file [reason] [file] LINK could not write the overlay file on the disk. ETP 31 31 Error creating area TP overflow file {[reason]} [file] {JSYS error text} LINK could not make the typechecking area on the disk. You could be over your disk quota, or the disk could be full or have errors. EXS 1 1 EXIT segment LINK is in the last stages of loading your program (for example, creating .EXE and symbol files, preparing for execution if requested). FCF 1 1 Final code fixups B-11 FIELD TEST LINK is reading one or both segment overflow files backwards to perform any needed code fixups. This may cause considerable disk overhead, but occurs only if your program is too big for memory. FEE * * ENTER error (octal) [reason] [file] One of the following conditions occurred: 1. The specified file name was illegal. 2. When updating a file, the specified file name did not match the file being updated. 3. The RENAME monitor call following a LOOKUP monitor call failed. FIN 1 1 LINK finished LINK is finished. Control is passed to the monitor, or to the loaded program for execution. FLE * * LOOKUP error (octal) [reason] [file] One of the following conditions occurred: 1. The specified file name was illegal. 2. When updating a file, the specified file name did not match the file being updated. 3. The RENAME monitor call following a LOOKUP monitor call failed. FRE * * RENAME error [reason] [file] One of the following conditions occurred: 1. The specified file name was illegal. 2. When updating a file, the specified file name did not match the file being updated. 3. The RENAME monitor call following a LOOKUP monitor call failed. FSN 31 31 FUNCT. subroutine not loaded B-12 FIELD TEST During final processing of your root link, LINK found that the FUNCT. subroutine was not loaded. This would cause an infinite recursion if your program were executed. The FUNCT. subroutine is requested by the overlay handler, and is usually loaded from a default system library. Either you prevented searching of system libraries, or you did not load a main program from an overlay-supporting compiler into the root link. FTH 15 15 Fullword value [symbol] truncated to halfword This message is printed when a symbol that has a value greater than 777777 is used to resolve a halfword reference. This warning message helps you to be sure that global addresses are used properly throughout the modules in a load. HCL 31 31 High segment code not allowed in an overlay link {Detected in module [symbol] from file [file]} You have attempted to load high segment code into an overlay link other than the root. Any high segment code in an overlaid program must be in the root. HSL 31 31 Attempt to set high segment origin too low {Detected in module [symbol] from file [file]} You have set the high-segment counter to a page containing low-segment code. Reload, using the /SET:.HIGH.:n switch, or (for MACRO programs) reassemble after changing your TWOSEG pseudo-op. HTL 31 31 Symbol hash table too large Your symbol hash table is larger than the maximum LINK can generate (about 50P). This table size is an assembly parameter. This message is not expected to occur. If it does, please notify your Software Specialist or send a Software Performance Report (SPR) to DIGITAL. IAS 31 31 Error reading area AS from file [file] {JSYS error text} An error occurred while reading in the ALGOL symbol table. ICB 8 8 Invalid chain REL block (type 12) link number [octal] B-13 FIELD TEST {Detected in module [symbol] from file [file]} REL block type 12 (Chain), generated by the MACRO pseudo-op .LINK and .LNKEND, must contain a number from 1 to 100 (octal) in its first word. The link word is ignored. IDM 31 31 Illegal data mode for device [device] You specified an illegal combination of device and data mode (for example, terminal and dump mode). Specify a legal device. IHC 31 31 Error reading area HC {JSYS error text} An error occurred while reading in your high-segment code. ILC 31 31 Error reading area LC {JSYS error text} An error occurred while reading in your low-segment code. ILS 31 31 Error reading area LS from file [file] {JSYS error text} An error occurred while reading in your local symbol table. IMA 8 8 Incremental maps not yet available The INCREMENTAL keyword for the /MAP switch is not implemented. The switch is ignored. IMI 31 31 Insufficient memory to initialize LINK LINK needs more memory than is available. IMM * 1 [Decimal] included modules missing {from file [file]} You have requested with the /INCLUDE switch that the named modules (if any) be loaded. Specify files containing these modules. INS 31 31 I/O data block not set LINK attempted a monitor call (for example, LOOKUP, ENTER) for a channel that is not set up. B-14 FIELD TEST This is an internal LINK error. This message is not expected to occur. If it does, please notify your Software Specialist or send a Software Performance Report (SPR) to DIGITAL. IOV 31 31 Input error for overlay file [file] An error occurred when reading the overlay file. IPO 31 31 Invalid Polish operator [octal] {Detected in module [symbol] from file [file]} You are attempting to load a file containing an invalid REL Block Type 11 (Polish). This message is not expected to occur. If it does, please notify your Software Specialist or send a Software Performance Report (SPR) to DIGITAL. IPX 31 31 Invalid PSECT index {for PSECT [symbol]} {Detected in module [symbol] from file [file]} A REL block contains a reference to a nonexistent PSECT. This error is probably caused by a fault in the language translator used for the program. This error is not expected to occur. If it does, please notify your Software Specialist or send a Software Performance Report (SPR) to DIGITAL. IRB 31 31 Illegal REL block type [octal] {Detected in module [symbol] from file [file]} The file is not in the proper binary format. It may have been generated by a translator that LINK does not recognize, or it may be an ASCII or .EXE file. IRC 31 31 Illegal relocation counter {Detected in module [symbol] from file [file]} One of the new style 1000+ block types has an illegal relocation counter. This message is not expected to occur. If it does, please notify your Software Specialist or send a Software Performance Report (SPR) to DIGITAL. IRR 8 8 Illegal request/require block {Detected in module [symbol] from file [file]} One of the REL block types 1042 or 1043 is in the wrong format. This message is not expected to occur. If it does, please notify your B-15 FIELD TEST Software Specialist or send a Software Performance Report (SPR) to DIGITAL. ISM 31 31 Incomplete symbol in store operator in Polish block (type 11 or 1072) {Detected in module [symbol] from file [file]} The specified module contains an incorrectly formatted Polish Fixup Block (Type 11). The store operator specifies a symbol fixup, but the block ends before the symbol is fully specified. This error is probably caused by a fault in the language translator used for the program. This error is not expected to occur. If it does, please notify your Software Specialist or send a Software Performance Report (SPR) to DIGITAL. ISN 31 31 Illegal symbol name [symbol] {Detected in module [symbol] from file [file]} The LINK symbol table routine was called with the blank symbol. This error can be caused by a fault in the language translator used for the program. This message is not expected to occur. If it does, please notify your Software Specialist or send a Software Performance Report (SPR) to DIGITAL. ISP 31 31 Incorrect symbol pointer There is an error in the global symbol table. This is an internal LINK error. This message is not expected to occur. If it does, please notify your Software Specialist or send a Software Performance Report (SPR) to DIGITAL. ISS 8 8 Insufficient space for symbol table after PSECT [symbol] -- table truncated There is insufficient address space for the symbol table between the named PSECT and the next higher one or the end of the address space. Restructure your PSECT layout to allow sufficient room for the symbol table, or use /UPTO to allow more room. IST 31 31 Inconsistency in switch table LINK has found errors in the switch table passed from the SCAN module. This is an internal error. This message is not expected to occur. If it does, please notify your Software B-16 FIELD TEST Specialist or send a Software Performance Report (SPR) to DIGITAL. ITB 31 31 Invalid text in ASCII block from file [file] LINK has failed to complete the processing of an ASCII text REL block from the named file. This is an internal error. This message is not expected to occur. If it does, please notify your Software Specialist or send a Software Performance Report (SPR) to DIGITAL. ITP 31 31 Error reading area TP {Status [octal]} from file [file] {JSYS error text} An error occurred while reading in the typechecking area. IUU 31 Illegal user UUO at PC [octal] LINK's user UUO (LUUO) handler has detected an illegal UUO. This is an internal error. This message is not expected to occur. If it does, please notify your Software Specialist or send a Software Performance Report (SPR) to DIGITAL. IVC 31 31 Index validation check failed at address [octal] The range checking of LINK's internal tables and arrays failed. The address given is the point in a LINK segment at which failure occurred. This is an internal error. This message is not expected to occur. If it does, please notify your Software Specialist or send a Software Performance Report (SPR) to DIGITAL. JPB 8 8 Junk at end of Polish block {Detected in module [symbol] from file [file]} The specified module contains an incorrectly formatted Polish Fixup Block (Type 11). Either the last unused halfword (if it exists) is nonzero, or there are extra halfwords following all valid data. LDS 1 1 LOAD segment The LINK module LNKLOD is beginning its processing. LFB 1 1 LINK log file begun on [date] B-17 FIELD TEST LINK is creating your log file as a result of defining the logical name LOG:. LFC 1 1 Log file continuation LINK is continuing your log file as a result of the /LOG switch. LFI 1 1 Log file initialization LINK is beginning your log file as a result of the /LOG switch. LII 8 1 Library index inconsistent, continuing A REL Block Type 14 (Index) for a MAKLIB generated library file is inconsistent. The library is searched, but the index is ignored. LIN 1 1 LINK initialization LINK is beginning its processing by initializing its internal tables and variables. LMM + + Length mismatch for argument [decimal] in call to routine [symbol] called from module [symbol] at location [octal] The length of the argument passed by the caller does not match what the called routine expects it to be. [2] LMN 6 1 Loading module [symbol] from file [file] LINK is loading the named module. LNA 8 8 Link name [name] already assigned to link number [decimal] You used this name for another link. Specify a different name for this link. LNL 8 8 Link number [decimal] not loaded --------------- [2] + The level and severity of this message is determined by a compiler-generated coercion block. A coercion block specifies which data type associations are permissible and what action LINK should take if an illegal type association is attempted. See Block Type 1130 in Appendix A for more information. B-18 FIELD TEST The link with this number has not yet been loaded. The /NODE switch is ignored. If you have used link numbers instead of link names with the /NODE switch, you may have confused the link numbers. To avoid this, use link names. LNM 31 31 Link number [decimal] not in memory LINK cannot find the named link in memory. This is an internal error. This message is not expected to occur. If it does, please notify your Software Specialist or send a Software Performance Report (SPR) to DIGITAL. LNN 8 8 Link name [name] not assigned The name you gave with the /NODE switch is not the name of any loaded link. The switch is ignored. LNS 31 8 Low segment data base not same size The length of LINK's low segment differs from the length stored in the current LINK high segment. This occurs if some but not all of LINK's .EXE files have been updated after rebuilding LINK from sources. Update all of LINK's .EXE files. LSM 8 8 /LINK switch missing while loading link number [decimal] -- assumed Your use of the /NODE switch shows that you want to begin a new overlay link, but the current link is not yet completely loaded. LINK assumes a /LINK switch immediately preceding the /NODE switch, and loads the link (without a link name). LSS 31 1 {No} Library search symbols (entry points) {[symbol] [octal] The listed symbols and their values (if any) are those that are library search entry points. MDS 8 8 Multiply-defined global symbol [symbol] {Detected in module [symbol] from file [file]} Defined value = [octal], this value = [octal] The named module contains a new definition of an already defined global symbol. The old definition is used. Make the definitions B-19 FIELD TEST consistent and reload. MEF 31 31 Memory expansion failed LINK cannot expand memory further. All permitted overflows to disk have been tried, but your program is still too large for available memory. A probable cause is a large global symbol table, which cannot be overflowed to disk. It may be necessary to restructure your program, or use overlays, to alleviate this problem. MMF 31 31 Memory manager failure The internal memory manager in LINK has failed a consistency check. This error is not expected to occur. If it does, please notify your Software Specialist or send a Software Performance Report (SPR) to DIGITAL. MOV 1 1 Moving low segment to expand area [area] LINK is rearranging its low segment to make more room for the specified area. Area is one of the following: AS ALGOL symbol table BG bound global symbols DY dynamic free memory FX fixup area GS global symbol table HC your high-segment code LC your low-segment code LS local symbol tables RT relocation tables MPS 1 1 MAP segment The LINK module LNKMAP is writing a map file. MPT 31 31 Mixed PSECT and TWOSEG code in same module {Detected in module [symbol] from file [file]} This module contains both PSECT code and TWOSEG code. LINK cannot load such a module. Change the source code to use PSECTs .HIGH. and .LOW. as the high and low segments, and remove the TWOSEG or HISEG pseudo-ops. MRN 1 1 Multiple regions not yet implemented B-20 FIELD TEST The REGION keyword for the /OVERLAY switch is not implemented. The argument is ignored. MSN 8 8 Map sorting not yet implemented Alphabetical or numerical sorting of the map file is not implemented. The symbols in the map file appear in the order they are found in the REL files. NAP 31 31 No store address in polish block (type 11 or 1072) {Detected in module [symbol] from file [file]} The specified module contains an incorrectly formatted polish fixup block (type 11 or 1072). The store operator specifies a memory fixup, but the block ends before the address is specified. This error is probably caused by a fault in the language translator used for the program. This error is not expected to occur. If it does, please notify your Software Specialist or send a Software Performance Report (SPR) to DIGITAL. NBR 31 31 Attempt to position to node before the root The argument you gave for the /NODE switch would indicate a link before the root link. (For example, from a position after the third link in a path, you cannot give /NODE:-4.) NEB 8 8 No end block seen {Detected in module [symbol] from file [file]} No REL Block Type 5 (End) was found in the named module. This will happen if LINK finds two Type 6 blocks (Name) without an intervening end, or if an end-of-file is found before the end block is seen. LINK simulates the missing end block. However, fatal messages usually follow this, because this condition usually indicates a bad REL file. NED 31 24 Non-existent device [device] You gave a device that does not exist on this system. Correct your input files and reload. NFS 31 28 No free section for XDDT There is no free nonzero section to load SYS:XDDT.EXE into. XDDT can only be loaded into B-21 FIELD TEST a section which is unused by your program. You must reconfigure your program to be able to use XDDT. NHN 31 31 No high segment in nonzero section You have attempted to load high segment code into a program that is being loaded into a nonzero section. Programs with high segments must be in section zero. NPS 8 8 Non-existent PSECT [symbol] specified for symbol table You have specified the name of a PSECT after which LINK should append the symbol table, but no PSECT with that name was loaded. Load the named PSECT or specify an existing PSECT for the symbols. NSA 31 1 No start address Your program does not have a starting address. This can happen if you neglect to load a main program. Program execution, if requested, will be suppressed unless you specified debugger execution. NSM 31 31 /NODE switch missing after /LINK switch You used the /LINK switch, which indicates that you want to begin a new overlay link, but you have not specified a /NODE switch to tell LINK where to put the new overlay link. NSO 31 31 No store operator in Polish block (type 11) {Detected in module [symbol] from file [file]} The specified module contains an incorrectly formatted Polish Fixup Block (Type 11). Either the block does not have a store operator, or LINK was not able to detect it due to the block's invalid format. This error is probably caused by a fault in the language translator used for the program. This error is not expected to occur. If it does, please notify your Software Specialist or send a Software Performance Report (SPR) to DIGITAL. NVR + + No value returned by routine [symbol] called from module [symbol] at location [octal] B-22 FIELD TEST The called routine does not return a value, however the caller expected a returned value. [3] OAS 31 31 Error writing area AS from file [file] {JSYS error text} An error occurred while writing out the ALGOL symbol table. OEL 8 8 Output error on log file, file closed, load continuing {[file]} An error has occurred on the output file. The output file is closed at the end of the last data successfully output. OEM 8 8 Output error on map file, file closed, load continuing [file] An error has occurred on the output file. The output file is closed at the end of the last data successfully output. OES 8 8 Output error on symbol file, file closed, load continuing [file] An error has occurred on the output file. The output file is closed at the end of the last data successfully output. OFD 31 31 OPEN failure for device [device] An OPEN or INIT monitor call for the specified device failed. The device may be under another user's control.> OFN 31 31 Old FORTRAN (F40) module not available {Detected in module [symbol] from file [file]} The standard released version of LINK does not support F40 code. OFS 31 31 Overlay file must be created on a file structure --------------- [3] + The level and severity of this message is determined by a compiler-generated coercion block. A coercion block specifies which data type associations are permissible and what action LINK should take if an illegal type association is attempted. See Block Type 1130 in Appendix A for more information. B-23 FIELD TEST Specify a disk device for the overlay file. OHC 31 31 Error writing area HC {JSYS error text} An error occurred while writing out your high-segment code. OHN 31 31 Overlay handler not loaded Internal symbols in the overlay handler could not be referenced. If you are using your own overlay handler, this is a user error; if not, it is an internal error and is not expected to occur. If it does, please notify your Software Specialist or send a Software Performance Report (SPR) to DIGITAL. OLC 31 31 Error writing area LC {JSYS error text} An error occurred while writing out your low-segment code. OLS 31 31 Error writing area LS from file [file] {JSYS error text} An error occurred while writing out your local symbol table. OMB 31 31 /OVERLAY switch must be first The /OVERLAY switch must appear before you can use any of the following switches: /ARSIZE, /LINK, /NODE, /PLOT, /SPACE. (It is sufficient that the /OVERLAY switch appear on the same line as the first of these switches you use.) ONS 8 1 Overlays not supported in this version of LINK LINK handles overlays with its LNKOV1 and LNKOV2 modules. Your installation has substituted dummy versions of these. You should request that your installation rebuild LINK with the real LNKOV1 and LNKOV2 modules. OOV 31 31 Output error for overlay file [file] An error has occurred while writing the overlay file. OS2 1 1 Overlay segment phase 2 B-24 FIELD TEST LINK's module LNKOV2 is writing your overlay file. OSL 8 8 Overlaid program symbols must be in low segment You have specified /SYMSEG:HIGH or /SYMSEG:PSECT when loading an overlay structure. Specify /SYMSEG:LOW or /SYMSEG:DEFAULT. OTP 31 31 Error writing area TP {Status [octal]} from file [file] {JSYS error text} An error occurred while writing out the typechecking area. PAS 1 1 Area AS overflowing to disk The load is too large to fit into the allowed memory and the ALGOL symbol table is being moved to disk. PBI 8 8 Program break [octal] invalid {Detected in module [symbol] from file [file]} The highest address allocated in the named module is greater than 512P. This is usually caused by dimensioning large arrays. Modify your programs or load list to reduce the size of the load. PCL 8 8 Program too complex to load, saving as file [file] Your program is too complex to load into memory for one of the following reasons: 1. There are page gaps between psects (except below the high segment). 2. There are psects above the origin of the high segment. 3. Your program will not fit in memory along with LINK's final placement code. 4. Your program's low segment has the read-only attribute, or the high segment has the read and write attribute. LINK has saved your program as an EXE file on disk and cleared your user memory. You can use B-25 FIELD TEST a GET or RUN command to load the EXE file. PCX 8 1 Program too complex to load and execute, will run from file [file] Your program is too complex to load into memory for one of the following reasons: 1. There are page gaps between psects (except below the high segment). 2. There are psects above the origin of the high segment. 3. Your program will not fit in memory along with LINK's final placement code. 4. Your program's low segment has the read-only attribute, or the high segment has the read and write attribute. LINK will save your program as an EXE file on disk and automatically run it, but the EXE file will not be deleted. PEF 31 8 Premature end of file from file [file] LINK found an end-of-file inside a REL block (that is, the word count for the block extended beyond the end-of-file). This error may be caused by a fault in the language translator used for the program. PEL 31 8 PSECT [symbol] exceeded limit of [octal] The specified PSECT grew beyond the address specified in the /LIMIT switch. The program is probably incorrect. Use the /MAP or /COUNTER switch to check for accidental PSECT overlaps. Refer to Section 3.2.2 for more information about the /LIMIT switch. PHC 1 1 Area HC overflowing to disk The load is too large to fit into the allowed memory and your high-segment code is being moved to disk. PLC 1 1 Area LC overflowing to disk The load is too large to fit into the allowed memory and your low-segment code is being moved B-26 FIELD TEST to disk. PLS 1 1 Area LS overflowing to disk The load is too large to fit into the allowed memory and your local symbol tables are being moved to disk. PMA + + Possible modification of argument [decimal] in call to routine [symbol] called from module [symbol] at location [octal] The caller has specified that the argument should not be modified. The called routine contains code which may modify this argument. In some cases this message will occur although the argument is not actually modified by the routine. [4] PNO 8 8 Program Data Vectors not allowed in overlay links Program data vectors cannot be loaded as part of an overlay program. The load continues, but no program data vector will be provided. POT 1 1 Plotting overlay tree LINK is creating your overlay tree file. POV 8 8 PSECTs [symbol] and [symbol] overlap from address [octal] to [octal] The named PSECTs overlap each other in the indicated range of addresses. If you do not expect this message, restructure your PSECT origins with the /SET switch. PTL 31 31 Program too long {Detected in module [symbol] from file [file]} Your program extends beyond location 777777, which is the highest location that LINK is capable of loading. You may be able to make --------------- [4] + The level and severity of this message is determined by a compiler-generated coercion block. A coercion block specifies which data type associations are permissible and what action LINK should take if an illegal type association is attempted. See Block Type 1130 in Appendix A for more information. B-27 FIELD TEST your program fit by moving PSECT origins, lowering the high-segment origin, loading into a single segment, reducing the size of arrays in your program, or using the overlay facility. RBS 31 31 REL block type [octal] too short {Detected in module [symbol] from file [file]} The REL block is inconsistent. This may be caused by incorrect output from a translator (for example, missing argument for an end block). Recompile the module and reload. RED 1 1 Reducing low segment to [memory] LINK is reclaiming memory by deleting its internal tables. RER * 1 {No} Request external references (inter-link entry points) {[symbol] [octal]} The listed symbols and their values (if any) represent subroutine entry points in the current link. RGS 1 1 Rehashing global symbol table from [decimal] to [decimal] LINK is expanding the global symbol table either to a prime number larger than your /HASHSIZE switch requested, or by about 50 percent. You can speed up future loads of this program by setting /HASHSIZE this large at the beginning of the load. RLC 31 1 Reloc ctr. initial value current value {[symbol] [octal] [octal]} The listed symbols and values represent the current placement of PSECTs in your address space. RUM 31 31 Returning unavailable memory LINK attempted to return memory to the memory manager, but the specified memory was not previously allocated. This is an internal error. This message is not expected to occur. If it does, please notify your Software Specialist or send a Software Performance Report (SPR) to DIGITAL. B-28 FIELD TEST RWA 8 8 Both READ-ONLY and WRITEABLE attributes specified for psect [ name ] One of the modules you have already loaded explicitly sets an attribute for the named PSECT which conflicts with the declaration of PSECT attributes in the current module. Check the compiler switches or assembly language directives that were used in the generation of these modules. SFU 8 8 Symbol table fouled up There are errors in the local symbol table. Loading continues, but any maps you request will not contain control section lengths. This is an internal error. This message is not expected to occur. If it does, please notify your Software Specialist or send a Software Performance Report (SPR) to DIGITAL. SIF 31 31 Symbol insert failure, non-zero hole found LINK's hashing algorithms failed; they are trying to write a new symbol over an old one. You may be able to load your files in a different order. This is an internal error. This message is not expected to occur. If it does, please notify your Software Specialist or send a Software Performance Report (SPR) to DIGITAL. SMP 8 8 SIMULA main program not loaded You loaded some SIMULA procedures or classes, but no main program. Missing start address and undefined symbols will terminate execution. SNC 31 31 Symbol [symbol] already defined, but not as common {Detected in module [symbol] from file [file]} You defined a FORTRAN common area with the same name as a non-common symbol. You must indicate which definition you want. If you want the common definition, load the common area first. SNL 1 1 Scanning new command line LINK is ready to process the next command line. SNP 8 8 Subroutine [symbol] in link number [decimal] not B-29 FIELD TEST on path for call from link number [decimal] {name [name]} The named subroutine is in a different path than the calling link. Redefine your overlay structure so that the subroutine is in the correct path. SNS 31 31 SITGO not supported {Detected in module [symbol] from file [file]} LINK does not support the REL file format produced by the SITGO compiler. Load your program by using SITGO. SOE 31 31 Saved file output error [file] An error occurred in outputting the EXE file. SPF 31 8 Splice fork failed {,saving on file [file]} LINK was unable to replace itself with your program using the extended splice fork JSYS. The probable cause is your monitor not having the extended splice fork code installed. LINK will save your program if it has not already been saved, and will get or run it from the resulting EXE file. SRB 8 8 Attempt to set relocation counter [symbol] below initial value of [octal] {Detected in module [symbol] from file [file]} You cannot use the /SET switch to set the named relocation counter below its initial value. The attempt is ignored. SRP 31 31 /SET: switch required for PSECT [symbol] {Detected in module [symbol] from file [file]} Relocatable PSECTs are not implemented; you must specify an explicit absolute origin with the /SET switch for the named PSECT. SSN 8 8 Symbol table sorting not yet implemented Alphabetical or numerical sorting of the symbol table is not implemented. The symbols appear in the order they are found. SST 1 1 Sorting symbol table B-30 FIELD TEST LINK is rearranging the symbol table, and if required, is converting the symbols from the new to old format as indicated on the /SYMSEG, /SYFILE, or /DEBUG switch. STC 1 1 Symbol table completed The symbol table has been sorted and moved according to the /SYMSEG, /SYFILE, or /DEBUG switch. STL 31 31 Symbol too long A symbol specified in a rel block is longer than the maximum allowed by LINK. SUP 1 1 Loading suppressed During the compilation process, errors occurred and a nonzero number was entered in JBERR. LINK does not attempt to load the REL files that result from this compile because they may be incorrect. Some compilers do not produce REL files if errors are encountered. T13 31 31 LVAR REL block (type 13) not implemented {Detected in module [symbol] from file [file]} REL Block Type 13 (LVAR) is obsolete. Use the MACRO pseudo-op TWOSEG. TDS 8 8 Too late to delete initial symbols LINK has already loaded the initial symbol table. To prevent this loading, place the /NOINITIAL switch before the first file specification. TMA 31 8 Too many ambiguous requests in link [decimal] {name [name]}, use /ARSIZE:[decimal] {Detected in module [symbol] from file [file]} You have more ambiguous subroutine requests (indicated by LNKARL messages) than will fit in the table for this link. Continue loading. Your load will abort at the end with a LNKABT message; if you have loaded all modules, the message will give the size of the needed /ARSIZE switch for a reload. TML 31 31 Too many links, use /MAXNODE B-31 FIELD TEST You have specified more overlay links than were allowed by the current value for the /MAXNODE switch. Reload your program with a larger /MAXNODE value. TMM + + Type mismatch seen for argument [decimal] in call to routine [symbol] called from module [symbol] at location [octal] The data type of the argument passed by the caller does not match what the called routine expects. [5] TTF 8 8 Too many titles found In producing the index for a map file, LINK found more program names than there are programs. The symbol table is in error. This is an internal error. This message is not expected to occur. If it does, please notify your Software Specialist or send a Software Performance Report (SPR) to DIGITAL. UAR 8 8 Undefined assign for [symbol] {Detected in module [symbol] from file [file]} The named symbol was referenced in a REL Block Type 100 (ASSIGN), but the symbol is undefined. This is generated with the MACRO pseudo-op .ASSIGN. The assignment is ignored. You should load a module that defines the symbol. UCB 8 8 Unknown COMMON [symbol] referenced A reference was made to a common block, however the block does not exist. UIE 31 31 Unexpected internal error during processing An error occurred while processing a previous error. This message is not expected to occur. If it does, please notify your Software Specialist or send a Software Performance Report (SPR) to DIGITAL. --------------- [5] + The level and severity of this message is determined by a compiler-generated coercion block. A coercion block specifies which data type associations are permissible and what action LINK should take if an illegal type association is attempted. See Block Type 1130 in Appendix A for more information. B-32 FIELD TEST UGS * 1 {No} Undefined global symbols {[symbol] [octal] The listed symbols and their values (if any) represent symbols not yet defined by any module. Each value is the first address in a chain of references for the associated symbol. If this message resulted automatically at the end of loading, this is a user error. In this case, the load will continue, leaving references to these symbols unresolved. UMF 31 31 Unexpected monitor call failure for [JSYS] at PC [octal] {JSYS error text} A monitor call has unexpectedly failed. The second line of the error message is the last TOPS-20 process error and indicates why the error occurred. This may be either a system problem or a LINK internal error, depending on the message. UNS 31 31 Universal file REL block (type 777) not supported from file [file] Extraction of symbols from a MACRO universal file is not implemented. URC 31 1 Unknown Radix-50 symbol code [octal] [symbol] {Detected in module [symbol] from file [file]} In a REL Block Type 2 (Symbols), the first 4 bits of each word pair contain the Radix-50 symbol code. LINK found one or more invalid codes in the block. This error can be caused by a fault in the language translator used for the program. URV + + Unexpected return value in call to routine [symbol] called from module [symbol] at location [octal] The called routine returns a value which was not expected by the caller. [6] USA 8 8 Undefined start address [symbol] You gave an undefined global symbol as the start address. Load a module that defines the symbol. B-33 FIELD TEST USB 8 8 Undefined symbol in byte array (type 1004) block {Detected in module [symbol] from file [file]} LINK has detected an undefined global symbol in a type 1004 REL block. This global symbol is used to relocate a byte pointer and must be defined before the 1004 block that uses it is seen. This error is most likely the result of an error in the language translator used to generate the REL file. USC 31 8 Undefined subroutine [symbol] called from link number [decimal] {name [name]} The named link contains a call for a subroutine you have not loaded. If the subroutine is required for execution, you must reload, including the required module in the link. USD 31 31 Undefined symbol [ symbol ] used in loading code or data blocks You have loaded a module that is loading code or data at a symbolic address and the symbol is currently unknown to LINK. Check the order in which you are loading modules. USI 8 16 Undefined symbol [symbol] illegal in switch [switch] You have specified an undefined symbol to a switch that can only take a defined symbol or a number. Specify the correct switch value. UUA 8 8 Undefined /UPTO: address [symbol] You gave the named symbol as an argument to the /UPTO switch, but the symbol was never defined. Load a module that defines the symbol, or change your argument to the /UPTO switch. VAL 31 1 Symbol [symbol] [octal] [type] LINK has printed the specified symbol, its value and its attributes as requested. --------------- [6] + The level and severity of this message is determined by a compiler-generated coercion block. A coercion block specifies which data type associations are permissible and what action LINK should take if an illegal type association is attempted. See Block Type 1130 in Appendix A for more information. B-34 FIELD TEST WNA + + Wrong number of arguments in call to routine [symbol] called from module [symbol] at location [octal] The number of arguments in the routine call is not the number of arguments expected by the called routine. XCT 31 1 [Name] execution LINK is beginning execution of your program. ZSV 8 8 Zero switch value illegal You omitted required arguments for a switch (for example, /REQUIRE with no symbols). Respecify the switch. B.3 REASON EXPLANATION The [reason] message segment of the LNKEOV, LNKETP, LNKFEE, LNKFLE, and LNKFRE messages may contain one of the following codes. Code Description 0 (LNKFEE and LNKFRE only) One of the following conditions occurred: 1. The specified file name was illegal. 2. When updating a file, the specified file name did not match the file to be updated. 3. The RENAME monitor call following a LOOKUP monitor call failed. 0 (LNKFLE only) The named file was not found. Specify an existing file. 1 The named directory does not exist on the named file structure, or the project-programmer number given was incorrect. 2 You do not have the sufficient access privileges to use the named file. B-35 FIELD TEST 3 Another job is currently modifying the named file. Try accessing the file later. 4 The named file already exists, or a different file was specified on the ENTER monitor call following a LOOKUP monitor call. 6 One of the following conditions occurred: 1. A transmission, device or data error occurred while attempting to read the directory or the RIB of the named file. 2. A hardware-detected device or data error was detected while reading the named directory's RIB or data block. 3. A software-detected data inconsistency error was detected while reading the named directory's or file's RIB. 7 The named file is not saved a file. This message can never occur and is included only for completeness of the LOOKUP, ENTER and RENAME error codes. This message is not expected to occur. If it does, please notify your Software Specialist or send a Software Performance Report (SPR) to DIGITAL. 14 You have exceeded the quota of the named directory, or the entire capacity of the file structure, Delete some files, or specify a directory or structure with sufficient space. 15 The named device is write-locked. Specify a write-enabled device or ask the operator to write-enable the named device. 24 A LOOKUP and ENTER monitor call was performed on generic device DSK: and the search list is empty. 30 A LOOKUP and ENTER monitor call was given to update a file, but the file cannot be updated for some reason For example, another user is superseding it or the file was deleted between the time of the LOOKUP and ENTER. 42 This message indicates that a LOOKUP, ENTER, or RENAME error occurred that was larger in number than the errors LINK knows about. This message is not expected to occur. If it does, please notify your Software Specialist or send a Software B-36 FIELD TEST Performance Report (SPR) to DIGITAL. B-37 C-1 APPENDIX C JOB DATA AREA LOCATIONS SET BY LINK LINK sets a number of locations between 40 and 140 (octal) in the user's program. These locations are known as the Job Data Area (commonly abbreviated to JOBDAT). They are used by many languages and programs. In addition, two segment programs have a Vestigial Job Data Area of eight words following the high segment origin. The /NOJOBDAT switch, described in Section 3.2.2, keeps LINK from filling in JOBDAT. C.1 JOB DATA AREA Address Symbolic Use 41 .JB41 HALT if not specified otherwise. Executes by LUUOs. 42 .JBERR Right: Number of errors during loading. 74 .JBDDT Left: Highest location occupied by DDT. Right: Start address of DDT if loaded. 115 .JBHRL Left: High segment length. Right: Highest address in high segment. 116 .JBSYM Left: Negative length of symbol table. Right: Address of table. 117 .JBUSY Left: Negative length of undefined symbol table. Right: Address of undefined symbol table. 120 .JBSA Left: First free location in low segment. Right: Start address of program. C-1 FIELD TEST Address Symbolic Use 121 .JBFF Right: First free location in low segment. 124 .JBREN Right: Reenter address of program. 131 .JBOVL Address of header block for the root link in an overlaid program. 133 .JBCOR Left: Highest location of low segment loaded with data. 137 .JBVER Version Program version number (in octal) and number: flags, in the format shown below. Bits Meaning 0-2 Modifier flag: Flag Meaning 0 DIGITAL development group last modified the program. 1 Other DIGITAL employees last modified the program. 2-4 A customer last modified the program. 5-7 A customer's user last modified the program. 3-11 DIGITAL's latest major revision number, usually incremented by 1 for each release. 12-17 DIGITAL's minor revision number, which is usually 0, unless the program has been modified since the last release. 18-35 The edit number, increased by 1 after each edit to the program. This value is never reset. C.1.1 Vestigial Job Data Area Offset Symbolic Use 0 .JBHSA Copy of .JBSA. 1 .JBH41 Copy of .JB41. C-2 FIELD TEST 2 .JBHCR Copy of .JBCOR. 3 .JBHRH LH: left half of .JBHRL. RH: right half of .JBREN. 4 .JBHVR Copy of .JBVER. 5 .JBHNM Program Name. 6 .JBHSM High segment symbol table, if any. 7 .JBHGA High segment origin page in bits 9-17. C-3 8-1 GLOSSARY absolute address is a fixed location in user virtual address space which cannot be relocatable by the software. ASCII is the American Standard Code for Information Interchange. A 7-bit code in which textual information is recorded. ASCII code can represent 128 distinct characters. These characters are the upper and lower case letters, numbers, common punctuation marks, and special control characters. assembler translates assembly language into machine language. relocatable contains machine language code corresponding binary file to your source program. chained fixup is a linked list of locations that require a global symbol definition. The left-half, right-half, or whole words points to the next location in the list that requires the definition. compiler translates high-level language into machine language. counted vector is a region of memory whose size is in the first word of a block. debugger is a program that helps you locate programming errors or bugs. entry name symbol is a symbol in a module that contains an entry point name for other modules. executable program is the form of a program that is ready to be executed by the computer. FIELD TEST fixup is a process LINK uses to resolve global symbol references. LINK stores the reference until it loads the module that contains the global symbol's definition. After LINK loads that module, it places the definition where the reference is stored. global symbol is a symbol defined in one module that can be referenced by other modules. JOBDAT contains information about a program in locations 20 decimal to 137 decimal such as its debugger symbol table pointer, version numbers, and memory use. language translator is a compiler or assembler that translates source code into machine executable format. library is a file that contains object modules that may be needed by programs to resolve global symbol references. object module contains a source program's relocatable code in machine-readable format. PDV stands for Program Data Vector and contains information about a program such as its debugger symbol table pointer, version number, and memory use. A PDV is used usually in place of JOBDAT for an extended addressing program. Polish chained fixups is a process that uses an algorithm to resolve global symbols. PSECTs stands for Program SECTions and are programmer or system defined regions of code or data that LINK relocates together in memory. Radix-50 is a highly compressed code used to record textual information. The characters available in Radix-50 are uppercase letters, 0-9, ., %, $, and a space. A space is equal to 0, and cannot be used in names. relocatable address is an address within a module that is specified as an offset from the first location in that module. REL blocks are output from a language translator that make up and contain the information that LINK FIELD TEST uses to load a program. REL file is the file produced by compilers or assemblers that contains the REL blocks used by LINK to load a program. SIXBIT is a 6-bit code in which textual information is recorded. It is a compressed form of the ASCII character set, therefore not all of the characters in ASCII are available in SIXBIT, notably the nonprinting characters and lower case letters are omitted. symbol table contains entries and values for each symbol defined or used within a program. sharable save file is the executable program that has been stored in a file using the LINK /SAVE switch or the TOPS-20 SAVE command. This file has an .EXE file extension. 3 INDEX Abbreviating LINK switches, 3-4 loading, 3-17, 3-94 Abbreviating switches, 3-4 specifying, 3-16 Absolute address, 1-2 Debugging overlaid programs, 5-26 Address Declaring non-writable links, absolute, 1-2 5-29 relocatable, 1-2 Declaring writable links, 5-34 virtual, 1-2 Default Allocating changing file specifications, FORTRAN COMMON storage, 3-10 3-19 Allocating memory /DEFAULT switch, 3-19 for overlays, 3-87 Defaults /ARSIZE switch, 3-9 file specifications, 3-3 specifying, 3-59 Blocks /DEFINE switch, 3-20 REL, 1-2, A-1 Defining Building PDVs, 7-1 global symbols, 3-20 logical names, 3-4 Calls to overlay handler, 5-27 Deleting CCL file, 3-3 entry name symbols, 3-47 Changing PDVs contents, 3-71 Deleting overlay links, 3-52 Clearing modules, 3-48 Displayiing Closing overlay links, 3-35 needed modules, 3-43 CLROV., 5-29 Displaying CLROVL, 5-29 entry name symbols, 3-21 CMD file, 3-3 external global symbol Command switches references, 3-75 TOPS-20, 2-3 global symbol values, 3-99 Commenting LINK commands, 3-2 relocation counters, 3-13 /COMMON switch, 3-10 undefined global symbols, 3-96 CONCATENATE Displaying messages, 3-41, 3-100 PSECTs attributes, 6-4 Conserving memory space, 3-51 Ending loading, 3-26 Constructing overlays, 3-62 Entry name /CONTENTS switch, 3-11 symbols, 1-3 Continuing LINK commands, 3-2 Entry name symbols Core image file, 4-1 deleting, 3-47 /COUNTERS switch, 3-13 displaying, 3-21 /CPU switch, 3-15 Entry points overlay handler, CPU type 5-27 specifying, 3-15 /ENTRY switch, 3-21 Creating /ERRORLEVEL switch, 3-22 EXE files, 3-80 /EXCLUDE switch, 3-23 sharable save files, 3-80 EXE file, 1-4 Creating PDVs, 3-50 Executable program, 1-4, 4-1 EXECUTE Data word, A-2 TOPS-20 command, 2-1 /DDEBUG switch, 3-16 /EXECUTE switch, 3-1, 3-24 DEBUG Executing a loaded program, 3-24 Index-1 TOPS-20 command, 2-1 /EXIT switch, 3-27 /DEBUG switch, 1-4, 3-1, 3-17 Exiting LINK, 3-1, 3-26 Debuggers EXTTAB table, 5-53 Index-2 File when LINK creates, 7-1 core image, 4-1 EXE, 1-4 Levels indirect command, 3-3 message, 4-7 log, 1-5, 4-6 Libraries map, 1-5, 4-7 searching, 3-81 overlay, 1-5 Library, 1-3 plotter, 1-5 searching, 1-3 REL, 1-2 system, 1-3 sharable save, 1-4 user, 1-4 symbol, 1-5, 3-91, 4-7 /LIMIT LINK switch, 6-2 File specification defaults /LIMIT switch, 3-32 changing, 3-19 LINK, 1-1 Forcing modules loading, 3-30 input, 1-2 Forcing system library searching, messages, 1-5 3-93 output, 1-4 Format LINK commands link overlay, 5-50 commenting, 3-2 overlay file, 5-47 continuing, 3-2 PDV, 7-3 file specification defaults, FORTRAN COMMON 3-3 allocating, 3-10 format, 3-2 /FRECOR switch, 3-25 in indirect command files, 3-3 Free memory LINK messages, 4-7, B-1 maintaining, 3-25 description, B-1 FUNCT. subroutine, 5-23, 5-40 level, B-1 severity, B-2 GETOV., 5-30 Link name table format, 5-49 GETOVL, 5-30 LINK number table format, 5-49 Global LINK switches, 3-7 Link overlay code, 5-52 Global symbol Link overlay format, 5-50 displaying values, 3-99 /LINK switch, 3-35 Global symbols, 1-3 LINK switches, 3-4 defining, 3-20 abbreviating, 3-4 displaying undefined, 3-96 arguments, 3-5 suppressing, 3-89 format for use with TOPS-20 /GO switch, 3-1, 3-26 commands, 2-3 placement, 3-6 /HASHSIZE switch, 3-28 LOAD Header word, A-1 TOPS-20 command, 2-1 /HELP switch, 3-29 Loading debuggers, 3-17, 3-94 IDXBFR, 5-27 ending, 3-26 INBFR, 5-27 FORTRAN into PSECTs COMMONS, /INCLUDE switch, 3-30 3-68 Including local symbols, 3-36 object-time systems, 3-60 Indirect command file, 3-3 PSECTs, 6-1 INIOV., 5-31 segments, 3-58 INIOVL, 5-31 two-segment code using PSECTs, INTTAB table, 5-54 3-74 Local LINK switches, 3-6 Job data area, C-1 Local symbols, 1-3 Index-3 Job names including, 3-36 specifying, 3-78 /LOCALS switch, 3-36 JOBDAT, 1-4, C-1 Log file, 1-5, 4-6 Index-4 specifying, 3-37 /NOREQUEST switch, 3-52 Log files /NOSEARCH switch, 1-4, 3-53 overlay, 5-32 /NOSTART switch, 3-54 /LOG switch, 3-37 /NOSYMBOL switch, 3-55 Logical names /NOSYSLIB switch, 1-4, 3-56 defining, 3-4 /NOUSERLIB switch, 1-4, 3-57 /LOGLEVEL switch, 3-38 Number of overlay links LOGOV., 5-32 specifying, 3-40 LOGOVL, 5-32 Long count, A-1 Object modules, 1-2 Object-time systems Maintaining free memory, 3-25 loading, 3-60 Map file, 1-5, 4-7 /ONLY switch, 1-2, 3-58 resetting symbol types, 3-11 Opening overlay links, 3-45 specifying symbol types, 3-11 /OPTION switch, 3-59 /MAP switch, 3-39 Origin /MAXNODE switch, 3-40 PSECTs, 6-1 MBZ, A-2 /OTSEGMENT switch, 3-60 Memory Output file specification allocating specifying, 3-6 for overlays, 3-87 OVERLAID Memory map PSECTs attributes, 6-4 format of PDV, 7-6 Overlaid programs length, 7-6 debugging, 5-26 PDV, 7-5 Overlay Memory space file, 1-5 conserving, 3-51 Overlay file format, 5-47 Message levels, 4-7 Overlay handler, 5-26 Message severity, 4-8 calls to, 5-27 Message severity codes, B-2 entry points, 5-27 /MESSAGE switch, 3-41 Overlay handler messages, 5-35 Messages Overlay link names Displaying, 3-100 specifying, 3-6 LINK, 4-7 Overlay link paths, 5-1 overlay handler, 5-35 Overlay link preamble, 5-51 suppressing, 3-22 Overlay links suppressing logging, 3-38 closing, 3-35 /MISSING switch, 3-43 deleting, 3-52 Module names naming, 3-35 specifying, 3-5 opening, 3-45 Modules predecessor, 5-1 clearing, 3-48 successor, 5-1 forcing loading, 3-30 Overlay log files, 5-32 preventing loading, 3-23 Overlay program size, 5-26 Overlay structure, 5-1 Naming overlay links, 3-35 /OVERLAY switch, 3-62 /NEWPAGE switch, 3-44 Overlay switches, 5-2 /NODE switch, 3-45 Overlaying links, 5-27 /NOENTRY switch, 3-47 Overlays, 1-5 /NOINCLUDE switch, 3-48 constructing, 3-62 /NOINITIAL switch, 3-49 restrictions, 5-23 /NOJOBDAT switch, 3-50 writable, 5-22 Index-5 /NOLOCAL switch, 3-51 Overlays relocatable, 5-23 Non-writable links declaring, 5-29 Page access Index-6 setting, 6-5 origin, 6-1 /PATCHSIZE switch, 3-64 preventing unintended overlaps, Paths 6-2 overlay link, 5-1 specifying upper bounds, 3-32 PDV, 1-4, 7-1 upper bound, 6-2 building, 7-1 /PVBLOCK switch, 3-69 format, 7-3 /PVDATA switch, 3-71 memory map, 7-5 format, 7-6 /REDIRECT switch, 1-3, 3-74 when LINK creates, 7-1 REL PDVOP% JSYS, 7-1 blocks, 1-2 PDVs file, 1-2 changing contents, 3-71 REL blocks, A-1 requesting, 3-69 Relocatable Plot file overlays, 5-23 specifying, 3-67 Relocatable address, 1-2 /PLOT switch, 3-65 Relocatable binary file Plotter file, 1-5 See REL file. /PLTTYP switch, 3-67 Relocation counter Predecessor links, 5-1 definition, 1-3 Predecessor overlay links, 5-1 Relocation counters Preventing displaying, 3-13 automatic system library for PSECTed programs, 1-3 searching, 3-56 for segmented programs, 1-2 JOBDAT, 3-50 setting, 3-44, 3-85 module loading, 3-23 Relocation table, 5-55 user symbol tables, 3-55 Relocation word, A-1 Preventing JOBDAT, 3-49 REMOV., 5-32 Program Removing links, 5-32 executable, 1-4 REMOVL, 5-32 executing, 3-24 /REQUEST switch, 3-75 single-segment, 1-2 Requesting specifying termination, 3-86 symbols, 3-76 two-segment, 1-2 Requesting PDVs, 3-69 Program Data Vector /REQUIRE switch, 3-76 See PDV. Resetting symbol types for the Program Data Vectors map file, 3-11 See PDVs Restrictions overlays, 5-23 Program size RONLY overlay, 5-26 PSECTs attributes, 6-5 /PSCOMMON switch, 3-68 Root link, 5-1 PSECT bounds, 6-1 /RUN switch, 3-77 PSECT names /RUNAME switch, 3-78 specifying, 3-5 Running LINK, 3-1 PSECT origins Running links, 5-33 setting, 3-85 /RUNOFFSET switch, 3-79 PSECTs, 6-1 RUNOV., 5-33 attributes, 6-3 RUNOVL, 5-33 CONCATENATE, 6-4 RWRITE OVERLAID, 6-4 PSECTs attributes, 6-5 RONLY, 6-5 RWRITE, 6-5 Save file format, 4-2 Index-7 loading, 6-1 /SAVE switch, 1-4, 3-80 loading two-segment code into, SAVOV., 5-34 3-74 SAVOVL, 5-34 Index-8 /SEARCH switch, 1-4, 3-81 Successor links, 5-1 Searching libraries, 3-81 successor overlay links, 5-1 Searching user libraries, 3-98 /SUPPRESS switch, 3-89 /SEGMENT switch, 3-83 Suppressing Segments global symbols, 3-89 loading, 3-58 messages display, 3-22 specifying, 3-83 Suppressing logging messages, /SET LINK switch, 6-1 3-38 /SET switch, 3-85 /SYFILE switch, 3-91 Setting global symbol table size, Symbol file, 1-5, 4-7 3-28 specifying, 3-91 Setting page access, 6-5 Symbol names Setting PSECT origins, 3-85 specifying, 3-5 Setting relocation counters, 3-44, Symbol table limits 3-85 setting, 3-97 Setting symbol table limits, 3-97 Symbol table vector, 7-7 Severity format, 7-8 message, 4-8 Symbol tables Severity codes specifying location, 3-92 message, B-2 Symbols /SEVERITY switch, 3-86 entry name, 1-3 Sharable save file, 1-4 global, 1-3 Short count, A-1 local, 1-3 Single-segment program, 1-2 /SYMSEG switch, 3-92 Size /SYSLIB switch, 1-4, 3-93 setting global symbol table, System libraries 3-28 forcing searching, 3-93 /SPACE switch, 3-87 preventing automatic searching, Specifying 3-56 CPU type, 3-15 System library, 1-3 debuggers, 3-16 job names, 3-78 /TEST switch, 1-4, 3-94 log file, 3-37 TOPS-20 command switches, 2-3 module names, 3-5 Translating directories, 3-4 number of overlay links, 3-40 Tree diagram output file specifications, 3-6 outputting, 3-65 overlay link names, 3-6 Tree structure, 5-1 plot file, 3-67 Two-segment program, 1-2 program termination, 3-86 PSECT names, 3-5 /UNDEFINED switch, 3-96 PSECTs upper bounds, 3-32 Upper bound for PSECTs, 6-2 segments, 3-83 /UPTO switch, 3-97 start addresses, 3-88 User libraries, 1-4 symbol names, 3-5 searching, 3-98 symbol types for the map file, stopping automatic searching, 3-11 3-57 version numbers, 3-102 User symbol tables Specifying values, 3-5 preventing, 3-55 Start addresses /USERLIB switch, 1-4, 3-98 specifying program, 3-88 /START switch program, 3-88 /VALUE switch, 3-99 Stopping automatic user library Values Index-9 searching, 3-57 specifying, 3-5 Subroutine /VERBOSITY switch, 3-100 FUNCT., 5-23, 5-40 Version numbers Index-10 specifying, 3-102 Writable links /VERSION switch, 3-102 declaring, 5-34 Virtual address, 1-2 Writable overlays, 5-22 Index-11