Skip to content

Conversation

@clingfei
Copy link

Insert to unordered_set will cause iterator invalidation once rehash occurred.

This will result in fewer PARAMETER_IN edges being generated than actually.

For example,when I use PDG to analyze function ixgbe_intr in ixgbe.ko.ll, the actual addr_var of arg %1 is :

  %205 = getelementptr inbounds i8, i8* %1, i64 5904, !dbg !133988
  %159 = getelementptr inbounds i8, i8* %1, i64 6152, !dbg !133962
  %141 = getelementptr inbounds i8, i8* %1, i64 544, !dbg !133934
  %193 = getelementptr inbounds i8, i8* %1, i64 6160, !dbg !133982
  %3 = bitcast i8* %1 to %struct.ixgbe_adapter*, !dbg !133588
  %4 = getelementptr inbounds i8, i8* %1, i64 4416, !dbg !133589
  %197 = getelementptr inbounds i8, i8* %1, i64 6152, !dbg !133985
  %151 = getelementptr inbounds i8, i8* %1, i64 556, !dbg !133956
  %105 = getelementptr inbounds i8, i8* %1, i64 6152, !dbg !133896
  %6 = getelementptr inbounds i8, i8* %1, i64 2264, !dbg !133590
  %29 = getelementptr inbounds i8, i8* %1, i64 4976, !dbg !133656
  %37 = getelementptr inbounds i8, i8* %1, i64 6176, !dbg !133663
  %172 = getelementptr inbounds i8, i8* %1, i64 6152, !dbg !133971
  %43 = getelementptr inbounds i8, i8* %1, i64 512, !dbg !133663
  %182 = getelementptr inbounds i8, i8* %1, i64 6152, !dbg !133976
  %18 = getelementptr inbounds i8, i8* %1, i64 544, !dbg !133636
  %48 = getelementptr inbounds i8, i8* %1, i64 544, !dbg !133668
  %89 = getelementptr inbounds i8, i8* %1, i64 8040, !dbg !133858
  %99 = getelementptr inbounds i8, i8* %1, i64 552, !dbg !133892
  %113 = getelementptr inbounds i8, i8* %1, i64 6176, !dbg !133899
  %119 = getelementptr inbounds i8, i8* %1, i64 512, !dbg !133899

while only following inst nodes is connected by PARAMETER_IN edge with root_node due to incorrect traversal and insertion, which will cause data-flow incomplete in latter analysis:

 %205 = getelementptr inbounds i8, i8* %1, i64 5904, !dbg !133988
  %159 = getelementptr inbounds i8, i8* %1, i64 6152, !dbg !133962
  %141 = getelementptr inbounds i8, i8* %1, i64 544, !dbg !133934
  %193 = getelementptr inbounds i8, i8* %1, i64 6160, !dbg !133982
  %3 = bitcast i8* %1 to %struct.ixgbe_adapter*, !dbg !133588
  %4 = getelementptr inbounds i8, i8* %1, i64 4416, !dbg !133589
  %197 = getelementptr inbounds i8, i8* %1, i64 6152, !dbg !133985
  %151 = getelementptr inbounds i8, i8* %1, i64 556, !dbg !133956
  %105 = getelementptr inbounds i8, i8* %1, i64 6152, !dbg !133896
  %152 = bitcast i8* %151 to i32*, !dbg !133956
  %160 = bitcast i8* %159 to i32**, !dbg !133962
  %6 = getelementptr inbounds i8, i8* %1, i64 2264, !dbg !133590
  %142 = bitcast i8* %141 to i64*, !dbg !133934
  %9 = bitcast i8* %4 to i8**, !dbg !133603 

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant