HP OpenVMS Version 8.3 Release Notes


Previous Contents

5.9.2 toascii Function Added

V8.3

The toascii function required by the X/Open specification had only a macro definition in <ctypes.h> .

This fix adds the toascii function, with an entry point in the DECC$SHR image.

5.9.3 64-Bit sigaction Problem Fixed

V8.3

Compile-time warnings resulted from using 64-bit pointers to the sigaction function.

This fix allows regular, long pointer (/POINTER=LONG), and short pointer (/POINT=SHORT) compilations.

5.9.4 64-Bit Pointer Capability Added to Several Math Functions

V8.3

The following C RTL math functions can now pass 64-bit pointers when a user compiles with the /POINTER_SIZE qualifier:


frexp       modf 
frexpf      modff 
frexpl      modfl 

5.9.5 2-GB malloc No Longer Fails Silently

V8.3

The C RTL malloc function accepts an unsigned int ( size_t ) as its parameter. The lib$vm_malloc action accepts a (positive) signed integer as its parameter.

Allocating 2 GB (0x80000000) did not allocate the proper amount of memory and did not retun an error indication. A check is now added to the malloc , calloc , and realloc functions for sizes equal to or greater than 2 GB that fail the call.

5.9.6 Memory Leak in exec* Fixed

V8.3

A memory leak in exec * is fixed.

5.9.7 Behavior of exit after a Failed execl Fixed

V8.3

The C RTL contains a fix for the problem in which a call to _exit after a failed execl really exits but should not.

In the OpenVMS implementation of vfork , a child process is not actually started as it is started on most UNIX systems. However, the C RTL creates some internal data structures intended to mimic child-process functionality (called the "child context").

A bug occurred whereby after a vfork while in the child context, a call to an exec function justifiably fails, then calls _exit . On UNIX systems, after the failed exec call, the child process continues to execute. A subsequent call to _exit terminates the child. In the OpenVMS implementation, after the failed exec call, the child context terminates. A subsequent call to _exit terminates the parent.

The C RTL fix is enabled by a feature logical switch, DECC$EXIT_AFTER_FAILED_EXEC. Enabling this feature logical allows the child context to continue execution.

With DECC$EXIT_AFTER_FAILED_EXEC disabled or not defined, the current behavior remains the default.

5.9.8 confstr Enhancements

V8.3

To conform to the X/Open specification, the confstr function now allows a zero-length buffer to be passed in.

Also, confstr now supports the following three HP-UX symbolic constants, which are added to header file <unistd.h> :

_CS_MACHINE_IDENT
_CS_PARTITION_IDENT
_CS_MACHINE_SERIAL

5.9.9 fopen Failure Fixed

V8.3

Previously, if a user called fopen (file, "wb+"), where file was a quoted DECNET specification and the remote file was absent, RMS reported a syntax error in the file specification instead of opening the file for update (creating a new version).

This problem is fixed in Version 8.3.

5.9.10 Possible File-Pointer-Locking Hang Condition

V8.3

OpenVMS Version 8.2 introduced file-pointer locking for multithreaded C programs ( flockfile and friends). The C RTL internally locks file pointers to conform to the X/Open specification.

A problem occurred in instances where file pointers were not unlocked on an error return during the preloading of data.

Users who experience this problem might see application hangs in multithreaded programs using file-pointer I/O. Analysis of the program state shows a deadlock of threads on TIS-recursive mutexes used to implement the file-pointer locks.

This problem is fixed in Version 8.3.

5.9.11 Backport Library No Longer Shipped

V8.3

Previously included with the compiler distribution kit was a C RTL backport object library, which allowed developers on older versions of OpenVMS to use the latest C RTL functions. This backport object library is no longer being shipped.

5.9.12 Header File <time.h> Changes

V8.3

The following problem is fixed. Users who still experience this problem might have to recompile their application to see the corrected behavior.

The C RTL <time.h> header file defines the struct tm structure and the functions gmtime , localtime , gmtime_r , and localtime_r .

When the calling of one these functions and the application and the C RTL disagree about the size of struct tm , a user application can see data corruption or an access violation.

