Every procedure other than a null procedure must have a structure associated with it that describes which type of procedure it is as well as various other characteristics of the procedure. This structure, called a procedure descriptor, is a longword-aligned data structure that provides basic information about a procedure. This data structure is used to interpret the call chain at any point in a thread's execution. It is normally built at compile time and is not normally accessed at run time except in support of exception processing or other rarely used code execution.
Table 3-1 contains a brief summary of the properties of a procedure that can be determined from its associated procedure descriptor. Some of these properties are explicitly represented in the procedure descriptor and others must be derived by examination of the code in a procedure's prologue. (Some fields only apply to certain kinds of procedures.) This summary is included here because many of these properties are mentioned in the descriptions that follow in this chapter. For a complete description of procedure descriptors, see Procedure Descriptor Representation.
Table 3-1 Procedure Properties Summary
Field name | Description |
REGISTER_FRAME ¹ | Indicates a register (or null) frame procedure rather than a stack frame procedure. |
BASE_REG_IS_FP ¹ | Indicates register R15 is used as a frame pointer rather than as just a preserved register. |
HANDLER_VALID ¹ | Indicates there is an associated exception handler. |
EXCEPTION_MODE | Indicates the error-reporting behavior expected of certain called mathematical library routines. |
ENTRY_RA ¹ | Register that contains the return address at the time of a call. This is always R26. |
SAVE_RA ¹ | Register in which the return address is saved (when not saved on the stack). |
FRAME_SIZE ¹ | Size in longwords of the (fixed part of the) stack frame. |
SP_SET ¹ | Offset in instructions from the beginning of the procedure to the instruction that changes the stack pointer. |
ENTRY_LENGTH ¹ | Number of instructions in the procedure prologue. |
BEGIN_ADDRESS | Address of the first instruction (and entry point) of the procedure. |
PROLOG_END_ADDRESS | Address of the first instruction following the prologue of the procedure. |
END_ADDRESS | Address of the first location following the last instruction of the procedure. |
HANDLER_ADDRESS | Address of an associated exception-handling procedure. |
HANDLER_DATA | Supplementary data to be passed to an associated exception handler. |
1 This field is not explicitly represented in the procedure descriptor.