847 char **arg_value =
new char *[argc + extraArgc];
848 for (; arg_num < argc; ++arg_num)
850 arg_value[arg_num] = argv[arg_num];
853 arg_value[arg_num++] = (
char*)
"-model-consts=true";
854 arg_value[arg_num++] = (
char*)
"-model-arrays=true";
855 arg_value[arg_num++] = (
char*)
"-pre-field-sensitive=false";
856 assert(arg_num == (argc + extraArgc) &&
"more extra arguments? Change the value of extraArgc");
858 std::vector<std::string> moduleNameVec;
860 arg_num, arg_value,
"Static Symbolic Execution",
"[options] <input-bitcode...>"
878 SVFModule *svfModule = LLVMModuleSet::getLLVMModuleSet()->buildSVFModule(moduleNameVec);
880 SVFIR* pag = builder.build();
883 builder.updateCallGraph(callgraph);
886 if (Options::BufferOverflowCheck())
887 ae.
addDetector(std::make_unique<BufOverflowDetector>());
890 LLVMModuleSet::releaseLLVMModuleSet();
static Option< bool > AETEST("aetest", "abstract execution basic function test", false)
static Option< bool > SYMABS("symabs", "symbolic abstraction test", false)
static std::vector< std::string > parseOptions(int argc, char *argv[], std::string description, std::string callFormat)
AbstractInterpretation is same as Abstract Execution.
void addDetector(std::unique_ptr< AEDetector > detector)
virtual void runOnModule(ICFG *icfg)
void updateCallGraph(PTACallGraph *callgraph)
update ICFG for indirect calls
PTACallGraph * getCallGraph() const
Return call graph.