Materialize Program (MATPG)


Op Code (Hex) Operand 1 Operand 2

0232 Attribute receiver Program

Operand 1: Space pointer.

Operand 2: System pointer.

Bound program access

Built-in number for MATPG is 31. MATPG ( attribute_receiver : address program : address of system pointer )

Warning

The following information is subject to change from release to release. Use it with caution and be prepared to adjust for changes with each new release.

Description

The non-bound program identified by operand 2 is materialized into the template identified by operand 1.

Operand 2 is a system pointer that identifies the program to be materialized. The program identified by operand 2 must be a non-bound program. Otherwise, a program not eligible for operation  (hex 220A) exception will be signalled. The values in the materialization relate to the current attributes of the materialized program.

This instruction does not process teraspace addresses used for its operands, nor used in any space pointer contained in a template. Any teraspace address use will cause an unsupported space use  (hex 0607) exception to be signaled, whether the issuing program is teraspace capable or not.

The template identified by operand 1 must be 16-byte aligned.


Offset
Dec Hex
Field Name
Data Type and Length
0 0
Template size specification
Char(8)
0 0
Number of bytes provided
Bin(4)
4 4
Number of bytes available for materialization
Bin(4) +



(used only when the program is materialized)


8 8
Program identification
Char(32)
8 8
Type
Char(1) +
9 9
Subtype
Char(1)
10 A
Name
Char(30)
40 28
Program creation options
Char(4)
40 28
Existence attributes
Bit 0



0 = Temporary
1 = Permanent



40 28
Space attribute
Bit 1



0 = Fixed-length
1 = Variable-length



40 28
Initial context
Bit 2



0 = Do not insert addressability into context
1 = Insert addressability into context



40 28
Access group creation
Bit 3



0 = Do not create as a member of an access group
1 = Create as a member of an access group



40 28
Reserved (binary 0)
Bits 4-12






40 28
Initialize space
Bit 13



0 = Initialize
1 = Do not initialize



40 28
Automatically extend space
Bit 14



0 = No
1 = Yes



40 28
Associated space hardware storage protection level
Bits 15-16



00 = Reference and modify allowed for user state programs
01 = Only reference allowed for user state programs
11 = No reference or modify allowed for user state programs



40 28
Reserved (binary 0)
Bits 17-31






44 2C
Reserved (binary 0)
Char(4)
48 30
Size of space
Bin(4)
52 34
Initial value of space
Char(1)
53 35
Performance class
Char(4)
53 35
Obsolete
Bit 0 +



This field is no longer used and will be ignored.



53 35
Reserved (binary 0)
Bits 1-4






53 35
Main storage pool selection
Bit 5



0 = Process default main storage pool is used for object.
1 = Machine default main storage pool is used for object.



53 35
Transient storage pool selection
Bit 6



0 = Default main storage pool (process default or machine default as specified for main storage pool selection) is used for object.
1 = Transient storage pool is used for object.



53 35
Block transfer on implicit access state modification
Bit 7



0 = Transfer the minimum storage transfer size for this object.
1 = Transfer the machine default storage transfer size for this object.


53 35
Reserved (binary 0)
Bits 8-31
57 39
Reserved (binary 0)
Char(7)






64 40
Context
System pointer
80 50
Access group
System pointer
96 60
Program attributes
Char(2)
96 60
Adopted user profile
Bit 0



0 = No adoption of user profile.
1 = Adopt program owner's user profile on invocation.



96 60
Array constraint
Bit 1



0 = Arrays are constrained.
1 = Arrays are unconstrained. The predictability of the results of references outside the bounds of arrays are determined by the type of unconstrained arrays field.



96 60
String constraint
Bit 2



0 = Strings are constrained.
1 = Strings are not constrained.



96 60
Obsolete
Bit 3 +
96 60
Adopted user profile propagation
Bit 4



0 = Adopted user profile authorities are not propagated to external invocations.
1 = Adopted user profile authorities are propagated to all subinvocations.



