svf-tools 1.0.368 → 1.0.369
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.
- package/SVF-doxygen/html/html/ExtAPI_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/ExtAPI_8h_source.html +2 -2
- package/SVF-doxygen/html/html/SVFIRBuilder_8cpp_source.html +2 -1
- package/SVF-doxygen/html/html/classSVF_1_1ExtAPI.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder.html +2 -2
- package/include/Util/ExtAPI.h +1 -1
- package/lib/SVF-FE/SVFIRBuilder.cpp +1 -1
- package/lib/Util/ExtAPI.cpp +0 -1
- package/package.json +1 -1
|
@@ -297,7 +297,7 @@ Static Private Attributes</h2></td></tr>
|
|
|
297
297
|
|
|
298
298
|
<p class="definition">Definition at line <a class="el" href="ExtAPI_8h_source.html#l00102">102</a> of file <a class="el" href="ExtAPI_8h_source.html">ExtAPI.h</a>.</p>
|
|
299
299
|
<div class="fragment"><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  {</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  <a class="code" href="classSVF_1_1ExtAPI.html#ac8af2b917fcc71c0a1a66b8cb0cc55ba">init</a>();</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  <a class="code" href="classSVF_1_1ExtAPI.html#a329882c608e9a6b10a758bcd1ca7a0b5">isext_cache</a>.clear();</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  }</div><div class="ttc" id="classSVF_1_1ExtAPI_html_a329882c608e9a6b10a758bcd1ca7a0b5"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#a329882c608e9a6b10a758bcd1ca7a0b5">SVF::ExtAPI::isext_cache</a></div><div class="ttdeci">Map< const SVFFunction *, bool > isext_cache</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00098">ExtAPI.h:98</a></div></div>
|
|
300
|
-
<div class="ttc" id="classSVF_1_1ExtAPI_html_ac8af2b917fcc71c0a1a66b8cb0cc55ba"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#ac8af2b917fcc71c0a1a66b8cb0cc55ba">SVF::ExtAPI::init</a></div><div class="ttdeci">void init()</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8cpp_source.html#
|
|
300
|
+
<div class="ttc" id="classSVF_1_1ExtAPI_html_ac8af2b917fcc71c0a1a66b8cb0cc55ba"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#ac8af2b917fcc71c0a1a66b8cb0cc55ba">SVF::ExtAPI::init</a></div><div class="ttdeci">void init()</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8cpp_source.html#l00848">ExtAPI.cpp:848</a></div></div>
|
|
301
301
|
</div><!-- fragment -->
|
|
302
302
|
</div>
|
|
303
303
|
</div>
|
|
@@ -391,7 +391,7 @@ Static Private Attributes</h2></td></tr>
|
|
|
391
391
|
</div><div class="memdoc">
|
|
392
392
|
|
|
393
393
|
<p class="definition">Definition at line <a class="el" href="ExtAPI_8h_source.html#l00133">133</a> of file <a class="el" href="ExtAPI_8h_source.html">ExtAPI.h</a>.</p>
|
|
394
|
-
<div class="fragment"><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  {</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(F);</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  std::string funName = F->getName().str();</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  <span class="keywordflow">if</span>(F->isIntrinsic())</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  {</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  funName = <span class="stringliteral">"llvm."</span> + F->getName().split(<span class="charliteral">'.'</span>).second.split(<span class="charliteral">'.'</span>).first.str();</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  }</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  llvm::StringMap<extf_t>::const_iterator it= <a class="code" href="classSVF_1_1ExtAPI.html#a21b103f723d914a95fd0eef28551a3ca">info</a>.find(funName);</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  <span class="keywordflow">if</span>(it == <a class="code" href="classSVF_1_1ExtAPI.html#a21b103f723d914a95fd0eef28551a3ca">info</a>.end()
|
|
394
|
+
<div class="fragment"><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  {</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(F);</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  std::string funName = F->getName().str();</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  <span class="keywordflow">if</span>(F->isIntrinsic())</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  {</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  funName = <span class="stringliteral">"llvm."</span> + F->getName().split(<span class="charliteral">'.'</span>).second.split(<span class="charliteral">'.'</span>).first.str();</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  }</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  llvm::StringMap<extf_t>::const_iterator it= <a class="code" href="classSVF_1_1ExtAPI.html#a21b103f723d914a95fd0eef28551a3ca">info</a>.find(funName);</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  <span class="keywordflow">if</span>(it == <a class="code" href="classSVF_1_1ExtAPI.html#a21b103f723d914a95fd0eef28551a3ca">info</a>.end())</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094ac8af5ecc06abccdbcba873e2be3f11f9">EFT_OTHER</a>;</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  <span class="keywordflow">return</span> it->second;</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  }</div><div class="ttc" id="util_8h_html_a07d17d6d5d1074c0969bc5d3c3d1d84a"><div class="ttname"><a href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a></div><div class="ttdeci">#define assert(ex)</div><div class="ttdef"><b>Definition:</b> <a href="util_8h_source.html#l00141">util.h:141</a></div></div>
|
|
395
395
|
<div class="ttc" id="classSVF_1_1ExtAPI_html_aaf94c82d98f8ed1514ee49c9881a4094ac8af5ecc06abccdbcba873e2be3f11f9"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094ac8af5ecc06abccdbcba873e2be3f11f9">SVF::ExtAPI::EFT_OTHER</a></div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00090">ExtAPI.h:90</a></div></div>
|
|
396
396
|
<div class="ttc" id="classSVF_1_1ExtAPI_html_a21b103f723d914a95fd0eef28551a3ca"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#a21b103f723d914a95fd0eef28551a3ca">SVF::ExtAPI::info</a></div><div class="ttdeci">llvm::StringMap< extf_t > info</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00096">ExtAPI.h:96</a></div></div>
|
|
397
397
|
</div><!-- fragment -->
|
|
@@ -513,8 +513,8 @@ Static Private Attributes</h2></td></tr>
|
|
|
513
513
|
</table>
|
|
514
514
|
</div><div class="memdoc">
|
|
515
515
|
|
|
516
|
-
<p class="definition">Definition at line <a class="el" href="ExtAPI_8cpp_source.html#
|
|
517
|
-
<div class="fragment"><div class="line"><a name="
|
|
516
|
+
<p class="definition">Definition at line <a class="el" href="ExtAPI_8cpp_source.html#l00848">848</a> of file <a class="el" href="ExtAPI_8cpp_source.html">ExtAPI.cpp</a>.</p>
|
|
517
|
+
<div class="fragment"><div class="line"><a name="l00849"></a><span class="lineno"> 849</span> {</div><div class="line"><a name="l00850"></a><span class="lineno"> 850</span>  set<extf_t> t_seen;</div><div class="line"><a name="l00851"></a><span class="lineno"> 851</span>  <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094">extf_t</a> prev_t= <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a87c4ba17ac3567a0673d6516995e06ef">EFT_NOOP</a>;</div><div class="line"><a name="l00852"></a><span class="lineno"> 852</span>  t_seen.insert(<a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a87c4ba17ac3567a0673d6516995e06ef">EFT_NOOP</a>);</div><div class="line"><a name="l00853"></a><span class="lineno"> 853</span>  <span class="keywordflow">for</span>(<span class="keyword">const</span> ei_pair *p= <a class="code" href="ExtAPI_8cpp.html#aa5c38361a7f02befa83ea45388056ea1">ei_pairs</a>; p->n; ++p)</div><div class="line"><a name="l00854"></a><span class="lineno"> 854</span>  {</div><div class="line"><a name="l00855"></a><span class="lineno"> 855</span>  <span class="keywordflow">if</span>(p->t != prev_t)</div><div class="line"><a name="l00856"></a><span class="lineno"> 856</span>  {</div><div class="line"><a name="l00857"></a><span class="lineno"> 857</span>  <span class="comment">//This will detect if you move an entry to another block</span></div><div class="line"><a name="l00858"></a><span class="lineno"> 858</span>  <span class="comment">// but forget to change the type.</span></div><div class="line"><a name="l00859"></a><span class="lineno"> 859</span>  <span class="keywordflow">if</span>(t_seen.count(p->t))</div><div class="line"><a name="l00860"></a><span class="lineno"> 860</span>  {</div><div class="line"><a name="l00861"></a><span class="lineno"> 861</span>  fputs(p->n, stderr);</div><div class="line"><a name="l00862"></a><span class="lineno"> 862</span>  putc(<span class="charliteral">'\n'</span>, stderr);</div><div class="line"><a name="l00863"></a><span class="lineno"> 863</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(!<span class="stringliteral">"ei_pairs not grouped by type"</span>);</div><div class="line"><a name="l00864"></a><span class="lineno"> 864</span>  }</div><div class="line"><a name="l00865"></a><span class="lineno"> 865</span>  t_seen.insert(p->t);</div><div class="line"><a name="l00866"></a><span class="lineno"> 866</span>  prev_t= p->t;</div><div class="line"><a name="l00867"></a><span class="lineno"> 867</span>  }</div><div class="line"><a name="l00868"></a><span class="lineno"> 868</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1ExtAPI.html#a21b103f723d914a95fd0eef28551a3ca">info</a>.count(p->n))</div><div class="line"><a name="l00869"></a><span class="lineno"> 869</span>  {</div><div class="line"><a name="l00870"></a><span class="lineno"> 870</span>  fputs(p->n, stderr);</div><div class="line"><a name="l00871"></a><span class="lineno"> 871</span>  putc(<span class="charliteral">'\n'</span>, stderr);</div><div class="line"><a name="l00872"></a><span class="lineno"> 872</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(!<span class="stringliteral">"duplicate name in ei_pairs"</span>);</div><div class="line"><a name="l00873"></a><span class="lineno"> 873</span>  }</div><div class="line"><a name="l00874"></a><span class="lineno"> 874</span>  <a class="code" href="classSVF_1_1ExtAPI.html#a21b103f723d914a95fd0eef28551a3ca">info</a>[p->n]= p->t;</div><div class="line"><a name="l00875"></a><span class="lineno"> 875</span>  }</div><div class="line"><a name="l00876"></a><span class="lineno"> 876</span> }</div><div class="ttc" id="ExtAPI_8cpp_html_aa5c38361a7f02befa83ea45388056ea1"><div class="ttname"><a href="ExtAPI_8cpp.html#aa5c38361a7f02befa83ea45388056ea1">ei_pairs</a></div><div class="ttdeci">static const ei_pair ei_pairs[]</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8cpp_source.html#l00030">ExtAPI.cpp:30</a></div></div>
|
|
518
518
|
<div class="ttc" id="util_8h_html_a07d17d6d5d1074c0969bc5d3c3d1d84a"><div class="ttname"><a href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a></div><div class="ttdeci">#define assert(ex)</div><div class="ttdef"><b>Definition:</b> <a href="util_8h_source.html#l00141">util.h:141</a></div></div>
|
|
519
519
|
<div class="ttc" id="classSVF_1_1ExtAPI_html_aaf94c82d98f8ed1514ee49c9881a4094a87c4ba17ac3567a0673d6516995e06ef"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a87c4ba17ac3567a0673d6516995e06ef">SVF::ExtAPI::EFT_NOOP</a></div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00052">ExtAPI.h:52</a></div></div>
|
|
520
520
|
<div class="ttc" id="classSVF_1_1ExtAPI_html_aaf94c82d98f8ed1514ee49c9881a4094"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094">SVF::ExtAPI::extf_t</a></div><div class="ttdeci">extf_t</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00050">ExtAPI.h:50</a></div></div>
|
|
@@ -1494,11 +1494,12 @@ Private Attributes</h2></td></tr>
|
|
|
1494
1494
|
<p>To be noted, we do not record arguments which are in declared function without body TODO: what about external functions with <a class="el" href="classSVF_1_1SVFIR.html">SVFIR</a> imported by commandline? </p>
|
|
1495
1495
|
|
|
1496
1496
|
<p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l00047">47</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
|
|
1497
|
-
<div class="fragment"><div class="line"><a name="l00048"></a><span class="lineno"> 48</span> {</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span> </div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  <span class="comment">// We read SVFIR from a user-defined txt instead of parsing SVFIR from LLVM IR</span></div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1SVFModule.html#a1357c876eccedd58b3abe68875b3a570">SVFModule::pagReadFromTXT</a>())</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  {</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  <a class="code" href="classSVF_1_1PAGBuilderFromFile.html">PAGBuilderFromFile</a> fileBuilder(<a class="code" href="classSVF_1_1SVFModule.html#a54c2bc2cb7cda0d74f4cadc676461b60">SVFModule::pagFileName</a>());</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  <span class="keywordflow">return</span> fileBuilder.build();</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  }</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span> </div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  <span class="comment">// If the SVFIR has been built before, then we return the unique SVFIR of the program</span></div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1IRGraph.html#a0a18bca50f7cd3a1882754f19303d257">getNodeNumAfterPAGBuild</a>() > 1)</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>;</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span> </div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#aa67bbd366b93fb1ec7a540c83566c977">svfMod</a> = svfModule;</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span> </div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#af4b18e8e1fdfb117cb5dd1a81cea4b71">initialiseNodes</a>();</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4c6cd51def26ebd8e839df9fdc4b64b8">visitGlobal</a>(svfModule);</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span> </div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1SVFModule.html#a709371b13dcf500277f8bc275bdb23c7">SVFModule::iterator</a> fit = svfModule-><a class="code" href="classSVF_1_1SVFModule.html#a5486697889c6cca4f9f426650defc255">begin</a>(), efit = svfModule-><a class="code" href="classSVF_1_1SVFModule.html#a58d03edb6ff85f4943135478f113df31">end</a>();</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  fit != efit; ++fit)</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  {</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>& fun = **fit;</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  <span class="keywordflow">if</span>(!<a class="code" href="namespaceSVF_1_1SVFUtil.html#a22ef185e767ff76c098e75126c885400">SVFUtil::isExtCall</a>(&fun))</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  {</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  <span class="keywordflow">if</span>(fun.<a class="code" href="classSVF_1_1SVFFunction.html#ac4ae917ae35ac6fca652fe2dd90a8ac2">getLLVMFun</a>()->doesNotReturn() == <span class="keyword">false</span> && fun.<a class="code" href="classSVF_1_1SVFFunction.html#ac4ae917ae35ac6fca652fe2dd90a8ac2">getLLVMFun</a>()->getReturnType()->isVoidTy() == <span class="keyword">false</span>)</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#a53774463f34bb8b528b179b72b48fd69">addFunRet</a>(&fun,<a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1IRGraph.html#a96010999a4e5013beb1c37ef753ff910">getReturnNode</a>(&fun)));</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span> </div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  <span class="keywordflow">for</span> (Function::arg_iterator I = fun.<a class="code" href="classSVF_1_1SVFFunction.html#ac4ae917ae35ac6fca652fe2dd90a8ac2">getLLVMFun</a>()->arg_begin(), E = fun.<a class="code" href="classSVF_1_1SVFFunction.html#ac4ae917ae35ac6fca652fe2dd90a8ac2">getLLVMFun</a>()->arg_end();</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  I != E; ++I) {</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a15105737c91d01ba9daf2161fad220ef">setCurrentLocation</a>(&*I,&fun.<a class="code" href="classSVF_1_1SVFFunction.html#ac4ae917ae35ac6fca652fe2dd90a8ac2">getLLVMFun</a>()->getEntryBlock());</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> argValNodeId = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(&*I);</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  <span class="comment">// if this is the function does not have caller (e.g. main)</span></div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  <span class="comment">// or a dead function, shall we create a black hole address edge for it?</span></div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  <span class="comment">// it is (1) too conservative, and (2) make FormalParmVFGNode defined at blackhole address PAGEdge.</span></div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  <span class="comment">// if(SVFUtil::ArgInNoCallerFunction(&*I)) {</span></div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  <span class="comment">// if(I->getType()->isPointerTy())</span></div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  <span class="comment">// addBlackHoleAddrEdge(argValNodeId);</span></div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  <span class="comment">//}</span></div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#ac27b9eedd489f13175c010a32203abae">addFunArgs</a>(&fun,<a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(argValNodeId));</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  }</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  }</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  <span class="keywordflow">for</span> (Function::iterator bit = fun.<a class="code" href="classSVF_1_1SVFFunction.html#ac4ae917ae35ac6fca652fe2dd90a8ac2">getLLVMFun</a>()->begin(), ebit = fun.<a class="code" href="classSVF_1_1SVFFunction.html#ac4ae917ae35ac6fca652fe2dd90a8ac2">getLLVMFun</a>()->end();</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  bit != ebit; ++bit)</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  {</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>& bb = *bit;</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  <span class="keywordflow">for</span> (BasicBlock::iterator it = bb.begin(), eit = bb.end();</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  it != eit; ++it)</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  {</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>& inst = *it;</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a15105737c91d01ba9daf2161fad220ef">setCurrentLocation</a>(&inst,&bb);</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  visit(inst);</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  }</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  }</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  }</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span> </div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a09baa8c7246853c3faaed85b38f0da60">sanityCheck</a>();</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span> </div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#af6a2c401d5c7582a4a958b1fe40838e5">initialiseCandidatePointers</a>();</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span> </div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1IRGraph.html#a5fe12445ed0528183775747dec356db0">setNodeNumAfterPAGBuild</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1GenericGraph.html#a8c8d16036008f87c7811586047599858">getTotalNodeNum</a>());</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span> </div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  <span class="comment">// dump SVFIR</span></div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a3a20311c732fb391332ae0ee1cb450a0">Options::PAGDotGraph</a>)</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1IRGraph.html#a1cb32461439c4dc8d044c2bfadb11307">dump</a>(<span class="stringliteral">"svfir_initial"</span>);</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span> </div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  <span class="comment">// print to command line of the SVFIR graph</span></div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a98df022c5da54ea30b3f0ce008d3ca80">Options::PAGPrint</a>)</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#a236b4fefd16e9c793c5bd6d576290841">print</a>();</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span> </div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  <span class="comment">// dump ICFG</span></div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#aea29a835c54fab800117e57de00e0b1e">Options::DumpICFG</a>)</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-><a class="code" href="classSVF_1_1ICFG.html#a999956500bbd605326531480546db9ba">dump</a>(<span class="stringliteral">"icfg_initial"</span>);</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span> </div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>;</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span> }</div><div class="ttc" id="classSVF_1_1GenericGraph_html_a8c8d16036008f87c7811586047599858"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#a8c8d16036008f87c7811586047599858">SVF::GenericGraph::getTotalNodeNum</a></div><div class="ttdeci">u32_t getTotalNodeNum() const</div><div class="ttdoc">Get total number of node/edge. </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00414">GenericGraph.h:414</a></div></div>
|
|
1497
|
+
<div class="fragment"><div class="line"><a name="l00048"></a><span class="lineno"> 48</span> {</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span> </div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  <span class="comment">// We read SVFIR from a user-defined txt instead of parsing SVFIR from LLVM IR</span></div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1SVFModule.html#a1357c876eccedd58b3abe68875b3a570">SVFModule::pagReadFromTXT</a>())</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  {</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  <a class="code" href="classSVF_1_1PAGBuilderFromFile.html">PAGBuilderFromFile</a> fileBuilder(<a class="code" href="classSVF_1_1SVFModule.html#a54c2bc2cb7cda0d74f4cadc676461b60">SVFModule::pagFileName</a>());</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  <span class="keywordflow">return</span> fileBuilder.build();</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  }</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span> </div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  <span class="comment">// If the SVFIR has been built before, then we return the unique SVFIR of the program</span></div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1IRGraph.html#a0a18bca50f7cd3a1882754f19303d257">getNodeNumAfterPAGBuild</a>() > 1)</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>;</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span> </div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#aa67bbd366b93fb1ec7a540c83566c977">svfMod</a> = svfModule;</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span> </div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#af4b18e8e1fdfb117cb5dd1a81cea4b71">initialiseNodes</a>();</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4c6cd51def26ebd8e839df9fdc4b64b8">visitGlobal</a>(svfModule);</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span> </div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1SVFModule.html#a709371b13dcf500277f8bc275bdb23c7">SVFModule::iterator</a> fit = svfModule-><a class="code" href="classSVF_1_1SVFModule.html#a5486697889c6cca4f9f426650defc255">begin</a>(), efit = svfModule-><a class="code" href="classSVF_1_1SVFModule.html#a58d03edb6ff85f4943135478f113df31">end</a>();</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  fit != efit; ++fit)</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  {</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>& fun = **fit;</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  <span class="keywordflow">if</span>(!fun.<a class="code" href="classSVF_1_1SVFFunction.html#ab672f0255ec8e42d5e414bc8c72b7c76">isDeclaration</a>())</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  {</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  <span class="keywordflow">if</span>(fun.<a class="code" href="classSVF_1_1SVFFunction.html#ac4ae917ae35ac6fca652fe2dd90a8ac2">getLLVMFun</a>()->doesNotReturn() == <span class="keyword">false</span> && fun.<a class="code" href="classSVF_1_1SVFFunction.html#ac4ae917ae35ac6fca652fe2dd90a8ac2">getLLVMFun</a>()->getReturnType()->isVoidTy() == <span class="keyword">false</span>)</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#a53774463f34bb8b528b179b72b48fd69">addFunRet</a>(&fun,<a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1IRGraph.html#a96010999a4e5013beb1c37ef753ff910">getReturnNode</a>(&fun)));</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span> </div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  <span class="keywordflow">for</span> (Function::arg_iterator I = fun.<a class="code" href="classSVF_1_1SVFFunction.html#ac4ae917ae35ac6fca652fe2dd90a8ac2">getLLVMFun</a>()->arg_begin(), E = fun.<a class="code" href="classSVF_1_1SVFFunction.html#ac4ae917ae35ac6fca652fe2dd90a8ac2">getLLVMFun</a>()->arg_end();</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  I != E; ++I) {</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a15105737c91d01ba9daf2161fad220ef">setCurrentLocation</a>(&*I,&fun.<a class="code" href="classSVF_1_1SVFFunction.html#ac4ae917ae35ac6fca652fe2dd90a8ac2">getLLVMFun</a>()->getEntryBlock());</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> argValNodeId = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(&*I);</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  <span class="comment">// if this is the function does not have caller (e.g. main)</span></div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  <span class="comment">// or a dead function, shall we create a black hole address edge for it?</span></div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  <span class="comment">// it is (1) too conservative, and (2) make FormalParmVFGNode defined at blackhole address PAGEdge.</span></div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  <span class="comment">// if(SVFUtil::ArgInNoCallerFunction(&*I)) {</span></div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  <span class="comment">// if(I->getType()->isPointerTy())</span></div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  <span class="comment">// addBlackHoleAddrEdge(argValNodeId);</span></div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  <span class="comment">//}</span></div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#ac27b9eedd489f13175c010a32203abae">addFunArgs</a>(&fun,<a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(argValNodeId));</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  }</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  }</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  <span class="keywordflow">for</span> (Function::iterator bit = fun.<a class="code" href="classSVF_1_1SVFFunction.html#ac4ae917ae35ac6fca652fe2dd90a8ac2">getLLVMFun</a>()->begin(), ebit = fun.<a class="code" href="classSVF_1_1SVFFunction.html#ac4ae917ae35ac6fca652fe2dd90a8ac2">getLLVMFun</a>()->end();</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  bit != ebit; ++bit)</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  {</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>& bb = *bit;</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  <span class="keywordflow">for</span> (BasicBlock::iterator it = bb.begin(), eit = bb.end();</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  it != eit; ++it)</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  {</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>& inst = *it;</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a15105737c91d01ba9daf2161fad220ef">setCurrentLocation</a>(&inst,&bb);</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  visit(inst);</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  }</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  }</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  }</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span> </div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a09baa8c7246853c3faaed85b38f0da60">sanityCheck</a>();</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span> </div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#af6a2c401d5c7582a4a958b1fe40838e5">initialiseCandidatePointers</a>();</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span> </div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1IRGraph.html#a5fe12445ed0528183775747dec356db0">setNodeNumAfterPAGBuild</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1GenericGraph.html#a8c8d16036008f87c7811586047599858">getTotalNodeNum</a>());</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span> </div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  <span class="comment">// dump SVFIR</span></div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a3a20311c732fb391332ae0ee1cb450a0">Options::PAGDotGraph</a>)</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1IRGraph.html#a1cb32461439c4dc8d044c2bfadb11307">dump</a>(<span class="stringliteral">"svfir_initial"</span>);</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span> </div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  <span class="comment">// print to command line of the SVFIR graph</span></div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a98df022c5da54ea30b3f0ce008d3ca80">Options::PAGPrint</a>)</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#a236b4fefd16e9c793c5bd6d576290841">print</a>();</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span> </div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  <span class="comment">// dump ICFG</span></div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#aea29a835c54fab800117e57de00e0b1e">Options::DumpICFG</a>)</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-><a class="code" href="classSVF_1_1ICFG.html#a999956500bbd605326531480546db9ba">dump</a>(<span class="stringliteral">"icfg_initial"</span>);</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span> </div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>;</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span> }</div><div class="ttc" id="classSVF_1_1GenericGraph_html_a8c8d16036008f87c7811586047599858"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#a8c8d16036008f87c7811586047599858">SVF::GenericGraph::getTotalNodeNum</a></div><div class="ttdeci">u32_t getTotalNodeNum() const</div><div class="ttdoc">Get total number of node/edge. </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00414">GenericGraph.h:414</a></div></div>
|
|
1498
1498
|
<div class="ttc" id="namespaceSVF_html_a23bf614858f168b6ad76e0233cec9965"><div class="ttname"><a href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">SVF::BasicBlock</a></div><div class="ttdeci">llvm::BasicBlock BasicBlock</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00077">BasicTypes.h:77</a></div></div>
|
|
1499
1499
|
<div class="ttc" id="namespaceSVF_html_a43a65e0d33af3c743294f7a1139d2301"><div class="ttname"><a href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">SVF::NodeID</a></div><div class="ttdeci">unsigned NodeID</div><div class="ttdef"><b>Definition:</b> <a href="MTAResultValidator_8h_source.html#l00018">MTAResultValidator.h:18</a></div></div>
|
|
1500
1500
|
<div class="ttc" id="classSVF_1_1SVFModule_html_a5486697889c6cca4f9f426650defc255"><div class="ttname"><a href="classSVF_1_1SVFModule.html#a5486697889c6cca4f9f426650defc255">SVF::SVFModule::begin</a></div><div class="ttdeci">iterator begin()</div><div class="ttdef"><b>Definition:</b> <a href="SVFModule_8h_source.html#l00147">SVFModule.h:147</a></div></div>
|
|
1501
1501
|
<div class="ttc" id="classSVF_1_1IRGraph_html_a1cb32461439c4dc8d044c2bfadb11307"><div class="ttname"><a href="classSVF_1_1IRGraph.html#a1cb32461439c4dc8d044c2bfadb11307">SVF::IRGraph::dump</a></div><div class="ttdeci">void dump(std::string name)</div><div class="ttdoc">Dump SVFIR. </div><div class="ttdef"><b>Definition:</b> <a href="IRGraph_8cpp_source.html#l00101">IRGraph.cpp:101</a></div></div>
|
|
1502
|
+
<div class="ttc" id="classSVF_1_1SVFFunction_html_ab672f0255ec8e42d5e414bc8c72b7c76"><div class="ttname"><a href="classSVF_1_1SVFFunction.html#ab672f0255ec8e42d5e414bc8c72b7c76">SVF::SVFFunction::isDeclaration</a></div><div class="ttdeci">bool isDeclaration() const</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00255">BasicTypes.h:255</a></div></div>
|
|
1502
1503
|
<div class="ttc" id="classSVF_1_1SVFFunction_html"><div class="ttname"><a href="classSVF_1_1SVFFunction.html">SVF::SVFFunction</a></div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00233">BasicTypes.h:233</a></div></div>
|
|
1503
1504
|
<div class="ttc" id="classSVF_1_1SVFIRBuilder_html_af4b18e8e1fdfb117cb5dd1a81cea4b71"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#af4b18e8e1fdfb117cb5dd1a81cea4b71">SVF::SVFIRBuilder::initialiseNodes</a></div><div class="ttdeci">void initialiseNodes()</div><div class="ttdoc">Initialize nodes and edges. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l00141">SVFIRBuilder.cpp:141</a></div></div>
|
|
1504
1505
|
<div class="ttc" id="classSVF_1_1SVFIRBuilder_html_a09baa8c7246853c3faaed85b38f0da60"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a09baa8c7246853c3faaed85b38f0da60">SVF::SVFIRBuilder::sanityCheck</a></div><div class="ttdeci">void sanityCheck()</div><div class="ttdoc">Sanity check for SVFIR. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l01544">SVFIRBuilder.cpp:1544</a></div></div>
|
|
@@ -1527,7 +1528,6 @@ Private Attributes</h2></td></tr>
|
|
|
1527
1528
|
<div class="ttc" id="classSVF_1_1IRGraph_html_a96010999a4e5013beb1c37ef753ff910"><div class="ttname"><a href="classSVF_1_1IRGraph.html#a96010999a4e5013beb1c37ef753ff910">SVF::IRGraph::getReturnNode</a></div><div class="ttdeci">NodeID getReturnNode(const SVFFunction *func) const</div><div class="ttdoc">GetReturnNode - Return the unique node representing the return value of a function. </div><div class="ttdef"><b>Definition:</b> <a href="IRGraph_8h_source.html#l00135">IRGraph.h:135</a></div></div>
|
|
1528
1529
|
<div class="ttc" id="classSVF_1_1GenericGraph_html_a43c9c773bfa17abf481c33073e30d01b"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">SVF::GenericGraph::getGNode</a></div><div class="ttdeci">NodeType * getGNode(NodeID id) const</div><div class="ttdoc">Get a node. </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00387">GenericGraph.h:387</a></div></div>
|
|
1529
1530
|
<div class="ttc" id="classSVF_1_1SVFIR_html_aa1943d53e75aef9b014953143c6894da"><div class="ttname"><a href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">SVF::SVFIR::getICFG</a></div><div class="ttdeci">ICFG * getICFG()</div><div class="ttdoc">Return ICFG. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00132">SVFIR.h:132</a></div></div>
|
|
1530
|
-
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a22ef185e767ff76c098e75126c885400"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a22ef185e767ff76c098e75126c885400">SVF::SVFUtil::isExtCall</a></div><div class="ttdeci">bool isExtCall(const SVFFunction *fun)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8h_source.html#l00063">LLVMUtil.h:63</a></div></div>
|
|
1531
1531
|
</div><!-- fragment -->
|
|
1532
1532
|
</div>
|
|
1533
1533
|
</div>
|
package/include/Util/ExtAPI.h
CHANGED
|
@@ -139,7 +139,7 @@ public:
|
|
|
139
139
|
funName = "llvm." + F->getName().split('.').second.split('.').first.str();
|
|
140
140
|
}
|
|
141
141
|
llvm::StringMap<extf_t>::const_iterator it= info.find(funName);
|
|
142
|
-
if(it == info.end()
|
|
142
|
+
if(it == info.end())
|
|
143
143
|
return EFT_OTHER;
|
|
144
144
|
else
|
|
145
145
|
return it->second;
|
|
@@ -74,7 +74,7 @@ SVFIR* SVFIRBuilder::build(SVFModule* svfModule)
|
|
|
74
74
|
{
|
|
75
75
|
const SVFFunction& fun = **fit;
|
|
76
76
|
/// collect return node of function fun
|
|
77
|
-
if(!
|
|
77
|
+
if(!fun.isDeclaration())
|
|
78
78
|
{
|
|
79
79
|
/// Return SVFIR node will not be created for function which can not
|
|
80
80
|
/// reach the return instruction due to call to abort(), exit(),
|
package/lib/Util/ExtAPI.cpp
CHANGED
|
@@ -461,7 +461,6 @@ static const ei_pair ei_pairs[]=
|
|
|
461
461
|
{"SSLv23_client_method", ExtAPI::EFT_ALLOC},
|
|
462
462
|
{"SyGetmem", ExtAPI::EFT_ALLOC},
|
|
463
463
|
{"TLSv1_client_method", ExtAPI::EFT_ALLOC},
|
|
464
|
-
{"Void_ExtendCore", ExtAPI::EFT_ALLOC},
|
|
465
464
|
{"XAddExtension", ExtAPI::EFT_ALLOC},
|
|
466
465
|
{"XAllocClassHint", ExtAPI::EFT_ALLOC},
|
|
467
466
|
{"XAllocSizeHints", ExtAPI::EFT_ALLOC},
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "svf-tools",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.369",
|
|
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": {
|