Jump to content United States-English
HP.com Home Products and Services Support and Drivers Solutions How to Buy
» Contact HP
More options
HP.com home
Getting Started as an MPE/iX Programmer Programmer's Guide: HP 3000 Computer MPE/iX Computer Systems > Chapter 3 Program Development

Linking a Program

» 

Technical documentation

Complete book in PDF
» Feedback
Content starts here

 » Table of Contents

 » Index

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.

NOTE: Link Editor on MPE/iX replaces Segmenter on MPE V/E. You can still use Segmenter in MPE/iX Compatibility Mode. For detailed information, refer to MPE Segmenter Reference Manual (30000-90011). For an explanation of the differences between Link Editor and Segmenter, refer to Link Editor/XL Reference Manual (32650-90030). :LINK is the MPE/iX counterpart to :PREP on MPE V/E systems. However, it operates differently and has different options. For an explanation of the differences between :LINK and :PREP, refer to Link Editor/XL Reference Manual (32650-90030). Figure 3-3 “Linking and Using User Libraries” shows the role of :LINK and Link Editor in MPE/iX.

Figure 3-3 Linking and Using User Libraries

Linking and Using User Libraries

:LINK operates on one or more relocatable object modules created by a native compiler to perform the following tasks:

  • Search one or more relocatable libraries (RLs) and resolve references to them in any of the relocatable object modules being linked.

  • Resolve references among the relocatable object modules.

  • Merge all the relocatable object modules associated with one program to create an executable program file.

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.)

Creating Executable Program Files

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:

  • Files to link

  • Relocatable libraries (RLs) to merge

  • Executable libraries (XLs) names to put in a program header

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:

  • Produce a program file map.

  • Search specified relocatable libraries (RLs) for any required code not found in the relocatable object module.

  • Give the executable program file certain privileges and capabilities.

Symbol Listing

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:

  • PROGRAM names the executable program file.

  • XL LIST shows the names of executable libraries specified in the XL parameter of the LINK command.

  • CAPABILITIES shows the capabilities assigned to the program in the CAP parameter of the LINK command.

  • HEAP SIZE shows the value specified in the NMHEAP parameter of the LINK command.

  • STACK SIZE shows the value specified in the NMSTACK parameter of the LINK command.

  • VERSION shows the executable program file format version.

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).

Printable version
Privacy statement Using this site means you accept its terms Feedback to webmaster
© Hewlett-Packard Development Company, L.P.