96 60
Static storage
Bit 5



0 = Initialize storage to binary 0.
1 = Do not initialize storage to binary 0.



96 60
Automatic storage
Bit 6



0 = Initialize storage to binary 0.
1 = Do not initialize storage to binary 0.



96 60
Associated journal entry
Bit 7



0 = Program name is recorded in journal entries
1 = Program name is not recorded in journal entries



96 60
Update PASA stack
Bit 8 +



This field is now obsolete. It will be ignored.



96 60
Suppress decimal data exception
Bit 9



0 = Exception is not to be suppressed
1 = Exception is to be suppressed



96 60
Template extension existence
Bit 10



0 = Template extension does not exist
1 = Template extension exists



96 60
Suppress previously adopted user profiles
Bit 11



0 = Do not suppress previously adopted user profiles
1 = Suppress previously adopted user profiles



96 60
Template version
Bits 12-15



0000 = Version 0
0001 = Version 1

0010 through 1111 reserved



98 62
Code generation options
Char(1)
98 62
Performance optimization
Bit 0



0 = No optimization
1 = Perform optimization



98 62
Space pointer machine objects
Bit 1



0 = Disallow space pointer machine objects in ODV component
1 = Allow space pointer machine objects in ODV component



98 62
Coincident operand overlap
Bit 2



0 = Do not assume coincident operand overlap
1 = Assume coincident operand overlap



98 62
Reserved (binary 0)
Bits 3-4
98 62
Teraspace capable
Bit 5



0 = Do not generate teraspace capable program
1 = Generate teraspace capable program


98 62
Executable part compression
Bit 6



0 = Do not compress executable part
1 = Compress executable part



98 62
Observation part compression
Bit 7



0 = Do not compress observation part
1 = Compress observation part



99 63
Observation attributes
Char(1)



For bits 0 through 5:
1 = The corresponding template component is materializable
0 = The corresponding template component is not materializable


99 63
Instruction stream
Bit 0
99 63
ODT Directory Vector (ODV)
Bit 1
99 63
ODT Entry String (OES)
Bit 2
99 63
Breakpoint Offset Mapping (BOM) table
Bit 3
99 63
Symbol table
Bit 4
99 63
Object Mapping Table (OMT)
Bit 5









For bits 6 and 7:
1 = The corresponding performance measurement is prevented
0 = The corresponding performance measurement is allowed


99 63
Prevent performance measurements on entry/exit
Bit 6
99 63
Prevent performance measurements on CALLX
Bit 7
100 64
Size of static storage
UBin(4)
104 68
Size of automatic storage
UBin(4)
108 6C
Number of instructions (1)
UBin(2)



For version number = hex 0000, this field indicates the number of instructions. For version number = hex 0001, this field is reserved (binary 0).


110 6E
Number of ODV entries (1)
Bin(2)



For version number = hex 0000, this field indicates the number of ODV entries. For version number = hex 0001, this field is reserved (binary 0).


112 70
Offset (in bytes) from beginning of template to the instruction stream component
Bin(4)
116 74
Offset (in bytes) from beginning of template to the ODV component
Bin(4)
120 78
Offset (in bytes) from beginning of template to the OES component
Bin(4)
124 7C
Length of breakpoint offset mapping table entry
Bin(4)
128 80
Length of breakpoint offset mapping table component
Bin(4)
132 84
Offset (in bytes) from beginning of template to the BOM table
Bin(4)
136 88
Length of symbol table entry
Bin(4)
140 8C
Length of symbol table component
Bin(4)
144 90
Offset (in bytes) from beginning of template to the Symbol table
Bin(4)
148 94
Offset (in bytes) from beginning of template to the object mapping table (OMT) component
Bin(4) +
152 98
Number of instructions (2)
Bin(4)



For version number = hex 0001, this field indicates the number of instructions. For version number = hex 0000, this field is reserved (binary 0).


156 9C
Number of ODV entries (2)
Bin(4)



