Skip to content

Commit 40973da

Browse files
committed
removed debug code that was left in type reconstruction
1 parent 8d5733d commit 40973da

File tree

1 file changed

+22
-5
lines changed

1 file changed

+22
-5
lines changed

prd_multidecomp_ida.py

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1441,8 +1441,6 @@ def typedef_resolution(self,structDump):
14411441

14421442
problems=missing_type_defs+list(problems-set(plist)) # let's make sure the original missing types are ordered first
14431443
prev_undefined=None
1444-
print(f"tiny_page in undefined=> {'tiny_page' in undefined}; tiny_page in RESOLVED => {'tiny_page' in RESOLVED}")
1445-
print(f"malloc_t requires : {x_requires['malloc_t']} (uses tiny_page: {uses_x['tiny_page']})")
14461444
while(len(undefined)>0):
14471445
prev_undefined=copy.copy(undefined)
14481446
updated=False
@@ -1525,7 +1523,21 @@ def typedef_resolution(self,structDump):
15251523
return "\n".join(typedefs),recovered_types,needs_stdio
15261524

15271525

1528-
1526+
def aggregate_sets(self,x_init,known,lookup):
1527+
x_=x_init
1528+
union_x=set([ i for y in x_ for i in lookup.get(y,set())-known])|x_
1529+
return union_x
1530+
1531+
def fully_resolve_aggregates(self,x_init,known,lookup):
1532+
changed=True
1533+
x_=copy.copy(x_init)
1534+
while changed:
1535+
x_delta=self.aggregate_sets(x_,known,lookup)
1536+
if x_delta==x_:
1537+
changed=False
1538+
x_=x_|x_delta
1539+
return x_
1540+
15291541

15301542
def rule_one(self,x:str,x_requires:dict,resolved:set):
15311543
valid=None
@@ -1539,15 +1551,20 @@ def rule_one(self,x:str,x_requires:dict,resolved:set):
15391551
def rule_two(self,x,x_requires:dict,uses_x:dict,resolved:set,fnptr_types:list):
15401552
x_reqs=x_requires[x]-resolved
15411553
uses_x_x=uses_x.get(x,set())-resolved
1542-
req_union=set([ x for y in x_reqs for x in x_requires[y]-resolved ])|x_reqs
1543-
uses_union=set([ x for y in x_reqs for x in uses_x.get(y,[])-resolved ])|uses_x_x
1554+
#req_union=set([ x for y in x_reqs for x in x_requires[y]-resolved ])|x_reqs
1555+
req_union=self.aggregate_sets(x_reqs,resolved,x_requires)
1556+
#uses_union=set([ x for y in x_reqs for x in uses_x.get(y,[])-resolved ])|uses_x_x
1557+
uses_union=self.aggregate_sets(x_reqs,resolved,uses_x)|uses_x_x
1558+
#uses_union=self.fully_resolve_aggregates(x_reqs,resolved,uses_x)|uses_x_x
15441559
valid_=None
15451560
print(f"DEBUG: CHECKING RULE 2: {x} is valid [{req_union <= uses_union}] => {req_union} ({uses_union})")
15461561
if req_union <= uses_union:
15471562
valid_=req_union
15481563
if x in fnptr_types:
15491564
valid_.add(x)
15501565
print(f"DEBUG: RULE 2: {x} is valid [{valid_}] => {req_union} ({uses_union})")
1566+
else:
1567+
print(f"DEBUG: RULE 2: {x} failed REQUIRE_UNION:{req_union} is not a subset of USES_UNION:{uses_union}")
15511568
return valid_
15521569

15531570
def process_rules_for_x(self,x:str,x_requires:dict,uses_x:dict,resolved:set,orig_x_requires:dict,fnptr_types:list):

0 commit comments

Comments
 (0)