Release notes for Purify 5.3 IRIX6

Contents
========

  o Changes from previous releases

  o Supported systems

  o Restrictions and known issues


New in This Release
===================
  - Bug fixes and compatibility with OS 
    patches.

  - 64-bit applications are now supported.
    A 64-bit program is one that is built
    with the compiler option "-64."

  - Support for Irix 7.3 compiler

  - Support for gcc 2.8.1 and 2.9.5 compiler
    Please read the Restrictions for important
    related IRIX patch information.


New in Purify 5.2
=================
  - Bug fixes and compatibility with OS 
    patches.
  
  - This release uses a new FlexLm based 
    licensing. Read the new installation
    guide before installing the product.
    Use rs_install instead of pure_install 
    for the installation.

New in Purify 4.6
=================
  - IRIX 5.x is no longer supported.

New in Purify 4.5
=================
  - Support for Irix 6.5.x and the 7.2.1 compilers

  - Support for applications using POSIX threads 
    on Irix 6.5.x. Pthread support is not 
    available for versions of Irix prior to 6.5.
    Please read the Restrictions for important
    related IRIX patch information.

  - More aggressive checking of optimized N32 code
    has been implemented. This can lead to more 
    UMR's. See the option -ignore-n32-o-umr=yes in
    the Restrictions section for information on 
    how to disable this behavior.

  - This is the last release to support Irix 5.x


==================================================


Supported systems
=================

  Operating system and Hardware
  -----------------------------

    Purify has been tested with IRIX
    versions 6.2 and 6.5.

    Purify also supports 64-bit programs on
    IRIX64 6.5. A 64-bit program is one that
    is built with the compiler option "-64."

  Compilers
  ---------

    Purify has been tested with the 
    following compilers:
    - cc
    - CC
    - f77
    - gcc 
    - g++
     

  Debuggers
  ---------
    - dbx, version 6.1 or better
    - cvd, the Workshop Debugger, version 2.5 or
      better.

    See the "Restrictions and Known Issues" 
    section for more details.

  Threads
  -------

    Purify supports these threads packages:
    - the sproc interface.
    - POSIX threads.

==================================================


