[Soot-list] Building a context-sensitive call graph by using Paddle.
Eric Bodden
bodden at st.informatik.tu-darmstadt.de
Thu Oct 7 05:18:33 EDT 2010
Hi Samuel.
I recommend using the J9 JVM from IBM. Sun's Hotspot is known to have
such bugs as the one you encountered.
Eric
--
Dr. Eric Bodden
Software Technology Group, Technische Universität Darmstadt, Germany
Tel: +49 6151 16-5478 Fax: +49 6151 16-5410
Mailing Address: S2|02 A209, Hochschulstraße 10, 64289 Darmstadt
On 6 October 2010 23:45, Samuel Son <samuel at cs.utexas.edu> wrote:
> I tired to build a context-sensitive call graph by using Paddle. It
> dies in 10 minutes with the following message.
>
> I could not figure out the reason why Paddle died. I suspected the
> lack of heap space but I set my heap space as 2giga bytes (Maximum
> Amount).
>
> #
> # A fatal error has been detected by the Java Runtime Environment:
> #
> # SIGSEGV (0xb) at pc=0x2fb4df05, pid=21764, tid=3066882960
> #
> # JRE version: 6.0_20-b02
> # Java VM: Java HotSpot(TM) Client VM (16.3-b01 mixed mode linux-x86 )
> # Problematic frame:
> # C [libjeddbuddy.so+0x26f05] bdd_makenode+0x75
>
> Here I attached my source code which is used to generate a call graph
> and a target java class.
>
> public class CGexample {
>
> public static void main(String[] args) {
>
> System.out.println("Let's Start Call graph example.");
>
> Options.v().set_whole_program(true);
> Options.v().set_app(true);
> Options.v().set_time(true);
> Options.v().set_verbose(false);
> Options.v().set_debug(true);
> Options.v().set_debug_resolver(true);
> Options.v().set_allow_phantom_refs(true);
>
> Options.v().set_omit_excepting_unit_edges(true);
> Options.v().set_throw_analysis(1);
> Scene.v().loadBasicClasses();
>
> SootClass cl = Scene.v().loadClassAndSupport("HelloWorldApp");
> cl.setApplicationClass();
>
>
> Scene.v().loadNecessaryClasses();
> String thePhaseName = "cg";
>
> HashMap theOptions = new HashMap();
> theOptions.put("enabled", "true");
> theOptions.put("verbose","true");
> theOptions.put("all-reachable","false");
> theOptions.put("on-fly-cg", "true");
> theOptions.put("set-impl", "double");
> theOptions.put("verbose", "true");
> theOptions.put("implicit-entry", "false");
>
> System.out.println("Setting options...");
> SceneTransformer sctform;
>
> if ( true )
> {
> theOptions.put("q", "auto");
> theOptions.put("order", "32");
> theOptions.put("bdd", "true");
> theOptions.put("backend", "buddy");
> theOptions.put("enabled", "true");
> theOptions.put("verbose","true");
> theOptions.put("context", "1cfa");
> theOptions.put("k", "2");
> theOptions.put("conf", "ofcg");//cha-context");
> theOptions.put("pre-jimplify", "false");
> theOptions.put("set-impl", "double" );
> theOptions.put("double-set-old", "hybrid");
> theOptions.put("double-set-new", "hybrid");
> theOptions.put("propagator", "auto");
>
> PaddleTransformer pt = new PaddleTransformer();
> PaddleOptions paddle_opt = new PaddleOptions(theOptions);
> pt.setup(paddle_opt);
> pt.solve(paddle_opt);
> soot.jimple.paddle.Results.v().makeStandardSootResults();
>
> }
> else
> {
> sctform = CustomCHATransformer.v();
> sctform.transform(thePhaseName, theOptions);
> }
>
>
> System.out.println("Retrieving call graph.....");
>
> CallGraph cg = Scene.v().getCallGraph();
> }
> }
>
>
>
> class HelloWorldApp {
>
> public static void main(String[] args) {
>
> System.out.println("Hello World!"); // Display the string.
> HelloWorldApp pApp = new HelloWorldApp();
> pApp.functionA( 3, 12 );
>
> String strClassName = "HelloWorldApp";
>
> try{
>
> Class c = Class.forName( strClassName );
> java.lang.reflect.Method[] m = c.getDeclaredMethods();
>
> Object arglist[] = new Object[2];
> arglist[0] = new Integer(37);
> arglist[1] = new Integer(47);
>
> for (int i = 0; i < m.length; i++)
> {
> System.out.println( m[i].toString() );
> if( m[i].toString().contains("refCall") )
> m[i].invoke( pApp, arglist);
> }
>
> Class partypes[] = new Class[2];
>
> partypes[0] = Integer.TYPE;
> partypes[1] = Integer.TYPE;
>
> System.out.println( "Final Reflective Call Checking.." );
>
> java.lang.reflect.Method meth = c.getMethod(
> "refCall", partypes );
>
> meth.invoke( pApp, arglist );
>
> }catch( Exception e )
> {
> System.out.println("Sorry, Failed to call
> reflective calls");
> }
>
> }
>
> public int functionA( int a, int b )
> {
> System.out.println("[!] functionA is called..");
>
> int ret = add( 3, 5 );
>
> String strEx = "hello" ;
>
> strEx = strEx + "GOOD BYE";
>
> ret = add( strEx.length(), 6 );
>
> return ret;
> }
>
> public int add( int a, int b )
> {
> return a+b;
> }
>
> public void error()
> {
> System.out.println("Hello: It is time to exit! Srry.");
> System.exit(0);
> }
>
> public int refCall( int a, int b )
> {
> System.out.println("[!] function refCall is called! " );
>
> int ret = functionA( 3, 1 );
>
> System.out.println("Function : Result=> " + ret );
>
> return ret;
> }
> }
> _______________________________________________
> Soot-list mailing list
> Soot-list at sable.mcgill.ca
> http://mailman.cs.mcgill.ca/mailman/listinfo/soot-list
>
More information about the Soot-list
mailing list