Login | Register
Login | Register

My pages Projects SunSource.net openCollabNet
OpenSPARC.net >  Cool Tools >  Discover

Cool Tools - Sun Memory Error Discovery Tool (Discover)

The Sun Memory Error Discovery Tool (Discover) is a tool used by software developers to detect programming errors related to the allocation and use of program memory at runtime on SPARC® systems.

Examples of errors detected by Discover include:

  • Accessing uninitialized memory.
  • Reads from and writes to unallocated memory.
  • Accessing memory beyond allocated array bounds.
  • Use of freed memory.
  • Freeing wrong memory blocks.
  • Memory leaks.

NOTE:
Starting with Discover 1.1 (distributed with GCC for SPARC® Systems release 4.2.0), multi-threaded programs are supported.

Download and Install

Discover can be used with either the SunTM Studio 12 Compilers and Tools or the GCC for SPARC Systems compilers.

If you are using the Sun Studio 12 Compilers and Tools, please follow the steps on CMT Developer Tools for Sun Studio 12 to download and install.

Starting with GCC for SPARC Systems release 4.0.4, Discover is already installed as part of the distribution. It is invoked as <gcc-install-dir>/gcc/bin/discover. The man page is <gcc-install-dir>/gcc/man/man1/discover.1.

Documents

Please see the man page for a description of supported features. The man page is also supplied with the download package. More details about Discover can be found in the Discover User's Guide.

Using Discover

Discover can work with the Sun Studio 12 compilers for C, C++, and FORTRAN, as well as the GCC for SPARC Systems where Discover is part of the distribution.

Please refer to the User's Guide and man page for detailed instructions on usage and data analysis. Below we provide a brief example of usage.

First, make sure the application you are testing is compiled with the ‑xbinopt=prepare option. This will not change the executable code, but will make it possible for Discover (and other Cool Tools) to postprocess the binary. (If you're using Sun Studio 12, you must also compile with optimization using ‑O or ‑xO1 or above.) We also strongly recommend the use of the ‑g option as it will facilitate error detection. Once you have the executable file ready, instrument it with command:

    discover target

Now the target is modified for detecting memory errors. Run the binary in your regular environment and Discover will report any encountered errors to stderr. For example:

    ./target
    ERROR: accessing uninitialized data from...
    ...

You can use instrumentation options to write the Discover report to a different file or generate the report in HTML format. A sample of HTML output can be found here.

The simplest way to generate an HTML report is to set the DISCOVER_HTML environment variable in your shell prior to running binary. For example, in the bash shell, simply say:

    $ DISCOVER_HTML=1 ./target

Alternatively, you can supply -H option at instrumentation time.

Please note that Discover will only report errors from code that is executed at runtime. If the source code contains a memory error (e.g. uninitialized memory use) that was not executed during the invocation of the program, or if the compiler has performed an optimization (e.g. dead code elimination) that deleted the code for the erroneous source code statement, then the error will not be reported.

See the man page or the Discover User's Guide for details and more examples.

Known Issues

Because of the way libraries are instrumented at run time when using discover, it is possible for its analysis to be incomplete, and in rare instances program execution may be incorrect. See this page for more information and details on workarounds.

This issue has been fixed in Discover 1.1. However, in order for the fix to be effective, the instrumented binary must be run on a machine with one of the following operating systems:

  • Solaris 10 Update 5
  • Solaris 10 with Patch 127111-07 installed
  • Solaris 11 build 70 or above

Dependencies

On Solaris 9, Discover requires that Patch 112963-14 for the SunOS 5.9 linker be installed. Solaris 9 or later is required as a host OS at runtime.

Support

Discover is provided without support. However, a CoolTools Forum is available where questions and discussions about installing, using, or improving Discover can be posted. Posting in the forums does not guarantee a response. Please send your feedback to: .