Document revision date: 9 May 2001

## OpenVMS Version 7.3 Release Notes

Previous | Contents | Index

## 8.3 Characteristics of Noncompliant Code

The areas of noncompliance detected by the SRM_CHECK tool can be grouped into the following four categories. Most of these can be fixed by recompiling with new compilers. In rare cases, the source code may need to be modified. See Section 8.5 for information about compiler versions.

- Some versions of OpenVMS compilers introduce noncompliant code sequences during an optimization called "loop rotation." This problem can be triggered only in C or C++ programs that use LDx_L/STx_C instructions in assembly language code that is embedded in the C/C++ source using the ASM function, or in assembly language written in MACRO--32 or MACRO--64. In some cases, a branch was introduced between the LDx_L and STx_C instructions.
  This can be addressed by recompiling.
- Some code compiled with very old BLISS, MACRO--32, DEC Pascal, or DEC COBOL compilers may contain noncompliant sequences. Early versions of these compilers contained a code scheduling bug where a load was incorrectly scheduled after a load_locked.
  This can be addressed by recompiling.
- In rare cases, the MACRO--32 compiler may generate a noncompliant code sequence for a BBSSI or BBCCI instruction where there are too few free registers.
  This can be addressed by recompiling.
- Errors may be generated by incorrectly coded MACRO--64 or MACRO--32 and incorrectly coded assembly language embedded in C or C++ source using the ASM function.
  This requires source code changes. The new MACRO--32 compiler flags noncompliant code at compile time.

If the SRM_CHECK tool finds a violation in an image, you should recompile the image with the appropriate compiler (see Section 8.5). After recompiling, you should analyze the image again. If violations remain after recompiling, examine the source code to determine why the code scheduling violation exists. Then make the appropriate changes to the source code.

## 8.4 Coding Requirements

The Alpha Architecture Reference Manual describes how an atomic update of data between processors must be formed. The Third Edition, in particular, has much more information on this topic. This edition details the conventions of the interlocked memory sequence.

Exceptions to the following two requirements are the source of all known noncompliant code:

- There cannot be a memory operation (load or store) between the LDx_L (load locked) and STx_C (store conditional) instructions in an interlocked sequence.
- There cannot be a branch taken between an LDx_L and an STx_C instruction. Rather, execution must "fall through" from the LDx_L to the STx_C without taking a branch.
  Any branch whose target is between an LDx_L and matching STx_C creates a noncompliant sequence. For instance, any branch to "label" in the following example would result in noncompliant code, regardless of whether the branch instruction itself was within or outside of the sequence:

                      LDx_L  Rx, n(Ry)
                      ...
               label: ...
                      STx_C  Rx, n(Ry)

Therefore, the SRM_CHECK tool looks for the following:

- Any memory operation (LDx/STx) between an LDx_L and an STx_C
- Any branch that has a destination between an LDx_L and an STx_C
- STx_C instructions that do not have a preceding LDx_L instruction
  This typically indicates that a backward branch is taken from an LDx_L to the STx_C Note that hardware device drivers that do device mailbox writes are an exception. These drivers use the STx_C to write the mailbox. This condition is found only on early Alpha systems and not on PCI-based systems.
- Excessive instructions between an LDx_L and an STxC
  The AARM recommends that no more than 40 instructions appear between an LDx_l and an STx_C. In theory, more than 40 instructions can cause hardware interrupts to keep the sequence from completing. However, there are no known occurrences of this.

To illustrate, the following are examples of code flagged by SRM_CHECK.

            ** Found an unexpected ldq at 0008291C
            00082914   AC300000     ldq_l          R1, (R16)
            00082918   2284FFEC     lda            R20, 0xFFEC(R4)
            0008291C   A6A20038     ldq            R21, 0x38(R2)

