======================================================================== * IBM(R) XL C/C++ Advanced Edition V7.0 for Linux(R) 5724-K77 * Version 7.0.1 Update * (C) COPYRIGHT International Business Machines Corp. 1990, 2005 * All Rights Reserved * Licensed Materials - Property of IBM * * US Government Users Restricted Rights - Use, duplication or * disclosure restricted by GSA ADP Schedule Contract with IBM Corp. * IBM, BladeCenter, iSeries, and pSeries are trademarks of IBM Corp. * * Linux is a trademark of Linus Torvalds in the United States, other * countries, or both. * * Other company, product, and service names may be trademarks or service * marks of others. ======================================================================== This README file contains the latest information about IBM XL C/C++ Advanced Edition V7.0 for Linux, Version 7.0.1 Update, that was not available for our online help and documentation. By using IBM XL C/C++ Advanced Edition V7.0 for Linux, you agree to the terms of the license as specified in the following files: * LicAgree.pdf * LicInfo.pdf These files are located in the root directory of the installation CD. After installation, they are located in the following directory: /opt/ibmcmp/vacpp/7.0/ with the following names: * LicenseAgreement.pdf * license.pdf You will need a PDF viewer to view these files. Note: IBM XL C/C++ Advanced Edition V7.0 for Linux is a server product that has two charge units: per authorized user and per concurrent user. These are available in fixed order quantities of one authorized user or one concurrent user. An authorized user is defined as an individual or specific-named user authorized to have access to the program or any portion of the program. An authorized user license is required for each distinct person who will access and use the program. You may install the program on more than one machine, provided that you are the only user using it and only one copy of the program is in use at one time. The Proof of Entitlement for this program is evidence of the authorization. A concurrent user is defined as any person who accesses and uses the program or any portion of the program within a designated network. The program may be installed on an unlimited number of machines within the designated network. A concurrent user license entitles any user within the designated network to access and use the program as long as the total number of users concurrently accessing and using the program at any one time does not exceed the total number of concurrent user licenses acquired. You must acquire an additional license for each additional concurrent user and/or designated network on which the program is used. The Proof of Entitlement for the program is evidence of the authorization. This document contains the following sections: I. Viewing Documentation on Linux II. Installation Issues III. Late-Breaking Updates IV. August 2005 and Future IBM XL C/C++ Advanced Edition V7.0 for Linux PTF Updates V. Known Limitations for IBM XL C/C++ Advanced Edition V7.0 for Linux VI. Operating System Considerations VII. Documentation Corrections VIII. Support Information IX. Further Updates I. Viewing Documentation on Linux ================================= Documentation on installing and using IBM XL C/C++ Advanced Edition V7.0 for Linux can be found in the .pdf and .htm files included as part of this package. To view the documentation, you must have X-server working on your system. In addition, you need to have the appropriate viewers, such as a frames-capable HTML browser, such as Mozilla, or a PDF viewer, such as gv or Xpdf. II. Installation Issues ======================= Operating System Support ------------------------ IBM XL C/C++ Advanced Edition V7.0 for Linux is supported on the following Linux distributions: o Red Hat Enterprise Linux AS 3 Update 3 (RHEL3) o Red Hat Enterprise Linux AS 4 (RHEL4) o SUSE LINUX Enterprise Server 9 (SLES9) o Terra Soft's Y-HPC v20050115 (Y-HPC) See the "IBM XL C/C++ Advanced Edition V7.0 for Linux Installation Guide" for installation instructions. Uninstalling Beta or Evaluation Versions ---------------------------------------- Before installing the fully-licensed version of XL C/C++ Advanced Edition V7.0 for Linux, you must uninstall the Beta or Evaluation version of the product you have on your system. If you have an Evaluation Copy, follow the instructions in the README file that came with that Evaluation Copy. If you have the Y-HPC Beta, uninstall the Beta as follows: Y-HPC Beta Uninstallation Instructions -------------------------------------- rpm -e vacpp.samples-6.99.9999-0 rpm -e vacpp.help-6.99.9999-0 rpm -e vacpp.cmp-6.99.9999-0 rpm -e vacpp.lib-6.99.9999-0 rpm -e vacpp.rte.lnk-6.99.9999-0 rpm -e vacpp.rte-6.99.9999-0 rpm -e vac.cmp-6.99.9999-0 rpm -e vac.lib-6.99.9999-0 rpm -e xlmass.lib-3.99.9999-0 rpm -e xlsmp.lib-1.4.9999-0 rpm -e xlsmp.rte-1.4.9999-0 rpm -e xlsmp.msg.rte-1.4.9999-0 Upgrading the Operating System, GCC or XL C/C++ ----------------------------------------------- If you upgrade the operating system or the GCC compiler after installing XL C/C++, you may need to update the default configuration file (and any configuration files you created) to reflect changes in file names and paths. After you upgrade the operating system or GCC, do the following: 1. Locate the default configuration file: /etc/opt/ibmcmp/vac/7.0/vac.cfg 2. Change the name of this file or move it to a different directory. 3. Run the new_install or vac_configure executable, as described in the IBM XL C/C++ Advanced Edition V7.0 for Linux Installation Guide. This will create a new default configuration file. 4. If you created any other configuration files, manually update these files to reflect any changes in the default configuration file. If you upgrade the Operating System, GCC or the XL C/C++ compiler and you had modified your previous configuration file, you will have to copy those changes into the new vac.cfg created during the upgrade. III. Late Breaking Updates =========================== Compiler Options ---------------- -O0 Option ---------- You can specify the -O0 option as a synonym for -qnooptimize. Specifying -O0 disables almost all optimizations. #pragma ibm snapshot -------------------- The following is an added consideration for users of the snapshot pragma: At high optimization levels, snapshot does not consistently preserve the contents of variables with a static storage class. -q[no]complexgcc Option ----------------------------- This option enables compatibility with GCC call linkage conventions for the _Complex type. In 32-bit mode, the default is float=complexgcc. If the compiler is configured for GCC 3.2 in 64-bit mode, the default is -qfloat=complexgcc. This ensures binary compatibility with objects built using GCC 3.2. If the compiler is configured for GCC 3.3 or above in 64-bit mode, the default is -qfloat=nocomplexgcc. -qinlglue Option Defaults ------------------------- For performance enhancement on selected architectures, inlining of glue code is now automated through the selection of hardware tuning options. Specifying -qtune=pwr4, -qtune=pwr5, -qtune=ppc970, or -qtune=auto on a system that uses one of these architectures, along with -q64, will automatically enable the -qinlglue option. Note, however, that -qcompact overrides the -qinlglue setting regardless of other options specified, so if you want -qinlglue to be enabled, do not specify -qcompact. C++ Template Options -------------------- The default settings for the automatic template instantiation options are -qnotempinc and -qnotemplateregistry. To enable automatic template instantiation, you must specify -qtempinc or -qtemplateregistry. A new informational message is emitted if your compilation uses template implementation files but does not specify the -qtempinc option. XLSMPOPTS Options -------------------- The setenv XLSMPOPTS command now supports 2 new options for thread binding. setenv XLSMPOPTS=startproc=:stride= where: startproc= enables thread binding and specifies the CPU ID to which the first thread binds. If the value provided is outside the range of available processors, the SMP run time issues a warning message and no threads are bound. and stride=num specifies the increment used to determine the CPU ID to which subsequent threads bind. num must be greater than or equal to 1. If the value provided would cause a thread to be bound to a CPU outside the range of available processors, a warning message is issued and no threads are bound. IV. August 2005 and Future IBM XL C/C++ Advanced Edition V7.0 for Linux PTF Updates ==================================================================================== Additional information and documentation errata for the August 2005 IBM XL C/C++ Advanced Edition V7.0 for Linux update and all future IBM XL C/C++ Advanced Edition V7.0 for Linux updates can be found at the following url: http://www.ibm.com/support/docview.wss?uid=swg21206684 V. Known Limitations for IBM XL C/C++ Advanced Edition V7.0 for Linux ===================================================================== The following are known limitations for IBM XL C/C++ Advanced Edition V7.0 for Linux running on any supported Linux distribution: C99-Compliant Header File ------------------------- On systems that support C99, there are two complex.h header files. One is a C++ legacy complex.h header file, the other is a C99-style complex.h header file. If you compile with the -qlanglvl=c99complex or -qlanglvl=c99complexheader compiler option to use the C99-compliant header file, the compiler will issue an error. #pragma block_loop ------------------ Applying #pragma block_loop to a loop with dependencies, or a loop with alternate entry or exit points may produce unexpected results. The following are known limitations for IBM XL C/C++ Advanced Edition V7.0 for Linux running on SLES 9: Disassembling/Re-assembling Code with VMX Instructions ------------------------------------------------------ The disassembler on the BladeCenter JS20 server does not yet provide VMX support. Thus, the disassembler will not be able to decipher VMX instructions and will leave them hex-encoded. Any relocations associated with VMX instructions will also be lost, so passing a disassembled file containing VMX instructions through an assembler may not produce a working program. Binaray Incompatability between GCC 3.3.3 and GCC 3.3.3-16 ---------------------------------------------------------- There is a known binary incompatability between GCC 3.3.3 on SLES 9 and GCC 3.3.3-16 on Y-HPC when passing complex float/double arguments on the stack. XL C/C++ Advanced Edition V7.0 for Linux passes arguments at the 8-byte boundary as does GCC 3.3.3 (SLES 9), whereas GCC 3.3.3-16 (Y-HPC) passes arguments at the 4-byte boundary. Compiling on RHEL 4 ------------------------- There is a known problem on RHEL4 if the C++ header is included alone. This is because of a difference in the way XL C/C++ and GCC 3.4 handle specializations of template class member functions. That is, XL C/C++ instantiates the virtual member function, while GCC 3.4 does not. This results in unresoved symbols during the link step. To resolve this problem, introduce an extern template declaration for the template. To resolve the header problem, include the header . Thus, an extern template declaration for the unresolved specializations will be introduced. VI. Operating System Considerations =================================== The following are considerations for IBM XL C/C++ Advanced Edition V7.0 for Linux running on any supported Linux distribution: Passing Structures with a Single Floating-Point Member in 64-Bit Mode --------------------------------------------------------------------- The parameter passing conventions in GCC and XL C/C++ are different under the following conditions: * The function is compiled for 64-bit mode * The parameter is a structure with a single floating-point member. For such parameters, GCC passes them in floating-point registers. XL C/C++, following the ABI convention, passes them in general purpose registers. SUSE LINUX Enterprise Server 9 (SLES 9) Considerations ------------------------------------------------------ The following are considerations for IBM XL C/C++ Advanced Edition V7.0 for Linux running on SUSE LINUX Enterprise Server 9 (SLES 9) only: Passing Complex Values and GCC 3.3 ---------------------------------- GCC 3.3 on SLES 9 has changed the conventions for passing or returning complex numbers in 64-bit mode. Object files that: * Are compiled for 64-bit mode; and * Pass complex type arguments or return values; and * Are compiled for 64-bit mode by GCC 3.2 or earlier, or by XL C/C++ that was configured for GCC 3.2 or earlier with the -qfloat=complexgcc compiler option will need to be recompiled by GCC 3.3 or XL C/C++ V7.0 that is configured for GCC 3.3. VII. Documentation Additions and Corrections ============================================ Getting Started Guide Errata ---------------------------- mlong-double-64 and mlong-double-128 Options -------------------------------------------- In the table describing the GNU C and C++ to XL C/C++ option mapping, please disregard the mapping for mlong-double-64 and mlong-double-128. Compiler Reference and Manual Pages Errata ------------------------------------------ xlCcore Invocation Command -------------------------- Please disregard the xlCcore compiler invocation command as the gcc C++ run-time library is currently used. -qipa subotions --------------- The description of the -qipa option in the XL C/C++ Compiler Reference incorrectly states that the suboptions can be separated by commas (,). Like other options, the only acceptable separator for suboptions for -qipa is the colon (:). Programming Guide Errata ------------------------ Currently none. Language Reference Errata ------------------------- Currently none. VIII. Support Information ========================= The following site contains support information for the IBM XL C/C++ Advanced Edition V7.0 for Linux product: http://www.ibm.com/software/awdtools/vacpp/support In addition, this support site includes information and guidelines on any Linux operating system considerations that can impact compiler behavior or performance. Check this site for a list of known considerations and solutions. For additional information on the MASS libraries, see the following site: http://www.ibm.com/software/awdtools/vacpp/mass IX. Further Updates =================== Additional information and documentation errata for the August 2005 IBM XL C/C++ Advanced Edition V7.0 for Linux Update and all future IBM XL C/C++ Advanced Edition V7.0 for Linux Updates can be found at the following url: http://www.ibm.com/support/docview.wss?uid=swg21206684