Getting Started as an MPE/iX Programmer Programmer's Guide: HP 3000 Computer MPE/iX Computer Systems > Chapter 3 Program DevelopmentCompiling a Program |
|
When you have saved the program source code in a file, it must be compiled; translated into machine readable instructions in a program file. The MPE/iX Native Mode language compilers available for this purpose are HP C/iX, HP Pascal/iX, HP COBOL II/XL, and HP FORTRAN 77/iX. Commands are available to:
An overview of these commands is given later in this section. For detailed information on them, refer to :
Follow the appropriate instructions for the language you are using; HP C/iX, HP Pascal/iX, HP COBOL II/XL, or HP FORTRAN 77/iX. For example, to compile a program named MYPROG in HP Pascal/iX, enter:
For further instructions on compiling, refer to:
The compiler can write compiled code in a relocatable object file, generate a source code listing, and generate an error list. Unless you specify differently, the compiler writes the object file to the standard file $NEWPASS, which is renamed $OLDPASS when the compile is completed and $NEWPASS is closed. The compiler writes the source code and error list to $STDLIST. The compiler reads a source file as input, performs a translation to object code, and writes the resulting compiled code in relocatable object modules. The number of modules in a file is compiler dependent. MPE/iX compilers usually produce one relocatable object module in a relocatable object file. The internal structure of a relocatable object module is common to all compilers that generate Hewlett-Packard Precision Architecture (HP-PA) code. A relocatable object module contains a combination of code and data for all procedures in the source file that was the compilation unit. A relocatable object module is the smallest unit that a compiler can produce or the Link Editor can manipulate. A source file with several procedures in it compiles all of them into one relocatable object module. The procedures within the relocatable object module cannot be replaced or purged individually. When a large program is divided into several source files, each one can refer to external procedures (subroutines or variables that are defined in another file). Because MPE/iX compilers process only one source file at a time, external procedure references cannot be resolved at compile time. They are resolved at link time, when all of the program components are brought together. The compiler simply assigns a fix-up request (frequently called a relocatable address) to each external reference, indicating the relative position of each subroutine or variable in the relocatable object module.
To separate relocatable object modules for two procedures into different relocatable object files, you must put the procedures in separate source files and compile them individually. You can gather them together at link time. Figure 3-2 “Compiler Producing Relocatable Object Modules” shows an MPE/iX Native Mode compiler producing a relocatable object module. A relocatable object module is an independent file. It may not require resources such as relocatable libraries (RLs) and links to other relocatable object modules, although these are made, when necessary, at link time. External resources (usually system routines) are acquired at run time. A relocatable object module contains the following information, described in detail in the subsections below:
The compiler generates a symbol table in each relocatable object module. It lists all the procedures and variables that are defined in the module and may be required by other modules at link time and all those that are referenced in the module, but not defined there. The compiler assigns a fix-up address to each defined subroutine or variable symbol, indicating its position relative to the beginning of the module. A compiler segregates code and data into separate areas in a relocatable object module. The individual compiler determines how compiled code is organized within it and the content is compiler dependent. Data constants are stored in the relocatable object module along with code and, thus, are non-modifiable. To change compiled code, you must recompile the entire relocatable object module. A relocatable object module contains information on data requirements. Usually, it describes data types and required data space. The exact type of information is compiler dependent. It is used when initialization of variables is requested or when the data space has a common variable, which is a variable that several pieces of code can share. Because a compiler processes one source file at a time, it cannot resolve external references, determine parameter compatibility with them, or analyze actual data. This must be resolved at link time or run time. The compiler simply lists external references required for execution in a symbol table located in the relocatable object module, allowing you to compile a program in several pieces by separately compiling several source files. The symbol table lists all subroutines and variable names that are defined by the relocatable object module. Compiler libraries are used at run time by every program. On MPE/iX, they are stored in a library named XL.PUB.SYS. The command to compile a program (without linking, loading, and running it) is the command, followed by an optional list of file names. The commands are: :CCXL :COB85XL :FTNXL :PASXL If you omit a file from the list, a standard default file is used. The standard default files are:
If you fail to supply a relocatable object module, a compiler opens a new file named $NEWPASS and designates it to be a relocatable object module. At the end of the compilation, $NEWPASS is automatically renamed $OLDPASS and saved. Unless you designate differently, the compiler listing produced by the compilation is output to your job or session list device, so you can see any errors. You can obtain two types of output from a compiler, aside from the compiler listing of errors:
If you wish only to compile a program, without linking and running it, you can use the "compile only" command for the appropriate language. These commands allow you to provide several optional parameters that specify the name of the textfile (source file), objectfile (relocatable object module), and listfile. The text file contains the source code for the program. The relocatable object module will contain the output from the compile. The listfile, which is usually on a terminal or printer, will reflect the progress of the compile. When source code has been successfully compiled and you have an error-free relocatable object module, you are ready to link a program file from information in one or more relocatable object modules. A software product called Link Editor performs this operation. |