In the above example, an LDQ instruction was found after an LDQ_L before the matching STQ_C. The LDQ must be moved out of the sequence, either by recompiling or by source code changes. (See Section 8.3.)

            ** Backward branch from 000405B0 to a STx_C sequence at 0004059C
            00040598   C3E00003     br             R31, 000405A8
            0004059C   47F20400     bis            R31, R18, R0
            000405A0   B8100000     stl_c          R0, (R16)
            000405A4   F4000003     bne            R0, 000405B4
            000405A8   A8300000     ldl_l          R1, (R16)
            000405AC   40310DA0     cmple          R1, R17, R0
            000405B0   F41FFFFA     bne            R0, 0004059C

In the above example, a branch was discovered between the LDL_L and STQ_C. In this case, there is no "fall through" path between the LDx_L and STx_C, which the architecture requires.

Note This branch backward from the LDx_L to the STx_C is characteristic of the noncompliant code introduced by the "loop rotation" optimization.

The following MACRO--32 source code demonstrates code where there is a "fall through" path, but this case is still noncompliant because of the potential branch and a memory reference in the lock sequence.

            getlck: evax_ldql  r0, lockdata(r8)  ; Get the lock data
                    movl       index, r2         ; and the current index.
                    tstl       r0                ; If the lock is zero,
                    beql       is_clear          ; skip ahead to store.
                    movl       r3, r2            ; Else, set special index.
            is_clear:
                    incl       r0                ; Increment lock count
                    evax_stqc  r0, lockdata(r8)  ; and store it.
                    tstl       r0                ; Did store succeed?
                    beql       getlck            ; Retry if not.

To correct this code, the memory access to read the value of INDEX must first be moved outside the LDQ_L/STQ_C sequence. Next, the branch between the LDQ_L and STQ_C, to the label IS_CLEAR, must be eliminated. In this case, it could be done using a CMOVEQ instruction. The CMOVxx instructions are frequently useful for eliminating branches around simple value moves. The following example shows the corrected code:

                    movl       index, r2         ; Get the current index
            getlck: evax_ldql  r0, lockdata(r8)  ; and then the lock data.
                    evax_cmoveq r0, r3, r2       ; If zero, use special index.
                    incl       r0                ; Increment lock count
                    evax_stqc  r0, lockdata(r8)  ; and store it.
                    tstl       r0                ; Did write succeed?
                    beql       getlck            ; Retry if not.

## 8.5 Compiler Versions

This section contains information about versions of compilers that may generate noncompliant code sequences and the recommended versions to use when recompiling.

Table 8-1 contains information for OpenVMS compilers.

Table 8-1 OpenVMS Compilers
Old Version | Recommended Minimum Version
--- | ---
BLISS V1.1 | BLISS V1.3
DEC Ada V3.5 | Compaq Ada V3.5A
DEC C V5.x | DEC C V6.0
DEC C++ V5.x | DEC C++ V6.0
DEC COBOL V2.4, V2.5 | Compaq COBOL V2.6
DEC Pascal V5.0-2 | DEC Pascal V5.1-11
MACRO--32 V3.0 | V3.1 for OpenVMS Version 7.1-2 V4.1 for OpenVMS Version 7.2
MACRO--64 V1.2 | See below.

Current versions of the MACRO--64 assembler may still encounter the loop rotation issue. However, MACRO--64 does not perform code optimization by default, and this problem occurs only when optimization is enabled. If SRM_CHECK indicates a noncompliant sequence in the MACRO--64 code, it should first be recompiled without optimization. If the sequence is still flagged when retested, the source code itself contains a noncompliant sequence that must be corrected.

## 8.6 Recompiling Code with ALONONPAGED_INLINE or LAL_REMOVE_FIRST Macros

Any MACRO--32 code on OpenVMS Alpha that invokes either the ALONONPAGED_INLINE or the LAL_REMOVE_FIRST macros from the SYS$LIBRARY:LIB.MLB macro library must be recompiled on OpenVMS Version 7.2 or later versions to obtain a correct version of these macros. The change to these macros corrects a potential synchronization problem that is more likely to be encountered on newer processors, starting with Alpha 21264 (EV6).

Note Source modules that call the EXE$ALONONPAGED routine (or any of its variants) do not need to be recompiled. These modules transparently use the correct version of the routine that is included in this release.

## Appendix A
Product Retirement Notices

