forked from sroyuela/rose
-
Notifications
You must be signed in to change notification settings - Fork 0
/
virtualCFG.C
30 lines (24 loc) · 1.17 KB
/
virtualCFG.C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
// Example translator to generate dot files of virtual control flow graphs
#include "rose.h"
#include <string>
using namespace std;
int main(int argc, char *argv[])
{
// Build the AST used by ROSE
SgProject* sageProject = frontend(argc,argv);
// Process all function definition bodies for virtual control flow graph generation
Rose_STL_Container<SgNode*> functions = NodeQuery::querySubTree(sageProject, V_SgFunctionDefinition);
for (Rose_STL_Container<SgNode*>::const_iterator i = functions.begin(); i != functions.end(); ++i)
{
SgFunctionDefinition* proc = isSgFunctionDefinition(*i);
ROSE_ASSERT (proc != NULL);
string fileName= StringUtility::stripPathFromFileName(proc->get_file_info()->get_filenameString());
string dotFileName1=fileName+"."+ proc->get_declaration()->get_name() +".debug.dot";
string dotFileName2=fileName+"."+ proc->get_declaration()->get_name() +".interesting.dot";
// Dump out the full CFG, including bookkeeping nodes
VirtualCFG::cfgToDotForDebugging(proc, dotFileName1);
// Dump out only those nodes which are "interesting" for analyses
VirtualCFG::interestingCfgToDot (proc, dotFileName2);
}
return 0;
}