HP OpenVMS Systems Documentation |
Upgrading Privileged-Code Applications on OpenVMS Alpha and OpenVMS I64 Systems
7.3 Bliss ProgrammingThis section contains instructions for Bliss programmers. In general, Hewlett-Packard recommends that if your Bliss-32 code references
PTEs and/or PFNs, that you first convert the modules or routines to Bliss-64.
The rest of this section assumes your Bliss modules are compiled by the Bliss-64
compilers for Alpha and I64.
The PTE$V_PFN macro is used to reference the PFN stored in a valid or transition PTE. The PTE$V_PFN, PTE$S_PFN, and PTE$M_PFN macros are defined in LIB.L64. The following table shows the macro definitions on Alpha and I64:
In Bliss-64, PFNs can be referenced using the PTE$V_PFN macro. Good Example
These references work as common code on Alpha and I64. PFNs are sometimes extracted from PTEs using a hard-coded 32-bit shift. Bad Example
This code must be changed to use the PTE$V_PFN macro as shown in the Good
Example above.
PFNs are often treated as longwords in existing Bliss code. For I64, you must ensure that the high order 32-bits are not truncated or sign extended. Existing Code
New Code
In the new code, all references to the Pfn variable in Bliss-64 are treated as 64-bit values. If you want to use 32-bit PFNs on Alpha and 64-bit PFNs on I64, you can use conditionals. New Code
7.4 System ServicesThis section describes the changes to system services for 50-bit physical addressing. The system services used to PFN-map memory are described in Section
7.4.1. There are two item codes to SYS$GETSYI affected by the 50-Bit
physical addressing project. These are described in Section
7.4.2 and Section 7.4.3.
If your code calls any of the following services, you must modify it for OpenVMS I64 Version 8.2:
Start by finding all locations that reference the PFN passed to the service. Modify the code to reference a 64-bit PFN. See previous sections that describe language specific changes you must make. If your code calls SYS$CRMPSC with the flag SEC$M_PFNMAP, you must change your code to call one of the 64-bit services. The 32-bit interface no longer allows PFN-mapping on I64. When calling one of the 64-bit PFN-mapping system services, set the flag SEC$M_ARGS64 to indicate that 64-bit arguments are being passed to the service. Existing Code
New Code
7.4.2 SYI$_MAX_PFNIf your code calls SYS$GETSYI[W] with the item code SYI$_MAX_PFN, you must modify your code. The new item code, SYI$_MAX_PFN_64 is also available on Alpha so you can maintain common code. To modify your code, do the following:
Existing Code
Modified Code
7.4.3 PMM StructureThe PMM structure has been replaced by the PMM64 structure on I64. If your code references any of the PMM structure fields, you must modify your code on I64 to reference the new structure and the new field names. The new PMM64 structure has been added to Alpha so that the 32-bit PMM array and 64-bit PMM64 exist on Alpha. Only the 64-bit PMM64 structure exists on I64.
7.4.4 SYI$_PFN_MEMORY_MAPIf your code calls SYS$GETSYI[W] with the item code SYI$_PFN_MEMORY_MAP, you must modify your code. The new item code, SYI$_PFN_MEMORY_MAP_64 is also available on Alpha so you can maintain common code. To modify your code, do the following:
Existing Code
Modified Code
|