===========================================================================
* IBM XL C/C++ Advanced Edition for Linux, V9.0  Program 5724-S73
*
* COPYRIGHT International Business Machines Corporation 2007
* 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 Corporation
*
* IBM and POWER are trademarks or registered trademarks of  
* International Business Machines Corporation in the United States, other 
* countries, or both.
*
* Linux is a registered 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 for Linux, V9.0 that was not available in our online help
and documentation.

By using IBM XL C/C++ Advanced Edition for Linux, V9.0 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/9.0

with the following names:

- LicenseAgreement.pdf
- license.pdf

You will need a Portable Document Format (PDF) viewer to view these files.

NOTE
IBM XL C/C++ Advanced Edition for Linux, V9.0 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.

Authorized user:
An authorized user is one and only one individual (named or unnamed) within 
or outside Your enterprise. A Proof of Entitlement (PoE) must be obtained 
for each individual user accessing the Program in any manner. A Program 
licensed under an Authorized User PoE may be installed on a single computer 
or server, and accessed by multiple users, provided that a PoE has been 
obtained for each individual user accessing the Program either directly or 
indirectly (via a multiplexing program, device, or application server) 
through any means on behalf of the user.

Concurrent user:
A concurrent user is one and only one individual within or outside Your 
enterprise. The number of PoEs required is for the highest number of users 
simultaneously accessing the program or any program components either directly 
or indirectly (via a multiplexing program, device, or application server) 
through any means on behalf of the user.


This document contains the following sections:

1. Viewing documentation on Linux
2. Installation issues
3. Known limitations for IBM XL C/C++ Advanced Edition for Linux, V9.0
4. Operating system considerations
5. Documentation additions and corrections
6. Support information
7. Further updates


1. Viewing documentation on Linux
=================================

Documentation on installing and using IBM XL C/C++ Advanced Edition
for Linux, V9.0 can be found in the .pdf files included as part of this
package, and in the HTML-based information center.

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.

To start the HTML-based information center, first launch the Web
server by logging in with root authority and running the following
command:

 /opt/ibmcmp/xlhelp/3.1.1/bin/xlhelp

When the Web server has started, you can view the information center
from the server machine or any client. For more information, see the 
"IBM XL C/C++ Advanced Edition for Linux, V9.0 Installation Guide".


2. Installation issues
======================

Operating system support
------------------------

IBM XL C/C++ Advanced Edition for Linux, V9.0 is supported on the following 
Linux distributions:

-  Red Hat Enterprise Linux AS 5 (RHEL5) for IBM POWER
-  SUSE Linux Enterprise Server 10 Service Pack 1 (SLES 10 SP1) for IBM POWER 

See the "IBM XL C/C++ Advanced Edition for Linux, V9.0 Installation
Guide" for installation instructions.

Upgrading the operating system or GCC
-------------------------------------

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/9.0/vac.cfg

2. Change the name of this file or move it to a different location.

3. Run the new_install or vac_configure executable, as described in the
   "IBM XL C/C++ Advanced Edition for Linux, V9.0 Installation Guide". This
   will create a new default configuration file.

4. If you have created any other configuration files, you must manually 
   update these files to reflect any changes in the default configuration 
   file. Alternatively, you can preserve customizations by creating 
   custom, user-defined, configuration files. (See the "Using custom 
   compiler configuration files" and "Creating custom configuration files" 
   topics in the "IBM XL C/C++ Advanced Edition for Linux, V9.0 Compiler 
   Reference" for details.) 


3. Known limitations for IBM XL C/C++ Advanced Edition for Linux, V9.0
======================================================================

The following are known limitations for IBM XL C/C++ Advanced Edition
for Linux, V9.0 running on any supported Linux distribution:

C99-compliant complex header file
---------------------------------

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.

Version and linker scripts
--------------------------

When you specify the compiler options "-qipa", "-O4", "-O5", "-qpdf1 -O2", 
"-qpdf2 -O2", "-qpdf1 -O3", or "-qpdf2 -O3", version/linker scripts are not 
supported except linker scripts containing the 'group', 'output_format', or 
'as_needed' keywords.


4. Operating system considerations
==================================

The following are considerations for IBM XL C/C++ Advanced Edition
for Linux, V9.0 running on any supported Linux distribution:

Passing structures with a single floating-point or vector member in  64-bit
---------------------------------------------------------------------------
 mode
 ----

The XL C/C++ compiler now uses the GCC parameter passing conventions under
the following conditions:

*  The function is compiled for 64-bit mode
*  The parameter is a structure with a single floating-point member or a 
   single vector member.

For such parameters, GCC passes them in floating-point registers or vector 
registers, as appropriate.

Red Hat Enterprise Linux AS 5 with SELinux enabled
--------------------------------------------------

Red Hat Enterprise Linux AS 5 (RHEL5) comes with a feature called Security 
Enhanced Linux (SELinux). When SELinux is enabled and the default SELinux 
configuration is used, a shared library created by IBM XL C/C++ Advanced 
Edition for Linux, V9.0 may fail to load with an error similar to the 
following, assuming libshared_library.so.1 is the shared library:

$ a.out
a.out: error while loading shared libraries: /library_path/libshared_library.so.1:  
cannot restore segment prot after reloc: Permission denied.

This happens because the SELinux feature checks for permission for software 
to do certain things. These permissions are detailed in the SELinux 'policy'. 
The 'enforcing' mode of SELinux and the default policy for RHEL5 do not 
allow libshared_library.so.1 to be loaded. 

To fix this, you can try to change one of the following:

- The SELinux mode
- The SELinux policy

You can perform one of the following:

1. Set SELinux to the 'permissive' or 'disabled' mode instead of the 
   'enforcing' mode. Do this by changing the SELINUX= value in the 
   /etc/sysconfig/selinux file and then rebooting:
   
  $ vi /etc/selinux/config
  #SELINUX=disabled
  SELINUX=permissive
   
2. Add the specific permissions that libshared_library.so.1 wants to use 
   to the policy being used by SELinux. Do this by issuing the following 
   commands:
   
$ semanage fcontext -a -t textrel_shlib_t /library_path/libshared_library.so.1
$ chcon -f -t textrel_shlib_t /library_path/libshared_library.so.1   

Option 2 is recommended. See the RedHat documentation for more details on 
SELinux.


5. Documentation additions and corrections
==========================================

Documentation additions and corrections for this product can be found at 
the following URL:

 http://www.ibm.com/support/docview.wss?uid=swg21259939


6. Support information
======================

The following site contains support information for the IBM XL C/C++
Advanced Edition for Linux, V9.0 product:

 http://www.ibm.com/software/awdtools/xlcpp/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.


7. Further updates
==================

Additional information and documentation errata for all future IBM XL C/C++
Advanced Edition for Linux, V9.0 updates can be found at the following URL:

 http://www.ibm.com/support/docview.wss?uid=swg21259939
