Release 1.1, patchlevel 0 (9/24/99)
Performance
Build Time and Space. The following table shows statistics
on the performance improvements since version 1.0 for three benchmarks.
These measurements were taken on a Pentium II/450 running Linux. All
three benchmarks were built without models for the C or math libraries.
Times are in seconds.
| Benchmark |
#Lines |
#Procedures |
#Vertices |
#Edges |
1.0 Build time |
1.1 Build time |
1.0 Build space |
1.1 Build space |
| compress |
1,937 |
27 |
2,200 |
8,095 |
0.81 |
0.74 |
6.86 Mb |
6.89 Mb |
| Berkeley yacc |
6,627 |
217 |
22,916 |
83,026 |
6.98 |
5.19 |
12.16 Mb |
10.27 Mb |
| go |
29,246 |
384 |
349,387 |
1,938,967 |
302.98 |
94.98 |
117.63 Mb |
55.22 Mb |
New Features
- Displayed Sets.
The previous notions of query-points, query-results, chop-sources, and chop-targets
have been generalized to displayed sets with associated styles.
Commands and menus have been reorganized to reflect the general displayed-sets
concept, e.g., there are now uniform commands to add or remove a selected
point from a displayed set.
- Interest Sets.
Sets of program points can be saved in interest sets, which persist
from run to run.
- Set Calculator.
There is now a "pocket calculator" for sets of program points. The usual
Boolean set operations are supported (e.g., union, intersection, difference,
and symmetric difference). The queries (e.g., slice and chop) are also
supported as set-calculator operations. Possible operands include the
displayed sets, interest sets, and various language-specific operands (e.g.,
the set of all function entry points). Users can easily define new operations
and new kinds of language-specific operands.
- Styles. The presentation
attributes available for displayed sets (e.g., query-results) have been greatly
expanded: foreground color, background color, font, relief, relief borderwidth,
underline, and overstrike.
- External File Formats.
Sets of program points can be exported to the file system. Sets of program
points can be created by importing from various kinds of files (e.g., PureCoverage
export format).
- Statistics.
Performance statistics (time and space) of the builder and the query subsystem
are now collected.
Minor Feature Changes
- GUI:
- Visual Feedback:
- Each phase of the builder is now logged in the status
bar of the project viewer so when one of the phases is time consuming,
you can see what is happening.
- The cursor now changes to a watch during (possibly) time consuming
commands.
- Project Viewer:
- Some entries under the incoming and outgoing variables category used
to be printed as Anonymous non-local variable. These now display
the correct name.
- Show "Calls to " or "Calls to undefined" instead
of "Calls to Indirect call to" in the project viewer.
- Commands, Menus, and Dialog Boxes:
- Commands Add Query Points, Remove Query Points, Add
Chop Sources, Add Chop Targets, Remove Chop Sources,
and Remove Chop Targets have been replaced by Queries/Add
Points, Queries/Remove
Points, and Queries/Remove
Enclosed Points, which treat all displayed sets uniformly.
- Commands Chop
and Truncated
Chop are now on the Queries
menu, and the Chop menu no longer exists.
- The Queries
popup menu now uses popup menu font, not menu-bar font.
- A number of commands that used to create a new dialog box on each invocation
now just raise an existing dialog box if there is one.
- Call Graph has been added to the File menu in the file
viewer.
- Command Display Results Only has been moved from the Queries
menu of file viewers to the Edit menu.
- User Preferences:
- In the General
tab: new preference Properties Confirmation Threshold allows the
user to specify the number of program points automatically put into a
property sheet. Any more than this requires user confirmation.
- In the Call
Graph tab: new preference Confirm Save Before Close.
- In the Build
tab: "Pre-Include Directories" has been moved here from the General
tab and has been split into two fields: a radio button CodeSurfer Pre-Include
Directories, and a text field User Pre-Include Directories.
- Property Sheets:
- Clicking to the right of a selected item de-selects the item.
- Filters:
- A check button has been added for Hide CodeSurfer Initialization
Points. This allows the user to control the visibility of PDGs
generated by CodeSurfer for technical purposes.
- Scheme API:
- General:
The ability to query and choose the internal implementation of sets has
been lifted to scheme. This allows the user to choose a representation
best suited to the application.
- New procedures:
- Changed procedures:
- An optional parameter to pdg-vertex-set-create
allows specification of the internal implementation of the set.
- The return type of each slice
command is now just a PDG_VERTEX_SET.
- Procedure pdg-vertices has been reimplemented so that it is
now an O(1)-time operation, rather than O(size of set^2)
operation.
- The STk source files have been reorganized.
- Sample Projects:
- The information flow example
used in the manual to illustrate the Chop and Truncated Chop operations
has been expanded to illustrate tracking information flow through pointers
references.
Features Removed
- Build option Dependence Graph Granularity has been removed.
- API procedure s-slice-extend has been removed.
Bug fixes
- Compiler Models and Command Line Processing:
- The gcc compiler model has been changed to compute -D and -I
flags more accurately.
- Fixed bug where adding a new file to an unbuilt project would change
the build status to Inconsistent (even though the project remains unbuilt).
- Preprocessor and Parser
- A bug where the presence of a #line directive in a source file could
break the mapping between internal program points and source file positions
has been fixed.
- Bug number #120, where newly introduced enumeration symbols were disallowed
later in the same type definition has been fixed.
- A pair of bugs (#134, #135) where use of a variable of an incompletely
specified struct type would give front end errors have been fixed.
- Builder:
- A bug (#141) in which it was possible to run out of file descriptors
because certain files were not being closed has been fixed.
- A problem where adding a new file to an unbuilt project would change
the build status to Inconsistent (even though the project remains unbuilt)
has been corrected.
- GUI:
- File Viewers:
- Changed the priority of query-results to take precedence over the cpp-display
style.
- Call Graph Viewer:
- A a bug whereby indirect call-sites to undefined functions were not
being listed in edge popups has been fixed.
- A problem involving indirect calls through function pointers with empty
points-to sets has been corrected.
- Bug #127, where dragging a node beyond the edge of the window could
cause a problem with subsequent selections has been corrected.
- A bug (#148) where two or more callgraph windows could cause a crash
has been fixed.
- Bug #117 has been fixed. Call paths between mutually recursive
functions no longer crash CodeSurfer.
- Some keybinding problems were resolved.
- A bug that caused CodeSurfer to always asks you whether you want to
save the callgraph - even if it is already saved has been fixed (bug 126).
- A problem where the add-to-last-callgraph preference was ignored has
been fixed.
- Commands, Menus, Dialog Boxes, and Keybindings:
- Bugs #47 and #163 have been fixed. Iconified windows did not
appear in the Windows menu.
- A bug where the use of function key F10 led to anomalous behavior has
been fixed.
- A bug whereby opening another project retained information on undefined
functions from the original project.
- Log:
- A bug where the message to the log window on Open Project was not written
early enough has been fixed.
- User Preferences:
- Perform project-save just after creating a new project. Perform project-save
before performing a project-reopen from preferences. Fix major bug
in Preferences: was using original Project instance even when user had
switched projects. Fix by deleting Preferences window when a project
is closed.
- Emacs Mode:
- CodeSurfer/Emacs communications have been improved to make them faster
and more robust.
- The Emacs user is notified if communication with CodeSurfer cannot
be initiated.
- Miscellaneous crashing bugs.