This document, published in December 1995, serves as a guide for system and application programmers on OpenVMS Alpha operating system support for 64-bit virtual addressing, starting with OpenVMS Alpha Version 7.0. The primary goal is to enable programs to map and access data beyond the previous 32-bit limits while maintaining binary and source compatibility for existing 32-bit non-privileged applications.
The guide details:
- 64-Bit Virtual Address Space Layout: Explains the extended virtual address space, dividing it into process private space (P0, P1, and the new P2 space), system space (S0, S1, and the new S2 space), and page table space (PT_Space). It also covers virtual regions and process permanent regions.
- System Services Support: Describes enhancements to existing OpenVMS Alpha system services and introduces new ones to handle 64-bit addresses, distinguishing between 32-bit, 64-bit, and 64-bit friendly interfaces.
- RMS Interface Enhancements: Outlines how Record Management Services (RMS) now support 64-bit addresses for user I/O buffers, introducing an extension to the RAB structure (RAB64) for 64-bit buffer pointers and sizes, while noting that most of the RMS interface remains 32-bit.
- Device Support: Discusses OpenVMS Alpha device driver compatibility with 64-bit addressing, specifically the $QIO system service, and lists which drivers and I/O function codes are 64-bit capable or restricted to 32-bit.
- 64-Bit API Guidelines: Provides recommendations for developing 64-bit friendly application programming interfaces, covering topics like sign-extension checking for pointers, avoiding embedded pointers in public data structures, proper handling of return addresses, argument passing conventions, and style guidelines.
- Tools and Utilities Support: Briefly describes OpenVMS Alpha tools (Debugger, XDELTA, Watchpoint Utility, SDA) and run-time library facilities (LIB$, CVT$) that have been enhanced to support 64-bit virtual addressing.
- DEC C RTL and MACRO-32 Support: Details how the DEC C Run-Time Library and MACRO-32 compiler support 64-bit addressing, including memory allocation routines, handling of pointer sizes, argument passing mechanisms, and specific macros for manipulating 64-bit values and addresses.