For version number = hex 0001, this field indicates the number of ODV entries. For version number = hex 0000, this field is reserved (binary 0).


160 A0
Template extension
Char(64)



This extension exists only when the template extension existence bit is 1.


160 A0
Extended program attributes
Char(4)
160 A0
Type of unconstrained arrays
Bit 0



0 = Not fully unconstrained. If arrays are unconstrained, unpredictable results may occur when accessing array elements outside the declared bounds of the array.
1 = Fully unconstrained. Predictable results will occur when accessing array elements outside the declared bounds of the array. See the paragraph below describing array constrainment for details.



160 A0
Suppress binary size exception
Bit 1



0 = Exception is not to be suppressed
1 = Exception is to be suppressed



160 A0
Create program for previous mandatory release
Bit 2



0 = Create the program to run on the current release
1 = Create the program to run on the previous mandatory release



160 A0
Collect object usage data for program
Bit 3



0 = Collect the object usage data
1 = Do not collect the object usage data



160 A0
Scope of resources
Bit 4



0 = Resources are scoped to an invocation of this program.
1 = Resources are scoped to a program previous to this one in the invocation stack.



160 A0
Reserved (binary 0)
Bits 5-31
164 A4
Language version, release, and modification level
Char(2)
164 A4
Reserved
Bits 0-3
164 A4
Version
Bits 4-7
164 A4
Release
Bits 8-11
164 A4
Mod level
Bits 12-15
166 A6
Breakpoint offset mapping table data
Char(1)
166 A6
BOM table flags
Char(1)
166 A6
Use new BOM table format
Bit 0
166 A6
User data5A
Bits 1-7
167 A7
User data5B
Char(7)
174 AE
Version, release, and modification level this program is being created for
Char(2)
174 AE
Reserved
Bits 0-3
174 AE
Version
Bits 4-7
174 AE
Release
Bits 8-11
174 AE
Mod level
Bits 12-15
176 B0
Data required for machine retranslation
Char(1)
176 B0
All data required for machine retranslation is present
Bit 0 +



0 = No
1 = Yes


176 B0
Reserved (binary 0)
Bits 1-7
177 B1
Reserved (binary 0)
Char(47)
224 E0
Program data
Char(*)
224 E0
Instruction stream component
Char(*)
* *
ODV component
Char(*)
* *
OES component
Char(*)
* *
BOM table
Char(*)
* *
Symbol table
Char(*)
* *
Object mapping table
Char(*) +
* *
--- End ---

The first 4 bytes of the materialization template identify the total number of bytes provided in the template. This value is supplied as input to the instruction and is not modified. A value of less than 8 causes the materialization length invalid  (hex 3803) exception to be signaled.

The second 4 bytes of the materialization template are modified by the instruction to contain a value identifying the template size required to provide for the total number of bytes available to be materialized. The instruction materializes as many bytes as can be contained in the area specified by the receiver. If the byte area identified by the receiver is greater than that required to contain the information requested, then the excess bytes are unchanged. No exceptions (other than the materialization length invalid  (hex 3803) exception) are signaled in the event that the receiver contains insufficient area for the materialization.

The existence attribute indicates whether the program is temporary or permanent.

If the program has an associated space, then the space attribute is set to indicate either fixed- or variable-length; the initial value for the space is returned in the initial value of space field, and the size of space field is set to the current size value of the space. If the program has no associated space, the size of space field is set to a zero value, and the space attribute and initial value of space field values are meaningless.

If the program is addressed by a context, then the context addressability attribute is set to indicate this, and a system pointer to the addressing context is returned in the context field. If the program is not addressed by a context, then the context addressability attribute is set to indicate this, and binary 0's are returned in the context field.

If the program is a member of an access group, then the access group attribute is set to indicate this, and a system pointer to the access group is returned in the access group field. If the program is not a member of an access group, then the access group attribute is set to indicate this, and binary 0's are returned in the access group field.

