[Soot-list] Transforming java library classes

Khilan Gudka khilan.gudka at imperial.ac.uk
Mon Feb 25 20:23:11 EST 2008


One slight problem:

I have a class that contains wait and notifyAll (from the Java Grande
benchmark):

          synchronized (...) {
            cont.shared_cont++;

          try {
            if(cont.shared_cont != JGFBarrierBenchAtomic.nthreads) {
                cont.wait();

            } else {
                cont.shared_cont = 0;
                cont.notifyAll();
            }

          }
          catch (InterruptedException e) {}
          }

My analysis duplicates Object.wait (called Object.wait0) so the boot
class loader loads my version of java.lang.Object, except that I get
the following error now when I execute the program:

Exception in thread "Thread-0" java.lang.IllegalMonitorStateException
        at java.lang.Object.notifyAll(Native Method)
        at section1.SimpleBarrierThreadAtomic.run(JGFBarrierBenchAtomic.java)
        at java.lang.Thread.run(Thread.java:619)

Any ideas?

Thanks,
Khilan

On 26/02/2008, Khilan Gudka <khilan.gudka at imperial.ac.uk> wrote:
> Thanks ever so much.
>
>  One final important note for those that try this is to put the
>  modified java files in their own directory because the java boot class
>  loader attempts to load all classes it finds in the boot class path.
>  My final command line:
>
>  java -Xbootclasspath/p:modified/ MyClass
>
>
>  Thanks,
>  Khilan
>
>  On 25/02/2008, Chris Pickett <chris.pickett at mail.mcgill.ca> wrote:
>  > Glad it works.  This time, you can have your cake and eat it:
>  >
>  >  $ java -X
>  >      ...
>  >      -Xbootclasspath/p:<directories and zip/jar files separated by :>
>  >                        prepend in front of bootstrap class path
>  >
>  >  Also, you might like to disassemble things with Soot, just tell it to
>  >  output Jasmin.
>  >
>  >  Cheers,
>  >
>  > Chris
>  >
>  >
>  >  Khilan Gudka wrote:
>  >  > Hi,
>  >  >
>  >  > I re-created rt.jar replacing java.lang.Math with my copy and it
>  >  > works. It would've been nice if it could've pulled the local version
>  >  > before searching in rt.jar but hey, it's working!
>  >  >
>  >  > Khilan
>  >  >
>  >  > On 25/02/2008, Khilan Gudka <khilan.gudka at imperial.ac.uk> wrote:
>  >  >> Hi Chris,
>  >  >>
>  >  >>  Thanks for your reply. I'm disassembling the class files that Soot
>  >  >>  outputs. I executed:
>  >  >>
>  >  >>  javap -c -classpath . java.lang.Math
>  >  >>
>  >  >>  in the sootOutput directory which seems to be showing the original
>  >  >>  java.lang.Math, however if I use jad (http://www.kpdus.com/jad.html)
>  >  >>  then it shows the file generated by Soot with the methods added to it!
>  >  >>
>  >  >>  It appears that for sdk classes, java does not look in locations other
>  >  >>  than rt.jar which seems bizarre. If I prepend . to the classpath then
>  >  >>  it should look for java.lang.Math there first (and hence find the
>  >  >>  updated file) but that doesn't seem to be happening as when I execute
>  >  >>  the program, java complains that it cannot find a method in
>  >  >>  java.lang.Math.
>  >  >>
>  >  >>
>  >  >>  Khilan
>  >  >>
>  >  >>  On 25/02/2008, Chris Pickett <chris.pickett at mail.mcgill.ca> wrote:
>  >  >>  > Hi Khilan,
>  >  >>  >
>  >  >>  >  Sorry for your troubles.  I am pretty sure it is possible to do what you
>  >  >>  >  want to do.  I have done it with GNU Classpath many times, but not with
>  >  >>  >  Sun's or IBM's rt.jar.
>  >  >>  >
>  >  >>  >  How do you know the method hasn't been added?  Are you disassembling the
>  >  >>  >  output from Soot?  It won't get included back in rt.jar unless you put
>  >  >>  >  it there manually.
>  >  >>  >
>  >  >>  >  You could try specifying a -cp flag to Soot with the path to each JDK
>  >  >>  >  .jar file that you need following it.  (We needed jsse.jar, jce.jar, and
>  >  >>  >  rt.jar most recently for a whole-program analysis using Richard's lock
>  >  >>  >  allocator.  I don't remember why, but that's what the script says.)
>  >  >>  >
>  >  >>  >  If that fails, if you attach your full source code and your full command
>  >  >>  >  line and the relevant details of your environment (CLASSPATH, JAVA_HOME,
>  >  >>  >  which VM, etc.), somebody might be able to help you by trying to
>  >  >>  >  reproduce the issue exactly.  Not necessarily me.....
>  >  >>  >
>  >  >>  >
>  >  >>  >  Chris
>  >  >>  >
>  >  >>  >  Khilan Gudka wrote:
>  >  >>  >  > Dear Chris,
>  >  >>  >  >
>  >  >>  >  > Unfortunately that didn't work. This is really weird, as soot is
>  >  >>  >  > clearly adding the methods. Debug output I am generating:
>  >  >>  >  >
>  >  >>  >  > Adding cos96 to java.lang.Math
>  >  >>  >  > Successfully added? true.
>  >  >>  >  >
>  >  >>  >  > The true value is obtained by doing a contains check on the list
>  >  >>  >  > returned by SootClass.getMethods().
>  >  >>  >  >
>  >  >>  >  > Khilan
>  >  >>  >  >
>  >  >>  >  >
>  >  >>  >  >
>  >  >>  >  > On 25/02/2008, Chris Pickett <chris.pickett at mail.mcgill.ca> wrote:
>  >  >>  >  >> Try adding --app.  Does it work?
>  >  >>  >  >>
>  >  >>  >  >>
>  >  >>  >  >>  Khilan Gudka wrote:
>  >  >>  >  >>  > Hi Chris,
>  >  >>  >  >>  >
>  >  >>  >  >>  > Sorry about that. Here is the command line I am using:
>  >  >>  >  >>  >
>  >  >>  >  >>  > -p cg.spark enabled:true -w -f c -include-all MyClass java.lang.Math
>  >  >>  >  >>  >
>  >  >>  >  >>  > and the relevant source code for adding the new method to java.lang.Math is:
>  >  >>  >  >>  >
>  >  >>  >  >>  >         SootMethod mPrime = new SootMethod(mPrimeName,
>  >  >>  >  >>  > m.getParameterTypes(), m.getReturnType(), m.getModifiers(),
>  >  >>  >  >>  > m.getExceptions());
>  >  >>  >  >>  >         SootClass c = m.getDeclaringClass();
>  >  >>  >  >>  >         c.addMethod(mPrime);
>  >  >>  >  >>  >
>  >  >>  >  >>  > Thanks,
>  >  >>  >  >>  > Khilan
>  >  >>  >  >>  >
>  >  >>  >  >>  > On 25/02/2008, Chris Pickett <chris.pickett at mail.mcgill.ca> wrote:
>  >  >>  >  >>  >> Hi Khilan,
>  >  >>  >  >>  >>
>  >  >>  >  >>  >>  It's hard for people to help you if you don't provide enough
>  >  >>  >  >>  >>  information.  (In general, err on the side of providing too much.)
>  >  >>  >  >>  >>
>  >  >>  >  >>  >>  Please post your exact command-line and source code.
>  >  >>  >  >>  >>
>  >  >>  >  >>  >>
>  >  >>  >  >>  >>  Chris
>  >  >>  >  >>  >>
>  >  >>  >  >>  >>
>  >  >>  >  >>  >>  Khilan Gudka wrote:
>  >  >>  >  >>  >>  > Dear Eric,
>  >  >>  >  >>  >>  >
>  >  >>  >  >>  >>  > I tried as per your suggestion but still no luck.
>  >  >>  >  >>  >>  >
>  >  >>  >  >>  >>  > Khilan
>  >  >>  >  >>  >>  >
>  >  >>  >  >>  >>  > On 25/02/2008, Eric Bodden <eric.bodden at mail.mcgill.ca> wrote:
>  >  >>  >  >>  >>  >> Hi, Khilan.
>  >  >>  >  >>  >>  >>
>  >  >>  >  >>  >>  >>  Did you use the -include-all option?
>  >  >>  >  >>  >>  >>
>  >  >>  >  >>  >>  >>  See http://www.sable.mcgill.ca/soot/tutorial/usage/index.html
>  >  >>  >  >>  >>  >>
>  >  >>  >  >>  >>  >>  Eric
>  >  >>  >  >>  >>  >>
>  >  >>  >  >>  >>  >>
>  >  >>  >  >>  >>  >>  On 25/02/2008, Khilan Gudka <khilan.gudka at imperial.ac.uk> wrote:
>  >  >>  >  >>  >>  >>  > Dear All,
>  >  >>  >  >>  >>  >>  >
>  >  >>  >  >>  >>  >>  >  I would like to be able to modify the java sdk library classes by
>  >  >>  >  >>  >>  >>  >  adding methods to them. At present, I pass the java library class to
>  >  >>  >  >>  >>  >>  >  be modified as one of the application classes. Soot generates the
>  >  >>  >  >>  >>  >>  >  class files for these classes but they don't include the methods that
>  >  >>  >  >>  >>  >>  >  I added to them using SootClass.addMethod.
>  >  >>  >  >>  >>  >>  >
>  >  >>  >  >>  >>  >>  >  Is this the right way to go about modifying java sdk classes?
>  >  >>  >  >>  >>  >>  >
>  >  >>  >  >>  >>  >>  >  Thanks,
>  >  >>  >  >>  >>  >>  >  Khilan
>  >  >>  >  >>  >>  >>
>  >  >>  >  >>  >>  >>>  _______________________________________________
>  >  >>  >  >>  >>  >>  >  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
>  >  >>  >  >>  >>  >>
>  >  >>  >  >>  >>  > _______________________________________________
>  >  >>  >  >>  >>  > 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