Program objects have the following structural features:
- Program object design allows for the removal or increase of most
size restrictions, including maximum text size (now 1 gigabyte) and
number of control sections (now unlimited).
- Because program objects never have to reside in a PDS, they can
take advantage of PDSE library technology and its many advantages."
- The program object structure is generalized and extendable. It
will continue to change as required to support new functions.
- Program objects support long names (up to 32767 bytes).
- Program objects contain many of the same enhancements supported
in the Generalized Object File Format (GOFF), which is now being
generated by the High Level Assembler and a number of high level languages
(as well as the Binder itself). This includes support for C/C++ writeable
static.
- Program objects contain multiple classes of text,
distinguished by attributes that control binding and loading characteristics
and behavior. Classes are central to C and DLL support.
- There are two types of classes: text (byte-stream) and nontext
(record-like, IDR, ADATA)
- The separate attributes assigned to each class include:
- LOAD: the class is brought into memory at the time the module
is loaded
- DEFERRED LOAD: The class is prepared for loading, but not instantiated
until requested. (Deferred classes are most frequently used by LE
for loading multiple dynamically modifiable copies of data.)
- NOLOAD: The class is not loaded with the program, for example,
it is nontext.
- RMODE 24/ANY: Indicates placement of segments within virtual storage.
- A section is the smallest unit that can be manipulated
by users (replaced, deleted, ordered). The contribution to a class
from a section is called an element; a section may contribute
elements to more than one class. Elements (other than parts) may
contain entry points.
- Classes are bound into independently loadable segments.
A segment contains classes with compatible attributes. A program object
can have multiple segments.
- The loading characteristics of the class (and segment) determine
the placement of the segment in virtual storage. Multisegment program
objects can be loaded into noncontiguous areas of virtual storage,
for example, when bound with the RMODE(SPLIT) option.
- Program objects contain a class of data specifically intended
for users to save associated or application data (ADATA). It is not
loadable (NOLOAD). This data can be source statements, debugging tables,
user information, history data, and documentation. It is accessible
via the binder Application Programming Interface defined in z/OS MVS Program Management: Advanced Facilities.