The automatically extend space field controls whether the space is to be extended automatically by the machine or a space addressing violation  (hex 0601) exception is to be signaled when a reference is made to an area beyond the allocated portion of the space. A value of binary 1 indicates the space will automatically be extended by an amount determined through internal machine algorithms. A value of binary 0 indicates the exception will result. Note that an attempt to reference an area beyond the maximum size that a space can be allocated, will always result in the signaling of the space addressing violation  (hex 0601) exception independently of the setting of this attribute. A value of binary 1 is only valid when the space attribute has been specified as variable length.

Usage of the automatically extend space function is limited. Predictable results will occur only when you ensure that the automatic extension of a space will not happen in conjunction with modification of the space size by another thread. That is, you must ensure that when a thread is using the space in a manner that could cause it to be automatically extended, it is the sole thread which can cause the space size to be modified. Note that in addition to implicit modification through automatic extension, the space size can be explicitly modified through use of the Modify Space Attributes (MODS) instruction.

The associated space hardware storage protection level can be used to restrict access to the contents of the space by user state programs. It is possible to limit the access of the space by user state programs into 1 of three levels:

The actual presentation of the object domain or hardware storage protection violation  (hex 4401) exception is also dependent on the level of the physical hardware (namely, the CPU).

The performance class field provides information that allows the machine to more effectively manage the program by considering overall performance objectives of operations involving the program.

The primary associated space, if one is created, is always aligned on at least a 512 byte boundary if the target version, release, and modification level is V4R4 or greater. If the target version, release, and modification level is not V4R4 or greater, the primary associated space, if one is created, is always aligned on at least a 16-byte boundary.

If the adopted user profile attribute is yes, any reference to a system object from an invocation of this program uses the user profile of the owner of this program and other sources of authority to determine the authorization to system objects, privileged instructions, ownership rights, and all authorizations. If the adopted user profile propagation attribute is yes, then the authorities available from the adopted user profile are available to any further invocations while this program is invoked. If the adopted user profile propagation attribute is no, then the authorities available to the program's owning user profile are not available to further subinvocations and are available only to this invocation. These attributes do not affect the propagation of authority from higher existing invocations.

The array constraint field determines how array bounds should be checked at execution time. If arrays are constrained, execution time checks are made to verify that the array index is within the bounds of the array. If arrays are unconstrained and the type of unconstrained array is not fully unconstrained, the array references are assumed to be within the bounds of the array. If an array element reference is made outside the bounds of the array, unpredictable results may occur. If the type of unconstrained array is fully unconstrained, array references outside the bounds of the array will be made as if the elements existed. Array references of this type will signal the space addressing violation  (hex 0601) exception if the element that is referenced is outside the allocated storage of the space containing the array. It is possible to change the type of constrainment used when referencing array elements by using the Override Program Attributes (OVRPGATR) instruction.

The string constrainment field determines how string limits should be checked at execution time. If string constrainment is strings are not constrained, the references are assumed to be within the defined bounds of the string. No execution time checks are performed to ensure this is the case. However, if the reference is outside the defined bounds, unpredictable results may occur. There may be significant savings in performance if strings are not constrained is specified. It is possible to change the type of constrainment used when substringing by using the Override Program Attributes (OVRPGATR) instruction.

Whenever a new invocation or activation is allocated, the automatic or static storage areas are initialized to bytes of binary 0's, respectively. The static storage and automatic storage program attributes control this default initialization. There is a significant performance advantage when these areas are not initialized by default. However, initial values specified for individual data objects are still set. The automatic storage and static storage will be allocated in single level store.

The associated journal entry field controls which program is associated with a journal entry. As a journal entry is made, a newest-to-oldest interrogation of the invocation stack is performed. The first program encountered that has the associated journal entry field set to program name is recorded in journal entries is associated with the journal entry by a record of the program name in the journal entry. If a program is encountered for which the associated journal entry field is set to program name is not recorded in journal entry, the program is ignored unless the program is on the top of the invocation stack. If the program is on the top of the invocation stack, it is associated with the journal entry by a record of the program name in the journal entry.

