Improvements in version 2.1 (Wed, 17 Dec 2003) 1. bug fixes 2. switched from make to ant 3. many improvements to Shimple and Eclipse plugin 4. first release of Java-to-Jimple compiler 5. initial support for context-sensitive call graph and points-to analysis Improvements in version 2.0.1 (Fri, 18 Jun 2003) 1. bug fixes 2. minor improvements and cleanup of Shimple, including: a) Significantly improved constant propagator analysis. 3. ant build file 4. new framework for adding Soot system tests Improvements in version 2.0 (Fri, 6 Jun 2003) 1. a true whole-program mode 2. rewrite of the call graph code to provide more information (particularly about implicit calls) with a cleaner interface 3. first release of Eclipse plugin 4. first release of Shimple (SSA-Jimple) 5. refactoring of tag aggregators to make it easier to introduce new annotations for use by JITs 6. new, better organized option parsing code, accessible to other code (so you can set an option with a method call, rather than having to pass in a command line string) 7. elimination of most global variables; the remaining ones have been isolated so that Soot is restartable, and could be easily modified to allow concurrent Soot sessions on different threads. 8. bug fixes Improvements in version 1.2.5 (Fri, 14 Feb 2003) 1. Spark improvements: a) now supports truly on-the-fly call graph construction, resulting in much smaller call graphs. b) alias edge algorithm tweaked to be faster. c) bug fixes. 2. General bug fixes. 3. Some performance improvements, plugging of memory leaks. 4. Reinstate support for JDK versions 1.2 through 1.4. Improvements in version 1.2.4 (Fri, 22 Nov 2002) 1. main change is the inclusion of development version of Spark: Soot Pointer Analysis Research Kit. Available documentation for Spark includes the Spark poster (http://www.sable.mcgill.ca/publications/#poster-2002-1) and the Spark options (http://www.sable.mcgill.ca/soot/tutorial/phase-options/spark.ps). More detailed documentation in the form of a master's thesis is being written. (olhotak) 2. Soot should now correctly handle classes compiled with 1.4.x versions of javac (olhotak) 3. new FastHierarchy class designed to eventually replace inefficient and confusing Hierarchy class (olhotak) 4. fix for missing control-flow graph edges from predecessors of statements in nested try blocks to some exception handlers (jjorge1) 5. make virtual call resolution respect access modifiers (olhotak) 6. other bug fixes Improvements in version 1.2.3 (Wed, 08 May 2002) 1. fix to SourceLocator for the case where there are no actual paths in the soot classpath. (plam) 2. fix to HashMutableDirectedGraph to remove wayward extra preds and succs edges to a removed node. (fabien) 3. fix for Windows classpaths which contain less than two letters. Formerly, this crashed in charAt(1). (plam, reported by Mary Payne) 4. add an option '-A LineNumber' to keep line number attributes in source class files. (feng) 5. make SootClass.containsBafBody() public (requested by David Airapetyan); avoid creating duplicate names in CommonSubexpressionEliminator (requested by Florian Mateoc). Both changes by plam. 6. added changes by Michael Pan (pan@math.tau.ac.il) which make Soot more parsimonious with respect to memory usage: it may use up to 20% less maximum heap space. Changes were: - sharing of coffi CONSTANT_Utf8_info objects - SootMethod exceptions list created on demand - get[Sub]Signature() storage hack useful for Sun JDK 7. minor changes in HashChain (remove useless null checks, states increments and modified insertBefore(List) ) (fabien) 8. fix to AbstractHost to avoid creation of thousands of empty lists (fabien) 9. added patch by Stephen Andrew Neuendorffer to make DeadAssignmentEliminator more aggressive: we no longer declare InstanceFieldRefs which read from 'this' in a non-static method to be 'isEssential'. (plam) 10. Added some Timer.end() calls to JimpleBody.java and CoffiMethodSource.java, so that the '--time' option no longer causes runtime exceptions. While this lets you specify '--time' without crashing soot, the accuracy of the reported times remains questionable. (jjorge1) 11. Improved Psuedotopological ordering, replaced deprecated code (Vectors and Stacks), fixed line numbering, fixed a minor UnitGraph bug (berndl) 12. Kludged together a bug fix for Alex Warshavsky (walex@il.ibm.com) where use-original-names sometimes produced Jimple Locals with #'s in their names. (plam) 13. Fixed bug reported by Stephen Andrew Neuendorffer where CopyPropagator doesn't quite fail in the expected way when there's a variable used without definition (plam) 14. Added basic XML support in the form of an XMLStmtPrinter. Using the --xml command option will generate an XML version of the class based on the Jimple statements and extended with static program data and transformation/analysis results. (deng) 15. Added entryInitialFlow method in FlowAnalysis, which allows a new analysis just return flow object for entry points. The customizeFlowGraph is still called. Currently it is compatible with old analyses, but new analysis should override entryInitialFlow method rather than customizeFlowGraph. Forward and backward flow analyses are changed respectively. (fqian) 16. Fixed local variable name problem in coffi.LocalVariable.... reported by Nathan Kitchen. See fix 12 also. (fqian) 17. Small improvement in ArraySparseSet and BackwardFlowAnalysis pointed out by Florian Loitsch. (fqian) 18. Added several utility classes for drawing generate graphs. UnitGraph, BlockGraph, and Hierarchy can produce "dot" file for generating postscript files. See soot/util/DotGraph*.java (More function will be added on.) (fqian) 19. Added one flag in soot.Main.java to indicate the compilation for J2ME library which does not have Cloneable and Serializable interfaces. This affects the typing system which handcodes both interfaces. Has not been tested on J2ME. But when the flag is set to false, original function is not affected. Patch provided by Stephen Cheng. (fqian) 20. Fixed some obvious bugs in CFGViewer, added simple options. (fqian) 21. Added a new implementation of PRE by Florian Loitsch, merging was done by Ondrej. The old implementation of PRE was obsoleted. The new implementation to be tested. (fqian) Improvements in version 1.2.2 (Thu Mar 29 11:45:13 EST 2001) 1. added \t case for soot.util.StringTools.getQuotedStringOf. (reported by Thomas VanDrunen) 2. CFG.java is improved to handle nested JSR/RETs 3. improved some exception message reported by Olivier Zendra. 4. The Jasmin package is also updated to 1.06-s10, the bug in grammar for attributes is fixed. 5. replaced 'getNodes().contains()' by 'containsNode()' in "jimple/toolkits/invoke/MethodCallGraph.java", which speeds up the call graph construction significantly (by John Jorgensen.) Improvements in version 1.2.1 (Fri Jan 12 15:22:59 EST 2001) 1. permissions changes and fix to Baf/JasminClass for BooleanType. 2. removal of a UnitGraph hack that shouldn't have been there. 3. internal changes to cmdline parsing, watch for bigger changes coming 4. fix by patrice to work around stupid jar bug 5. minor changes to jar bug workaround 6. fix for grimp precedence 7. improved error messages in the event of missing .dat files. 8. new build system (via the SootCompiler class). Improvements in version 1.2.0 (Thu Sep 28 21:41:16 EDT 2000) 1. An annotation framework is included in this release. 2. A clean implementation of VTA is finally included in Soot. 3. New implementation of typing system included - contains nice integer typing system. 4. HashChain has a fast 'contains' method. (this was announced on the soot mailing list) 5. A branched flow analysis framework is present. - This allows different results to be propagated on different edges of a branch. 6. Implemented an Array Bounds Check and a Null Pointer Check algorithm. The new option '-A' annotates class files with analysis results. - See the new annotation tutorials. 7. Other minor bugs were zapped. (release by Feng Qian) Improvements in version 1.0.1 (not released) 1. Eliminated useless Directed interface. 2. Fixed bug in HashChain where null could wheedle its way into a HashChain. Bad stuff! 3. Added attribute support and null pointer checks / array bounds checks. 4. Added common subexpression elimination. Improvements in Release 1 (version 1.0.0) Some of these changes occurred earlier but are only mentioned now. 1. Changed the version numbering scheme to follow the Linux version numbering scheme. 2. Added warning for unconsumed phase options. 3. Fixed bug with original name recovery. 4. Added documentation. 5. Fixed another aggregation bug where multiple field refs between def, use were not correctly handled. 6. Added static class synchronizer. 7. Changed format of Jimple source again, now removing the dots for keywords. 8. Fixed issue with absolute paths in dos/windows Improvements in 021400 1. Fixed the SootResolver so that it displays the name of the missing classfile before quitting. 2. Merged in partial code for Partial Redundancy Elimination (not working yet). 3. Added more documentation comments. (Thanks patrice!) 4. Added EquivTo interface, made all Jimple Values implement EquivTo, and provided EquivalentValue wrapper objects. Using an EquivalentValue allows Collections to see structurally equal Values as satisfying .equals(). This is not universally useful; for instance, the Units chain should not use EquivalentValues! 5. Added jikes.def and javac.def files. Invoking "jams foo" will copy the .dat files from the src/ directories to the classes/ directories. 6. Patrice added some support for a framework allowing Baf peephole optimizations to be added in a uniform manner. 7. Added soot.PackAdjuster and soot.jimple.StmtPrinter classes. These classes can be overridden by placing custom classes with the same names earlier in the CLASSPATH. This permits external classes to be called by Soot at strategic moments in Soot's execution. Improvements in 1.beta.6 1. A Jimple parser has been added to the Soot framework. Soot can now read both .class files and .jimple files (produced by the "--jimple" option). Parsing .jimple files is faster than reading .class files, and these files can be modified easily in a text editor. 2. Different phases of Sootification can now be passed command-line options. For instance, the static inliner (si) in the whole-jimple optimization pack (wjop) can told that it is to expand code by no more than a factor of 5, by giving the following command-line option: -p wjop.si expansion-factor:5. 3. Some whole-program (excluding library) optimizations are included, namely a static method binder and a static inliner. The inliner is enabled by default when the -W option is given. It can be disabled with the option -p wjop.si disabled:true -p wjop.smb disabled:false. Improvements in 1.beta.5 1. Baf, a streamlined form of bytecode has been added to Soot. This is useful for performing low level bytecode optimizations. We can produce code which is as good as javac now with the option "--final-rep baf". Unfortunately this option creates bytecode which is different than what the Java Virtual Machine is used to and so causes the JVM to crash. For this reason, the option is not enabled by default. 2. Major restructuring of the API has taken place. 3. The entire SpecJVM98 suite can be processed by Soot correctly, as well as numerous other Java programs. 4. Process times are reasonable: a program can be usually put through Soot within 2.5 times the execution time of javac on the original program. Improvements in 1.beta.4 Date: Thu, 18 Mar 1999 01:05:44 -0500 From: Raja Vallee-Rai To: soot-list@sable.mcgill.ca Subject: Soot-1.beta.4 released. Hello soot-list subscribers, A new version of Soot has been released! The notable improvements are: 1. Grimp, an aggregated Jimple has been added to Soot. This is a medium-high level intermediate representation which allows you to manipulate statements as trees instead of 3-address code. This is particularly useful for code generation and decompilation. 2. The code produced by Soot from Jimple code (by first converting it to Grimp code) has been substantially improved. We are now 2 to 3 percent away from the original classfile in performance. (this is without any optimizations performed) 3. A subroutine duplicator has been installed as a temporary solution for the jsr bytecode. This means that there is no concept of the subroutines in the framework and that the classfiles produced by Soot are 'jsrless'. 4. The speed of the transformations has been improved. 5. Numerous bug fixes have been made. See http://www.sable.mcgill.ca/soot for more details. Best regards, Raja Vallee-Rai Sable Research Group Improvements in 1.beta.3 Date: Wed, 27 Jan 1999 21:11:49 -0500 From: Raja Vallee-Rai To: soot-list@sable.mcgill.ca Subject: Soot version 1.beta.3 available. Hello, A new version of Soot has just been released. This version fixes numerous bugs and provides improved performance. You can acquire the new version at http://www.sable.mcgill.ca/software See the release notes at http://www.sable.mcgill.ca/soot/releaseNotes.html for more details. Make sure you download the latest version of SableUtil to benefit from the bug fixes and improvements in that package as well. -------------------------------- For our next version we would like some feedback from our users. Please vote on the feature you would like to see implemented next: A. Fix the handling of the JSR bytecode. B. Improve the efficiency of the bytecode being generated. C. Improve the speed of the bytecode -> Jimple transformation. Only one vote per person, please. :) Best regards, Raja Vallee-Rai Sable Research Group