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 are 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 is the Generalized Object File format (GOFF). GOFF supports a two-dimensional structure called program objects. For more information about GOFF, refer to z/OS MVS Program Management: Advanced Facilities. The loaded program can 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 can contain parts. Unlike a control section, a program object section can specify more than one independently relocatable block of text. Addresses within each class can be resolved to addresses in the same or different classes. A class in a program object has behavior properties like 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.

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 might not be supported by the system linker/binder or run-time environment where the assembled program is processed. You should check the relevant product documentation before utilizing the assembler's features.
The following figure illustrates the differences between the object-program models.
Figure 1. Load module and Program Object structures