[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