This appendix contains notifications about OpenVMS products that are no longer supported as of this release or that are slated for retirement. It also lists manuals that have been archived with this release.

Freeware

Once a product is retired, Compaq does not accept or act on problem reports posted against the product. However, for those interested in doing their own development and support, the source code for many former products is available as freeware from the following sources:

- On the freeware CD-ROM that ships with the OpenVMS operating system.
  The freeware CD-ROM also includes internal tools such as SDL, NMAIL, MAILWATCH, and popular Internet programs.
- On the World Wide Web at the following URL:
  http://www.openvms.compaq.com/openvms/freeware/index.html

## A.1 Adobe Display PostScript Software No Longer Available

V7.3

Starting August 1, 1998, Compaq discontinued support for the Adobe Display PostScript software. Compaq took this action because Adobe Systems Incorporated discontinued its former ongoing support for Display PostScript.

This action has had a varying degree of impact on the behavior of those Compaq DECwindows Motif applications that used the Adobe Display PostScript software. For example, starting with DECwindows Motif Version 1.2-6, Bookreader can no longer continue to display graphics in PostScript format.

For detailed information about the effects of this action on applications designed for the DECwindows Motif environment, see the Compaq DECwindows Motif for OpenVMS Release Notes, included on the OpenVMS Documentation CD-ROM.

## A.2 POSIX 1003.4a Draft 4 Interface to Be Retired

V7.0

The POSIX 1003.4a, Draft 4 (or "d4") interface of the Compaq POSIX Threads Library (formerly named DECthreads) is slated for retirement in a future release. Applications that were written using the POSIX 1003.4a, Draft 4 interface should be migrated to the new POSIX 1003.1c standard (or "pthread") interface provided by the POSIX Threads Library. A compatibility mode for the Draft 4 POSIX 1003.4a interface has been provided in this release to help ease migration. This compatibility mode will be removed in a future release.

## A.3 Adobe Display PostScript Extension Support No Longer Available

V7.3

Support for the Display PostScript extension (XDPS) has been removed from DECwindows Motif Version 1.2-6. The XDPS extension and its associated files are no longer supplied by Compaq and are removed from the system during an upgrade. If your system has been configured to use a nondefault list of extensions that includes XDPS, modify the system startup procedure to remove the dependency on this extension.

In addition, the PSWRAP application has been removed from the DECwindows Motif client and the associated online help has been removed from the OpenVMS base operating system. As a result, the font compiler (DECW$FONTCOMPILER) ignores the DPS_INFO qualifier and no longer produces Display PostScript font map information.

## A.4 ISA_CONFIG.DAT Unsupported in Future Release (Alpha Only)

V7.1

Support for using the SYS$MANAGER:ISA_CONFIG.DAT file to configure ISA devices will be discontinued in a future release of OpenVMS Alpha. If you use this file, you should convert to using the ISACFG utility from the console, and the new file-based autoconfiguration method for loading device drivers (as described in Writing OpenVMS Alpha Device Drivers in C).

## A.5 TK50 and Magnetic Tape Media for OpenVMS VAX to Be Retired

V7.3

OpenVMS VAX Version 7.3 is the last OpenVMS release for which TK50 and magnetic tape media will be distributed. The release of layered software products that supports OpenVMS VAX Version 7.3 will also be the last release distributed on TK50 and magnetic tape media. Future OpenVMS VAX and layered software releases will be distributed only on CD-ROM until new media types become available.

If you are a Software Update Distribution service customer, your Service Agreement will automatically be changed to remove the software update options on TK50 and magnetic tape. OpenVMS VAX Operating System software updates will continue to be available on CD-ROM or through the Software Product Library (SPL) subscription service. For Layered Software Products, it is recommended that you obtain updates through the Software Product Library subscription service.

Table A-1 lists the replacement OpenVMS VAX subscription services:

