Binder Manual (G06.24+, H06.03+)

Object File Structure
Binder Manual528613-003
4-4
Data Blocks
Q is directly nested within outermost routine R.
R is private to module M compiled from source file $VOLUME.SUBVOL.FNAME.
The full name for routine P is FNAME.R.Q.P. FNAME, the file name, and not M, the
module name, is used. The fully qualified name must not be longer than 255
characters.
Routines textually nested within a Pascal main program are compiled as if they were
not nested. The scope name qualifying these routines is the main-program module’s
primary source file, rather than the declared name of the main-program routine.
Data Blocks
A data block is a collection of statically allocated variables or constants. The compilers
decide how many blocks are needed, how the blocks are accessed, what data to put in
each block, and where to put it within the block. Binder determines where to put the
entire block, within the address space of the process. The location or size of the block
does not change during process execution. All data blocks go into the data space of
the process, except for TAL read-only blocks, which reside in the read-only code space
of the process.
Programs also have dynamically allocated variables, whose locations are not
determined until the process is executing. These include routines’ local variables
residing in the stack, file buffers, and anonymous objects in C or Pascal’s heap space.
These variables are not part of any data block.
Binder must resolve data block references during binding. Therefore, you cannot
create an object file until all the necessary data blocks have been compiled. An object
file is not executable until all data block references have been resolved.
In addition to its contents and initial values, a data block has the following attributes:
Name
Scope (which routines can reference the block)
Means of access (where it can be located)
The scope of a data block is either:
Public to all modules, known to Binder as a common data block
Private to one module or private to one code block, known to Binder as an own
data block
Binder recognizes one other type of data block called a special data block. These
blocks are generated either by a compiler or by Binder. Program control blocks such as
the run-unit control block (RUCB) and the program-unit control block are special
blocks.