svf-tools 1.0.804 → 1.0.805
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -129,15 +129,15 @@ $(function() {
|
|
|
129
129
|
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> };</div>
|
|
130
130
|
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> }</div>
|
|
131
131
|
</div><!-- fragment --></div><!-- contents -->
|
|
132
|
-
<div class="ttc" id="aclassSVF_1_1CFBasicBlockGBuilder_html_a43c0cba051306acc6440f60165b835e6"><div class="ttname"><a href="classSVF_1_1CFBasicBlockGBuilder.html#a43c0cba051306acc6440f60165b835e6">SVF::CFBasicBlockGBuilder::initCFBasicBlockGNodes</a></div><div class="ttdeci">void initCFBasicBlockGNodes(ICFG *icfg, Map< const SVFBasicBlock *, std::vector< CFBasicBlockNode * >> &bbToNodes)</div><div class="ttdef"><b>Definition:</b> <a href="CFBasicBlockGBuilder_8cpp_source.html#
|
|
132
|
+
<div class="ttc" id="aclassSVF_1_1CFBasicBlockGBuilder_html_a43c0cba051306acc6440f60165b835e6"><div class="ttname"><a href="classSVF_1_1CFBasicBlockGBuilder.html#a43c0cba051306acc6440f60165b835e6">SVF::CFBasicBlockGBuilder::initCFBasicBlockGNodes</a></div><div class="ttdeci">void initCFBasicBlockGNodes(ICFG *icfg, Map< const SVFBasicBlock *, std::vector< CFBasicBlockNode * >> &bbToNodes)</div><div class="ttdef"><b>Definition:</b> <a href="CFBasicBlockGBuilder_8cpp_source.html#l00040">CFBasicBlockGBuilder.cpp:40</a></div></div>
|
|
133
133
|
<div class="ttc" id="aclassSVF_1_1CFBasicBlockGBuilder_html"><div class="ttname"><a href="classSVF_1_1CFBasicBlockGBuilder.html">SVF::CFBasicBlockGBuilder</a></div><div class="ttdef"><b>Definition:</b> <a href="CFBasicBlockGBuilder_8h_source.html#l00035">CFBasicBlockGBuilder.h:35</a></div></div>
|
|
134
134
|
<div class="ttc" id="anamespaceSVF_html"><div class="ttname"><a href="namespaceSVF.html">SVF</a></div><div class="ttdoc">for isBitcode</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00065">BasicTypes.h:65</a></div></div>
|
|
135
|
-
<div class="ttc" id="aclassSVF_1_1CFBasicBlockGBuilder_html_a2c9f8c120522e31124364f485e873608"><div class="ttname"><a href="classSVF_1_1CFBasicBlockGBuilder.html#a2c9f8c120522e31124364f485e873608">SVF::CFBasicBlockGBuilder::addInterBBEdge</a></div><div class="ttdeci">void addInterBBEdge(ICFG *icfg, Map< const SVFBasicBlock *, std::vector< CFBasicBlockNode * >> &bbToNodes)</div><div class="ttdef"><b>Definition:</b> <a href="CFBasicBlockGBuilder_8cpp_source.html#
|
|
136
|
-
<div class="ttc" id="aclassSVF_1_1CFBasicBlockGBuilder_html_ae6c8497f1cd2e3ca63b899ea11757b31"><div class="ttname"><a href="classSVF_1_1CFBasicBlockGBuilder.html#ae6c8497f1cd2e3ca63b899ea11757b31">SVF::CFBasicBlockGBuilder::addIntraBBEdge</a></div><div class="ttdeci">void addIntraBBEdge(ICFG *icfg, Map< const SVFBasicBlock *, std::vector< CFBasicBlockNode * >> &bbToNodes)</div><div class="ttdef"><b>Definition:</b> <a href="CFBasicBlockGBuilder_8cpp_source.html#
|
|
135
|
+
<div class="ttc" id="aclassSVF_1_1CFBasicBlockGBuilder_html_a2c9f8c120522e31124364f485e873608"><div class="ttname"><a href="classSVF_1_1CFBasicBlockGBuilder.html#a2c9f8c120522e31124364f485e873608">SVF::CFBasicBlockGBuilder::addInterBBEdge</a></div><div class="ttdeci">void addInterBBEdge(ICFG *icfg, Map< const SVFBasicBlock *, std::vector< CFBasicBlockNode * >> &bbToNodes)</div><div class="ttdef"><b>Definition:</b> <a href="CFBasicBlockGBuilder_8cpp_source.html#l00097">CFBasicBlockGBuilder.cpp:97</a></div></div>
|
|
136
|
+
<div class="ttc" id="aclassSVF_1_1CFBasicBlockGBuilder_html_ae6c8497f1cd2e3ca63b899ea11757b31"><div class="ttname"><a href="classSVF_1_1CFBasicBlockGBuilder.html#ae6c8497f1cd2e3ca63b899ea11757b31">SVF::CFBasicBlockGBuilder::addIntraBBEdge</a></div><div class="ttdeci">void addIntraBBEdge(ICFG *icfg, Map< const SVFBasicBlock *, std::vector< CFBasicBlockNode * >> &bbToNodes)</div><div class="ttdef"><b>Definition:</b> <a href="CFBasicBlockGBuilder_8cpp_source.html#l00137">CFBasicBlockGBuilder.cpp:137</a></div></div>
|
|
137
137
|
<div class="ttc" id="aclassSVF_1_1SVFBasicBlock_html"><div class="ttname"><a href="classSVF_1_1SVFBasicBlock.html">SVF::SVFBasicBlock</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00517">SVFValue.h:517</a></div></div>
|
|
138
|
-
<div class="ttc" id="aclassSVF_1_1CFBasicBlockGBuilder_html_a2a72cd05458304eaae145532448cf913"><div class="ttname"><a href="classSVF_1_1CFBasicBlockGBuilder.html#a2a72cd05458304eaae145532448cf913">SVF::CFBasicBlockGBuilder::addInterProceduralEdge</a></div><div class="ttdeci">void addInterProceduralEdge(ICFG *icfg, Map< const SVFBasicBlock *, std::vector< CFBasicBlockNode * >> &bbToNodes)</div><div class="ttdef"><b>Definition:</b> <a href="CFBasicBlockGBuilder_8cpp_source.html#
|
|
138
|
+
<div class="ttc" id="aclassSVF_1_1CFBasicBlockGBuilder_html_a2a72cd05458304eaae145532448cf913"><div class="ttname"><a href="classSVF_1_1CFBasicBlockGBuilder.html#a2a72cd05458304eaae145532448cf913">SVF::CFBasicBlockGBuilder::addInterProceduralEdge</a></div><div class="ttdeci">void addInterProceduralEdge(ICFG *icfg, Map< const SVFBasicBlock *, std::vector< CFBasicBlockNode * >> &bbToNodes)</div><div class="ttdef"><b>Definition:</b> <a href="CFBasicBlockGBuilder_8cpp_source.html#l00168">CFBasicBlockGBuilder.cpp:168</a></div></div>
|
|
139
139
|
<div class="ttc" id="aCFBasicBlockG_8h_html"><div class="ttname"><a href="CFBasicBlockG_8h.html">CFBasicBlockG.h</a></div></div>
|
|
140
|
-
<div class="ttc" id="aclassSVF_1_1CFBasicBlockGBuilder_html_a25f0496187622b156bafc49f34fffeaf"><div class="ttname"><a href="classSVF_1_1CFBasicBlockGBuilder.html#a25f0496187622b156bafc49f34fffeaf">SVF::CFBasicBlockGBuilder::build</a></div><div class="ttdeci">virtual void build(ICFG *icfg)</div><div class="ttdef"><b>Definition:</b> <a href="CFBasicBlockGBuilder_8cpp_source.html#
|
|
140
|
+
<div class="ttc" id="aclassSVF_1_1CFBasicBlockGBuilder_html_a25f0496187622b156bafc49f34fffeaf"><div class="ttname"><a href="classSVF_1_1CFBasicBlockGBuilder.html#a25f0496187622b156bafc49f34fffeaf">SVF::CFBasicBlockGBuilder::build</a></div><div class="ttdeci">virtual void build(ICFG *icfg)</div><div class="ttdef"><b>Definition:</b> <a href="CFBasicBlockGBuilder_8cpp_source.html#l00217">CFBasicBlockGBuilder.cpp:217</a></div></div>
|
|
141
141
|
<div class="ttc" id="aclassSVF_1_1CFBasicBlockGBuilder_html_a61d70fb0d2181df3c90152e9226db947"><div class="ttname"><a href="classSVF_1_1CFBasicBlockGBuilder.html#a61d70fb0d2181df3c90152e9226db947">SVF::CFBasicBlockGBuilder::CFBasicBlockGBuilder</a></div><div class="ttdeci">CFBasicBlockGBuilder()</div><div class="ttdef"><b>Definition:</b> <a href="CFBasicBlockGBuilder_8h_source.html#l00042">CFBasicBlockGBuilder.h:42</a></div></div>
|
|
142
142
|
<div class="ttc" id="aclassSVF_1_1CFBasicBlockGBuilder_html_a879d8affb9b113c9d2d976cdd31b60f1"><div class="ttname"><a href="classSVF_1_1CFBasicBlockGBuilder.html#a879d8affb9b113c9d2d976cdd31b60f1">SVF::CFBasicBlockGBuilder::getCFBasicBlockGraph</a></div><div class="ttdeci">CFBasicBlockGraph * getCFBasicBlockGraph()</div><div class="ttdef"><b>Definition:</b> <a href="CFBasicBlockGBuilder_8h_source.html#l00046">CFBasicBlockGBuilder.h:46</a></div></div>
|
|
143
143
|
<div class="ttc" id="aclassSVF_1_1ICFG_html"><div class="ttname"><a href="classSVF_1_1ICFG.html">SVF::ICFG</a></div><div class="ttdef"><b>Definition:</b> <a href="ICFG_8h_source.html#l00047">ICFG.h:47</a></div></div>
|
|
@@ -168,30 +168,47 @@ Private Attributes</h2></td></tr>
|
|
|
168
168
|
</tr>
|
|
169
169
|
</table>
|
|
170
170
|
</div><div class="memdoc">
|
|
171
|
+
<p>Add inter-BasicBlock edges to the Control Flow Basic Block Graph (CFBasicBlockG) based on the provided Interprocedural Control Flow Graph (<a class="el" href="classSVF_1_1ICFG.html">ICFG</a>).</p>
|
|
172
|
+
<dl class="params"><dt>Parameters</dt><dd>
|
|
173
|
+
<table class="params">
|
|
174
|
+
<tr><td class="paramname">icfg</td><td>The Interprocedural Control Flow Graph (<a class="el" href="classSVF_1_1ICFG.html">ICFG</a>) to extract edges from. </td></tr>
|
|
175
|
+
<tr><td class="paramname">bbToNodes</td><td>A map that associates each <a class="el" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a> with a vector of <a class="el" href="classSVF_1_1CFBasicBlockNode.html">CFBasicBlockNode</a> objects. </td></tr>
|
|
176
|
+
</table>
|
|
177
|
+
</dd>
|
|
178
|
+
</dl>
|
|
171
179
|
|
|
172
|
-
<p class="definition">Definition at line <a class="el" href="CFBasicBlockGBuilder_8cpp_source.html#
|
|
173
|
-
<div class="fragment"><div class="line"><a name="
|
|
174
|
-
<div class="line"><a name="
|
|
175
|
-
<div class="line"><a name="
|
|
176
|
-
<div class="line"><a name="
|
|
177
|
-
<div class="line"><a name="
|
|
178
|
-
<div class="line"><a name="
|
|
179
|
-
<div class="line"><a name="
|
|
180
|
-
<div class="line"><a name="
|
|
181
|
-
<div class="line"><a name="
|
|
182
|
-
<div class="line"><a name="
|
|
183
|
-
<div class="line"><a name="
|
|
184
|
-
<div class="line"><a name="
|
|
185
|
-
<div class="line"><a name="
|
|
186
|
-
<div class="line"><a name="
|
|
187
|
-
<div class="line"><a name="
|
|
188
|
-
<div class="line"><a name="
|
|
189
|
-
<div class="line"><a name="
|
|
190
|
-
<div class="line"><a name="
|
|
191
|
-
<div class="line"><a name="
|
|
192
|
-
<div class="line"><a name="
|
|
193
|
-
<div class="line"><a name="
|
|
194
|
-
<div class="line"><a name="
|
|
180
|
+
<p class="definition">Definition at line <a class="el" href="CFBasicBlockGBuilder_8cpp_source.html#l00097">97</a> of file <a class="el" href="CFBasicBlockGBuilder_8cpp_source.html">CFBasicBlockGBuilder.cpp</a>.</p>
|
|
181
|
+
<div class="fragment"><div class="line"><a name="l00099"></a><span class="lineno"> 99</span> {</div>
|
|
182
|
+
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  <span class="comment">// Connect inter-BB BBNodes</span></div>
|
|
183
|
+
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &node : *icfg)</div>
|
|
184
|
+
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  {</div>
|
|
185
|
+
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &succ : node.second->getOutEdges())</div>
|
|
186
|
+
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  {</div>
|
|
187
|
+
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  <span class="comment">// Check if it's an intraCFGEdge in case of recursive functions</span></div>
|
|
188
|
+
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  <span class="comment">// if recursive functions, node_fun == succ_fun but they are different call context</span></div>
|
|
189
|
+
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  <span class="comment">// edges related to recursive functions would be added in addInterProceduralEdge()</span></div>
|
|
190
|
+
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  <span class="keywordflow">if</span> (succ->isIntraCFGEdge())</div>
|
|
191
|
+
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  {</div>
|
|
192
|
+
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  <span class="keyword">const</span> SVFFunction *node_fun = node.second->getFun();</div>
|
|
193
|
+
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  <span class="keyword">const</span> SVFFunction *succ_fun = succ->getDstNode()->getFun();</div>
|
|
194
|
+
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  <span class="keyword">const</span> SVFBasicBlock *node_bb = node.second->getBB();</div>
|
|
195
|
+
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  <span class="keyword">const</span> SVFBasicBlock *succ_bb = succ->getDstNode()->getBB();</div>
|
|
196
|
+
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  <span class="keywordflow">if</span> (node_fun == succ_fun)</div>
|
|
197
|
+
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  {</div>
|
|
198
|
+
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  <span class="keywordflow">if</span> (node_bb != succ_bb)</div>
|
|
199
|
+
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  {</div>
|
|
200
|
+
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  <span class="comment">// Create a new CFBasicBlockEdge connecting the last node of the source BB</span></div>
|
|
201
|
+
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  <span class="comment">// and the first node of the destination BB</span></div>
|
|
202
|
+
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  CFBasicBlockEdge *pEdge = <span class="keyword">new</span> CFBasicBlockEdge(</div>
|
|
203
|
+
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  bbToNodes[node_bb].back(),</div>
|
|
204
|
+
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  bbToNodes[succ_bb].front(), succ);</div>
|
|
205
|
+
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  <a class="code" href="classSVF_1_1CFBasicBlockGBuilder.html#a4a298a45e54cbaf41cdf44aeea1a63f3">_CFBasicBlockG</a>-><a class="code" href="classSVF_1_1CFBasicBlockGraph.html#acd6a4b291c9aab8abdc466f985975d0d">addCFBBEdge</a>(pEdge);</div>
|
|
206
|
+
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  }</div>
|
|
207
|
+
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  }</div>
|
|
208
|
+
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  }</div>
|
|
209
|
+
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  }</div>
|
|
210
|
+
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  }</div>
|
|
211
|
+
<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> }</div>
|
|
195
212
|
</div><!-- fragment -->
|
|
196
213
|
</div>
|
|
197
214
|
</div>
|
|
@@ -228,49 +245,57 @@ Private Attributes</h2></td></tr>
|
|
|
228
245
|
</tr>
|
|
229
246
|
</table>
|
|
230
247
|
</div><div class="memdoc">
|
|
248
|
+
<p>Add inter-procedural edges between CFBasicBlockNodes based on the provided Interprocedural Control Flow Graph (<a class="el" href="classSVF_1_1ICFG.html">ICFG</a>).</p>
|
|
249
|
+
<dl class="params"><dt>Parameters</dt><dd>
|
|
250
|
+
<table class="params">
|
|
251
|
+
<tr><td class="paramname">icfg</td><td>The Interprocedural Control Flow Graph (<a class="el" href="classSVF_1_1ICFG.html">ICFG</a>) to extract edges from. </td></tr>
|
|
252
|
+
<tr><td class="paramname">bbToNodes</td><td>A map that associates each <a class="el" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a> with a vector of <a class="el" href="classSVF_1_1CFBasicBlockNode.html">CFBasicBlockNode</a> objects. </td></tr>
|
|
253
|
+
</table>
|
|
254
|
+
</dd>
|
|
255
|
+
</dl>
|
|
231
256
|
|
|
232
|
-
<p class="definition">Definition at line <a class="el" href="CFBasicBlockGBuilder_8cpp_source.html#
|
|
233
|
-
<div class="fragment"><div class="line"><a name="
|
|
234
|
-
<div class="line"><a name="
|
|
235
|
-
<div class="line"><a name="
|
|
236
|
-
<div class="line"><a name="
|
|
237
|
-
<div class="line"><a name="
|
|
238
|
-
<div class="line"><a name="
|
|
239
|
-
<div class="line"><a name="
|
|
240
|
-
<div class="line"><a name="
|
|
241
|
-
<div class="line"><a name="
|
|
242
|
-
<div class="line"><a name="
|
|
243
|
-
<div class="line"><a name="
|
|
244
|
-
<div class="line"><a name="
|
|
245
|
-
<div class="line"><a name="
|
|
246
|
-
<div class="line"><a name="
|
|
247
|
-
<div class="line"><a name="
|
|
248
|
-
<div class="line"><a name="
|
|
249
|
-
<div class="line"><a name="
|
|
250
|
-
<div class="line"><a name="
|
|
251
|
-
<div class="line"><a name="
|
|
252
|
-
<div class="line"><a name="
|
|
253
|
-
<div class="line"><a name="
|
|
254
|
-
<div class="line"><a name="
|
|
255
|
-
<div class="line"><a name="
|
|
256
|
-
<div class="line"><a name="
|
|
257
|
-
<div class="line"><a name="
|
|
258
|
-
<div class="line"><a name="
|
|
259
|
-
<div class="line"><a name="
|
|
260
|
-
<div class="line"><a name="
|
|
261
|
-
<div class="line"><a name="
|
|
262
|
-
<div class="line"><a name="
|
|
263
|
-
<div class="line"><a name="
|
|
264
|
-
<div class="line"><a name="
|
|
265
|
-
<div class="line"><a name="
|
|
266
|
-
<div class="line"><a name="
|
|
267
|
-
<div class="line"><a name="
|
|
268
|
-
<div class="line"><a name="
|
|
269
|
-
<div class="line"><a name="
|
|
270
|
-
<div class="line"><a name="
|
|
271
|
-
<div class="line"><a name="
|
|
272
|
-
<div class="line"><a name="
|
|
273
|
-
<div class="line"><a name="
|
|
257
|
+
<p class="definition">Definition at line <a class="el" href="CFBasicBlockGBuilder_8cpp_source.html#l00168">168</a> of file <a class="el" href="CFBasicBlockGBuilder_8cpp_source.html">CFBasicBlockGBuilder.cpp</a>.</p>
|
|
258
|
+
<div class="fragment"><div class="line"><a name="l00170"></a><span class="lineno"> 170</span> {</div>
|
|
259
|
+
<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  <span class="comment">// Connect inter-procedural BBNodes</span></div>
|
|
260
|
+
<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &bbNodes : bbToNodes)</div>
|
|
261
|
+
<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  {</div>
|
|
262
|
+
<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  <span class="keywordflow">for</span> (<a class="code" href="CommandLine_8h.html#a2429346d37bd4c40889bd7c6d319d9da">u32_t</a> i = 0; i < bbNodes.second.size(); ++i)</div>
|
|
263
|
+
<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  {</div>
|
|
264
|
+
<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> CallICFGNode *callICFGNode = SVFUtil::dyn_cast<CallICFGNode>(</div>
|
|
265
|
+
<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  bbNodes.second[i]->getICFGNodes().front()))</div>
|
|
266
|
+
<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  {</div>
|
|
267
|
+
<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &icfgEdge : callICFGNode->getOutEdges())</div>
|
|
268
|
+
<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  {</div>
|
|
269
|
+
<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> CallCFGEdge *callEdge = SVFUtil::dyn_cast<CallCFGEdge>(icfgEdge))</div>
|
|
270
|
+
<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  {</div>
|
|
271
|
+
<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  CFBasicBlockEdge *pEdge = <span class="keyword">new</span> CFBasicBlockEdge(bbNodes.second[i],</div>
|
|
272
|
+
<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  bbToNodes[callEdge->getDstNode()->getBB()].front(),</div>
|
|
273
|
+
<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  callEdge);</div>
|
|
274
|
+
<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  <a class="code" href="classSVF_1_1CFBasicBlockGBuilder.html#a4a298a45e54cbaf41cdf44aeea1a63f3">_CFBasicBlockG</a>-><a class="code" href="classSVF_1_1CFBasicBlockGraph.html#acd6a4b291c9aab8abdc466f985975d0d">addCFBBEdge</a>(pEdge);</div>
|
|
275
|
+
<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  }</div>
|
|
276
|
+
<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  }</div>
|
|
277
|
+
<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  }</div>
|
|
278
|
+
<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> RetICFGNode *retICFGNode = SVFUtil::dyn_cast<RetICFGNode>(</div>
|
|
279
|
+
<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  bbNodes.second[i]->getICFGNodes().front()))</div>
|
|
280
|
+
<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  {</div>
|
|
281
|
+
<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &icfgEdge : retICFGNode->getInEdges())</div>
|
|
282
|
+
<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  {</div>
|
|
283
|
+
<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> RetCFGEdge *retEdge = SVFUtil::dyn_cast<RetCFGEdge>(icfgEdge))</div>
|
|
284
|
+
<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  {</div>
|
|
285
|
+
<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  CFBasicBlockEdge *pEdge = <span class="keyword">new</span> CFBasicBlockEdge(bbToNodes[retEdge->getSrcNode()->getBB()].back(),</div>
|
|
286
|
+
<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  bbNodes.second[i],</div>
|
|
287
|
+
<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  retEdge);</div>
|
|
288
|
+
<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  <a class="code" href="classSVF_1_1CFBasicBlockGBuilder.html#a4a298a45e54cbaf41cdf44aeea1a63f3">_CFBasicBlockG</a>-><a class="code" href="classSVF_1_1CFBasicBlockGraph.html#acd6a4b291c9aab8abdc466f985975d0d">addCFBBEdge</a>(pEdge);</div>
|
|
289
|
+
<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  }</div>
|
|
290
|
+
<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>  }</div>
|
|
291
|
+
<div class="line"><a name="l00203"></a><span class="lineno"> 203</span>  }</div>
|
|
292
|
+
<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>  <span class="keywordflow">else</span></div>
|
|
293
|
+
<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>  {</div>
|
|
294
|
+
<div class="line"><a name="l00206"></a><span class="lineno"> 206</span>  <span class="comment">// Other nodes are intra-procedural</span></div>
|
|
295
|
+
<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  }</div>
|
|
296
|
+
<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  }</div>
|
|
297
|
+
<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  }</div>
|
|
298
|
+
<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> }</div>
|
|
274
299
|
</div><!-- fragment -->
|
|
275
300
|
</div>
|
|
276
301
|
</div>
|
|
@@ -307,29 +332,38 @@ Private Attributes</h2></td></tr>
|
|
|
307
332
|
</tr>
|
|
308
333
|
</table>
|
|
309
334
|
</div><div class="memdoc">
|
|
335
|
+
<p>Add intra-BasicBlock edges to the Control Flow Basic Block Graph (CFBasicBlockG) based on the provided Interprocedural Control Flow Graph (<a class="el" href="classSVF_1_1ICFG.html">ICFG</a>).</p>
|
|
336
|
+
<dl class="params"><dt>Parameters</dt><dd>
|
|
337
|
+
<table class="params">
|
|
338
|
+
<tr><td class="paramname">icfg</td><td>The Interprocedural Control Flow Graph (<a class="el" href="classSVF_1_1ICFG.html">ICFG</a>) to extract edges from. </td></tr>
|
|
339
|
+
<tr><td class="paramname">bbToNodes</td><td>A map that associates each <a class="el" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a> with a vector of <a class="el" href="classSVF_1_1CFBasicBlockNode.html">CFBasicBlockNode</a> objects. </td></tr>
|
|
340
|
+
</table>
|
|
341
|
+
</dd>
|
|
342
|
+
</dl>
|
|
310
343
|
|
|
311
|
-
<p class="definition">Definition at line <a class="el" href="CFBasicBlockGBuilder_8cpp_source.html#
|
|
312
|
-
<div class="fragment"><div class="line"><a name="
|
|
313
|
-
<div class="line"><a name="
|
|
314
|
-
<div class="line"><a name="
|
|
315
|
-
<div class="line"><a name="
|
|
316
|
-
<div class="line"><a name="
|
|
317
|
-
<div class="line"><a name="
|
|
318
|
-
<div class="line"><a name="
|
|
319
|
-
<div class="line"><a name="
|
|
320
|
-
<div class="line"><a name="
|
|
321
|
-
<div class="line"><a name="
|
|
322
|
-
<div class="line"><a name="
|
|
323
|
-
<div class="line"><a name="
|
|
324
|
-
<div class="line"><a name="
|
|
325
|
-
<div class="line"><a name="
|
|
326
|
-
<div class="line"><a name="
|
|
327
|
-
<div class="line"><a name="
|
|
328
|
-
<div class="line"><a name="
|
|
329
|
-
<div class="line"><a name="
|
|
330
|
-
<div class="line"><a name="
|
|
331
|
-
<div class="line"><a name="
|
|
332
|
-
<div class="line"><a name="
|
|
344
|
+
<p class="definition">Definition at line <a class="el" href="CFBasicBlockGBuilder_8cpp_source.html#l00137">137</a> of file <a class="el" href="CFBasicBlockGBuilder_8cpp_source.html">CFBasicBlockGBuilder.cpp</a>.</p>
|
|
345
|
+
<div class="fragment"><div class="line"><a name="l00139"></a><span class="lineno"> 139</span> {</div>
|
|
346
|
+
<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  <span class="comment">// Connect intra-BB BBNodes</span></div>
|
|
347
|
+
<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &bbNodes : bbToNodes)</div>
|
|
348
|
+
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  {</div>
|
|
349
|
+
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  <span class="keywordflow">for</span> (<a class="code" href="CommandLine_8h.html#a2429346d37bd4c40889bd7c6d319d9da">u32_t</a> i = 0; i < bbNodes.second.size() - 1; ++i)</div>
|
|
350
|
+
<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  {</div>
|
|
351
|
+
<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  <span class="comment">// Check if an intraCFGEdge exists between the last node of the source BB and the first node of the destination BB</span></div>
|
|
352
|
+
<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  <span class="keywordflow">if</span> (ICFGEdge *icfgEdge = icfg->getICFGEdge(</div>
|
|
353
|
+
<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  <span class="keyword">const_cast<</span>ICFGNode *<span class="keyword">></span>(bbNodes.second[i]->getICFGNodes().back()),</div>
|
|
354
|
+
<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  <span class="keyword">const_cast<</span>ICFGNode *<span class="keyword">></span>(bbNodes.second[i + 1]->getICFGNodes().front()),</div>
|
|
355
|
+
<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  <a class="code" href="classSVF_1_1ICFGEdge.html#a395c34788e98950bc43e8cb44313e429acb8fba7c61b08ec952f1b65643d7a84b">ICFGEdge::IntraCF</a>))</div>
|
|
356
|
+
<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  {</div>
|
|
357
|
+
<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  CFBasicBlockEdge *pEdge = <span class="keyword">new</span> CFBasicBlockEdge(bbNodes.second[i], bbNodes.second[i + 1], icfgEdge);</div>
|
|
358
|
+
<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  <a class="code" href="classSVF_1_1CFBasicBlockGBuilder.html#a4a298a45e54cbaf41cdf44aeea1a63f3">_CFBasicBlockG</a>-><a class="code" href="classSVF_1_1CFBasicBlockGraph.html#acd6a4b291c9aab8abdc466f985975d0d">addCFBBEdge</a>(pEdge);</div>
|
|
359
|
+
<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  }</div>
|
|
360
|
+
<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  <span class="keywordflow">else</span></div>
|
|
361
|
+
<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  {</div>
|
|
362
|
+
<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  <span class="comment">// No intra-procedural edge found, possibly an external API call</span></div>
|
|
363
|
+
<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  }</div>
|
|
364
|
+
<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  }</div>
|
|
365
|
+
<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  }</div>
|
|
366
|
+
<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> }</div>
|
|
333
367
|
</div><!-- fragment -->
|
|
334
368
|
</div>
|
|
335
369
|
</div>
|
|
@@ -356,17 +390,24 @@ Private Attributes</h2></td></tr>
|
|
|
356
390
|
</tr>
|
|
357
391
|
</table>
|
|
358
392
|
</div><div class="memdoc">
|
|
393
|
+
<p>Build the Control Flow Basic Block Graph (CFBasicBlockG) based on the provided Interprocedural Control Flow Graph (<a class="el" href="classSVF_1_1ICFG.html">ICFG</a>).</p>
|
|
394
|
+
<dl class="params"><dt>Parameters</dt><dd>
|
|
395
|
+
<table class="params">
|
|
396
|
+
<tr><td class="paramname">icfg</td><td>The Interprocedural Control Flow Graph (<a class="el" href="classSVF_1_1ICFG.html">ICFG</a>) to extract control flow information from. </td></tr>
|
|
397
|
+
</table>
|
|
398
|
+
</dd>
|
|
399
|
+
</dl>
|
|
359
400
|
|
|
360
|
-
<p class="definition">Definition at line <a class="el" href="CFBasicBlockGBuilder_8cpp_source.html#
|
|
361
|
-
<div class="fragment"><div class="line"><a name="
|
|
362
|
-
<div class="line"><a name="
|
|
363
|
-
<div class="line"><a name="
|
|
364
|
-
<div class="line"><a name="
|
|
365
|
-
<div class="line"><a name="
|
|
366
|
-
<div class="line"><a name="
|
|
367
|
-
<div class="line"><a name="
|
|
368
|
-
<div class="line"><a name="
|
|
369
|
-
<div class="line"><a name="
|
|
401
|
+
<p class="definition">Definition at line <a class="el" href="CFBasicBlockGBuilder_8cpp_source.html#l00217">217</a> of file <a class="el" href="CFBasicBlockGBuilder_8cpp_source.html">CFBasicBlockGBuilder.cpp</a>.</p>
|
|
402
|
+
<div class="fragment"><div class="line"><a name="l00218"></a><span class="lineno"> 218</span> {</div>
|
|
403
|
+
<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  <a class="code" href="classSVF_1_1CFBasicBlockGBuilder.html#a4a298a45e54cbaf41cdf44aeea1a63f3">_CFBasicBlockG</a> = <span class="keyword">new</span> CFBasicBlockGraph();</div>
|
|
404
|
+
<div class="line"><a name="l00220"></a><span class="lineno"> 220</span>  Map<const SVFBasicBlock *, std::vector<CFBasicBlockNode *>> bbToNodes;</div>
|
|
405
|
+
<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  </div>
|
|
406
|
+
<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  <a class="code" href="classSVF_1_1CFBasicBlockGBuilder.html#a43c0cba051306acc6440f60165b835e6">initCFBasicBlockGNodes</a>(icfg, bbToNodes);</div>
|
|
407
|
+
<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>  <a class="code" href="classSVF_1_1CFBasicBlockGBuilder.html#a2c9f8c120522e31124364f485e873608">addInterBBEdge</a>(icfg, bbToNodes);</div>
|
|
408
|
+
<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>  <a class="code" href="classSVF_1_1CFBasicBlockGBuilder.html#ae6c8497f1cd2e3ca63b899ea11757b31">addIntraBBEdge</a>(icfg, bbToNodes);</div>
|
|
409
|
+
<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>  <a class="code" href="classSVF_1_1CFBasicBlockGBuilder.html#a2a72cd05458304eaae145532448cf913">addInterProceduralEdge</a>(icfg, bbToNodes);</div>
|
|
410
|
+
<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> }</div>
|
|
370
411
|
</div><!-- fragment -->
|
|
371
412
|
</div>
|
|
372
413
|
</div>
|
|
@@ -433,51 +474,63 @@ Private Attributes</h2></td></tr>
|
|
|
433
474
|
</tr>
|
|
434
475
|
</table>
|
|
435
476
|
</div><div class="memdoc">
|
|
477
|
+
<p>Initialize Control Flow Basic Block Graph (CFBasicBlockG) nodes based on the provided Interprocedural Control Flow Graph (<a class="el" href="classSVF_1_1ICFG.html">ICFG</a>).</p>
|
|
478
|
+
<dl class="params"><dt>Parameters</dt><dd>
|
|
479
|
+
<table class="params">
|
|
480
|
+
<tr><td class="paramname">icfg</td><td>The Interprocedural Control Flow Graph (<a class="el" href="classSVF_1_1ICFG.html">ICFG</a>) to initialize from. </td></tr>
|
|
481
|
+
<tr><td class="paramname">bbToNodes</td><td>A map that associates each <a class="el" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a> with a vector of <a class="el" href="classSVF_1_1CFBasicBlockNode.html">CFBasicBlockNode</a> objects. </td></tr>
|
|
482
|
+
</table>
|
|
483
|
+
</dd>
|
|
484
|
+
</dl>
|
|
436
485
|
|
|
437
|
-
<p class="definition">Definition at line <a class="el" href="CFBasicBlockGBuilder_8cpp_source.html#
|
|
438
|
-
<div class="fragment"><div class="line"><a name="
|
|
439
|
-
<div class="line"><a name="
|
|
440
|
-
<div class="line"><a name="
|
|
441
|
-
<div class="line"><a name="
|
|
442
|
-
<div class="line"><a name="
|
|
443
|
-
<div class="line"><a name="
|
|
444
|
-
<div class="line"><a name="
|
|
445
|
-
<div class="line"><a name="
|
|
446
|
-
<div class="line"><a name="
|
|
447
|
-
<div class="line"><a name="
|
|
448
|
-
<div class="line"><a name="
|
|
449
|
-
<div class="line"><a name="
|
|
450
|
-
<div class="line"><a name="
|
|
451
|
-
<div class="line"><a name="
|
|
452
|
-
<div class="line"><a name="
|
|
453
|
-
<div class="line"><a name="
|
|
454
|
-
<div class="line"><a name="
|
|
455
|
-
<div class="line"><a name="
|
|
456
|
-
<div class="line"><a name="
|
|
457
|
-
<div class="line"><a name="
|
|
458
|
-
<div class="line"><a name="
|
|
459
|
-
<div class="line"><a name="
|
|
460
|
-
<div class="line"><a name="
|
|
461
|
-
<div class="line"><a name="
|
|
462
|
-
<div class="line"><a name="
|
|
463
|
-
<div class="line"><a name="
|
|
464
|
-
<div class="line"><a name="
|
|
465
|
-
<div class="line"><a name="
|
|
466
|
-
<div class="line"><a name="
|
|
467
|
-
<div class="line"><a name="
|
|
468
|
-
<div class="line"><a name="
|
|
469
|
-
<div class="line"><a name="
|
|
470
|
-
<div class="line"><a name="
|
|
471
|
-
<div class="line"><a name="
|
|
472
|
-
<div class="line"><a name="
|
|
473
|
-
<div class="line"><a name="
|
|
474
|
-
<div class="line"><a name="
|
|
475
|
-
<div class="line"><a name="
|
|
476
|
-
<div class="line"><a name="
|
|
477
|
-
<div class="line"><a name="
|
|
478
|
-
<div class="line"><a name="
|
|
479
|
-
<div class="line"><a name="
|
|
480
|
-
<div class="line"><a name="
|
|
486
|
+
<p class="definition">Definition at line <a class="el" href="CFBasicBlockGBuilder_8cpp_source.html#l00040">40</a> of file <a class="el" href="CFBasicBlockGBuilder_8cpp_source.html">CFBasicBlockGBuilder.cpp</a>.</p>
|
|
487
|
+
<div class="fragment"><div class="line"><a name="l00042"></a><span class="lineno"> 42</span> {</div>
|
|
488
|
+
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &node : *icfg)</div>
|
|
489
|
+
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  {</div>
|
|
490
|
+
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  CFBasicBlockNode *pNode;</div>
|
|
491
|
+
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> SVFBasicBlock *bb = node.second->getBB())</div>
|
|
492
|
+
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  {</div>
|
|
493
|
+
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> CallICFGNode *callNode = SVFUtil::dyn_cast<CallICFGNode>(node.second))</div>
|
|
494
|
+
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  {</div>
|
|
495
|
+
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  <span class="comment">// Create a new CFBasicBlockNode for the CallICFGNode</span></div>
|
|
496
|
+
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  pNode = <span class="keyword">new</span> CFBasicBlockNode({callNode});</div>
|
|
497
|
+
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  bbToNodes[bb].push_back(pNode);</div>
|
|
498
|
+
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  <a class="code" href="classSVF_1_1CFBasicBlockGBuilder.html#a4a298a45e54cbaf41cdf44aeea1a63f3">_CFBasicBlockG</a>-><a class="code" href="classSVF_1_1CFBasicBlockGraph.html#a4a7a6e00d13b4099c34a3015b4f06a67">addCFBBNode</a>(pNode);</div>
|
|
499
|
+
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  </div>
|
|
500
|
+
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  <span class="comment">// Create a new CFBasicBlockNode for the corresponding RetICFGNode</span></div>
|
|
501
|
+
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  <span class="keyword">auto</span> *retNode = <span class="keyword">new</span> CFBasicBlockNode({callNode->getRetICFGNode()});</div>
|
|
502
|
+
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  bbToNodes[bb].push_back(retNode);</div>
|
|
503
|
+
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <a class="code" href="classSVF_1_1CFBasicBlockGBuilder.html#a4a298a45e54cbaf41cdf44aeea1a63f3">_CFBasicBlockG</a>-><a class="code" href="classSVF_1_1CFBasicBlockGraph.html#a4a7a6e00d13b4099c34a3015b4f06a67">addCFBBNode</a>(retNode);</div>
|
|
504
|
+
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  }</div>
|
|
505
|
+
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!SVFUtil::isa<RetICFGNode>(node.second))</div>
|
|
506
|
+
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  {</div>
|
|
507
|
+
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  <span class="keywordflow">if</span> (bbToNodes.find(bb) == bbToNodes.end())</div>
|
|
508
|
+
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  {</div>
|
|
509
|
+
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  <span class="comment">// Create a new CFBasicBlockNode for the non-CallICFGNode</span></div>
|
|
510
|
+
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  pNode = <span class="keyword">new</span> CFBasicBlockNode({node.second});</div>
|
|
511
|
+
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  bbToNodes[node.second->getBB()] = {pNode};</div>
|
|
512
|
+
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  <a class="code" href="classSVF_1_1CFBasicBlockGBuilder.html#a4a298a45e54cbaf41cdf44aeea1a63f3">_CFBasicBlockG</a>-><a class="code" href="classSVF_1_1CFBasicBlockGraph.html#a4a7a6e00d13b4099c34a3015b4f06a67">addCFBBNode</a>(pNode);</div>
|
|
513
|
+
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  }</div>
|
|
514
|
+
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  <span class="keywordflow">else</span></div>
|
|
515
|
+
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  {</div>
|
|
516
|
+
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  pNode = bbToNodes[node.second->getBB()].back();</div>
|
|
517
|
+
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  <span class="keywordflow">if</span> (!SVFUtil::isa<RetICFGNode>(pNode->getICFGNodes()[0]))</div>
|
|
518
|
+
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  {</div>
|
|
519
|
+
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  <span class="comment">// Add the non-CallICFGNode to the existing CFBasicBlockNode</span></div>
|
|
520
|
+
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  pNode->addNode(node.second);</div>
|
|
521
|
+
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  }</div>
|
|
522
|
+
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  <span class="keywordflow">else</span></div>
|
|
523
|
+
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  {</div>
|
|
524
|
+
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  <span class="comment">// Create a new CFBasicBlockNode for the non-CallICFGNode</span></div>
|
|
525
|
+
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  pNode = <span class="keyword">new</span> CFBasicBlockNode({node.second});</div>
|
|
526
|
+
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  bbToNodes[node.second->getBB()].push_back(pNode);</div>
|
|
527
|
+
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  <a class="code" href="classSVF_1_1CFBasicBlockGBuilder.html#a4a298a45e54cbaf41cdf44aeea1a63f3">_CFBasicBlockG</a>-><a class="code" href="classSVF_1_1CFBasicBlockGraph.html#a4a7a6e00d13b4099c34a3015b4f06a67">addCFBBNode</a>(pNode);</div>
|
|
528
|
+
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  }</div>
|
|
529
|
+
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  }</div>
|
|
530
|
+
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  }</div>
|
|
531
|
+
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  }</div>
|
|
532
|
+
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  }</div>
|
|
533
|
+
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> }</div>
|
|
481
534
|
</div><!-- fragment -->
|
|
482
535
|
</div>
|
|
483
536
|
</div>
|
|
@@ -511,13 +564,13 @@ Private Attributes</h2></td></tr>
|
|
|
511
564
|
<li>/home/runner/work/SVF/SVF/svf/lib/Util/<a class="el" href="CFBasicBlockGBuilder_8cpp_source.html">CFBasicBlockGBuilder.cpp</a></li>
|
|
512
565
|
</ul>
|
|
513
566
|
</div><!-- contents -->
|
|
514
|
-
<div class="ttc" id="aclassSVF_1_1CFBasicBlockGBuilder_html_a43c0cba051306acc6440f60165b835e6"><div class="ttname"><a href="classSVF_1_1CFBasicBlockGBuilder.html#a43c0cba051306acc6440f60165b835e6">SVF::CFBasicBlockGBuilder::initCFBasicBlockGNodes</a></div><div class="ttdeci">void initCFBasicBlockGNodes(ICFG *icfg, Map< const SVFBasicBlock *, std::vector< CFBasicBlockNode * >> &bbToNodes)</div><div class="ttdef"><b>Definition:</b> <a href="CFBasicBlockGBuilder_8cpp_source.html#
|
|
567
|
+
<div class="ttc" id="aclassSVF_1_1CFBasicBlockGBuilder_html_a43c0cba051306acc6440f60165b835e6"><div class="ttname"><a href="classSVF_1_1CFBasicBlockGBuilder.html#a43c0cba051306acc6440f60165b835e6">SVF::CFBasicBlockGBuilder::initCFBasicBlockGNodes</a></div><div class="ttdeci">void initCFBasicBlockGNodes(ICFG *icfg, Map< const SVFBasicBlock *, std::vector< CFBasicBlockNode * >> &bbToNodes)</div><div class="ttdef"><b>Definition:</b> <a href="CFBasicBlockGBuilder_8cpp_source.html#l00040">CFBasicBlockGBuilder.cpp:40</a></div></div>
|
|
515
568
|
<div class="ttc" id="aCommandLine_8h_html_a2429346d37bd4c40889bd7c6d319d9da"><div class="ttname"><a href="CommandLine_8h.html#a2429346d37bd4c40889bd7c6d319d9da">u32_t</a></div><div class="ttdeci">unsigned u32_t</div><div class="ttdef"><b>Definition:</b> <a href="CommandLine_8h_source.html#l00018">CommandLine.h:18</a></div></div>
|
|
516
|
-
<div class="ttc" id="aclassSVF_1_1CFBasicBlockGBuilder_html_a2c9f8c120522e31124364f485e873608"><div class="ttname"><a href="classSVF_1_1CFBasicBlockGBuilder.html#a2c9f8c120522e31124364f485e873608">SVF::CFBasicBlockGBuilder::addInterBBEdge</a></div><div class="ttdeci">void addInterBBEdge(ICFG *icfg, Map< const SVFBasicBlock *, std::vector< CFBasicBlockNode * >> &bbToNodes)</div><div class="ttdef"><b>Definition:</b> <a href="CFBasicBlockGBuilder_8cpp_source.html#
|
|
569
|
+
<div class="ttc" id="aclassSVF_1_1CFBasicBlockGBuilder_html_a2c9f8c120522e31124364f485e873608"><div class="ttname"><a href="classSVF_1_1CFBasicBlockGBuilder.html#a2c9f8c120522e31124364f485e873608">SVF::CFBasicBlockGBuilder::addInterBBEdge</a></div><div class="ttdeci">void addInterBBEdge(ICFG *icfg, Map< const SVFBasicBlock *, std::vector< CFBasicBlockNode * >> &bbToNodes)</div><div class="ttdef"><b>Definition:</b> <a href="CFBasicBlockGBuilder_8cpp_source.html#l00097">CFBasicBlockGBuilder.cpp:97</a></div></div>
|
|
517
570
|
<div class="ttc" id="aclassSVF_1_1CFBasicBlockGraph_html_acd6a4b291c9aab8abdc466f985975d0d"><div class="ttname"><a href="classSVF_1_1CFBasicBlockGraph.html#acd6a4b291c9aab8abdc466f985975d0d">SVF::CFBasicBlockGraph::addCFBBEdge</a></div><div class="ttdeci">bool addCFBBEdge(CFBasicBlockEdge *edge)</div><div class="ttdoc">Add ICFGEdgeWrapper.</div><div class="ttdef"><b>Definition:</b> <a href="CFBasicBlockG_8h_source.html#l00452">CFBasicBlockG.h:452</a></div></div>
|
|
518
571
|
<div class="ttc" id="aclassSVF_1_1CFBasicBlockGraph_html_a4a7a6e00d13b4099c34a3015b4f06a67"><div class="ttname"><a href="classSVF_1_1CFBasicBlockGraph.html#a4a7a6e00d13b4099c34a3015b4f06a67">SVF::CFBasicBlockGraph::addCFBBNode</a></div><div class="ttdeci">virtual void addCFBBNode(CFBasicBlockNode *node)</div><div class="ttdoc">Add a ICFGNodeWrapper.</div><div class="ttdef"><b>Definition:</b> <a href="CFBasicBlockG_8h_source.html#l00462">CFBasicBlockG.h:462</a></div></div>
|
|
519
|
-
<div class="ttc" id="aclassSVF_1_1CFBasicBlockGBuilder_html_ae6c8497f1cd2e3ca63b899ea11757b31"><div class="ttname"><a href="classSVF_1_1CFBasicBlockGBuilder.html#ae6c8497f1cd2e3ca63b899ea11757b31">SVF::CFBasicBlockGBuilder::addIntraBBEdge</a></div><div class="ttdeci">void addIntraBBEdge(ICFG *icfg, Map< const SVFBasicBlock *, std::vector< CFBasicBlockNode * >> &bbToNodes)</div><div class="ttdef"><b>Definition:</b> <a href="CFBasicBlockGBuilder_8cpp_source.html#
|
|
520
|
-
<div class="ttc" id="aclassSVF_1_1CFBasicBlockGBuilder_html_a2a72cd05458304eaae145532448cf913"><div class="ttname"><a href="classSVF_1_1CFBasicBlockGBuilder.html#a2a72cd05458304eaae145532448cf913">SVF::CFBasicBlockGBuilder::addInterProceduralEdge</a></div><div class="ttdeci">void addInterProceduralEdge(ICFG *icfg, Map< const SVFBasicBlock *, std::vector< CFBasicBlockNode * >> &bbToNodes)</div><div class="ttdef"><b>Definition:</b> <a href="CFBasicBlockGBuilder_8cpp_source.html#
|
|
572
|
+
<div class="ttc" id="aclassSVF_1_1CFBasicBlockGBuilder_html_ae6c8497f1cd2e3ca63b899ea11757b31"><div class="ttname"><a href="classSVF_1_1CFBasicBlockGBuilder.html#ae6c8497f1cd2e3ca63b899ea11757b31">SVF::CFBasicBlockGBuilder::addIntraBBEdge</a></div><div class="ttdeci">void addIntraBBEdge(ICFG *icfg, Map< const SVFBasicBlock *, std::vector< CFBasicBlockNode * >> &bbToNodes)</div><div class="ttdef"><b>Definition:</b> <a href="CFBasicBlockGBuilder_8cpp_source.html#l00137">CFBasicBlockGBuilder.cpp:137</a></div></div>
|
|
573
|
+
<div class="ttc" id="aclassSVF_1_1CFBasicBlockGBuilder_html_a2a72cd05458304eaae145532448cf913"><div class="ttname"><a href="classSVF_1_1CFBasicBlockGBuilder.html#a2a72cd05458304eaae145532448cf913">SVF::CFBasicBlockGBuilder::addInterProceduralEdge</a></div><div class="ttdeci">void addInterProceduralEdge(ICFG *icfg, Map< const SVFBasicBlock *, std::vector< CFBasicBlockNode * >> &bbToNodes)</div><div class="ttdef"><b>Definition:</b> <a href="CFBasicBlockGBuilder_8cpp_source.html#l00168">CFBasicBlockGBuilder.cpp:168</a></div></div>
|
|
521
574
|
<div class="ttc" id="aclassSVF_1_1CFBasicBlockGBuilder_html_a4a298a45e54cbaf41cdf44aeea1a63f3"><div class="ttname"><a href="classSVF_1_1CFBasicBlockGBuilder.html#a4a298a45e54cbaf41cdf44aeea1a63f3">SVF::CFBasicBlockGBuilder::_CFBasicBlockG</a></div><div class="ttdeci">CFBasicBlockGraph * _CFBasicBlockG</div><div class="ttdef"><b>Definition:</b> <a href="CFBasicBlockGBuilder_8h_source.html#l00039">CFBasicBlockGBuilder.h:39</a></div></div>
|
|
522
575
|
<div class="ttc" id="aclassSVF_1_1ICFGEdge_html_a395c34788e98950bc43e8cb44313e429acb8fba7c61b08ec952f1b65643d7a84b"><div class="ttname"><a href="classSVF_1_1ICFGEdge.html#a395c34788e98950bc43e8cb44313e429acb8fba7c61b08ec952f1b65643d7a84b">SVF::ICFGEdge::IntraCF</a></div><div class="ttdeci">@ IntraCF</div><div class="ttdef"><b>Definition:</b> <a href="ICFGEdge_8h_source.html#l00055">ICFGEdge.h:55</a></div></div>
|
|
523
576
|
<!-- start footer part -->
|