Skip to Content.
Sympa Menu

svadev - Re: [svadev] Code for DSNode Equivalence Classes

svadev AT lists.siebelschool.illinois.edu

Subject: Svadev mailing list

List archive

Re: [svadev] Code for DSNode Equivalence Classes


Chronological Thread 
  • From: Tarek Chammah <tchammah AT uwaterloo.ca>
  • To: Arushi Aggarwal <arushi987 AT gmail.com>
  • Cc: svadev AT cs.uiuc.edu
  • Subject: Re: [svadev] Code for DSNode Equivalence Classes
  • Date: Sat, 19 Feb 2011 00:04:10 -0500
  • List-archive: <http://lists.cs.uiuc.edu/pipermail/svadev>
  • List-id: <svadev.cs.uiuc.edu>

Hi Arushi,

buildDSNodeEquivs is actually not my method. It is from the SAFECode
project that John pointed me to. It ensures DSA TD points-to
information is correct interprocedurally by matching up DSNodes
between the callers and callees and placing them into equivalence
classes where everything within an EC is assumed to alias. You
probably have it as part of the code on your local machine. Though I
think its results are suspect due to the repeated DSNode information
within an EC. That is my issue.

Regards,

Tarek


On Fri, Feb 18, 2011 at 11:13 PM, Arushi Aggarwal
<arushi987 AT gmail.com>
wrote:
> Hi,
> I am not sure what your buildDSNodeEquivs method is. If you can tell me that
> I can try
> looking at this.
> Arushi
>
> On Fri, Feb 18, 2011 at 10:10 PM, Tarek Chammah
> <tchammah AT uwaterloo.ca>
> wrote:
>>
>> Hi, this issue is possibly a blocker for me.  I'm utilizing DSA to
>> garner points-to information.  After the top down pass is run and the
>> buildDSNodeEquivs method is executed to place DSNodes between callers
>> and callees into their equivalence classes I get rather strange
>> output.  Using a simple test I dump the nodes in the resulting
>> equivalence classes.  What I get is a pair of distinct nodes in the
>> ECs that contain the same program variable/value location information.
>>  I don't understand why this information is repeated.
>>
>> Eg. I get this, two ECs each containing a pair with repeated
>> information (about G2 and the string constant):
>> Node0x1008870 [shape=record,shape=Mrecord,label="{i32:
>> GR\n@G2
>> + 1
>> EC\n|{<s0>|<s1>|<s2>|<s3>}}"];
>> Node0xff4950 [shape=record,shape=Mrecord,label="{i32:
>> GR\n@G2
>> + 1
>> EC\n|{<s0>|<s1>|<s2>|<s3>}}"];
>>
>> Node0x1008af0 [shape=record,shape=Mrecord,label="{i8 array:
>> GR\n@.str\n|{<s0>}}"];
>> Node0xff4d50 [shape=record,shape=Mrecord,label="{i8 array:
>> GR\n@.str\n|{<s0>}}"];
>>
>> For this sample program:
>> #include <stdio.h>
>>
>> int G1 = 4, G2 = 3;
>> int *XX, *YY;
>>
>> int main() {
>>       XX = &G1;
>>       YY = XX;
>>       YY = &G2;
>>       XX = &G2;
>>       if (*XX>*YY) printf("Not possible!\n");
>>       return 0;
>> }
>>
>>
>> Thanks,
>>
>> Tarek





Archive powered by MHonArc 2.6.16.

Top of Page