The suppress decimal data exception field controls whether or not errors detected in decimal data are to result in the signaling of the decimal data exception. When the decimal data exception is not to be suppressed, decimal values input to numeric operations are verified to contain valid decimal digit and sign codes with the decimal data  (hex 0C02) exception being signaled as the result of detection of an invalid code. When the decimal data exception is to be suppressed, decimal values input to numeric operations are still verified to contain valid decimal digit and sign codes. However, detection of an invalid code results in the instruction interpreting an invalid digit as a zero and an invalid sign as positive rather than in signaling of the exception.

The control over suppressing of the decimal data exception applies to only a subset of the numeric operations which may be performed by the machine.

In general, when suppression of the decimal data exception is specified, the Computation and Branching instructions which support numeric source operands will suppress decimal data errors for ZONED source values. Additionally, a few instructions also suppress decimal data errors for packed source values. In all cases, the suppression is only supported when all operands are non-Data Pointer defined (early bound) source values.

Specifically, the following defines the exact list of instructions which support suppression of decimal data errors for certain operand types:


Packed Source Operands supported Zoned Source Operands supported     Instruction Mnemonic       Note

yes ADDN

yes CMPNV
yes yes CVTCN Only supported when operand 3, the numeric view to be used for operand 2, is specified as a constant and no DP defined operands are specified.

yes CVTDFFP
yes yes CVTNC Only supported when operand 3, the numeric view to be used for operand 1, is specified as a constant and no DP defined operands are specified.
yes yes CPYNV
Only supported when no DP defined operands are specified.

yes DIV

yes DIVREM

yes EDIT
Only supported when no DP defined operands are specified.

yes EXTRMAG

yes MULT

yes NEG

yes REM

yes SCALE

yes SUBN

When suppression of the decimal data exception is specified, the decimal data  (hex 0C02) exception may still be signaled by the machine. That is, other instructions and instruction combinations not listed above are exposed to signaling the decimal data  (hex 0C02) exception when invalid decimal data is encountered and they can't be counted on to fix up invalid decimal data.

Of particular note here is that specification of a Data Pointer as an input operand on any of the instructions in the above list negates the suppression support for the whole instruction. Thus even non-Data Pointer defined operands are then exposed to detection of the decimal data  (hex 0C02) exception.

The template extension existence field indicates whether or not there is an extension to the program template.

The suppress previously adopted user profiles field is used to stop the backward search for adopted or propagated authorities. In other words, all programs previous to this program's invocation with adopted or propagated authorities are not considered as sources of authority.

The code generation options provide information that allows the machine to create a program based on the intended use of the program.

If the performance optimization field is binary 1, additional processing is performed which provides for creating a program that requires less processor resource for execution. This optimizes addressability used within the program. If this attribute is set to binary 0, normal optimization processing is performed.

The space pointer machine objects field controls whether space pointer machine objects are allowed in the ODV. If the allow space pointer machine objects in ODV component attribute is set to binary 1, additional processing is performed which allows for space pointer machine objects within the program. If this attribute is set to binary 0, space pointer machine objects are not allowed in the ODV component.

The coincident operand overlap field controls whether or not additional processing is performed during the encapsulation of certain computation and branching instructions which affects the processor resource required to execute these instructions. The effect of the option controls whether or not the encapsulation process for these instructions should assume that coincident operand overlap may occur between the source and receiver operands during execution of the instruction. This assumption applies to cases of nonidentical coincident operand overlap where the Create Program (CRTPG) instruction cannot determine if coincident operand overlap may occur during execution of the instruction. These instructions may produce invalid results if nonidentical coincident overlap occurs during execution, but the instruction was encapsulated with the assumption that it would not occur.

Specifying the do not assume coincident operand overlap attribute indicates that nonidentical coincident overlap will not occur during execution and therefore the receiver on an instruction may be used as a work area during operations performed to produce the final result. Using the receiver as a work area does not require the processor resource that would be required to move the final result from an internal work area to the receiver.

