Getting Started as an MPE/iX Programmer Programmer's Guide: HP 3000 Computer MPE/iX Computer Systems > Chapter 3 Program DevelopmentLinking a Program |
|
Many executable programs are originally generated from more than one source file. On MPE/iX, each source file is compiled separately to produce a relocatable object module. The linking phase of program development makes a relocatable object file into an executable program file. It can also bring together separately compiled relocatable object modules into an executable program file. Use the MPE/iX command :LINK to automatically access Link Editor to create an executable program file from one or more relocatable object modules.
:LINK operates on one or more relocatable object modules created by a native compiler to perform the following tasks:
If you use language commands that compile, link, and execute in one command (for example, :PASXLGO and :COB85XLG) or compile and link in one command (for example, :PASXLLK and :FTNXLLK), then linking is automatic. When you compile separately, you can use the MPE/iX command :LINK to produce an executable program file. Use this method when you want to use values different from standard Link Editor defaults. :LINK invokes Link Editor and passes the specified parameters to it. (An analogous LINK command exists in Link Editor; the MPE/iX command :LINK simply provides a short cut.) The MPE/iX command :LINK creates a load module (an executable program file). The :LINK command invokes Link Editor, which is an MPE/iX subsystem that prepares compiled programs for execution and maintains libraries. When invoked by using :LINK, Link Editor resolves external references in relocatable object modules by merging relocatable object modules to produce an executable program file containing all of the code and data that was in the relocatable object modules. It assigns final addresses to each symbol (for a variable or procedure) to ensure that none overlap each other in the executable program file. These addresses are called virtual addresses, because they are still subject to a final relocation when the program is loaded into physical memory. Once virtual addresses are determined, Link Editor can resolve many of the references that could not be resolved at compile time, because the symbol tables from all of the relocatable object modules have been merged to one table. You can specify the relocatable libraries to search for unresolved references at link time. Any remaining external calls must be resolved at load time. :LINK parameters can specify indirect files. An indirect file is a file list contained in an ASCII file. For example, in the :LINK command, an indirect file can be used to specify one of the following lists:
For an overview of Link Editor, refer to Chapter 4. For detailed information on :LINK and Link Editor, refer to Link Editor/XL Reference Manual (32650-90030). You can request options at link time to:
Example 3-1 shows a source file named EX1SRC. An executable program file has been created for EX1SRC named EX1PROG. Example 3-1 Source File Example IDENTIFICATION DIVISION. PROGRAM-ID. EX1 ENVIRONMENT DIVISION. INPUT-OUTPUT DIVISION. FILE-CONTROL. SELECT IFILE ASSIGN "IFILE". SELECT PFILE ASSIGN "PFILE". DATA DIVISION. FILE SECTION. FD IFILE. 01 IREC. 05 NAME PIC X(30). 05 SOC-SEC PIC X(9). 05 HIRE-DATE. 10 MO PIC XX. 10 DA PIC XX. 10 YR PIC XX. 05 SALARY PIC S9(6). 05 PIC X(29). FD PFILE. 01 PREC. 05 SOC-SEC PIC X(9). 05 PIC XX. 05 NAME PIC X(30). 05 PIC XX. 05 HIRE-DATE. 10 MO PIC XX. 10 PIC X. 10 DA PIC XX. 10 PIC X. 10 YR PIC XX. 05 PIC X(81). 01 HREC. 05 HSOC-SEC PIC X(11). 05 HNAME PIC X(32). 05 HHIRE-DATE PIC X(89). WORKING STORAGE SECTION. 01 LNCNT PIC S9(4) BINARY VALUE 60. 01 W-DATE. 05 WYR PIC XX. 05 PIC X(4). PROCEDURE DIVISION. P1. ACCEPT W-DATE FROM DATE. OPEN INPUT IFILE OUTPUT PFILE. PERFORM WITH TEST AFTER UNTIL SOC-SEC OF IREC = ALL "9" READ IFILE AT END MOVE ALL "9" TO SOC-SEC OF IREC NOT AT END IF WYR = YR OF IREC THEN ADD 1 TO LNCNT IF LNCNT > 50 PERFORM HEADINGS END-IF MOVE SPACES TO PREC MOVE CORR IREC TO PREC WRITE PREC AFTER ADVANCING 1 LINE END-IF END-READ END PERFORM CLOSE IFILE PFILE STOP RUN. HEADINGS. MOVE "SOC-SEC" TO HSOC-SEC. MOVE "NAME" TO HNAME. MOVE "HIRE DATE" TO HHIRE-DATE. WRITE PREC AFTER ADVANCING PAGE. MOVE 0 TO LNCNT. The commands :LINKEDIT LinkEd> LISTPROG EX1PROG invoke HP Link Editor/XL and create a program map displaying the symbols in EX1PROG, as shown in the following example: PROGRAM : EX1PROG XL LIST CAPABILITIES : BA, IA HEAP SIZE : STACK SIZE : VERSION : 85082112 Sym C H X P Sym Sym Sym Lset Name Type Scope Value Name ---- - - - - ---- ----- ----- ---- $START 0 3 3 sec_p univ 000059B7 _start 0 3 3 sec_p univ 00005A07 ex1 0 3 3 pri_p univ 000059EB M$1 0 data local dp+00000000 In this program map, the portion preceding the symbol table is the header, which provides general information about the executable program file:
The header information is followed by a list of symbols in the executable program file. For information on understanding the symbol listing, refer to Link Editor/XL Reference Manual (32650-90030). |