Chapter 4 |
4
|
OpenVMS I64 Conventions
|
4.1
|
Register Usage
|
4.1.1
|
Partitioning
|
4.1.2
|
I64 General Register Usage
|
4.1.3
|
I64 Floating-Point Register Usage
|
4.1.4
|
I64 Predicate Register Usage
|
4.1.5
|
I64 Branch Register Usage
|
4.1.6
|
I64 Application Register Usage
|
4.1.7
|
Floating-Point Status
|
4.1.8
|
User Mask
|
4.1.9
|
Additional Register Usage Information
|
4.2
|
Address Representation
|
4.3
|
Procedure Representation
|
4.4
|
Procedure Types
|
4.5
|
Memory Stack
|
4.5.1
|
Procedure Frames
|
4.5.2
|
Stack Overflow Detection
|
4.5.2.1
|
Stack Limit Checking
|
4.5.2.2
|
Methods for Stack Limit Checking
|
4.6
|
Register Stack
|
4.6.1
|
Input and Local Registers
|
4.6.2
|
Output Registers
|
4.6.3
|
Rotating Registers
|
4.6.4
|
Frame Markers
|
4.6.5
|
Backing Store for Register Stack
|
4.7
|
Procedure Linkage
|
4.7.1
|
The GP Register
|
4.7.2
|
Types of Calls
|
4.7.3
|
Calling Sequence
|
4.7.3.1
|
Direct Calls
|
4.7.3.2
|
Indirect Calls
|
4.7.4
|
Parameter Passing
|
4.7.5
|
Parameter Passing Mechanisms
|
4.7.5.1
|
Allocation of Parameter Slots
|
4.7.5.2
|
Normal Register Parameters
|
4.7.5.3
|
Argument Information (AI) Register
|
4.7.5.4
|
Memory Stack Parameters
|
4.7.5.5
|
Variable Argument Lists
|
4.7.5.6
|
Pointers to Formal Parameters
|
4.7.5.7
|
Languages Other than C
|
4.7.5.8
|
Rounding Floating-point Values
|
4.7.5.9
|
Order of Argument Evaluation
|
4.7.5.10
|
Examples
|
4.7.6
|
Return Values
|
4.7.7
|
Simple and Bound Procedures
|
4.8
|
Procedure Call Stack
|
4.8.1
|
Current Procedure
|
4.8.2
|
Procedure Call Tracing
|
4.8.2.1
|
Invocation Context Block
|
4.8.2.2
|
Invocation Context Handle
|
4.8.3
|
Invocation Context Block Access Routines
|
4.8.3.1
|
Initializing the Invocation Context Block
|
4.8.3.2
|
Walking the Call Stack
|
4.8.3.3
|
LIB$I64_CREATE_INVO_CONTEXT
|
4.8.3.4
|
LIB$I64_FREE_INVO_CONTEXT
|
4.8.3.5
|
LIB$I64_INIT_INVO_CONTEXT
|
4.8.3.6
|
LIB$I64_GET_INVO_CONTEXT
|
4.8.3.7
|
LIB$I64_GET_CURR_INVO_CONTEXT
|
4.8.3.8
|
LIB$I64_GET_PREV_INVO_CONTEXT
|
4.8.3.9
|
LIB$I64_GET_INVO_HANDLE
|
4.8.3.10
|
LIB$I64_GET_CURR_INVO_HANDLE
|
4.8.3.11
|
LIB$I64_GET_PREV_INVO_HANDLE
|
4.8.3.12
|
LIB$I64_PREV_INVO_END
|
4.8.3.13
|
LIB$I64_PUT_INVO_REGISTERS
|
4.8.4
|
Supplemental Invocation Context Access Routines
|
4.8.4.1
|
LIB$I64_GET_FR
|
4.8.4.2
|
LIB$I64_SET_FR
|
4.8.4.3
|
LIB$I64_GET_GR
|
4.8.4.4
|
LIB$I64_SET_GR
|
4.8.4.5
|
LIB$I64_SET_PC
|
4.8.4.6
|
LIB$I64_GET_UNWIND_LSDA
|
4.8.4.7
|
LIB$I64_GET_UNWIND_OSSD
|
4.8.4.8
|
LIB$I64_GET_UNWIND_HANDLER_FV
|
4.8.4.9
|
LIB$I64_IS_EXC_DISPATCH_FRAME
|
4.8.4.10
|
LIB$I64_IS_AST_DISPATCH_FRAME
|
4.8.5
|
Invocation Context Callback Routines
|
4.8.5.1
|
The Get Unwind Information Routine
|
4.8.5.2
|
The Get Initial Context Routine
|
4.8.5.3
|
The Read Memory Routine
|
4.8.5.4
|
The Write Memory Routine
|
4.8.5.5
|
The Write Register Routine
|
4.8.5.6
|
The Memory Allocation Routine
|
4.8.5.7
|
The Memory Deallocation Routine
|
4.9
|
Data Allocation
|
4.9.1
|
Alignment
|
4.9.2
|
Global Data
|
4.9.3
|
Local Static Data
|
4.9.4
|
Constants and Literals
|
4.9.5
|
Record Layout Conventions
|
4.9.5.1
|
Aligned Record Layout
|
4.9.5.2
|
OpenVMS VAX Compatible Record Layout
|
4.9.6
|
Sample Code Sequences
|
4.9.6.1
|
Addressing Own Data in the Short Data Area
|
4.9.6.2
|
Addressing External Data or Data in a Long Data Area
|
4.9.6.3
|
Addressing Literals in the Text Segment
|
4.9.6.4
|
Materializing Function Pointers
|
4.9.6.5
|
Jump Tables
|
4.9.6.5.1
|
Preferred Method
|
4.9.6.5.2
|
Alternative Method
|