Specifying the assume coincident operand overlap attribute indicates that nonidentical coincident operand overlap may occur during execution and therefore the receiver on an instruction should not be used as a work area during operations that produce the final result. This can require more processor resource for instruction execution but it insures valid results if overlap occurs.

The following is a list of instructions that can be affected by the coincident operand overlap option during the encapsulation process:

The teraspace capable option indicates whether or not the program produced should be enabled to use teraspace addresses.

The executable part compression field and observation part compression field indicate whether the executable, observation, or both parts of the program are to be compressed. For materialization, these fields indicate whether parts of the program object are currently compressed.

The observation attributes field specifies options that control the observability and debugability of the program.

The first six bits control the availability of information through the Materialize Program (MATPG) instruction. If a bit is a binary 1 then the corresponding data from the program template is available for materialization. If the program is created without the ability to materialize observability data then less storage may be needed to contain the program object.

The remaining two bits control whether certain performance measurements will be possible when the program is executing. Prevent performance measurements on entry/exit controls whether performance measurements can be made which encompass the duration of the execution of this program. Prevent performance measurements on CALLX controls whether performance measurements can be made which encompass the duration of a CALLX from this program to another program. If either bit is a binary 1 then the corresponding measurement is prevented. If the ability to make performance measurements is prevented then the program may execute more quickly.

The size of static storage field defines the total amount of static storage required for this program's static data. A value of 0 indicates that the amount of static storage required is calculated based upon the amount of static data specified for the program. A value greater than 0 specifies the amount of static storage required.

The size of automatic storage field defines the total amount of automatic storage required for this program's automatic data. A value of 0 indicates that the amount of automatic storage required is calculated based upon the amount of automatic data specified for the program. A value greater than 0 specifies the amount of automatic storage required.

The number of instructions fields (1 and 2) and number of ODV entries fields (1 and 2) is specified in different locations in the template depending on the version of the program template. Template version 0 limits the number of instructions to a maximum of 65,532 and the number of ODV entries to a maximum of 8,191. Programs that exceed one of these maximums cannot be created with template version 0. Template version 1 limits the number of instructions to a maximum of 65,532 and the number of ODV entries to a maximum of 65,526. Programs that exceed one of these maximums cannot be created with template version 1. All other values for the template version are reserved.

The extended program attributes allow for additional attributes of the program to be specified.

To suppress binary size exceptions indicates the size  (hex 0C0A) exception will be suppressed when an overflow or underflow occurs on a computation and control instruction with a receiver that is a binary variable scalar. The receiver will contain the left-truncated result.

Create program for previous mandatory release indicates whether or not the program is created to run on the previous mandatory release (1)

The collect object usage data for programs field is used to tell CALLX and XCTL instructions whether or not to collect object usage data for the program being called or transferred to.

The scope of resources field identifies the scope of program resources. The machine will set this field for the affected invocations, but the definition of those resources and the use of this field is determined by the MI user. If the scope of resources field is binary 0, then the resources will be scoped to the invocation of this program. If this scope of resources field is binary 1, then the resources will be scoped to the previous invocation of this program. If the scope of resources is also binary 1 for that invocation, the resources will be scoped to the next previous invocation, and so on.

The language version, release, and modification level is used to limit which version, release, and modification level that this program is allowed to be moved back to. This attribute allows the compilers to specify the earliest release in which the necessary runtime environment exists for the program to execute. The program will not be allowed to be restored to a system running at an earlier release than the one identified. A zero value for this attribute means that no restriction is specified.

The use new BOM table format flag is used to indicate which format of the BOM table is used. Binary 0 indicates old format, binary 1 indicates new format. These formats are documented below in the BOM table component.

The instruction stream component consists of a 4-byte binary value that defines the total length of the instruction stream component and a variable-length array of 2-byte entries that defines the instruction stream. The 2-byte entries define instruction operation codes, instruction operation code extenders, or instruction operands.