The tm structure has optional members for BSD extensions: tm_gmtoff and tm_zone . These are not defined in the ANSI or POSIX specifications or, for compatibility, with older compilations.

The previously mentioned functions have three different definitions in the C RTL:

The __UTCTZ_ prefixed functions expect to assign only the longer tm structure with the BSD extensions defined.

The problem occurs when the <time.h> header file and the C RTL do not agree on the number of structure members in struc tm . For example, the problem occurs with a C++ compilation using a compile-time macro implying _ANSI_C_SOURCE (such as _POSIX_C_SOURCE), which maps the listed C RTL functions using __UTC_ prefixes. The functions expect the shorter tm data structure, but the user program uses the longer tm structure definition. The copy-back of data from the function return tries to access data not allocated by the C RTL for the tm data members. This can result in unpredictable behavior, such as an unintended memory or access violation.

In OpenVMS Version 8.3, changes are made to <time.h> to make sure the C RTL selects the appropriate prefixing for the listed functions.

5.9.13 Header File <time.h> Makes *_r Non-ANSI Functions Visible

V8.3

The C RTL functions ctime_r , gmtime_r , and localtime_r defined in the X/Open specification are not in the ISO/ANSI C standard and should not be visible when compiling only for ANSI compliance. Previously in the C RTL, they were visible.

This situation is fixed. Checks are added in the <time.h> header to make these functions visible only when not compiling for ANSI compliance.

5.9.14 Header File <decc$types.h>: time_t int Declaration

V8.3

The time_t structure defined in the <decc$types.h> header file has been historically declared as unsigned long int on OpenVMS systems. UNIX platforms tend to declare it as a signed type, which can cause problems for ported programs on OpenVMS.

For UNIX compatibility, this fix uses a compile macro __SIGNED_INT_TIME_T to declare time_t as int .

The default remains unsigned long int for compatibility with older programs.

5.9.15 New DECC$SHRP.EXE Image

V8.3

OpenVMS installs a new shareable image DECC$SHRP.EXE to implement C RTL functions requiring protected mode. This shareable image is installed on all Alpha and Integrity processors and is invoked from either the DECC$SHR.EXE or DECC$SHR_EV56.EXE shareable image.

5.9.16 Header File <wchar.h> and C++ %CXX-W-ENVIRSTKDIRTY Message

V8.3

The <wchar.h> header file is fixed to avoid the problem where the C++ Version 7.1 compiler can issue a %CXX-W-ENVIRSTKDIRTY warning when compiling with the _XOPEN_SOURCE macro defined.

5.9.17 Header File <builtins.h> __CMP_SWAP* and _Interlocked* Visible to C++

V8.3

The compare and swap builtins (__CMP_SWAP* and _Interlocked*) in <builtins.h> did not include the OpenVMS Alpha C++ compiler. Because HP C++ Version 7.1 requires them, a change in conditional compilation now makes these builtins visible.

5.9.18 Extra Parameters to fcntl Ignored

V8.3

Previously, calls to fcntl with a third-optional parameter when only two were expected (for commands not expecting a third parameter) returned errors.

This problem is fixed. Any unneeded third parameter is now ignored.

5.9.19 Problem with fwrite to stdout Fails with Large System MAXBUF

V8.3

Previously, using fwrite to stdout resulted in an error if the system's MAXBUF SYSGEN parameter was greater than or equal to 33278.

The following message might have been returned when using perror (as viewed by perror ) after the failing fwrite call:


Error writing output: : non-translatable vms error code: 0x186A4 
 
 %rms-f-rsz, invalid record size 

This problem is fixed.

5.9.20 Problem with Read/Write for Socket Transfers Greater Than 64K

V8.3

Support is added for socket transfers greater than 64K bytes for the following socket routines:


send        recv         read 
sendto      recvfrom     write 
sendmsg     recvmsg 

5.9.21 Problem with Nanosleep on I64 Systems

V8.3

On OpenVMS I64 systems, the nanosleep function used to return an invalid status of -1 and set errno to EINTR (interrupted system call) when the function was correctly sleeping.

This problem is fixed.

