Soot Home
Introduction
Release Status
Soot Bug Tracking
Improvements
Download
Compilation
Documentation
Mailing List
Credits
Sable Home
|
Soot: a Java Optimization Framework
Latest version: 1.2.4 (Nov 22, 2002)
Need help using Soot? See the Soot tutorials.
Soot is a Java optimization framework. It provides three intermediate
representations for analyzing and transforming Java bytecode:
- Baf: a streamlined representation of bytecode which is simple to
manipulate.
- Jimple: a typed 3-address intermediate representation suitable for
optimization.
- Grimp: an aggregated version of Jimple suitable for decompilation and
code inspection.
Soot can be used as a stand alone tool to optimize or inspect class files, as well
as a framework to develop optimizations or transformations on Java
bytecode.
Soot is free software and is licensed under the GNU Lesser General Public
License.
The Soot Framework is an evolving research project. Our goal is to produce a
robust, easy-to-use research framework for optimizing Java bytecode.
The latest release is version 1.2.4. The main change is the
inclusion of development version of Spark: Soot Pointer Analysis
Research Kit. Available documentation for Spark includes the
Spark
poster
and the
Spark options
, as well as a
technical report
.
More detailed documentation in the form of a master's thesis is being
written.
Soot should now also properly handle code compiled with 1.4.x version
of javac.
A few bugs were also fixed.
We plan the following releases for the near future:
- The Dava decompiler is planned to have separate releases.
Improvements in version 1.2.4 |
top |
Major improvements in version 1.2.4 are:
- Inclusion of development version of Spark: Soot Pointer
Analysis Research Kit.
- Soot should now support classes compiled with 1.4.x versions of javac.
- Bug fixes.
A complete list of changes is in the CHANGES file.
Major improvements in version 1.2.3 |
Major improvements in version 1.2.3 are:
- Improvements of memory usage reported by Michael Pan (pan@math.tau.ac.il).
- Re-implementation of partial redundency elimination by Florian Loitsch (florian@loitsch.net).
- Some utility classes helping SOOT produce Dot graphs.
- An option (-A LineNumber) to preserve line number tables.
Jasmin sable-1.2 allows the length of a token more than 64K.
A complete list of changes is in the CHANGES file.
Major improvements in version 1.2.2 |
Release 1.2.2 improves the JSR eliminator to handle nested JSR/RETs,
and corrects a misused method call in the method for building call graphs.
Jasmin 1.06-s10 fixes a bug in the grammar.
Major improvements in version 1.2.1 |
Release 1.2.1 fixes the jar bug in older versions. Now Soot can accept `rt.jar' in the --soot-class-path
command-line option.
Major improvements in version 1.2.0 |
This is a subset of changes in version 1.2.0; a more complete listing is in the CHANGES file.
- An annotation framework has been added to the project.
- A new implementation of the typing system is included.
- A clean implementation of VTA is finally included in Soot.
Improvements in version 1.0.0 |
top |
This is a subset of the changes in version 1.0.0; a more complete listing is in the CHANGES file.
- Fixed bug with original name recovery.
- Added documentation (see some tutorials.
- Added static class synchronizer.
Download and Installation |
top |
Get Soot from our software repository at http://www.sable.mcgill.ca/software.
To install it you must unjar(untar) it, and add the classes directories
soot-1.2.4/soot/classes and
soot-1.2.4/jasmin/classes to your CLASSPATH.
To test your installation of Soot, try:
java soot.Main
for some options on processing classfiles. They are documented in more detail in the
usage document.
Note that Soot requires at least JDK 1.2 (Java 2), as it uses Java Collections.
Soot is already compiled in the distribution. To recompile Soot, we
use make using the Makefile in the main
soot directory. The second choice is to use the
SootCompiler class in the main soot/src directory.
Note that in either case, jasmin must be in your classpath
to compile Soot. Jasmin can be recompiled by using the script ./bin/compile_all.sh
in the main Jasmin directory (you may need to type sh ./bin/compile_all.sh).
Release 1.2.3 uses a new version of Jasmin, sable-1.2.
NOTE: The Jimple parser is generated by SableCC.
It requires lexer.dat and parser.dat files to be in the classes directory;
they are provided in the src directory. Also, Soot uses peephole optimization to improve the
generated bytecode. This requires that the peephole.dat file be copied to
the classes directory. Both the provided Makefile and SootCompiler
automatically copy these files as needed.
We have developed a number of documents describing Soot. Your main
current sources of information are:
- Our publication page
has several conference papers describing Soot.
- A set of tutorials describing Soot, both as a Java application optimizer and
as a compiler framework.
- The Soot API. Most of the
functionality is self-explanatory. This API is included in the Soot
distribution.
- The Soot source itself. It is full of examples on how to use the API.
- The Soot mailing list. You can browse the archive as well as
posting new questions to the Soot user community.
The mailing list
soot-list@sable.mcgill.ca
is the primary forum
for questions, discussions and comments on the Soot framework.
To subscribe, send an e-mail to
majordomo@sable.mcgill.ca with
subscribe soot-list
in the body.
To unsubscribe, send an e-mail to majordomo@sable.mcgill.ca with
unsubscribe soot-list
in the body.
You can also view the mailing list archive.
The official Soot maintainers are
Patrick Lam,
Feng Qian, and
Ondrej Lhotak. For Soot support, write to the Soot mailing list at
soot-list@sable.mcgill.ca.
Click here for the complete list of contributors and acknowledgements.
Last updated on Nov 22, 2002
|