Paddle: BDD-based context-sensitive interprocedural analysis of Java
Paddle is a context-sensitive points-to analysis and call graph construction
framework for Soot.
Paddle supports several variations of context sensitivity, including the
use of call site strings as the context abstraction, object sensitivity,
and the Zhu/Calman/Whaley/Lam algorithm.
Paddle uses binary decision diagrams (BDDs) to efficiently represent
the context-sensitive analysis facts.
Paddle is written in the
Jedd
language, which is compiled to Java.
Paddle is a component of Soot, rather than a standalone program. Therefore,
Soot is required to use Paddle, and each version of Paddle is intended for
a specific version of Soot. Paddle is distributed separately from Soot
to avoid requiring Jedd to compile Soot.
A detailed description of Paddle appears in Chapter 4 of my
PhD thesis;
more user-oriented instructions are found in Appendix C.
Paddle being a part of Soot, its command-line options are
listed in Soot's built-in help feature (use the command-line
switch -phase-help cg.paddle), and in the
Soot phase options documentation.
In order to run, Paddle requires the Jedd runtime (currently version
0.3). This consists of the jedd-runtime.jar, and the BDD backend library
for the backend that you wish to use. The BuDDy (default) and CUDD backends
are built as .so or .dll files and included in the Jedd distribution.
The JavaBDD library can be obtained from http://javabdd.sourceforge.net/. The SableJBDD library can be obtained from
http://www.sable.mcgill.ca/~fqian/SableJBDD/.
In order to compile, Paddle also requires the Jedd translator, and its
run-time prerequisites, namely Polyglot and a SAT solver. See
the Jedd page
for information on using Jedd.
Paddle is developed within a
publicly readable Subversion repository.
The Subversion trunk of Paddle is intended to be used
with the Subversion trunk of Soot.
I also make nightly builds of Paddle available. The nightly builds are intended to be used with the nightly
builds of Soot provided on the same page.
I am now also tagging explicit releases, which can be downloaded below.
Release 0.3 (July 2008)
Contains bug fixes. Release 0.3 of Paddle is intended for use with version 2.3.0 of Soot.
Release 0.2 (January 2006)
Contains bug fix for abc cflow analysis. Release 0.2 of Paddle is intended for use with version 2.2.3 of Soot.
Release 0.1 (October 2005)
Initial release. Release 0.1 of Paddle is intended for use with version 2.2.2 of Soot.
Paddle is freely available under the
GNU Lesser General Public License.
|