See Operation Code Field for the format of the instructions. The instruction stream component is optional (that is, instructions need not be defined), and its absence is indicated by a value of 0 in the offset to instruction stream component entry. If the instruction stream is not present, an End instruction is assumed and, should the program be executed, an immediate Return External instruction results.

The object definition vector (ODV) component consists of a 4-byte binary value that defines the total length of the ODV and a variable-length vector of 4-byte entries. Each entry describes a program object either by a complete description or through an offset into the OES (object entry string) to a location that contains a description. If no program objects are defined, the ODV can be omitted, and its absence is noted with a value of 0 in the offset to ODV component entry. The ODV is required if the OES is present.

The ODV entry string (OES) consists of a 4-byte binary value that defines the total length of the OES and a series of variable-length entries that are used to complete an object description. Entries in the ODV contain offsets into the OES. The OES is optional, and its absence is indicated with a value of 0 in the offset to OES component entry.

The format of the ODT (object definition table) (ODV and OES) is defined in Program Object Specification.

The BOM table component can be used by compilers to relate high-level language statement numbers to instruction numbers.

The BOM table has the 2 formats depending on the BOM table flags. If the flag indicates to use new BOM table format, then the first bit of the MI instruction number is not a flag, so numbers up to 64k-1 can be used.

The BOM table has the following OLD format:

Offset
Dec Hex
Field Name
Data Type and Length
0 0
MI instruction number
UBin(2)
0 0
Format
Bit 0



0 = High level statement number is in character format
1 = High level statement number is in numeric format



0 0
MI instruction number
Bits 1-15
2 2
High level statement number
Char(*) or Bin(2)



If this is in character format, then the length of it is contained in the header in the length of breakpoint offset mapping table entry.



* *
--- End ---

The BOM table has the following NEW format:

Offset
Dec Hex
Field Name
Data Type and Length
0 0
MI instruction number
UBin(2)
2 2
Flag Byte
Char(1)
2 2
Format
Bit 0



0 = High level statement number is in character format
1 = High level statement number is in numeric format



2 2
Reserved
Bits 1-7
3 3
High level statement number
Char(*) or Bin(2)



If this is in character format, then the length of it is contained in the header in the length of breakpoint offset mapping table entry.



* *
--- End ---

The symbol table component can be used by compilers to relate high-level language names to ODT numbers.

The symbol table has the following format:

Offset
Dec Hex
Field Name
Data Type and Length
0 0
Hashing table structure
Char(*)
0 0
Number of hash buckets
Bin(4)
4 4
Hash bucket
[*] Bin(4)



Each hash bucket contains an offset to the first symbol table base segment entry of the chain. This offset is from the beginning of the symbol table. The end of the chain has a -1 value.

Maximum of 1000 hash buckets.



* *
Symbol table base segment
Char(*)
* *
Offset to next entry from beginning of the table
UBin(4)



The end of the chain has a -1 value.



* *
ODT or MI number
Bin(2)
* *
Indicators
Char(1)
* *
Instruction or ODT number
Bit 0



0 = MI instruction number
1 = ODT number



* *
Symbol origin
Bit 1



0 = Compiler generated
1 = Source program



* *
Array specification
Bit 2



0 = Row major
1 = Column major



* *
Format segment present
Bit 3



0 = No
1 = Yes



* *
Array segment present
Bit 4



0 = No
1 = Yes



* *
Extension segment present
Bit 5



0 = No
1 = Yes



* *
Reserved (binary 0)
Bits 6-7
* *
Length of symbol
Char(1)
* *
Symbol
Char(*)
* *
--- End ---

Other segments are only present if the bit in the symbol table base segment is on.

Offset
Dec Hex
Field Name
Data Type and Length
0 0
Symbol table format segment
Char(20)
0 0
Format program name
Char(10)
10 A
Format code
Char(4)
14 E
Locator variable ODT#
Bin(2)
16 10
Descriptor variable ODT#
Bin(2)
18 12
Reserved (binary 0)
Char(2)
20 14
--- End ---


