svf-tools 1.0.622 → 1.0.623

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.
@@ -99,7 +99,7 @@ Private Attributes</h2></td></tr>
99
99
  </table>
100
100
  <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
101
101
  <div class="textblock">
102
- <p class="definition">Definition at line <a class="el" href="ExtAPI_8h_source.html#l00202">202</a> of file <a class="el" href="ExtAPI_8h_source.html">ExtAPI.h</a>.</p>
102
+ <p class="definition">Definition at line <a class="el" href="ExtAPI_8h_source.html#l00227">227</a> of file <a class="el" href="ExtAPI_8h_source.html">ExtAPI.h</a>.</p>
103
103
  </div><h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
104
104
  <a id="a453f37464f5c6261e22e845948f36c94"></a>
105
105
  <h2 class="memtitle"><span class="permalink"><a href="#a453f37464f5c6261e22e845948f36c94">&#9670;&nbsp;</a></span>Operation() <span class="overload">[1/2]</span></h2>
@@ -124,8 +124,8 @@ Private Attributes</h2></td></tr>
124
124
  </table>
125
125
  </div><div class="memdoc">
126
126
 
127
- <p class="definition">Definition at line <a class="el" href="ExtAPI_8h_source.html#l00205">205</a> of file <a class="el" href="ExtAPI_8h_source.html">ExtAPI.h</a>.</p>
128
- <div class="fragment"><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160;{};</div></div><!-- fragment -->
127
+ <p class="definition">Definition at line <a class="el" href="ExtAPI_8h_source.html#l00230">230</a> of file <a class="el" href="ExtAPI_8h_source.html">ExtAPI.h</a>.</p>
128
+ <div class="fragment"><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160;{};</div></div><!-- fragment -->
129
129
  </div>
130
130
  </div>
131
131
  <a id="a6fe4cc69b9181548940cbc67f7b6b315"></a>
@@ -162,9 +162,9 @@ Private Attributes</h2></td></tr>
162
162
  </table>
163
163
  </div><div class="memdoc">
164
164
 
165
- <p class="definition">Definition at line <a class="el" href="ExtAPI_8h_source.html#l00207">207</a> of file <a class="el" href="ExtAPI_8h_source.html">ExtAPI.h</a>.</p>
166
- <div class="fragment"><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160;: <a class="code" href="classSVF_1_1ExtAPI_1_1Operation.html#a1e8979a53cf1edb5df00a5f28b6c19e9">op</a>(opn), <a class="code" href="classSVF_1_1ExtAPI_1_1Operation.html#a56d03123021f1f628361a4080fa573ce">operandStr</a>(varstr) {};</div><div class="ttc" id="classSVF_1_1ExtAPI_1_1Operation_html_a56d03123021f1f628361a4080fa573ce"><div class="ttname"><a href="classSVF_1_1ExtAPI_1_1Operation.html#a56d03123021f1f628361a4080fa573ce">SVF::ExtAPI::Operation::operandStr</a></div><div class="ttdeci">std::vector&lt; std::string &gt; operandStr</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00231">ExtAPI.h:231</a></div></div>
167
- <div class="ttc" id="classSVF_1_1ExtAPI_1_1Operation_html_a1e8979a53cf1edb5df00a5f28b6c19e9"><div class="ttname"><a href="classSVF_1_1ExtAPI_1_1Operation.html#a1e8979a53cf1edb5df00a5f28b6c19e9">SVF::ExtAPI::Operation::op</a></div><div class="ttdeci">std::string op</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00230">ExtAPI.h:230</a></div></div>
165
+ <p class="definition">Definition at line <a class="el" href="ExtAPI_8h_source.html#l00232">232</a> of file <a class="el" href="ExtAPI_8h_source.html">ExtAPI.h</a>.</p>
166
+ <div class="fragment"><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160;: <a class="code" href="classSVF_1_1ExtAPI_1_1Operation.html#a1e8979a53cf1edb5df00a5f28b6c19e9">op</a>(opn), <a class="code" href="classSVF_1_1ExtAPI_1_1Operation.html#a56d03123021f1f628361a4080fa573ce">operandStr</a>(varstr) {};</div><div class="ttc" id="classSVF_1_1ExtAPI_1_1Operation_html_a56d03123021f1f628361a4080fa573ce"><div class="ttname"><a href="classSVF_1_1ExtAPI_1_1Operation.html#a56d03123021f1f628361a4080fa573ce">SVF::ExtAPI::Operation::operandStr</a></div><div class="ttdeci">std::vector&lt; std::string &gt; operandStr</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00256">ExtAPI.h:256</a></div></div>
167
+ <div class="ttc" id="classSVF_1_1ExtAPI_1_1Operation_html_a1e8979a53cf1edb5df00a5f28b6c19e9"><div class="ttname"><a href="classSVF_1_1ExtAPI_1_1Operation.html#a1e8979a53cf1edb5df00a5f28b6c19e9">SVF::ExtAPI::Operation::op</a></div><div class="ttdeci">std::string op</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00255">ExtAPI.h:255</a></div></div>
168
168
  </div><!-- fragment -->
