This document defines the OpenVMS Calling Standard, which specifies the requirements, mechanisms, and conventions for procedure-to-procedure calls in both Alpha and VAX user-mode environments. It details run-time data structures, constants, algorithms, and functional interfaces that ensure correct operation in multilanguage and multithreaded systems.
The standard covers:
- Register and Stack Usage: Rules for scalar and vector register usage, stack frame formats, and stack pointer conventions for VAX and Alpha processors.
- Calling Sequences and Argument Lists: Mechanisms for invoking procedures, including argument list formats (immediate value, reference, descriptor), and how function values are returned.
- Procedure Descriptors and Signatures: Information about procedures, including different types (stack frame, register frame, null frame), and how signature information facilitates interoperation between native Alpha and translated VAX code.
- Data Passing: Defines argument data types, data alignment, record layout conventions (aligned and VAX compatible), and handling of unused bits in passed data.
- Condition Handling: Describes the system's exception and condition handling facility, including condition values, condition handlers, and operations like stack unwinding and GOTO unwinds.
- Multithreaded Environments: Addresses conventions for stack limit checking and stack overflow handling in multithreaded execution.
The standard aims to ensure high performance, portability, efficiency, and consistency for developers of compilers, debuggers, run-time libraries, and operating systems.