Offset
Dec Hex
Field Name
Data Type and Length
0 0
Symbol table array segment
Char(*)
0 0
Number of array dimensions
Bin(2)
2 2
Indexes - 1 per array dimension
[*] Char(8)
2 2
Lower index
Bin(4)
6 6
Upper index
Bin(4)
* *
--- End ---


Offset
Dec Hex
Field Name
Data Type and Length
0 0
Symbol table extended segment
Char(26)
0 0
Extended segment length
Bin(2)
2 2
Structure level
Char(2)
4 4
Data representation
Char(1)



Hex 00 = See ODT
Hex 01 = Binary
Hex 02 = Zoned
Hex 03 = Bit string



5 5
Number of total digits
Bin(2)
7 7
Number of fractional digits
Bin(2)
9 9
Sign of number
Char(1)



Hex 00 = Leading embedded
Hex 01 = Leading separated
Hex 02 = Trailing separate



10 A
Offset to base segment entry of parent
Bin(4)



The end of the chain has a -1 value.



14 E
Offset to base segment entry of synonym
Bin(4)



The end of the chain has a -1 value.



18 12
Indicators
Char(1)
18 12
Object is a HLL pointer
Bit 0
18 12
Array segment is in multi-dimensioned array format
Bit 1
18 12
Reserved (binary 0)
Bits 2-7
19 13
Reserved (binary 0)
Char(7)
26 1A
--- End ---

Hashing is done by exclusively Or'ing the first 4 characters of the symbol name with the second 4 characters of the symbol name. The result is then divided by the number of hash buckets. If the result is negative or 0, the number of hash buckets is added to the result. The result is then used as an index to the hash bucket.

Format segment is used by certain compilers to specify a format program name to be used when formatting this variable.

The offset to the OMT component field specifies the location of the OMT component in the materialized program template. The OMT consists of a variable-length vector of 6-byte entries. The number of entries is identical to the number of ODV entries because there is one OMT entry for each ODV entry. The OMT entries correspond one for one with the ODV entries; each OMT entry gives a location mapping for the object defined by its associated ODV entry.

The following describes the formats for an OMT entry:

Offset
Dec Hex
Field Name
Data Type and Length
0 0
OMT entry
Char(6)
0 0
Addressability type
Char(1)



Hex 00=

Base addressability is from the start of the static storage

Hex 01=

Base addressability is from the start of the automatic storage area

Hex 02=

Base addressability is from the start of the storage area addressed by a space pointer

Hex 03=

Base addressability is from the start of the storage area of a parameter

Hex 04=

Base addressability is from the start of the storage area addressed by the space pointer found in the process communication object attribute of the process associated with the thread executing the program






Hex FF=

Base addressability not provided. The object is contained in machine storage areas to which addressability cannot be given, or a parameter has addressability to an object that is in the storage of another program



1 1
Offset from base
Char(3)



For types hex 00, hex 01, hex 02, hex 03, and hex 04, this is a 3-byte logical binary value representing the offset to the object from the base addressability. For type hex FF, the value is binary 0.




4 4
Base addressability
Char(2)



For types hex 02 and hex 03, this is a 2-byte binary field containing the number of the OMT entry for the space pointer or a parameter that provides base addressability for this object. For types hex 00, hex 01, hex 04 and hex FF, the value is binary 0.




6 6
--- End ---

Authorization Required

Lock Enforcement

Exceptions

06 Addressing

08 Argument/Parameter

0A Authorization

10 Damage Encountered

1A Lock State

1C Machine-Dependent

20 Machine Support

22 Object Access

24 Pointer Specification

2E Resource Control Limit

36 Space Management

38 Template Specification

44 Protection Violation


Footnotes:

(1) The previous mandatory release is release N-1, mod level zero when release N is the current release.. (For version 4, release 5.0, the previous mandatory release is version 4, release 4.0.).