169
169
  </div>
170
170
  </div>
@@ -192,8 +192,8 @@ Private Attributes</h2></td></tr>
192
192
  </table>
193
193
  </div><div class="memdoc">
194
194
 
195
- <p class="definition">Definition at line <a class="el" href="ExtAPI_8h_source.html#l00219">219</a> of file <a class="el" href="ExtAPI_8h_source.html">ExtAPI.h</a>.</p>
196
- <div class="fragment"><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; {</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1ExtAPI_1_1Operation.html#ae3539c507b6284b849c136418507e72b">operands</a>;</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; }</div><div class="ttc" id="classSVF_1_1ExtAPI_1_1Operation_html_ae3539c507b6284b849c136418507e72b"><div class="ttname"><a href="classSVF_1_1ExtAPI_1_1Operation.html#ae3539c507b6284b849c136418507e72b">SVF::ExtAPI::Operation::operands</a></div><div class="ttdeci">std::vector&lt; NodeID &gt; operands</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00232">ExtAPI.h:232</a></div></div>
195
+ <p class="definition">Definition at line <a class="el" href="ExtAPI_8h_source.html#l00244">244</a> of file <a class="el" href="ExtAPI_8h_source.html">ExtAPI.h</a>.</p>
196
+ <div class="fragment"><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; {</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1ExtAPI_1_1Operation.html#ae3539c507b6284b849c136418507e72b">operands</a>;</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; }</div><div class="ttc" id="classSVF_1_1ExtAPI_1_1Operation_html_ae3539c507b6284b849c136418507e72b"><div class="ttname"><a href="classSVF_1_1ExtAPI_1_1Operation.html#ae3539c507b6284b849c136418507e72b">SVF::ExtAPI::Operation::operands</a></div><div class="ttdeci">std::vector&lt; NodeID &gt; operands</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00257">ExtAPI.h:257</a></div></div>
197
197
  </div><!-- fragment -->
198
198
  </div>
199
199
  </div>
@@ -220,8 +220,8 @@ Private Attributes</h2></td></tr>
220
220
  </table>
221
221
  </div><div class="memdoc">
222
222
 
223
- <p class="definition">Definition at line <a class="el" href="ExtAPI_8h_source.html#l00214">214</a> of file <a class="el" href="ExtAPI_8h_source.html">ExtAPI.h</a>.</p>
224
- <div class="fragment"><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; {</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1ExtAPI_1_1Operation.html#a56d03123021f1f628361a4080fa573ce">operandStr</a>;</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; }</div><div class="ttc" id="classSVF_1_1ExtAPI_1_1Operation_html_a56d03123021f1f628361a4080fa573ce"><div class="ttname"><a href="classSVF_1_1ExtAPI_1_1Operation.html#a56d03123021f1f628361a4080fa573ce">SVF::ExtAPI::Operation::operandStr</a></div><div class="ttdeci">std::vector&lt; std::string &gt; operandStr</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00231">ExtAPI.h:231</a></div></div>
223
+ <p class="definition">Definition at line <a class="el" href="ExtAPI_8h_source.html#l00239">239</a> of file <a class="el" href="ExtAPI_8h_source.html">ExtAPI.h</a>.</p>
224
+ <div class="fragment"><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; {</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1ExtAPI_1_1Operation.html#a56d03123021f1f628361a4080fa573ce">operandStr</a>;</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; }</div><div class="ttc" id="classSVF_1_1ExtAPI_1_1Operation_html_a56d03123021f1f628361a4080fa573ce"><div class="ttname"><a href="classSVF_1_1ExtAPI_1_1Operation.html#a56d03123021f1f628361a4080fa573ce">SVF::ExtAPI::Operation::operandStr</a></div><div class="ttdeci">std::vector&lt; std::string &gt; operandStr</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00256">ExtAPI.h:256</a></div></div>
225
225
  </div><!-- fragment -->
226
226
  </div>
227
227
  </div>
@@ -248,8 +248,8 @@ Private Attributes</h2></td></tr>
248
248
  </table>
249
249
  </div><div class="memdoc">
250
250
 
251
- <p class="definition">Definition at line <a class="el" href="ExtAPI_8h_source.html#l00209">209</a> of file <a class="el" href="ExtAPI_8h_source.html">ExtAPI.h</a>.</p>
252
- <div class="fragment"><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; {</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1ExtAPI_1_1Operation.html#a1e8979a53cf1edb5df00a5f28b6c19e9">op</a>;</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; }</div><div class="ttc" id="classSVF_1_1ExtAPI_1_1Operation_html_a1e8979a53cf1edb5df00a5f28b6c19e9"><div class="ttname"><a href="classSVF_1_1ExtAPI_1_1Operation.html#a1e8979a53cf1edb5df00a5f28b6c19e9">SVF::ExtAPI::Operation::op</a></div><div class="ttdeci">std::string op</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00230">ExtAPI.h:230</a></div></div>
251
+ <p class="definition">Definition at line <a class="el" href="ExtAPI_8h_source.html#l00234">234</a> of file <a class="el" href="ExtAPI_8h_source.html">ExtAPI.h</a>.</p>
252
+ <div class="fragment"><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; {</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1ExtAPI_1_1Operation.html#a1e8979a53cf1edb5df00a5f28b6c19e9">op</a>;</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; }</div><div class="ttc" id="classSVF_1_1ExtAPI_1_1Operation_html_a1e8979a53cf1edb5df00a5f28b6c19e9"><div class="ttname"><a href="classSVF_1_1ExtAPI_1_1Operation.html#a1e8979a53cf1edb5df00a5f28b6c19e9">SVF::ExtAPI::Operation::op</a></div><div class="ttdeci">std::string op</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00255">ExtAPI.h:255</a></div></div>
253
253
  </div><!-- fragment -->
254
254
  </div>
255
255
  </div>
@@ -277,8 +277,8 @@ Private Attributes</h2></td></tr>
277
277
  </table>
278
278
  </div><div class="memdoc">
279
279
 
280
- <p class="definition">Definition at line <a class="el" href="ExtAPI_8h_source.html#l00224">224</a> of file <a class="el" href="ExtAPI_8h_source.html">ExtAPI.h</a>.</p>
281
- <div class="fragment"><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; {</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; <a class="code" href="classSVF_1_1ExtAPI_1_1Operation.html#ae3539c507b6284b849c136418507e72b">operands</a> = vars;</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; }</div><div class="ttc" id="classSVF_1_1ExtAPI_1_1Operation_html_ae3539c507b6284b849c136418507e72b"><div class="ttname"><a href="classSVF_1_1ExtAPI_1_1Operation.html#ae3539c507b6284b849c136418507e72b">SVF::ExtAPI::Operation::operands</a></div><div class="ttdeci">std::vector&lt; NodeID &gt; operands</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00232">ExtAPI.h:232</a></div></div>
280
+ <p class="definition">Definition at line <a class="el" href="ExtAPI_8h_source.html#l00249">249</a> of file <a class="el" href="ExtAPI_8h_source.html">ExtAPI.h</a>.</p>
281
+ <div class="fragment"><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; {</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; <a class="code" href="classSVF_1_1ExtAPI_1_1Operation.html#ae3539c507b6284b849c136418507e72b">operands</a> = vars;</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; }</div><div class="ttc" id="classSVF_1_1ExtAPI_1_1Operation_html_ae3539c507b6284b849c136418507e72b"><div class="ttname"><a href="classSVF_1_1ExtAPI_1_1Operation.html#ae3539c507b6284b849c136418507e72b">SVF::ExtAPI::Operation::operands</a></div><div class="ttdeci">std::vector&lt; NodeID &gt; operands</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00257">ExtAPI.h:257</a></div></div>
282
282
  </div><!-- fragment -->
283
283
  </div>
284
284
  </div>
@@ -303,7 +303,7 @@ Private Attributes</h2></td></tr>
303
303
  </table>
304
304
  </div><div class="memdoc">
305
305
 
306
- <p class="definition">Definition at line <a class="el" href="ExtAPI_8h_source.html#l00230">230</a> of file <a class="el" href="ExtAPI_8h_source.html">ExtAPI.h</a>.</p>
306
+ <p class="definition">Definition at line <a class="el" href="ExtAPI_8h_source.html#l00255">255</a> of file <a class="el" href="ExtAPI_8h_source.html">ExtAPI.h</a>.</p>
307
307
 
308
308
  </div>
309
309
  </div>
@@ -327,7 +327,7 @@ Private Attributes</h2></td></tr>
327
327
  </table>
328
328
  </div><div class="memdoc">
329
329
 
330
- <p class="definition">Definition at line <a class="el" href="ExtAPI_8h_source.html#l00232">232</a> of file <a class="el" href="ExtAPI_8h_source.html">ExtAPI.h</a>.</p>
330
+ <p class="definition">Definition at line <a class="el" href="ExtAPI_8h_source.html#l00257">257</a> of file <a class="el" href="ExtAPI_8h_source.html">ExtAPI.h</a>.</p>
331
331
 
332
332
  </div>
333
333
  </div>
@@ -351,7 +351,7 @@ Private Attributes</h2></td></tr>
351
351
  </table>
352
352
  </div><div class="memdoc">
353
353
 
354
- <p class="definition">Definition at line <a class="el" href="ExtAPI_8h_source.html#l00231">231</a> of file <a class="el" href="ExtAPI_8h_source.html">ExtAPI.h</a>.</p>
354
+ <p class="definition">Definition at line <a class="el" href="ExtAPI_8h_source.html#l00256">256</a> of file <a class="el" href="ExtAPI_8h_source.html">ExtAPI.h</a>.</p>
355
355
 
356
356
  </div>
357
357
  </div>
@@ -2237,7 +2237,7 @@ Private Attributes</h2></td></tr>
2237
2237
  <div class="ttc" id="classSVF_1_1SVFIR_html_aa7e98cd2fd599aedefa4c2e6fb659da0"><div class="ttname"><a href="classSVF_1_1SVFIR.html#aa7e98cd2fd599aedefa4c2e6fb659da0">SVF::SVFIR::addDummyValNode</a></div><div class="ttdeci">NodeID addDummyValNode()</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00444">SVFIR.h:444</a></div></div>
2238
2238
  <div class="ttc" id="classSVF_1_1ExtAPI_html_a9b15082f3c118da731705bba3924507d"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#a9b15082f3c118da731705bba3924507d">SVF::ExtAPI::getAllOperations</a></div><div class="ttdeci">std::vector&lt; Operation &gt; getAllOperations(std::string funName)</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8cpp_source.html#l00344">ExtAPI.cpp:344</a></div></div>
2239
2239
  <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_a2a0711cb1fdd3c5c90b07ff107aff1ac"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a2a0711cb1fdd3c5c90b07ff107aff1ac">SVF::SVFIRBuilder::addAddrEdge</a></div><div class="ttdeci">AddrStmt * addAddrEdge(NodeID src, NodeID dst)</div><div class="ttdoc">Add Address edge. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00294">SVFIRBuilder.h:294</a></div></div>
2240
- <div class="ttc" id="classSVF_1_1ExtAPI_1_1Operation_html"><div class="ttname"><a href="classSVF_1_1ExtAPI_1_1Operation.html">SVF::ExtAPI::Operation</a></div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00202">ExtAPI.h:202</a></div></div>
2240
+ <div class="ttc" id="classSVF_1_1ExtAPI_1_1Operation_html"><div class="ttname"><a href="classSVF_1_1ExtAPI_1_1Operation.html">SVF::ExtAPI::Operation</a></div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00227">ExtAPI.h:227</a></div></div>
2241
2241
  <div class="ttc" id="namespaceSVF_html_a350ae9bf8606bdfe23c8679681b969dc"><div class="ttname"><a href="namespaceSVF.html#a350ae9bf8606bdfe23c8679681b969dc">SVF::NodeID</a></div><div class="ttdeci">unsigned NodeID</div><div class="ttdef"><b>Definition:</b> <a href="include_2MTA_2MTAResultValidator_8h_source.html#l00020">MTAResultValidator.h:20</a></div></div>
2242
2242
  <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_acc69fc638380f34164db649d9bf2a7d6"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">SVF::SVFIRBuilder::getValueNode</a></div><div class="ttdeci">NodeID getValueNode(const Value *V)</div><div class="ttdoc">Get different kinds of node. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00086">SVFIRBuilder.h:86</a></div></div>
2243
2243
  <div class="ttc" id="classSVF_1_1SVFValue_html_a11f2d9b6e969ede6fca2c204cc15b821"><div class="ttname"><a href="classSVF_1_1SVFValue.html#a11f2d9b6e969ede6fca2c204cc15b821">SVF::SVFValue::getType</a></div><div class="ttdeci">virtual const SVFType * getType() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00215">SVFValue.h:215</a></div></div>
@@ -2559,7 +2559,7 @@ Private Attributes</h2></td></tr>
2559
2559
 
2560
2560
  <p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l01178">1178</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
2561
2561
  <div class="fragment"><div class="line"><a name="l01179"></a><span class="lineno"> 1179</span>&#160;{</div><div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>&#160; <span class="comment">// Record all dummy nodes</span></div><div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>&#160; std::map&lt;std::string, NodeID&gt; nodeIDMap;</div><div class="line"><a name="l01182"></a><span class="lineno"> 1182</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1ExtAPI_1_1Operation.html">ExtAPI::Operation</a>&amp; operation : operations)</div><div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>&#160; {</div><div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>&#160; std::vector&lt;NodeID&gt;&amp; operands = operation.getOperands();</div><div class="line"><a name="l01185"></a><span class="lineno"> 1185</span>&#160; <span class="keywordflow">if</span> (operation.getOperator() == <span class="stringliteral">&quot;funptr_ops&quot;</span> || operation.getOperator() == <span class="stringliteral">&quot;Rb_tree_ops&quot;</span>)</div><div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> s: operation.getOperandStr())</div><div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>&#160; {</div><div class="line"><a name="l01189"></a><span class="lineno"> 1189</span>&#160; <span class="comment">// There is already a NodeID in nodeIDMap</span></div><div class="line"><a name="l01190"></a><span class="lineno"> 1190</span>&#160; <span class="keywordflow">if</span> (nodeIDMap.find(s) != nodeIDMap.end())</div><div class="line"><a name="l01191"></a><span class="lineno"> 1191</span>&#160; operands.push_back(nodeIDMap[s]);</div><div class="line"><a name="l01192"></a><span class="lineno"> 1192</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l01193"></a><span class="lineno"> 1193</span>&#160; {</div><div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>&#160; <a class="code" href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">s32_t</a> nodeIDType = <a class="code" href="classSVF_1_1ExtAPI.html#a02380d22fd6021ebce1e54723d695c99">ExtAPI::getExtAPI</a>()-&gt;<a class="code" href="classSVF_1_1ExtAPI.html#a6fdedabaf1adb051a562a261b86c9cf6">getNodeIDType</a>(s);</div><div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>&#160; <span class="keywordflow">if</span> (nodeIDType &gt;= 0)</div><div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>&#160; {</div><div class="line"><a name="l01197"></a><span class="lineno"> 1197</span>&#160; <span class="keywordflow">if</span>( cs-&gt;arg_size() &lt;= (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a>) nodeIDType)</div><div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>&#160; assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;Argument out of bounds!&quot;</span>);</div><div class="line"><a name="l01199"></a><span class="lineno"> 1199</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>&#160; {</div><div class="line"><a name="l01201"></a><span class="lineno"> 1201</span>&#160; operands.push_back(<a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(cs-&gt;getArgOperand(nodeIDType)));</div><div class="line"><a name="l01202"></a><span class="lineno"> 1202</span>&#160; nodeIDMap[s] = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(cs-&gt;getArgOperand(nodeIDType));</div><div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>&#160; }</div><div class="line"><a name="l01204"></a><span class="lineno"> 1204</span>&#160; }</div><div class="line"><a name="l01205"></a><span class="lineno"> 1205</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (nodeIDType == -1)</div><div class="line"><a name="l01206"></a><span class="lineno"> 1206</span>&#160; {</div><div class="line"><a name="l01207"></a><span class="lineno"> 1207</span>&#160; operands.push_back(<a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(cs));</div><div class="line"><a name="l01208"></a><span class="lineno"> 1208</span>&#160; nodeIDMap[s] = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(cs);</div><div class="line"><a name="l01209"></a><span class="lineno"> 1209</span>&#160; }</div><div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (nodeIDType == -2)</div><div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>&#160; {</div><div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>&#160; operands.push_back(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#aa7e98cd2fd599aedefa4c2e6fb659da0">addDummyValNode</a>());</div><div class="line"><a name="l01213"></a><span class="lineno"> 1213</span>&#160; nodeIDMap[s] = operands[operands.size() - 1];</div><div class="line"><a name="l01214"></a><span class="lineno"> 1214</span>&#160; }</div><div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (nodeIDType == -3)</div><div class="line"><a name="l01216"></a><span class="lineno"> 1216</span>&#160; {</div><div class="line"><a name="l01217"></a><span class="lineno"> 1217</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;PointerType&gt;(cs-&gt;getType()))</div><div class="line"><a name="l01218"></a><span class="lineno"> 1218</span>&#160; {</div><div class="line"><a name="l01219"></a><span class="lineno"> 1219</span>&#160; operands.push_back(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a5a93f3d13e2b3df126fbc42b1bd09006">getObjectNode</a>(cs));</div><div class="line"><a name="l01220"></a><span class="lineno"> 1220</span>&#160; nodeIDMap[s] = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a5a93f3d13e2b3df126fbc42b1bd09006">getObjectNode</a>(cs);</div><div class="line"><a name="l01221"></a><span class="lineno"> 1221</span>&#160; }</div><div class="line"><a name="l01222"></a><span class="lineno"> 1222</span>&#160; }</div><div class="line"><a name="l01223"></a><span class="lineno"> 1223</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (nodeIDType == -4)</div><div class="line"><a name="l01224"></a><span class="lineno"> 1224</span>&#160; {</div><div class="line"><a name="l01225"></a><span class="lineno"> 1225</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">char</span> <span class="keyword">const</span> &amp;c : s)</div><div class="line"><a name="l01226"></a><span class="lineno"> 1226</span>&#160; {</div><div class="line"><a name="l01227"></a><span class="lineno"> 1227</span>&#160; <span class="keywordflow">if</span> (std::isdigit(c) == 0)</div><div class="line"><a name="l01228"></a><span class="lineno"> 1228</span>&#160; assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;Invalid offset!&quot;</span>);</div><div class="line"><a name="l01229"></a><span class="lineno"> 1229</span>&#160; }</div><div class="line"><a name="l01230"></a><span class="lineno"> 1230</span>&#160; operands.push_back(atoi(s.c_str()));</div><div class="line"><a name="l01231"></a><span class="lineno"> 1231</span>&#160; nodeIDMap[s] = atoi(s.c_str());</div><div class="line"><a name="l01232"></a><span class="lineno"> 1232</span>&#160; }</div><div class="line"><a name="l01233"></a><span class="lineno"> 1233</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l01234"></a><span class="lineno"> 1234</span>&#160; assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;The operand format of function operation is illegal!&quot;</span>);</div><div class="line"><a name="l01235"></a><span class="lineno"> 1235</span>&#160; }</div><div class="line"><a name="l01236"></a><span class="lineno"> 1236</span>&#160; }</div><div class="line"><a name="l01237"></a><span class="lineno"> 1237</span>&#160; }</div><div class="line"><a name="l01238"></a><span class="lineno"> 1238</span>&#160;}</div><div class="ttc" id="classSVF_1_1SVFIR_html_aa7e98cd2fd599aedefa4c2e6fb659da0"><div class="ttname"><a href="classSVF_1_1SVFIR.html#aa7e98cd2fd599aedefa4c2e6fb659da0">SVF::SVFIR::addDummyValNode</a></div><div class="ttdeci">NodeID addDummyValNode()</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00444">SVFIR.h:444</a></div></div>
2562
- <div class="ttc" id="classSVF_1_1ExtAPI_1_1Operation_html"><div class="ttname"><a href="classSVF_1_1ExtAPI_1_1Operation.html">SVF::ExtAPI::Operation</a></div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00202">ExtAPI.h:202</a></div></div>
2562
+ <div class="ttc" id="classSVF_1_1ExtAPI_1_1Operation_html"><div class="ttname"><a href="classSVF_1_1ExtAPI_1_1Operation.html">SVF::ExtAPI::Operation</a></div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00227">ExtAPI.h:227</a></div></div>
2563
2563
  <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_acc69fc638380f34164db649d9bf2a7d6"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">SVF::SVFIRBuilder::getValueNode</a></div><div class="ttdeci">NodeID getValueNode(const Value *V)</div><div class="ttdoc">Get different kinds of node. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00086">SVFIRBuilder.h:86</a></div></div>
2564
2564
  <div class="ttc" id="namespaceSVF_html_a9b707002523ece2ac54ca893ee9a2d4e"><div class="ttname"><a href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">SVF::s32_t</a></div><div class="ttdeci">signed s32_t</div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00051">SVFType.h:51</a></div></div>
2565
2565
  <div class="ttc" id="namespaceSVF_html_ad42bff8d0a7d60a085aa32d10f4955af"><div class="ttname"><a href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">SVF::u32_t</a></div><div class="ttdeci">unsigned u32_t</div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00050">SVFType.h:50</a></div></div>
@@ -47,56 +47,81 @@ namespace SVF
47
47
 
48
48
  ** Specifications in ExtAPI.json
49
49
 
50
- *** [1] Overview of the Specification Language
50
+ **** Overview of the Specification Language
51
51
  The specification language of external functions is based on the JSON format. And every function defined by the Specification Language is an object that represents the specification rules. These Specification Language objects for functions contain four parts:
52
- 1. the name of the function,
53
- 2. the switch that controls whether the specification rules defined in the ExtAPI.json overwrite the functions defined in the user code,
54
- 3. the type of the function,
55
- 4. the operations conducted by the function.
52
+ 1. the signature of the function, (Mandatory)
53
+ 2. the type of the function, (Mandatory)
54
+ 3. the switch that controls whether the specification rules defined in the ExtAPI.json overwrite the functions defined in the user code, (Mandatory)
55
+ 4. the side-effect of the function. (Optional)
56
56
 
57
- *** [2] Overwriting the user-defined functions
58
- The switch *overwrite_app_function* controls whether the specification rules defined in the ExtAPI.json overwrite the functions defined in the user code (e.g., CPP files). When the switch *overwrite_app_function* is set to a value of 1, SVF will use the specification rules in ExtAPI.json to conduct the analysis and ignore the user-defined functions in the input CPP/bc files.
59
- overwrite_app_function = 0: Analyze the user-defined functions.
60
- overwrite_app_function = 1: Use specifications in ExtAPI.json to overwrite the user-defined functions.
57
+ *** [1] the signature of the function (Mandatory)
58
+ "return": return value type (Only care about whether the return value is a pointer during analysis)
59
+ "argument": argument types (Only care about the number of arguments during analysis)
61
60
 
62
- *** [3] Function types
61
+
62
+ *** [2] the type of the function (Mandatory)
63
63
  Function type represents the properties of the function.
64
64
  For example,
65
65
  "EFT_ALLOC" represents if this external function allocates a new object and assigns it to one of its arguments,
66
66
  For the selection of function type and a more detailed explanation, please refer to the definition of enum *extType* in ExtAPI.h.
67
67
 
68
- *** [4] Function operations
69
- Function operations indicate the relationships between input and output,
68
+
69
+ *** [3] the switch that controls whether the specification rules defined in the ExtAPI.json overwrite the functions defined in the user code (Mandatory)
70
+ The switch *overwrite_app_function* controls whether the specification rules defined in the ExtAPI.json overwrite the functions defined in the user code (e.g., CPP files). When the switch *overwrite_app_function* is set to a value of 1, SVF will use the specification rules in ExtAPI.json to conduct the analysis and ignore the user-defined functions in the input CPP/bc files.
71
+ overwrite_app_function = 0: Analyze the user-defined functions.
72
+ overwrite_app_function = 1: Use specifications in ExtAPI.json to overwrite the user-defined functions.
73
+
74
+ For example, The following is the code to be analyzed, which has a foo() function,
75
+ --------------------------------------------------------
76
+ char* foo(char* arg)
77
+ {
78
+ return arg;
79
+ }
80
+
81
+ int main()
82
+ {
83
+ char* ret = foo("abc");
84
+ return 0;
85
+ }
86
+ --------------------------------------------------------
87
+ function foo() has a definition, but you want SVF not to use this definition when analyzing, and you think foo () should do nothing, Then you can add a new entry in ExtAPI.json, and set *"overwrite_app_function": 1*
88
+ "foo": {
89
+ "return": "char*",
90
+ "arguments": "(char*)",
91
+ "type": "EFT_NOOP",
92
+ "overwrite_app_function": 1
93
+ }
94
+ When SVF is analyzing foo(), SVF will use the entry you defined in ExtAPI.json, and ignore the actual definition of foo() in the program.
95
+
96
+ Most of the time, overwrite_app_function is 0, unless you want to redefine a function.
97
+
98
+
99
+ *** [4] the side-effect of the function (Optional, if there is no side-effect of that function)
100
+ Function side-effect indicate the relationships between input and output,
70
101
  mainly between function parameters or between parameters and return values after the execution.
71
102
  For example,
72
- "copy": ["A2", "L"] indicates that after this external function is executed, the value of the 2nd parameter is copied into the return value.
73
- For the selection of function type and a more detailed explanation, please refer to the definition of enum *extf_t* in ExtAPI.h.
74
-
75
- For operands of function operation, e.g., "A2", "L", there are the following options:
76
- "A": represents a parameter;
77
- "N": represents a number;
78
- "R": represents a reference;
79
- "L": represents a return value;
80
- "V": represents a dummy node;
81
-
82
- Among them, a parameter may have multiple forms because there may be various parameters, and the parameter may be a reference or complex structure,
83
-
84
- Here we use regular expressions "(AN)(R|RN)^*" to represent parameters, for example,
85
- "A0": represents the 1st parameter;
86
- "A2R": represents that the 3rd parameter is a reference;
87
- "A1R2": represents the 3rd substructure of the 2nd parameter "A1R", where "A1R" is a complex structure;
88
- "A2R3R": represents the 4th substructure of the 3rd parameter "A2R" is a reference, where "A2R" is a complex structure;
89
-
90
-
91
- ** Specification format:
92
- "functionName": {
93
- "type": "functional type",
94
- "overwrite_app_function:" 0/1,
95
- "function operation_1": [ operand_1, operand_2, ... , operand_n],
96
- "function operation_2": [ operand_1, operand_2, ... , operand_n],
97
- ...
98
- "function operation_n": [ operand_1, operand_2, ... , operand_n]
99
- }
103
+ "CopyStmt": ["Arg2", "Ret"] indicates that after this external function is executed, the value of the 2nd parameter is copied into the return value.
104
+
105
+ For operators of function operation, there are the following options:
106
+ "AddrStmt",
107
+ "CopyStmt",
108
+ "LoadStmt"
109
+ "StoreStmt",
110
+ "GepStmt",
111
+ "BinaryOPStmt",
112
+ "UnaryOPStmt",
113
+ "CmpStmt",
114
+ "memset_like": the function has similar side-effect to function "void *memset(void *str, int c, size_t n)",
115
+ "memcpy_like": the function has similar side-effect to function "void *memcpy(void *dest, const void * src, size_t n)",
116
+ "funptr_ops": the function has similar side-effect to function "void *dlsym(void *handle, const char *symbol)",
117
+ "Rb_tree_ops: the function has similar side-effect to function "_ZSt29_Rb_tree_insert_and_rebalancebPSt18_Rb_tree_node_baseS0_RS_".
118
+
119
+ For operands of function operation,, there are the following options:
120
+ "Arg": represents a parameter,
121
+ "Obj": represents a object,
122
+ "Ret": represents a return value,
123
+ "Dummy": represents a dummy node.
124
+
100
125
  */
101
126
 
102
127
  class ExtAPI
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "svf-tools",
3
- "version": "1.0.622",
3
+ "version": "1.0.623",
4
4
  "description": "* <b>[TypeClone](https://github.com/SVF-tools/SVF/wiki/TypeClone) published in our [ECOOP paper](https://yuleisui.github.io/publications/ecoop20.pdf) is now available in SVF </b> * <b>SVF now uses a single script for its build. Just type [`source ./build.sh`](https://github.com/SVF-tools/SVF/blob/master/build.sh) in your terminal, that's it!</b> * <b>SVF now supports LLVM-10.0.0! </b> * <b>We thank [bsauce](https://github.com/bsauce) for writing a user manual of SVF ([link1](https://www.jianshu.com/p/068a08ec749c) and [link2](https://www.jianshu.com/p/777c30d4240e)) in Chinese </b> * <b>SVF now supports LLVM-9.0.0 (Thank [Byoungyoung Lee](https://github.com/SVF-tools/SVF/issues/142) for his help!). </b> * <b>SVF now supports a set of [field-sensitive pointer analyses](https://yuleisui.github.io/publications/sas2019a.pdf). </b> * <b>[Use SVF as an external lib](https://github.com/SVF-tools/SVF/wiki/Using-SVF-as-a-lib-in-your-own-tool) for your own project (Contributed by [Hongxu Chen](https://github.com/HongxuChen)). </b> * <b>SVF now supports LLVM-7.0.0. </b> * <b>SVF now supports Docker. [Try SVF in Docker](https://github.com/SVF-tools/SVF/wiki/Try-SVF-in-Docker)! </b> * <b>SVF now supports [LLVM-6.0.0](https://github.com/svf-tools/SVF/pull/38) (Contributed by [Jack Anthony](https://github.com/jackanth)). </b> * <b>SVF now supports [LLVM-4.0.0](https://github.com/svf-tools/SVF/pull/23) (Contributed by Jared Carlson. Thank [Jared](https://github.com/jcarlson23) and [Will](https://github.com/dtzWill) for their in-depth [discussions](https://github.com/svf-tools/SVF/pull/18) about updating SVF!) </b> * <b>SVF now supports analysis for C++ programs.</b> <br />",
5
5
  "main": "index.js",
6
6
  "scripts": {