5.9.22 Builtin __fci Added for I64 Systems

V8.3

The <builtins.h> header file is updated with the prototype for the new __fci builtin (a builtin for the fc.i instruction) now supported by the HP C compiler.

5.9.23 _FAST_TOUPPER Macro Added

V8.3

As of OpenVMS Version 8.3, to comply with the C99 ANSI standard and X/Open Specification, the _tolower and _toupper macros by default do not evaluate their parameter more than once. They simply call their respective tolower or toupper function. This avoids side effects (such as i++ or function calls) where the user can tell how many times an expression is evaluated.

To retain the older, optimized behavior of the _tolower and _toupper macros, compile with /DEFINE=_FAST_TOUPPER. Then, as in previous releases, these macros optimize the call to avoid the overhead of a run-time call. However, the macro's parameter is evaluated more than once to determine how to calculate the result. this could create unwanted side effects.

5.9.24 Call to atof("NaN") no Longer Gives Arithmetic Trap

V8.3

On OpenVMS Alpha Version 8.2 and higher, the following call to atof("NaN") gave an arithmetic trap:


d = atof("NaN"); 
 
%SYSTEM-F-HPARITH, high performance arithmetic trap, Imask=00000000, 
Fmask=00000002, summary=02, PC=FFFFFFFF80BB23D4, PS=0000001B 
-SYSTEM-F-FLTINV, floating invalid operation, PC=FFFFFFFF80BB23D4, 
PS=0000001B 

This is fixed in OpenVMS Version 8.3. The arithmetic trap is no longer generated.

5.9.25 No New Entries for DECC$*.OLB Object Libraries

V8.3

As of OpenVMS Alpha and I64 Version 8.2, no new entry points are being added to the DECC$*.OLB object libraries. This means new C RTL entry points do not get mapped through these libraries to prefixed entries. For example, the new OpenVMS Version 8.3 entry point crypt , compiled with /PREFIX=NONE, does not get mapped from crypt to decc$crypt .

5.10 Calling Standard and Rotating Registers (I64 Only)

V8.3

This note supplements information in the HP OpenVMS Calling Standard.

The Calling Standard invocation context block (ICB) (see Table 4-16 in the HP OpenVMS Calling Standard) and mechanism vector (see Figure 8-7 and Table 8-6 in the HP OpenVMS Calling Standard) always record general, floating-point, and predicate registers as if the register rename base (CFM.rrb) and rotating size (CFM.sor) were both zero. That is, when rotating registers are in use, the effects of the rotation are ignored. This is also true of the register masks used by the LIB$I64_PUT_INVO_REGISTERS routine (see Section 4.8.3.13 in the HP OpenVMS Calling Standard), because these masks are defined in terms of fields in the ICB structure.

Previously, the supplemental access routines LIB$I64_GET_FR, LIB$I64_SET_FR, LIB$I64_GET_GR and LIB$I64_SET_GR (see Section 4.8.4 in the HP OpenVMS Calling Standard) improperly interpreted their register number parameters without applying an adjustment for the effects of the register rename base and rotating size registers. This error is corrected.

5.11 Common Data Security Architecture (CDSA) Considerations

The following notes pertain to CDSA.

5.11.1 Secure Delivery

V8.3

Downloading of files over the Internet is becoming a requirement of OpenVMS customers who want to use this easy and convenient method to acquire software updates, but are wary of the security vulnerabilities. Secure Delivery makes use of public key and digital signature technology to implement a system that provides OpenVMS users with the ability to authenticate and validate the files they download from OpenVMS and third-party OpenVMS vendors.

Secure Delivery is fully functional with OpenVMS Version 8.3. For more information, refer to the HP OpenVMS Version 8.3 New Features and Documentation Overview.

5.11.2 Installation and Initialization Considerations

V7.3-2

Installation of CDSA is done automatically when you install the operating system.

5.12 Debugging Modes: Avoiding CPUSPINWAIT Bugchecks

Permanent Condition