Restrictions and Known Issues
=============================

  General
  -------
  - Purify supports both 32-bit and 64-bit
    application development, and will select
    the correct mode of operation automatically
    based on the executable or shared object.

  - The product home directory has been
    reorganized to support both 32 and 64-bit
    development. This organization should be
    transparent for all 32-bit users and most
    64-bit users. However, the location of
    the Purify stubs library is different.

    32-bit libraries have been moved to the
    lib32 directory:

       purifyhome/lib32/libpurify_stubs.a
       purifyhome/lib32/libpurify_stubs.so
       purifyhome/lib32/libpurify_stubs_n32.a
       purifyhome/lib32/libpurify_stubs_n32.so

    To preserve backward compatibility, the
    following links are provided in purifyhome:

       purifyhome/libpurify_stubs.a
       purifyhome/libpurify_stubs.so
       purifyhome/libpurify_stubs_n32.a
       purifyhome/libpurify_stubs_n32.so

    32-bit API users are encouraged to use
    the libraries from the lib32 directory,
    and not from purifyhome.

    64-bit API users must link against the
    equivalent library in the lib64 directory:

       purifyhome/lib64/libpurify_stubs.a
       purifyhome/lib64/libpurify_stubs.so

    The API header file has not moved and is
    shared for both development modes.

  - If you use Purify -printhomedir to 
    prefix product libraries, you must qualify
    the library path with the appropriate lib
    sub-directory:

    `purify -printhomedir`/lib32/libpurify_stubs.a
    `purify -printhomedir`/lib32/libpurify_stubs.so
    `purify -printhomedir`/lib32/libpurify_stubs_n32.a
    `purify -printhomedir`/lib32/libpurify_stubs_n32.so
    `purify -printhomedir`/lib64/libpurify_stubs.a
    `purify -printhomedir`/lib64/libpurify_stubs.so

  - You may not see Purify error messages from an
    MPI (Message Passing Interface) test program.
    An MPI program first creates a given number of
    children and these children actually execute 
    the test program. The parent doesn't execute 
    the test program. 
    So, one needs to set the purify option 
    -follow-child-processes=yes to get the errors
    from an MPI test program. Note that when you
    set this option, a new purify viewer per child
    will come up. Thus, the number of processes 
    increases. This could have an effect on the 
    performance of your program. So, it is better 
    to test with smaller number of children.
    

  User Interface
  --------------

  - In version 5.3, the format of view files has
    changed. This means that the 5.3 Viewer cannot
    be used to view older view files, and 5.3 view
    files cannot be opened by older Viewers.

    Please use the Viewer of the same version
    to open view files.

  - If a large number of items are selected,
    "Expand all" followed by "Collapse all" can
    crash some unpatched versions of the
    OpenWindows 3.0 server.
    This occurs if you are displaying on a SUN
    workstation.

  - If you expand or collapse messages while the
    "Continue" or "Reset etc. Continue" buttons
    are displayed, the buttons may subsequently be
    incorrectly positioned.

  - The "Edit" toolbar item may be slow to
    respond.

  - The Purify GUI menus and buttons become 
    inaccessible if either the NumLock or 
    ScrollLock key is activated. The workaround
    is to switch them off, or add the following
    line(s) to your $HOME/.Xdefaults file.
 
    ! Ignore the NumLock and ScrollLock keys on 
    ! mouse buttons
    Purify*ignoreModifierMask: Mod3|Mod2
 
    This second workaround will take effect for 
    a new Purify viewer after you restart 
    your X-session or run a command like 
    'xrdb -merge $HOME/.Xdefaults'.

  - The "Invoke ClearDDTS" Button has been
    modified to bring up the ClearQuest web
    interface.  This feature only works with
    Netscape Navigator.

    The site-wide URL for ClearQuest can be
    given during installation or set by
    manually editing the file

    pure_clearquest_url

    in your Purify home directory. A user 
    can override the site-wide URL by setting 
    the environment variable

    PURE_CLEARQUEST_URL

    This feature is partly implemented by a shell
    script, ("pure_invoke_clearquest" in your
    Purify home directory) to allow you to 
    tailor its operation to your needs.  If you 
    wish, you may copy and customize this.
    script. As long as the directory containing 
    the script appears in your search path 
    before your Purify home directory, it will 
    be used instead of the original script.

    If you prefer to use Purify with 
    ClearDDTS, you can do so by setting the 
    X resource:

    Purify*ddtsCommandString

    to 'xddts', if xddts is in your search path,
    or to the full path to your xddts executable.
    xddts is invoked by a shell script
    ("pure_invoke_ddts" in your Purify home
    directory).  If you wish to customize it,
    please read the section on customizing
    "pure_invoke_clearquest" above.

    If you already have a customized
    "pure_invoke_ddts" script in your search path,
    All you need to do is set your X resource as
    described above, and Purify will find 
    your customized script automatically.

    The following copyright applies to portions
    of this ClearQuest integration code:

    Copyright 1996 Netscape Communications 
    Corporation, all rights reserved. Created: 
    Jamie Zawinski , 24-Dec-94.
    Permission to use, copy, modify, distribute, 
    and sell this software and its documentation 
    for any purpose is hereby granted without 
    fee, provided that the above copyright 
    notice appear in all copies and that both 
    that copyright notice and this permission 
    notice appear in supporting documentation.  
    No representations are made about the 
    suitability of this software for any 
    purpose. It is provided "as is" without 
    express or implied warranty.


  Compilers
  ---------

  - Those purified programs compiled with gcc 
    which initialize function pointers globally 
    may dump core. g++ programs with global 
    constructors may also dump core.

      This is due to a bug (#801456) in SGI
      assembler. SGI will make it available in
      Irix 6.5.10 and will also release a
      patch (#3944) for the previous Irix
      releases. Please contact SGI Support to
      obtain this patch.

      Note that the g++ library libstdc++ may
      have been built by the old assembler.
      Please build this with the new assembler
      to ensure that the purified program runs
      without dumping.

  - The GNU gcc extensions are not tested against
    Purify.  Most gcc extensions will
    probably work fine.  Known limitations at
    present include problems with nested functions
    (e.g.: making a pointer to a nested function
    and attempting to call through it will not
    work).

  - For systems running IRIX 6.5.7f or higher, 
    Purify may fail to instrument /usr/lib/libc.so
    with the error message

      Processing /usr/lib/libc.so.1 - error fatal:
       Jump registered out of no transformed block
       [SA906D8, SA90710] /usr/lib/libc.so.1

      This is a bug in cord. libc.so is corded, 
      but cord is not updating the notransform 
      information in the shared library correctly.

      This does not happen with Irix versions 
      below 6.5.7, or with version on the 
      maintenance stream (e.g. 6.5.7m).

      Rational Support is working with SGI to make
      a patch available. Please contact Rational 
      Support regarding availability of the patch.

  -  Aggressive Loading

     - Some compilers load data from memory but
       ignore the data that has been read,
       especially when optimization is turned on.
       Purify will signal a UMR if the loaded
       data is uninitialized.  In some sense this
       is a false error report because the
       uninitialized data will not affect your
       program.

  Purify'ing X Applications
  -------------------------

  - When running a Purify'd X application, there
    is a potential for deadlock if your
    application causes Purify to generate a
    message while the application is holding the X
    lock, since Purify will be unable to generate
    the message, and the application is blocked
    until the message is delivered.

    To avoid this kind of problem, you should run
    your application on a different X server than
    the Purify UI or Purify stderr output, or you
    should use the -log-file= or -view-file=
    options to specify a file to capture messages
    for inspection after your application is
    finished.

    A convenient way to debug on two displays is
    to pre-start the Purify Viewer on one display
    ("slave"), and then start the application on
    the other display ("master"):

    % purify -display slave:0 -view a.out.X &
    % a.out.X -display master:0

    The two commands must be executed on the same
    computer, but it could be the workstation
    associated with either display, or altogether
    another computer remote from both displays.
    The application will connect to the already
    started Purify Viewer, and messages will not
    conflict with the X display interactions of
    the application under test.

  Debuggers
  ---------

  -  Invoking a debugger on a core file
     generated by a purified program, will
     cause numerous "mismatch" messages
     to be printed. These can be ignored,
     and will not affect debugging.


  Threads
  -------

  - Call chains describing when memory was
    malloced or freed do not always include the
    thread id.

  - The Purify API functions purify_map_pool() and
    purify_map_pool_id() are not MT safe.

  - For applications using Pthreads, the purified 
    program may crash or hang if dlopen is called.

      This is a bug in rld. SGI released 
      patch (#3910) to correct the problem; please
      contact SGI Support to obtain the patch.

      Note that your application may not use 
      dlopen directly, but a library it is using 
      may call dlopen. C++ exception handling may 
      also call dlopen.

  - Customers using unsupported threads packages
    should contact Rational Software technical 
    support (support@rational.com) to ensure 
    compatibility.

  Unsupported Features
  --------------------

  - SBR and SBW errors are not reported on IRIX.

  - The Initialized Data and BSS sections are not
    checked for ABR and ABW errors on IRIX.  

  - Statically linked mallocs are ignored:  users
    who implement their own malloc function must
    put it in a DSO.

  - Instrumentation of stripped binaries and
    shared libraries is not supported.

  Misleading Error Messages
  -------------------------

  - A failure to write to disk may result in a
    message like:
  #Error: (system) No such file or directory,
    write() failed [a.out].
    In this case, you can see that you are out of
    disk space with "df .", and you should clean
    up or otherwise acquire more disk space.

  - More aggressive UMR checking has been added.
    This may cause spurious UMR's in some 
    optimized n32 code. To disable this aggressive
    checking, use the option:
       -ignore-n32-o-umr=yes

    or set the environment variable:

       PURIFY_IGNORE_N32_O_UMR

  Purify Swap Usage
  -----------------

  A Purify'd application needs more swap space
  than the equivalent unpurify'd version.  Running
  under a debugger, you will need even more.  To
  add swap space you may do the following:

  Do the following as root to add a 40MB swap 
  file:

       /usr/sbin/mkfile 40m /usr/swap

       Add this line to /etc/fstab:
       /usr/swap swap swap pri=3 0 0

       Then execute:

       /etc/init.d/swap stop
       /etc/init.d/swap start


  You may also allocate virtual swap to appease
  the debuggers swap requirements.  Check the man
  page (man swapctl) for caveats.

  Do the following as root:

       vi /etc/config/vswap.options
          >change vswaplen to 250000

       /sbin/chkconfig  vswap on
       /etc/init.d/swap stop
       /etc/init.d/swap start

  How do I use the API functions?
  ------------------------------

  There are stubs for the Purify API functions in
  the files libpurify_stubs.so and
  libpurify_stubs.a.  For the N32 ABI, the files
  are libpurify_stubs_n32.so and
  libpurify_stubs_n32.a.  You use the .so during
  development, and the .a for shipping your
  product.  If you link with the .a file, the
  Purify API functions will be stubbed out even if
  you subsequently Purify your program.

  Manual Examples
  ---------------

  The examples in Chapter 12 of the manual are
  intended to help the user understand the
  circumstances that would cause Purify to report
  what it reports.  At least one example does not
  apply to Purify on IRIX.

  - The MSE example in Chapter 12 will not produce
    an MSE on IRIX.