[Soot-list] question to PointsToSet

Ondrej Lhotak olhotak at uwaterloo.ca
Fri Feb 18 09:45:52 EST 2011


The dump-html option to cg.spark causes Spark to output the pointer
assignment graph in an HTML browsable form suitable for debugging.
Be warned that this outputs a very large .zip file containing the HTML
(on the order of 1 GB).

If A.p and B.p are indeed different fields, Soot should represent them
with different SootFields, and Spark should treat different SootFields
as distinct. If either of these "shoulds" is not happening, it's a bug.

Ondrej

On Fri, Feb 18, 2011 at 03:13:26PM +0100, Jochen Huck wrote:
> EDIT:
> 
> I wanted to write: class B extends A {...
> Also I have to point out that A.p and B.p are different fields according 
> to my debugger...
> 
> Jochen
> 
> Am 18.02.2011 15:01, schrieb Jochen Huck:
> > Hi,
> >
> > I'm running SPARK with default options (-p cg.spark enable). For a
> > simple array element assignment (temp$1[temp$2] = temp$3) I get a bunch
> > of reaching objects. I would like to reduce these but I don't know where
> > to start. The assigned array<p>  is not local but a field that belongs
> > to a class<B>  that extends another class<A>.<A>  and<B>  both declare
> > a field named<p>. The situation is even more complex...but I don't know
> > if that affects my problem
> >
> > class A {
> >       int[] p;
> > }
> >
> > class B {
> >       int[] p;
> >
> >       foo() {
> >           p[i] = ...
> >       }
> > }
> >
> > The reaching objects for<p>  look like:
> >
> > [Field: ARRAY_ELEMENTS_NODEAllocNode 27 Pair
> > AbstractObject,Any_subtype_of_java.security.PrivilegedActionException in
> > method null,AllocNode 175 newarray (byte)[16] in method
> > <sun.net.util.IPAddressUtil: byte[]
> > textToNumericFormatV6(java.lang.String)>,AllocNode 176 newarray
> > (byte)[4] in method<sun.net.util.IPAddressUtil: byte[]
> > textToNumericFormatV4(java.lang.String)>,AllocNode 191 newarray
> > (byte)[4] in method<sun.net.util.IPAddressUtil: byte[]
> > convertFromIPv4MappedAddress(byte[])>,AllocNode 558 Pair
> > AbstractObject,Any_subtype_of_java.lang.Thread in method null,AllocNode
> > 986 Pair AbstractObject,Any_subtype_of_java.lang.Object in method
> > null,AllocNode 1709 newarray (byte)[$i1] in method
> > <java.util.jar.JarFile: byte[]
> > getBytes(java.util.zip.ZipEntry)>,AllocNode 1872 newarray (byte)[$i0] in
> > method<java.io.ByteArrayOutputStream: byte[] toByteArray()>,AllocNode
> > 1984 newarray (byte)[1] in method
> > <sun.security.util.DerIndefLenConverter: byte[]
> > getLengthBytes(int)>,AllocNode 1985 newarray (byte)[2] in method
> > <sun.security.util.DerIndefLenConverter: byte[]
> > getLengthBytes(int)>,AllocNode 1986 newarray (byte)[3] in method
> > <sun.security.util.DerIndefLenConverter: byte[]
> > getLengthBytes(int)>,AllocNode 1987 newarray (byte)[4] in method
> > <sun.security.util.DerIndefLenConverter: byte[]
> > getLengthBytes(int)>,AllocNode 1988 newarray (byte)[5] in method
> > <sun.security.util.DerIndefLenConverter: byte[]
> > getLengthBytes(int)>,AllocNode 2234 newarray (byte)[l3] in method
> > <sun.security.util.BitArray: void<init>(int,byte[])>,AllocNode 2481
> > newarray (byte)[4] in method<java.net.Inet4Address: byte[]
> > getAddress()>,AllocNode 2486 newarray (byte)[$i0] in method
> > <sun.security.util.BitArray: void<init>(int)>,AllocNode 2878 newarray
> > (byte)[l4] in method<sun.util.calendar.ZoneInfoFile$1: java.lang.Object
> > run()>,AllocNode 3154 Pair
> > AbstractObject,Any_subtype_of_java.lang.ClassLoader in method
> > null,AllocNode 3734 newarray (byte)[temp$2] in method
> > <ij.process.ColorProcessor: ij.process.ImageProcessor
> > filterRGB(int,double,double)>,AllocNode 3735 newarray (byte)[temp$5] in
> > method<ij.process.ColorProcessor: ij.process.ImageProcessor
> > filterRGB(int,double,double)>,AllocNode 3736 newarray (byte)[temp$8] in
> > method<ij.process.ColorProcessor: ij.process.ImageProcessor
> > filterRGB(int,double,double)>,AllocNode 3749 newarray (byte)[temp$1] in
> > method<ij.process.ByteProcessor3: ij.process.ImageProcessor
> > createProcessor(int,int)>,AllocNode 3835 newarray (byte)[temp$6] in
> > method<ij.process.ByteProcessor3: java.lang.Object
> > getPixelsCopy()>,AllocNode 3851 newarray (byte)[temp$1] in method
> > <ij.process.ByteProcessor2: ij.process.ImageProcessor
> > createProcessor(int,int)>,AllocNode 3859 newarray (byte)[temp$6] in
> > method<ij.process.ByteProcessor2: java.lang.Object
> > getPixelsCopy()>,AllocNode 3869 newarray (byte)[temp$1] in method
> > <ij.process.ByteProcessor1: ij.process.ImageProcessor
> > createProcessor(int,int)>,AllocNode 3878 newarray (byte)[temp$6] in
> > method<ij.process.ByteProcessor1: java.lang.Object
> > getPixelsCopy()>,AllocNode 3944 newarray (byte)[l1] in method
> > <sun.security.util.DerInputBuffer: byte[] toByteArray()>,AllocNode 3956
> > newarray (byte)[$i2] in method<sun.security.util.DerValue: byte[]
> > getOctetString()>,AllocNode 3960 newarray (byte)[l1] in method
> > <sun.security.util.DerInputStream: byte[] getOctetString()>,AllocNode
> > 3962 newarray (byte)[$i0] in method<sun.security.util.DerValue: byte[]
> > append(byte[],byte[])>,AllocNode 4286 newarray (byte)[$i0] in method
> > <sun.security.util.BitArray: void<init>(boolean[])>,AllocNode 4912
> > newarray (byte)[4] in method<sun.security.x509.IPAddressName:
> > java.lang.String getName()>,AllocNode 4913 newarray (byte)[4] in method
> > <sun.security.x509.IPAddressName: java.lang.String getName()>,AllocNode
> > 4914 newarray (byte)[16] in method<sun.security.x509.IPAddressName:
> > java.lang.String getName()>,AllocNode 4915 newarray (byte)[16] in method
> > <sun.security.x509.IPAddressName: java.lang.String getName()>,AllocNode
> > 8267 newarray (byte)[$i0] in method<java.awt.geom.GeneralPath: void
> > needRoom(int,int,boolean)>,AllocNode 8268 newarray (byte)[l2] in method
> > <java.awt.geom.GeneralPath: void<init>(int,int,int)>,AllocNode 8542
> > newarray (byte)[temp$0] in method<ij.process.ByteProcessor: void
> > <init>(int,int)>,AllocNode 8672 newarray (byte)[l1] in method
> > <java.awt.image.DataBufferByte: void<init>(int)>,AllocNode 8706
> > newarray (byte)[65536] in method<java.awt.image.ColorModel: byte[]
> > getGray16TosRGB8LUT(java.awt.color.ICC_ColorSpace)>,AllocNode 8713
> > newarray (byte)[65536] in method<java.awt.image.ColorModel: byte[]
> > getLinearGray16ToOtherGray8LUT(java.awt.color.ICC_ColorSpace)>,AllocNode
> > 8715 newarray (byte)[256] in method<java.awt.image.ColorModel: byte[]
> > getGray8TosRGB8LUT(java.awt.color.ICC_ColorSpace)>,AllocNode 8724
> > newarray (byte)[256] in method<java.awt.image.ColorModel: byte[]
> > getLinearRGB8TosRGB8LUT()>,AllocNode 8780 newarray (byte)[l1] in method
> > <java.awt.image.DataBufferByte: void<init>(int,int)>,AllocNode 8971
> > newarray (byte)[temp$9] in method<ij.io.RandomAccessStream: long
> > readUntil(long)>,AllocNode 10806 newarray (byte)[temp$12] in method
> > <ij.process.TypeConverter: ij.process.ByteProcessor
> > convertRGBToByte()>,AllocNode 10813 newarray (byte)[size] in method
> > <ij.process.TypeConverter: ij.process.ByteProcessor
> > convertShortToByte()>,AllocNode 10826 newarray (byte)[temp$7] in method
> > <ij.process.ByteProcessor: void<init>(java.awt.Image)>,AllocNode 10956
> > newarray (byte)[size] in method<ij.CompositeImage: ij.ImageStack
> > getRGBStack(ij.ImagePlus)>,AllocNode 10957 newarray (byte)[size] in
> > method<ij.CompositeImage: ij.ImageStack
> > getRGBStack(ij.ImagePlus)>,AllocNode 10958 newarray (byte)[size] in
> > method<ij.CompositeImage: ij.ImageStack
> > getRGBStack(ij.ImagePlus)>,AllocNode 11468 newarray (byte)[temp$5] in
> > method<ij.gui.Plot: void createImage()>,AllocNode 11475 newarray
> > (byte)[temp$1] in method<ij.process.ByteProcessor:
> > ij.process.ImageProcessor createProcessor(int,int)>,AllocNode 11783
> > newarray (byte)[temp$1] in method<ij.gui.NewImage: ij.ImagePlus
> > createByteImage(java.lang.String,int,int,int,int)>,AllocNode 11786
> > newarray (byte)[temp$35] in method<ij.gui.NewImage: boolean
> > createStack(ij.ImagePlus,ij.process.ImageProcessor,int,int,int)>,AllocNode
> > 11825 newarray (byte)[temp$3] in method<ij.io.ImageReader: byte[]
> > read8bitImage(java.io.InputStream)>,AllocNode 11839 newarray
> > (byte)[temp$9] in method<ij.io.ImageReader: byte[]
> > read1bitImage(java.io.InputStream)>,AllocNode 11874 newarray
> > (byte)[temp$0] in method<ij.io.ImageReader: byte[]
> > readCompressed8bitImage(java.io.InputStream)>,AllocNode 12166 newarray
> > (byte)[size] in method<ij.process.ShortProcessor: byte[]
> > create8BitImage()>,AllocNode 12228 newarray (byte)[$i0] in method
> > <java.awt.image.PixelGrabber: void
> > setPixels(int,int,int,int,java.awt.image.ColorModel,byte[],int,int)>,AllocNode
> > 13166 newarray (byte)[temp$7] in method
> > <ij.plugin.frame.ContrastAdjuster: void
> > plotHistogram(ij.ImagePlus)>,AllocNode 13167 newarray (byte)[temp$8] in
> > method<ij.plugin.frame.ContrastAdjuster: void
> > plotHistogram(ij.ImagePlus)>,AllocNode 13168 newarray (byte)[temp$9] in
> > method<ij.plugin.frame.ContrastAdjuster: void
> > plotHistogram(ij.ImagePlus)>,AllocNode 13466 newarray (byte)[l1] in
> > method<com.sun.imageio.plugins.png.PNGImageReader: void
> > readMetadata()>,AllocNode 13471 newarray (byte)[l9] in method
> > <com.sun.imageio.plugins.png.PNGImageReader: java.util.Iterator
> > getImageTypes(int)>,AllocNode 13472 newarray (byte)[l9] in method
> > <com.sun.imageio.plugins.png.PNGImageReader: java.util.Iterator
> > getImageTypes(int)>,AllocNode 13473 newarray (byte)[l9] in method
> > <com.sun.imageio.plugins.png.PNGImageReader: java.util.Iterator
> > getImageTypes(int)>,AllocNode 13474 newarray (byte)[$i0] in method
> > <com.sun.imageio.plugins.png.PNGImageReader: java.util.Iterator
> > getImageTypes(int)>,AllocNode 13484 newarray (byte)[l5] in method
> > <javax.imageio.ImageTypeSpecifier: void<clinit>()>,AllocNode 13485
> > newarray (byte)[l5] in method<javax.imageio.ImageTypeSpecifier: void
> > <clinit>()>,AllocNode 13486 newarray (byte)[l5] in method
> > <javax.imageio.ImageTypeSpecifier: void<clinit>()>,AllocNode 13487
> > newarray (byte)[l5] in method<javax.imageio.ImageTypeSpecifier: void
> > <clinit>()>,AllocNode 13618 newarray (byte)[l4] in method
> > <com.sun.imageio.plugins.png.PNGImageReader: void
> > parse_PLTE_chunk(int)>,AllocNode 13619 newarray (byte)[l4] in method
> > <com.sun.imageio.plugins.png.PNGImageReader: void
> > parse_PLTE_chunk(int)>,AllocNode 13620 newarray (byte)[l4] in method
> > <com.sun.imageio.plugins.png.PNGImageReader: void
> > parse_PLTE_chunk(int)>,AllocNode 13635 newarray (byte)[l4] in method
> > <com.sun.imageio.plugins.png.PNGImageReader: void
> > parse_tRNS_chunk(int)>,AllocNode 13763 newarray (byte)[8] in method
> > <com.sun.imageio.plugins.gif.GIFImageReader: void
> > readMetadata()>,AllocNode 13764 newarray (byte)[3] in method
> > <com.sun.imageio.plugins.gif.GIFImageReader: void
> > readMetadata()>,AllocNode 13774 newarray (byte)[l7] in method
> > <com.sun.imageio.plugins.gif.GIFImageReader: java.util.Iterator
> > getImageTypes(int)>,AllocNode 13775 newarray (byte)[l7] in method
> > <com.sun.imageio.plugins.gif.GIFImageReader: java.util.Iterator
> > getImageTypes(int)>,AllocNode 13776 newarray (byte)[l7] in method
> > <com.sun.imageio.plugins.gif.GIFImageReader: java.util.Iterator
> > getImageTypes(int)>,AllocNode 13777 newarray (byte)[l7] in method
> > <com.sun.imageio.plugins.gif.GIFImageReader: java.util.Iterator
> > getImageTypes(int)>,AllocNode 13782 newarray (byte)[0] in method
> > <com.sun.imageio.plugins.gif.GIFImageReader: byte[]
> > concatenateBlocks()>,AllocNode 13783 newarray (byte)[$i0] in method
> > <com.sun.imageio.plugins.gif.GIFImageReader: byte[]
> > concatenateBlocks()>,AllocNode 13858 newarray (byte)[$i0] in method
> > <com.sun.imageio.plugins.jpeg.MarkerSegment: void
> > loadData(com.sun.imageio.plugins.jpeg.JPEGBuffer)>,AllocNode 13864
> > newarray (byte)[$i0] in method
> > <com.sun.imageio.plugins.jpeg.JFIFMarkerSegment$ICCMarkerSegment: void
> > <init>(com.sun.imageio.plugins.jpeg.JFIFMarkerSegment,com.s...
> >
> > Is anyone familiar with this stuff?
> >
> > Thanks, Jochen
> > _______________________________________________
> > Soot-list mailing list
> > Soot-list at sable.mcgill.ca
> > http://mailman.cs.mcgill.ca/mailman/listinfo/soot-list
> 
> _______________________________________________
> 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