This document, the "HP OpenVMS Calling Standard" (December 2003), defines the comprehensive requirements, mechanisms, and conventions for procedure-to-procedure calls across HP OpenVMS VAX, OpenVMS Alpha, and OpenVMS Industry Standard 64 (Intel Itanium) systems.
The standard outlines run-time data structures, algorithms, and interfaces for 32-bit and 64-bit native user-mode procedures, enabling correct operation in multilanguage and multithreaded environments. Its primary goals are to ensure high performance, portability, efficiency, and consistency.
Key aspects covered include:
- Register and Stack Usage: Detailed conventions for VAX, Alpha, and I64 architectures.
- Calling Sequences and Procedure Linkage: Rules for call sites, entry points, and returns, including different procedure types (stack frame, register frame, null frame) and handling of bound procedures.
- Argument Passing: Defines data types (atomic, string, miscellaneous), argument list structures, and passing mechanisms (immediate value, reference, descriptor) for all OpenVMS environments.
- Function Value Returns: Specifies how function results are returned based on data type and size.
- Data Allocation: Conventions for data alignment and record layouts (aligned and VAX-compatible).
- Multithreaded Execution Environments: Rules for stack limit checking and overflow handling.
- Condition and Exception Handling: Requirements for signaling conditions, condition handlers, and stack unwinding across all OpenVMS systems, with specific details for I64 environments provided in appendices.
- Interoperability: Mechanisms using signature information to facilitate calls between native and translated VAX/Alpha images on Alpha and I64 systems.
This standard is primarily intended for implementers of compilers, debuggers, run-time tools, libraries, and base operating systems. It maintains high compatibility across OpenVMS platforms while noting differences from generic Itanium software conventions.