Release 1.1, patchlevel 1 (12/3/1999)
This release introduces some major performance improvements, some minor new features,
and many bug fixes.
Performance
- 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.
- Memory management. Memory management has been changed to be
much more compact. This enables larger projects to be built.
- Project viewer. The time taken to display long lists of items
in the project viewer has been reduced substantially.
- 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.
- Painting of the summary bar. The creation and display of the
summary bar contents have been speeded up substantially.
- Exiting with non-empty interest sets. A gross inefficiency
in the saving of interest sets on exiting CodeSurfer has been corrected.
New Features
- 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.
- 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.
- 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.
- 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
- 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.
- 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".
- 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.
- 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.
- 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.
- Documentation:
- A discussion on accuracy
has been added to the manual.