Node and Host Name Sizes on HP-UX: Using the Expanded Capabilities of HP-UX

31
Debuggers
The debugger does not have access to source names. It has access only to the binary names. Thus,
displays (such as stack traces) provide binary names. When looking up functions or data, the binary
name must be supplied. Note also that a breakpoint set in one version of a function does not affect
calls to another version.
Assembly and Fortran: No Version
The assembler and the Fortran language ignore the version attributes. The binary names are the
same as the source names. These languages always reference the original version of an interface
unless the source code is modified explicitly to use the binary name.
Incomplete Types
A pointer to an incomplete type might be used in another type (for example, as a structure member or
function parameter). If the referenced type has a version identifier, that version identifier might not
propagate to the pointer type or to any interfaces that use it. The workaround is to provide the
complete type or apply a version identifier directly to the pointer.
Type Casts
Type casts in a program source might be used to cast a pointer to the wrong version of a type. The
compiler checking scheme might fail to detect a mismatch or might diagnose false mismatches.
Extensive Use of Interfaces
If an interface is versioned that is used by the majority of client applications, or if many interfaces are
versioned (perhaps through version inheritance), it can become impossible for client programs to
effectively use the original interface versions. All client applications are, for practical matters, forced
into using the new versioned interfaces. In this case, it is more appropriate to require recompilation
of all client programs (with possible source code updates) to use the new versions of the interfaces
and to not use FLV at all.
Versioning is Cumulative
Interfaces cannot be versioned independently; versions must be cumulative. A client application
cannot individually pick which versions are used for each interface it uses. This constraint is due to
the fact that structures or functions that re-export multiple versioned interfaces inherit the version
identifier that is lexically greatest (the high-water mark).
Virtual Member Functions and Derived Classes
If a base class is recompiled with a new version identifier but the derived class is not, a call to that
function on an instance of the derived class might not work properly. This situation is really a general
C++ binary compatibility issue and can occur even in the absence of the FLV mechanism.
Defeats Single-Binary/Multiple-Release
Many software developers build their products on an earlier HP-UX release (for example, 11.00 or
11i versions 1.0, 1.5, 1.6) and deploy the single binary on that and all later releases and versions.
The FLV mechanisms cannot be retrofitted to those releases. The same is true for the versioned
interfaces themselves. Furthermore, because FLV is a compile-time feature, it is not straightforward to
make run-time decisions about whether to use the original or new interfaces. So run-time conditional
execution is not practical.