Release 1.1, patchlevel 1 (12/3/1999)

This release introduces some major performance improvements, some minor new features, and many bug fixes.

Performance

  1. Indirect calls.  Programs that contain indirect function calls are now handled much more efficiently.  For such programs, the savings in space, build time, and query time can be enormous.
  2. Memory management.  Memory management has been changed to be much more compact. This enables larger projects to be built.
  3. Project viewer.  The time taken to display long lists of items in the project viewer has been reduced substantially.
  4. File Viewers.  The time to paint style information in file viewers has been reduced substantially.  In addition, style information is no longer updated when a file viewer is iconified or otherwise unmapped.  Instead, updating is delayed until the viewer is displayed.
  5. Painting of the summary bar.  The creation and display of the summary bar contents have been speeded up substantially.
  6. Exiting with non-empty interest sets.  A gross inefficiency in the saving of interest sets on exiting CodeSurfer has been corrected.

New Features

  1. Function pointers.  The property sheet for a function now shows what variables may point to that function.  Also, the property sheet for a function pointer variable shows what functions it may point to.
  2. Library Models  The model for the C library libc.c now contains two separately selectable ways of modeling input and output.  The monolithic model treats the file system as it if were a single variable.  Thus, a write to the file system (e.g., using printf) has an effect on all subsequent reads (e.g., using scanf).  This is very conservative and so can lead to unwanted dependences.  The discrete model is designed for use in cases where the user wishes to assume that input/output operations are independent of one another.
  3. Mmap base address.  CodeSurfer uses a memory-mapped file to store the dependence graph.  This requires that the virtual memory address space be divided between the memory mapped region and the regular heap, which is used for the results of queries.  Previously the user had no control over this division, which meant that the heap space was sometimes inadequate, and users could build large projects, but not store the results of all queries.  This release introduces an option to set the address at which the memory mapped region starts.  The default on a Solaris machine is 0x20000000, which allows for a maximum of 511Mb heap address space and 3328Mb memory mapped space.  In practice, because of system demands on the address space, the actual amount available will be lower.
  4. PDG kinds and Filters.  The notion of a PDG kind has been introduced.  PDGs that correspond to user functions have kind user-defined.  Other PDGs may be generated internally.  A new dimension for filters has been introduced that allows the user to filter with respect to PDG kind.  As delivered, the PDGs that are generated for system initialization, and for the initialization of static variables, are visible.

Minor changes and Bug fixes

  1. Preprocessor and Parser
    • Whitespace between tokens is now consolidated into a single blank in macro expansion governed by single '#'.
    • Some miscellaneous bugs in the C front end have been corrected.
    • A problem in the preprocessor with the "#" operator has been fixed.
    • In accord with A7.1 of the ANSI standard, an expression of type "function returning T" is permitted in the first position of an (__?__:__) expression, where it is converted to an expression having type "pointer to function returning T".
    • A bug in the preprocessor that caused a crash if the file was not terminated with a newline has been fixed.
  2. Pointer Analysis:
    • The points-to set for variable buf declared by
        char buf[] = "abcdefg";
      is no longer treated as containing "abcdefg".  The correct semantics of this declaration is that buf is initialized with a copy of "abcdefg".  Thus, the name buf used as a char* points only to the buffer and not to the string "abcdefg".
  3. Builder:
    • The names of heap variables and functions have been changed slightly to show their context better.
    • Support for variadic functions has been greatly improved.
    • The system no longer crashes after switch pointer analysis from full to minimal and doing a rebuild.
    • Codesurfer will no longer crash when you change preferences and reload a project a second time.
  4. GUI:
    • The Project Viewer:
      • The project viewer's title bar is now onscreen under the twm window manager.
      • The default size of the project viewer for second and subsequent projects is now consistent.
    • File Viewers:
      • Whitespace between tokens of the same program point were previously inactive.  For example, clicking on any of the spaces within the statement x = x + 1; did nothing.  This whitespace is now active.
      • A bug causing the omision of tick marks in the summary bar corresponding to the beginning or end of a file has been fixed.
      • A bug in which an old selection might not be cleared on hypertext navigation to a new point in the file has been fixed.
    • Call Graph Viewer:
      • Problems with undesirable horizontal scrolling behavior in Call Graphs have been fixed.
    • Commands, Menus, Dialog Boxes, and Keybindings:
      • A bug where clicking on the property toolbar button was slow has been fixed.
    • Other:
      • Project files are written to the correct directories, and there will not no longer be incorrect reports of build status "unbuilt". The default project a.out.prj is not written inappropriately.
      • Memory leaks in popups and pulldowns have been plugged.
      • A bug in the garbage collection of Scheme values that caused failures on Sun Sparcs of type sun4m has been fixed.
  5. Scheme API:
    • New procedures:
      • pdg-kind returns a symbol that represents the kind of the given PDG.
    • Changed procedures:
      • The second argument to the procedures s-successors and s-predecessors has been changed to allow specification of a filter for the PDG kind.
  6. Documentation:
    • A discussion on accuracy has been added to the manual.

Free Trial | Products | Customers | Support | News | Jobs | About Us         © 2007-2008, GrammaTech, Inc. All rights reserved.