[Soot-list] ExceptionalGraph no longer handles Block graphs (was
How to specify the type of control flow graph?)
Eric Bodden
eric.bodden at mail.mcgill.ca
Mon May 5 23:18:44 EDT 2008
Hi John.
This may well have been a mistake. The "genericizing" happened mostly
using the automated support built into Eclipse but in some classes I
assisted by hand and it might well be the case that I have made some
too restrictive assumptions about that class. I will look into the
code tomorrow and let you know.
Eric
2008/5/5 John Jorgensen <jorgnsn at lcd.uregina.ca>:
> >>>>> "cbqios" == bq chan <cbqios at gmail.com> writes:
>
> cbqios> I wonder that if we can specify the type of
> cbqios> control flow graph to be dumped. I can just get dot
> cbqios> files of jimple unitgraphs, but what I really want is
> cbqios> those jimple blockgraphs.
>
> I was going to suggest trying "java soot.util.CFGViewer --help"
> (with the classpath that you use to run Soot) to see if that will
> do what you want. CFGViewer allows you to specify the type of
> graph and the intermediate representation, but I don't remember
> what analyses and transformations are performed on the analyzed
> code before its CFG is produced. ("soot --dump-cfg" on the other
> hand, was intended as a debugging tool for soot itself, so it
> only dumps visualizations of CFGs that Soot produces for itself
> anyway; "--dump-cfg ALL" reveals that very few analyses generate
> block graphs, and those few seem to be baf, rather than jimple,
> graphs).
>
> But ... I've just discovered that CFGViewer's ability to produce
> visualizations of ExceptionalBlockGraphs has been broken by
> revision 2852 to
> soot/trunk/src/soot/util/cfgcmd/CFGToDotGraph.java, with the
> result that my attempt just now to run
>
> CFGViewer --graph=ExceptionalBlockGraph --ir=jimple CFGEg
>
> died with
>
> Exception in thread "main" java.lang.ClassCastException:
> soot.toolkits.graph.Block cannot be cast to soot.Unit
> at
> soot.util.cfgcmd.CFGToDotGraph.drawCFG(CFGToDotGraph.java:345)
>
> The proximate cause of the failure is that an iterator over the
> graph's nodes has been changed from an Iterator over Objects to
> an Iterator<Unit>, but that is part of a larger change which
> involved tighening the types returned by ExceptionalGraph's
> methods.
>
> Eric, from the svn logs it looks like these changes were part of
> your "genericizing" the dataflow analysis, but it's not clear
> whether you didn't realize that the ExceptionalGraph classes were
> intended to provide an interface to Block graphs as well as Unit
> graphs, or if you decided that there were benefits to restricting
> the interface to Unit graphs which justified sacrificing the
> ability to access Block graphs through the ExceptionalGraph
> interface.
>
> I'll let somebody explain the intent of the changes before I suggest
> reverting them :-). I suppose the Right Thing would be to create
> some sort of GraphNode interface that both Unit and Block could
> implement, but my knowledge of soot is far too rusty to judge how
> feasible such a solution is.
>
> --
> John Jorgensen LCD System Administrator jorgnsn at lcd.uregina.ca
> 306.337.2344
>
> _______________________________________________
> Soot-list mailing list
> Soot-list at sable.mcgill.ca
> http://mailman.cs.mcgill.ca/mailman/listinfo/soot-list
>
--
Eric Bodden
Sable Research Group
McGill University, Montréal, Canada
More information about the Soot-list
mailing list