[Soot-list] Transforming java library classes
Khilan Gudka
khilan.gudka at imperial.ac.uk
Tue Feb 26 04:29:12 EST 2008
Ah sorry I just realised what the problem is, I'm not synchronizing on
cont before calling wait/notifyAll which is a requirement.
Khilan
On 26/02/2008, Khilan Gudka <khilan.gudka at imperial.ac.uk> wrote:
> 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