ptx®/C++ V5.2.5 is a maintenance release of the DYNIX/ptx® port of the EPC C++ V5.2 compiler from Edinburgh Portable Compilers. This product also includes the Rogue Wave® Tools.h++® V7 and V8 Class Libraries and C++ Standard Library. ptx/C++ V5.2.5 runs on DYNIX/ptx V4.5.x and V4.6.x. Read these release notes before you install or run this release of ptx/C++.
ptx/C++ V5.2.5 contains the following changes since ptx/C++ V5.2.3:
ptx/C++ V5.2.5 is supported for use on DYNIX/ptx V4.6.x as well as DYNIX/ptx V4.5.x. Previous versions of ptx/C++ are not supported on DYNIX/ptx V4.6.x.
The c++ compiler in ptx/C++ V5.2.5 predefines the macros _PTX, _IA32, and __i386. These macros are not predefined in previous versions of the compiler.
Two sections of the ptx/C++ User's Information have been revised:
Under the topic "Using ptx/C++," the subsection "Building Shared Libraries" has been greatly expanded.
Under the topic "Conformance to Standard C++," the subsection "Unsupported Features of Standard C++" has been expanded. It now includes more features of Standard C++ that are not supported in ptx/C++ V5.2.
Several problems reported against ptx/C++ were fixed in ptx/C++ V5.2.5. For more information, refer to "Fixed Problems in ptx/C++ V5.2.5" at the end of these release notes.
The following list describes the differences between EPC C++ V5.2 from Edinburgh Portable Compilers, and ptx/C++ V5.2:
The executable name for ptx/C++ is c++ and is in the directory /bin.
The man page for ptx/C++ is called c++.
The location of the files for ptx/C++ is /opt/ptxC++.
This section contains information about the differences between ptx/C++ V5.2.x and ptx/C++ V2.1.3. Additional information is provided in the section "Migrating to ANSI/ISO C++" in the ptx/C++ User's Information.
Object files and libraries are not compatible between ptx/C++ V2.1.3 and ptx/C++ V5.2.x.
By default ptx/C++ V5.2.x implements the long double data type the same as the double data type, with a length of 8 bytes. This is compatible with ptx/C++ V2.1.3 and with ptx/C. ptx/C++ V5.2.x provides an option, -abilngdbl, to follow the Intel® 386 Application Binary Interface and implement the long double data type with a length of 12 bytes. Applications that are written partly in C and partly in C++ should use the default 8-byte long double if they share long double data through global variables, function calls, or data written to binary files.
The ptx/C++ V2.1.3 processor defines __STDC__ to be zero, but ptx/C++ V5.2.x defines it to be one. The ptx/C compiler continues to define __STDC__ to be zero except when you specify the -Xc option, which defines __STRICT_ANSI__.
ptx/C++ V5.2.x does not provide a COFF development environment.
ptx/C++ V5.2.x does not support the ptx/C feature -Wc,+dir, which can be used to select a version of the socket implementation to use for an application. Where -Wc,+abi-socket would be passed to cc, use -@/usr/lib/abi-socket/cc_options as an option to c++.
ptx/C++ V5.2.x does not support __asm macros (also known as asm functions).
ptx/C++ V5.2.x does not support generating line coverage data for use with lprof(1).
ptx/C++ V5.2.x does not support ordering for locality (OFL).
ptx/C++ V5.2.x does not support the placement of variables in shared or private memory for use with the parallel programming library, libpps.
The following list describes compatibility information and issues when running different versions of ptx/C++ across different versions of DYNIX/ptx:
Static executables built on DYNIX/ptx V4.4 with ptx/C++ V5.0 or V5.2 can be run on DYNIX/ptx V4.5 or DYNIX/ptx V4.6.
Dynamic executables using shared C++ libraries built on DYNIX/ptx V4.4 with ptx/C++ V5.0 cannot be run on DYNIX/ptx V4.5 or DYNIX/ptx V4.6. The shared C++ libraries that were part of the ptx/C++ V5.0 releases are not supported as part of ptx/C++ V5.2 or ptx/C++ V5.2 Runtime.
The shared C++ libraries that are part of ptx/C++ Runtime V5.2.x will continue to be supported in future releases of ptx/C++ Runtime. This will allow dynamic executables that are built with ptx/C++ V5.2.x to be executed on the same or later versions of DYNIX/ptx on which the same or a later version of ptx/C++ Runtime is installed.
It is possible for object files (.o, .a, and .so) built with one version of ptx/C++ for a particular version of DYNIX/ptx to be used with another version of ptx/C++ and/or DYNIX/ptx. This will depend on the versions of the compiler and operating system, as well as the compilation mode. These factors all determine which set of C++ libraries will be used. The following table shows which combinations are supported and which are not.
ANSI and cfront modes are not compatible.
ANSI mode for ptx/C++ V5.2 is not compatible with ANSI mode for ptx/C++ V5.0.
Compiling object files with one version of ptx/C++ and linking those object files with an earlier version of ptx/C++ is not supported. For example, compiling with ptx/C++ V5.2 and linking with ptx/C++ V5.0 is not supported.
Compiling object files on one version of DYNIX/ptx and linking those object files when running on an earlier version of DYNIX/ptx is not supported. For example, compiling on DYNIX/ptx V4.6 and linking when running on DYNIX/ptx V4.5 is not supported.
Compiling object files on DYNIX/ptx V4.4 for use with ANSI libraries and linking those object files when running on a version of DYNIX/ptx that supports threads (DYNIX/ptx V4.5 and V4.6) is not supported.
ptx/C++ is installed on DYNIX/ptx using the standard ptx/INSTALL procedure. ptx/C++ requires a license key for installation. For installation instructions, refer to the DYNIX/ptx V4.5.3 and Layered Products Software Installation Release Notes or the DYNIX/ptx V4.6.1 and Layered Products Software Installation Release Notes, as applicable.
ptx/C++ V5.2.5 is currently distributed on both the "DYNIX/ptx V4.5.3 Operating System and Layered Products, Volume 1" CD-ROM and the "DYNIX/ptx V4.6.1 Operating System and Layered Products, Volume 1" CD-ROM.
ATTENTION The ptx/C++ shared libraries are in a separately installed product called ptx/C++ Runtime V5.2.5. For this reason, development environments require both ptx/C++ and ptx/C++ Runtime. A license is not required to install ptx/C++ Runtime.
Also, the edb debugger is installed as part of the DYNIX/ptx operating system. Release note information for edb is included in the DYNIX/ptx V4.5.3 Release Notes and the DYNIX/ptx V4.6.1 Release Notes.
The System V Application Binary Interface (ABI), Intel386 Architecture Processor Supplement, states that 64-bit floating point precision is the default state required for conformance to the ANSI C standard and to the IEEE 754 Floating-point standard. Furthermore, many floating-point routines may produce undefined behavior if the precision control is set to less than 53 bits. For these reasons, the c++ compiler in ptx/C++ assumes that floating-point precision is 64 bits.
If an application changes the floating point precision to 53 bits, this can cause C++ long long calculations to get the wrong results, since some of these calculations are done using floating point registers. In this scenario, the application must change the floating point precision back to 64 bits before doing long long arithmetic.
The following documentation is available on the online documentation CD or at http://webdocs.numaq.ibm.com/:
ptx/C++ User's Information
edb User's Reference
The Rogue Wave class library Tools.h++ is incorporated as an integral part of the ptx/C++ language implementation by permission of Rogue Wave Software Inc. The Tools.h++ Version 8 documentation is included in the /opt/ptxC++/doc directory as two online manuals in HTML format:
Tools.h++ Version 8 Reference, /opt/ptxC++/doc/tlsref/index.htm
Tools.h++ Version 8 User's Guide, /opt/ptxC++/doc/tlsug/index.htm
Tools.h++ Version 8 is available for use with ANSI compilation. Tools.h++ Version 7 is available for use with cfront compilation. The documentation for Version 7 is available in hard copy format.
ATTENTION There is no shared library version of RogueWave Tools.h++ Version 8.
The Standard C++ Library is also part of ptx/C++ and is implemented by Rogue Wave Software Inc. Documentation for this library is included in the /opt/ptxC++/doc directory in HTML format:
Standard C++ Library Class Reference, /opt/ptxC++/doc/stdref/index.htm
Standard C++ Library User's Guide, /opt/ptxC++/doc/stdug/index.htm
The following list contains the problems fixed in ptx/C++ V5.2.5. The first number shown in bold font is the SPTS problem report number. The second number shown in brackets is the EPC problem report number.
The underlying support for that function is not available in DYNIX/ptx, so the declaration was removed, which will cause modules that attempt to use it to fail at compile time rather then link time. The man page for RWWString now documents that the function is not available.
The following list contains the open problem reports in ptx/C++. The first number shown in parentheses is the SPTS problem report number. The second number shown in brackets is the EPC problem report number.
Destructors for global objects are not called when the main program was compiled with the C compiler rather than the C++ compiler.
Workaround. Compile the following into an object file with either cc or c++ and link it in with the program:
asm(".section .fini; call __process_needed_destructions__Fv; .previous");
This workaround depends on the current implementation of the compiler and run-time library and cannot work with a compiler other than V5.2.x.
For a class that has member functions for placement new and placement delete, a call to the placement new member function is followed by a compiler-generated call to the appropriate constructor. This is followed by a compiler-generated call to the placement delete member function. The call to the placement delete function should not be there and could cause serious problems that are difficult to debug. For example, the memory used for this object could be returned for other use, causing it and another object with the same storage to clobber each other. A later call to delete could corrupt the heap's free list.
Workaround. This problem does not occur if the module is compiled with the -noeh option to c++, which disables exception handling. There is no workaround that allows the module to use exception handling.
Due to an incorrect setting in a configuration file used by the standard C++ library in ptx/C++, this library uses a different definition of struct mbstate_t than the struct that is defined in the C header file <wchar.h>. (The C++ standard says that the type should be defined in <wchar.h>). The C++ code definition is left in namespace std and the C definition is left in the global namespace. This problem prevents compilation of C++ code that attempts to define variables with the <wchar.h> definition of mbstate_t and then pass those variables to C++ functions that take arguments of type std::mbstate_t.
Workaround. All of the C++ library functions that accept arguments of type mbstate_t* currently ignore those arguments. Therefore, if C++ needs to use data of type mbstate_t for use with C libraries, use mbstate_t rather than std::mbstate_t. In DYNIX/ptx V4.5 and V4.6, however, none of the library functions actually do anything with mbstate_t values either. Passing them NULL pointers will work.