The OpenVMS operating system has a number of special modes of operation designed to help you debug complex hardware and software problems. In general terms, these special modes enable an extra level of tracing, data recording, and consistency checking that is useful in identifying a failing hardware or software component. These modes of operation are controlled by several system parameters: MULTIPROCESSING, POOLCHECK, BUGCHECKFATAL, and SYSTEM_CHECK.

If you are using one of these special modes (for example, to debug a device driver or other complex application), under certain conditions, generally related to high I/O loads, it is possible to incur a CPUSPINWAIT bugcheck. Specifically, any privileged code that runs for extended periods of time while holding a spinlock can cause a CPU spinwait bugcheck. Spinlocks are used to delineate the entry and exit points for critical sections, and should not be held continuously, as can occur in this situation.

To prevent a CPUSPINWAIT bugcheck, either use the system default settings for these system parameters, or reduce the loading of the system.

If you have reason to change the default settings, you can reduce the likelihood of encountering a problem by setting the SMP_LNGSPINWAIT system parameter to a value of 9000000.

5.13 Delta/XDelta Debuggers

The following release notes pertain to the OpenVMS Delta and XDelta debuggers running on OpenVMS Alpha and I64 systems.

OpenVMS Debugger release notes are in Section 5.29.

5.13.1 XDELTA Register Display Consideration (I64 Only)

V8.2

XDELTA on OpenVMS I64 displays general, floating-point, and predicate registers as if the register rename base (CFM.rrb) and the rotating size (CFM.sor) are both zero. In other words, when rotating registers are in use, the effects of the rotation are ignored. This condition will be corrected in a future release. See Section 5.10 for additional details.

5.14 File Applications: Corrections to Guide to OpenVMS File Applications

Permanent Correction

The following corrections will be made to the Guide to OpenVMS File Applications if this manual is revised in the future.

5.15 HP BLISS Compiler Warnings with RMS Structures (I64 Only)

Permanent Condition

Quadword alignment has been added to the BLISS macros ($xxx_DECL) that can be used to allocate RMS user structures (for example, FAB, RAB). Alignment faults are costly to performance---especially as processors get faster. By implementing the alignment directly in the macros, a number of OpenVMS utilities and user applications written in BLISS that use these macros show improved performance.

The specific names of the macros are: $FAB_DECL, $NAM_DECL, $NAML_DECL, $RAB_DECL, $RAB64_DECL, $XABALL_DECL, $XABDAT_DECL, $XABFHC_DECL, $XABITM_DECL, $XABJNL_DECL, $XABKEY_DECL, $XABPRO_DECL, $XABRDT_DECL, $XABRU_DECL, $XABTRM_DECL, and $XABSUM_DECL.

The alignment added in the RMS macros might result in compiler warnings of conflicting alignment. Programs with compiler warnings should link and execute correctly. However, the minor source changes to eliminate the warnings are recommended.

If you use any of these macros in a BLISS application and the declaration includes the ALIGN attribute, the BLISS compiler issues a "conflicting or multiply specified attribute" warning. For example, the warning is issued for the following declaration: FAB: $FAB_DECL ALIGN(2). The compiler also issues this warning even if quadword alignment (ALIGN(3)) is specified. You should remove any explicit ALIGN attributes associated with these macros.

In addition, if any of these allocations is included in a PSECT that contains an explicit alignment that is in conflict with ALIGN(3) (that is, is lower than ALIGN(3)), the BLISS compiler issues an "align request negative or exceeds that of psect" warning. For example, the warning would be issued for the following declaration:


 PSECT OWN = $OWN$ (..., ALIGN(2), ...) 
 
 OWN 
 
     FAB = $FAB_DECL, ... 

If warnings on PSECT alignment are seen when recompiling a BLISS application, the correction is to increase the alignment of the PSECT to ALIGN(3) (or higher). In rare cases, applications may have assumptions on adjacency of data between PSECTs. Those assumptions could be broken in making this change. Therefore, check the code for such assumptions and make any necessary corrections.

While a number of OpenVMS utilities are written in BLISS, only a few warnings were generated in a full OpenVMS build. Changes in OpenVMS to eliminate warnings did not require other changes to correct assumptions. Based on this, few user applications likely will require modification.


Previous Next Contents