Object program structures

High Level Assembler supports two object-program models. The older "load module" model generally involves one or more independently relocatable control sections combined into a single block of machine language text, which is loaded into a single contiguous portion of memory. Addresses within this block of text are resolved to locations within the block, or are left unresolved. Such programs may be considered one-dimensional structures. Examples include z/OS load modules, CMS modules, and z/VSE phases.

z/VM and z/OS

The second object-program model supports a two-dimensional structure called a program object. The loaded program may consist of one or more contiguous blocks of machine language text grouped in classes and placed in different portions of memory. Each contribution of machine language text to a class is provided by an owning section, and the independently relocatable text from a section that contributes to a class is an element. For certain types of class, an element may contain parts. Unlike a control section, a program object section may specify more than one independently relocatable block of text. Addresses within each class may be resolved to addresses in the same or different classes. A class in a program object has behavior properties similar to those of a load module.

Section names are specified with the CSECT, RSECT, and START statements, and class and part names are specified with the CATTR statement. Additional attributes can be assigned to external symbols with the XATTR statement.

End of z/VM and z/OS

The program object model can be created only when the GOFF option is specified. The "load module" model can be created when either the NOGOFF or GOFF option is specified, but there are limitations on source program statements if GOFF is specified.

Note: The term "section" is used in different senses for each object-program model. In the load module model, a section is a control section. In the program object model, a section is a one-dimensional cross-section of program object data containing contributions to one or more classes.

z/VM and z/OS

Note: Features supported by High Level Assembler when you specify the GOFF option may not be supported by the system linker/binder or run-time environment where the assembled program will be processed. You should check the relevant product documentation before utilizing the assembler's features.

End of z/VM and z/OS

The following figure illustrates the differences between the object-program models.

Figure 12. Load module and Program Object structures
   *-------------*                Class     Class     Class   - - -
   |             |             *---------*---------*---------* - - -*
   |   Control   |             |         |         |  part   |      |
   |   Section   |     Section | element | element *---------*      |
   |             |             |         |         |  part   |      |
   *-------------*             *---------+---------+---------+ - - -*
   |   Control   |             |         |         |         |      |
   |   Section   |     Section | element | element |  part   |      |
   *-------------*             |         |         |         |      |
   :             :             *---------+---------+---------+ - - -*
   :             :             :         :         :         :      :
   :             :             :         :         :         :      :
   *-------------*             *---------*---------*---------* - - -*
  Load Module Model                  Program Object Model

[ Top of Page | Previous Page | Next Page | Contents | Index ]