Table A-1 OpenVMS VAX SPL Subscription Services
Service Description | Part Numbers
--- | ---
Distribution of the OpenVMS VAX Operating System binaries on CD-ROM, plus hardcopy manuals for the full documentation set | QA-001AA-H8 QT-001AA-E8
Consolidated Distribution of Binaries only on CD-ROM for the OpenVMS VAX Operating System and all Layered Products on the Software Product Library | QA-VWJ8A-A8 QT-VWJ8A-C8
Consolidated Distribution of Binaries and Online Documentation on CD-ROM for the OpenVMS VAX Operating System and all Layered Products on the Software Product Library | QA-YL48A-A8 QT-YL48A-C8
Consolidated Distribution of Binaries and Online Documentation on CD-ROM for all OpenVMS VAX Layered Products on the Software Product Library | QA-5G88A-A8 QT-5G88A-C8

Please contact your Compaq Services representative if you want to revise your Service Agreement to include updates for the OpenVMS VAX Operating System on CD-ROM, or Operating System and Layered Software Products updates through one of the Software Product Library subscription services listed in Table A-1.

## A.6 Netscape Navigator Version 3.03 Retiring

V7.3

Netscape Navigator Version 3.03 will be retired as of December 31, 2001. The replacement product is Mozilla for OpenVMS Alpha and is expected to be available in Q3 2001 by way of a download from the OpenVMS web site and in a future version of the Compaq OpenVMS e-Business Infrastructure Package CD-ROM (order number QA-6LYAA-H8).

Note that the Mozilla 0.8 technology demonstration kit is currently available for download at:

http://www.openvms.compaq.com/openvms/products/ips/register_mozilla.html

## A.7 Netscape FastTrack Version 3.02 Retiring

V7.3

Netscape FastTrack 3.02 will be available for download on the OpenVMS web site through September 30, 2001 and will be retired as of December 31, 2001. The replacement product is the Compaq Secure Web Server (based upon Apache) and is currently available for download from the OpenVMS web site and on the OpenVMS e-Business Infrastructure Package CD-ROM (order number QA-6LYAA-H8) bundled into the OpenVMS Alpha V7.3 media kit.

## A.8 PATHWORKS for OpenVMS (NetWare)

PATHWORKS for OpenVMS (NetWare) was retired in July 1998. This product still ships with PATHWORKS for OpenVMS Version 6.0A, but it is not available on PATHWORKS for OpenVMS Version 6.0B or on OpenVMS Version 7.2.

## A.9 POLYCENTER Software Installation Utility: DECwindows Motif Interface Retired

V7.2

The DECwindows Motif interface for the POLYCENTER Software Installation utility has been retired. All functions of the POLYCENTER Software Installation utility are still available from the DCL interface using the PRODUCT command.

## A.10 X.25 Client for OpenVMS Alpha Retirement (Alpha Only)

V7.3

The X.25 Client for OpenVMS Alpha product has been retired and is not supported on OpenVMS Alpha Version 7.2 or 7.3. However, the X.25 for OpenVMS Alpha product provides the functionality previously provided by the X.25 Client for OpenVMS Alpha product.

Customers who need X.25 Client functionality for OpenVMS Alpha Version 7.3 can achieve it with the following:

- X.25 Version 1.5 for OpenVMS Alpha systems
- An X.25 Client or X.25 license
  Note: You can use your X.25 Client license on the X.25 for OpenVMS Alpha product to get the same functionality.
- DECnet-Plus Version 7.3 for OpenVMS

On OpenVMS VAX Version 7.3, X.25 functionality is included in DECnet-Plus for OpenVMS and has not changed.

X.25 for OpenVMS Alpha Systems, Version 1.5 also includes:

- GAP Server support
- X.25 over TCP/IP (supporting the XOT protocol)
- X.25 tracepoints facility
- New PBXDD-XX synchronous card support
- Replacement for V1.3 and V1.4

## A.11 Archived Manuals

V7.3

As products are retired and the operating system evolves, certain OpenVMS manuals are archived. Archived manuals are no longer maintained and are not part of the OpenVMS documentation set. However, they are available on the OpenVMS Documentation CD-ROM and the external website:

http://www.compaq.com/openvms

Previous | Next | Contents | Index

| privacy and legal statement |
6637PRO_012.HTML