Static Value-Flow Analysis
Loading...
Searching...
No Matches
CFLAlias.h
Go to the documentation of this file.
1//===----- CFLAlias.h -- CFL Alias Analysis Client--------------//
2//
3// SVF: Static Value-Flow Analysis
4//
5// Copyright (C) <2013-> <Yulei Sui>
6//
7
8// This program is free software: you can redistribute it and/or modify
9// it under the terms of the GNU Affero General Public License as published by
10// the Free Software Foundation, either version 3 of the License, or
11// (at your option) any later version.
12
13// This program is distributed in the hope that it will be useful,
14// but WITHOUT ANY WARRANTY; without even the implied warranty of
15// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16// GNU Affero General Public License for more details.
17
18// You should have received a copy of the GNU Affero General Public License
19// along with this program. If not, see <http://www.gnu.org/licenses/>.
20//
21//===----------------------------------------------------------------------===//
22
23/*
24 * CFLAlias.h
25 *
26 * Created on: March 5, 2022
27 * Author: Yulei Sui
28 */
29
30#ifndef INCLUDE_CFL_CFLALIAS_H_
31#define INCLUDE_CFL_CFLALIAS_H_
32
33#include "CFL/CFLBase.h"
34#include "CFL/CFLStat.h"
35
36namespace SVF
37{
38
39class CFLStat;
40
41class CFLAlias : public CFLBase
42{
43
44public:
46
50
52 virtual void initialize();
53
55 virtual void initializeSolver();
56
57
59 virtual void finalize();
60
62 virtual void solve();
63
65 virtual AliasResult alias(const SVFValue* v1, const SVFValue* v2)
66 {
69 return alias(n1,n2);
70 }
71
80
82 virtual const PointsTo& getCFLPts(NodeID ptr)
83 {
86 for(auto outedge = funNode->getOutEdges().begin(); outedge!=funNode->getOutEdges().end(); outedge++)
87 {
88 if((*outedge)->getEdgeKind() == graph->getStartKind())
89 {
90 // Need to Find dst addr src
91 SVFVar *vNode = svfir->getGNode((*outedge)->getDstID());
93 // Remove svfir->getBaseValVar, SVF IR api change
94 if (vNode->hasIncomingEdges(SVFStmt::Gep))
95 {
97 SVFVar::iterator it = geps.begin();
98 basevNodeID = (*it)->getSrcID();
99 }
100 else
101 basevNodeID = vNode->getId();
103 for(auto inEdge = vNode->getInEdges().begin(); inEdge!=vNode->getInEdges().end(); inEdge++)
104 {
105 if((*inEdge)->getEdgeKind() == 0)
106 {
107 addPts(ptr, (*inEdge)->getSrcID());
108 }
109 }
110 }
111 }
112 return getPts(ptr);
113 }
114
116
118 virtual inline bool addCopyEdge(NodeID src, NodeID dst)
119 {
120 const CFLEdge *edge = graph->hasEdge(graph->getGNode(src),graph->getGNode(dst), 1);
121 if (edge != nullptr )
122 {
123 return false;
124 }
125 CFGrammar::Kind copyKind = grammar->strToKind("copy");
129 return true;
130 }
131
134 {
136 abort(); // to be implemented
137 }
138
140 virtual bool updateCallGraph(const CallSiteToFunPtrMap& callsites);
141
144
147
149
150private:
152};
153
154class POCRAlias : public CFLAlias
155{
156public:
158 {
159 }
161 virtual void initializeSolver();
162};
163
164class POCRHybrid : public CFLAlias
165{
166public:
168 {
169 }
170
172 virtual void initializeSolver();
173};
174} // End namespace SVF
175
176#endif /* INCLUDE_CFL_CFLALIAS_H_*/
#define F(f)
const PointsTo & getPts(NodeID id) override
virtual bool addPts(NodeID id, NodeID ptd)
virtual const NodeSet & getRevPts(NodeID nodeId)
Given an object, get all the nodes having whose pointsto contains the object.
Definition CFLAlias.h:133
virtual void finalize()
Print grammar and graph.
Definition CFLAlias.cpp:213
virtual bool addCopyEdge(NodeID src, NodeID dst)
Need Original one for virtual table.
Definition CFLAlias.h:118
virtual void onTheFlyCallGraphSolve(const CallSiteToFunPtrMap &callsites, CallEdgeMap &newEdges)
On the fly call graph construction.
Definition CFLAlias.cpp:39
virtual void initializeSolver()
Initialize Solver.
Definition CFLAlias.cpp:208
OrderedMap< const CallICFGNode *, NodeID > CallSite2DummyValPN
Definition CFLAlias.h:45
void connectCaller2CalleeParams(const CallICFGNode *cs, const SVFFunction *F)
Connect formal and actual parameters for indirect callsites.
Definition CFLAlias.cpp:62
void heapAllocatorViaIndCall(const CallICFGNode *cs)
Definition CFLAlias.cpp:145
virtual void solve()
Solving CFL Reachability.
Definition CFLAlias.cpp:228
virtual const PointsTo & getCFLPts(NodeID ptr)
Get points-to targets of a pointer. V In this context.
Definition CFLAlias.h:82
virtual bool updateCallGraph(const CallSiteToFunPtrMap &callsites)
Update call graph for the input indirect callsites.
Definition CFLAlias.cpp:173
CFLAlias(SVFIR *ir)
Definition CFLAlias.h:47
virtual AliasResult alias(const SVFValue *v1, const SVFValue *v2)
Interface exposed to users of our Alias analysis, given Value infos.
Definition CFLAlias.h:65
CallSite2DummyValPN callsite2DummyValPN
Map an instruction to a dummy obj which created at an indirect callsite, which invokes a heap allocat...
Definition CFLAlias.h:151
virtual void initialize()
Initialize the grammar, graph, solver.
Definition CFLAlias.cpp:188
virtual AliasResult alias(NodeID node1, NodeID node2)
Interface exposed to users of our Alias analysis, given PAGNodeID.
Definition CFLAlias.h:73
CFL Client Base Class.
Definition CFLBase.h:50
CFLSolver * solver
Definition CFLBase.h:113
CFLGraph * graph
Definition CFLBase.h:110
CFGrammar * grammar
Definition CFLBase.h:112
SVFIR * svfir
Definition CFLBase.h:109
Kind getStartKind() const
Definition CFLGraph.cpp:37
virtual const CFLEdge * addCFLEdge(CFLNode *src, CFLNode *dst, CFLEdge::GEdgeFlag label)
Definition CFLGraph.cpp:47
virtual const CFLEdge * hasEdge(CFLNode *src, CFLNode *dst, CFLEdge::GEdgeFlag label)
Definition CFLGraph.cpp:63
virtual bool pushIntoWorklist(const CFLEdge *item)
Definition CFLSolver.h:84
NodeType * getGNode(NodeID id) const
Get a node.
GEdgeSetTy::iterator iterator
Kind strToKind(std::string str) const
Definition CFGrammar.cpp:55
NodeID getValueNode(const SVFValue *V)
Definition IRGraph.h:137
POCRAlias(SVFIR *ir)
Definition CFLAlias.h:157
virtual void initializeSolver()
Initialize POCR Solver.
Definition CFLAlias.cpp:247
virtual void initializeSolver()
Initialize POCRHybrid Solver.
Definition CFLAlias.cpp:252
POCRHybrid(SVFIR *ir)
Definition CFLAlias.h:167
@ CFLFICI_WPA
Flow-, context-, insensitive CFL-reachability-based analysis.
OrderedMap< const CallICFGNode *, FunctionSet > CallEdgeMap
SVFIR::CallSiteToFunPtrMap CallSiteToFunPtrMap
GenericNode< SVFVar, SVFStmt >::GEdgeSetTy SVFStmtSetTy
SVFStmt::SVFStmtSetTy & getIncomingEdges(SVFStmt::PEDGEK kind)
Get incoming SVFIR statements (edges)
for isBitcode
Definition BasicTypes.h:68
Set< NodeID > NodeSet
u32_t NodeID
Definition GeneralType.h:55
AliasResult
Definition SVFType.h:527
@ MayAlias
Definition SVFType.h:529
@ NoAlias
Definition SVFType.h:528
llvm::IRBuilder IRBuilder
Definition BasicTypes.h:74