Static Value-Flow Analysis
Loading...
Searching...
No Matches
Options.cpp
Go to the documentation of this file.
1//===- Options.cpp -- Command line options ------------------------//
2
3#include "Util/Options.h"
4#include "Util/CommandLine.h"
6#include "Util/ExtAPI.h"
7#include "MemoryModel/PTATY.h"
8#include "MSSA/MemSSA.h"
9#include "WPA/WPAPass.h"
11
12namespace SVF
13{
14const OptionMap<enum SVFStat::ClockType> Options::ClockType(
15 "clock-type",
16 "how time should be measured",
18{
19 {SVFStat::ClockType::Wall, "wall", "use wall time"},
20 {SVFStat::ClockType::CPU, "cpu", "use CPU time"},
21}
22);
23
24const Option<bool> Options::MarkedClocksOnly(
25 "marked-clocks-only",
26 "Only measure times where explicitly marked",
27 true
28);
29
30const OptionMap<NodeIDAllocator::Strategy> Options::NodeAllocStrat(
31 "node-alloc-strat",
32 "Method of allocating (LLVM) values and memory objects as node IDs",
34{
35 {NodeIDAllocator::Strategy::DENSE, "dense", "allocate objects together [0-n] and values together [m-MAX], separately"},
36 {NodeIDAllocator::Strategy::REVERSE_DENSE, "reverse-dense", "like dense but flipped, objects are [m-MAX], values are [0-n]"},
37 {NodeIDAllocator::Strategy::SEQ, "seq", "allocate values and objects sequentially, intermixed (default)"},
38 {NodeIDAllocator::Strategy::DBUG, "debug", "allocate value and objects sequentially, intermixed, except GEP objects as offsets"},
39}
40);
41
42const Option<u32_t> Options::MaxFieldLimit(
43 "field-limit",
44 "Maximum number of fields for field sensitive analysis",
45 512
46);
47
48const OptionMap<PTBackingType> Options::ptDataBacking(
49 "ptd",
50 "Overarching points-to data structure",
52{
53 {PTBackingType::Mutable, "mutable", "points-to set per pointer"},
54 {PTBackingType::Persistent, "persistent", "points-to set ID per pointer, operations hash-consed"},
55}
56);
57
58const Option<u32_t> Options::FsTimeLimit(
59 "fs-time-limit",
60 "time limit for main phase of flow-sensitive analyses (0 = no timer)",
61 0
62);
63
64const Option<u32_t> Options::VersioningThreads(
65 "versioning-threads",
66 "number of threads to use in the versioning phase of versioned flow-sensitive analysis",
67 1
68);
69
70const Option<u32_t> Options::AnderTimeLimit(
71 "ander-time-limit",
72 "time limit for Andersen's analyses (erroneous to set when -fs-time-limit is; 0 = no timer)",
73 0
74);
75
76// ContextDDA.cpp
77const Option<u32_t> Options::CxtBudget(
78 "cxt-bg",
79 "Maximum step budget of context-sensitive traversing",
80 10000
81);
82
83// DDAPass.cpp
84const Option<u32_t> Options::MaxPathLen(
85 "max-path",
86 "Maximum path limit for DDA",
87 100000
88);
89
90Option<u32_t> Options::MaxContextLen(
91 "max-cxt",
92 "Maximum context limit for DDA",
93 3
94);
95
96const Option<u32_t> Options::MaxStepInWrapper(
97 "max-step",
98 "Maximum steps when traversing on SVFG to identify a memory allocation wrapper",
99 10
100);
101
102const Option<std::string> Options::UserInputQuery(
103 "query",
104 "Please specify queries by inputing their pointer ids",
105 "all"
106);
107
108const Option<bool> Options::InsenRecur(
109 "in-recur",
110 "Mark context insensitive SVFG edges due to function recursions",
111 false
112);
113
114const Option<bool> Options::InsenCycle(
115 "in-cycle",
116 "Mark context insensitive SVFG edges due to value-flow cycles",
117 false
118);
119
120const Option<bool> Options::PrintCPts(
121 "cpts",
122 "Dump conditional points-to set ",
123 false
124);
125
126const Option<bool> Options::PrintQueryPts(
127 "print-query-pts",
128 "Dump queries' conditional points-to set ",
129 false
130);
131
132const Option<bool> Options::WPANum(
133 "wpa-num",
134 "collect WPA FS number only ",
135 false
136);
137
139//static RegisterAnalysisGroup<AliasAnalysis> AA_GROUP(DDAPA);
140OptionMultiple<PTATY> Options::DDASelected(
141 "Select pointer analysis",
142{
143 {PTATY::FlowS_DDA, "dfs", "Demand-driven flow sensitive analysis"},
144 {PTATY::Cxt_DDA, "cxt", "Demand-driven context- flow- sensitive analysis"},
145}
146);
147
148// FlowDDA.cpp
149const Option<u32_t> Options::FlowBudget(
150 "flow-bg",
151 "Maximum step budget of flow-sensitive traversing",
152 10000
153);
154
155
156// Offline constraint graph (OfflineConsG.cpp)
157const Option<bool> Options::OCGDotGraph(
158 "dump-ocg",
159 "Dump dot graph of Offline Constraint Graph",
160 false
161);
162
163
164// Program Assignment Graph for pointer analysis (SVFIR.cpp)
165Option<bool> Options::HandBlackHole(
166 "blk",
167 "Handle blackhole edge",
168 false
169);
170
171const Option<bool> Options::UndefAsNull(
172 "undef-as-null",
173 "Map pointer-typed undef and poison to the null node "
174 "(opt-in points-to approximation; unsuitable for abstract execution)",
175 false
176);
177
178const Option<bool> Options::FirstFieldEqBase(
179 "ff-eq-base",
180 "Treat base objects as their first fields",
181 false
182);
183
184
185// SVFG optimizer (SVFGOPT.cpp)
186const Option<bool> Options::ContextInsensitive(
187 "ci-svfg",
188 "Reduce SVFG into a context-insensitive one",
189 false
190);
191
192const Option<bool> Options::KeepAOFI(
193 "keep-aofi",
194 "Keep formal-in and actual-out parameters",
195 false
196);
197
198const Option<std::string> Options::SelfCycle(
199 "keep-self-cycle",
200 "How to handle self cycle edges: all, context, none",
201 ""
202);
203
204
205// Sparse value-flow graph (VFG.cpp)
206const Option<bool> Options::DumpVFG(
207 "dump-vfg",
208 "Dump dot graph of VFG",
209 false
210);
211const Option<bool> Options::DumpSparseObjGraph(
212 "dump-sparse-obj-graph",
213 "Dump object routes to sparse_obj_graph.dot when a full SVFG is built",
214 false
215);
216
217
218// Base class of pointer analyses (PointerAnalysis.cpp)
219const Option<bool> Options::TypePrint(
220 "print-type",
221 "Print type",
222 false
223);
224
225const Option<bool> Options::FuncPointerPrint(
226 "print-fp",
227 "Print targets of indirect call site",
228 false
229);
230
231const Option<bool> Options::PTSPrint(
232 "print-pts",
233 "Print points-to set of top-level pointers",
234 false
235);
236
237const Option<bool> Options::PrintFieldWithBasePrefix(
238 "print-field",
239 "Print field object with base object id as the prefix",
240 false
241);
242
243const Option<bool> Options::PTSAllPrint(
244 "print-all-pts",
245 "Print all points-to set of both top-level and address-taken variables",
246 false
247);
248
249const Option<bool> Options::PStat(
250 "stat",
251 "Statistic for Pointer analysis",
252 true
253);
254
255const Option<u32_t> Options::StatBudget(
256 "stat-limit",
257 "Iteration budget for On-the-fly statistics",
258 20
259);
260
261const Option<bool> Options::PAGDotGraph(
262 "dump-pag",
263 "Dump dot graph of SVFIR",
264 false
265);
266
267const Option<bool> Options::ShowSVFIRValue(
268 "show-ir-value",
269 "Show values of SVFIR (e.g., when generating dot graph)",
270 true
271);
272
273const Option<bool> Options::DumpICFG(
274 "dump-icfg",
275 "Dump dot graph of ICFG",
276 false
277);
278
279const Option<std::string> Options::DumpJson(
280 "dump-json",
281 "Dump the SVFIR in JSON format",
282 ""
283);
284
285const Option<bool> Options::ReadJson(
286 "read-json",
287 "Read the SVFIR in JSON format",
288 false
289);
290
291const Option<bool> Options::CallGraphDotGraph(
292 "dump-callgraph",
293 "Dump dot graph of Call Graph",
294 false
295);
296
297const Option<bool> Options::PAGPrint(
298 "print-pag",
299 "Print SVFIR to command line",
300 false
301);
302
303const Option<u32_t> Options::IndirectCallLimit(
304 "ind-call-limit",
305 "Indirect solved call edge limit",
306 50000
307);
308
310 "pre-field-sensitive",
311 "Use pre-computed field-sensitivity for later analysis",
312 true
313);
314
315const Option<bool> Options::EnableAliasCheck(
316 "alias-check",
317 "Enable alias check functions",
318 true
319);
320
321const Option<bool> Options::EnableTypeCheck(
322 "type-check",
323 "Enable type check functions",
324 true
325);
326
327const Option<bool> Options::EnableThreadCallGraph(
328 "enable-tcg",
329 "Enable pointer analysis to use thread call graph",
330 true
331);
332
333const Option<bool> Options::ConnectVCallOnCHA(
334 "v-call-cha",
335 "connect virtual calls using cha",
336 false
337);
338
339
340// PointerAnalysisImpl.cpp
341const Option<bool> Options::INCDFPTData(
342 "inc-data",
343 "Enable incremental DFPTData for flow-sensitive analysis",
344 true
345);
346
347const Option<bool> Options::ClusterAnder(
348 "cluster-ander",
349 "Stage Andersen's with Steensgard's and cluster based on that",
350 false
351);
352
353const Option<bool> Options::ClusterFs(
354 "cluster-fs",
355 "Cluster for FS/VFS with auxiliary Andersen's",
356 false
357);
358
359const Option<bool> Options::PlainMappingFs(
360 "plain-mapping-fs",
361 "Use an explicitly (not null) plain mapping for FS",
362 false
363);
364
365const OptionMap<PointsTo::Type> Options::PtType(
366 "pt-type",
367 "points-to set data structure to use in all analyses",
368 PointsTo::Type::SBV,
369{
370 {PointsTo::Type::SBV, "sbv", "sparse bit-vector"},
371 {PointsTo::Type::CBV, "cbv", "core bit-vector (dynamic bit-vector without leading and trailing 0s)"},
372 {PointsTo::Type::BV, "bv", "bit-vector (dynamic bit-vector without trailing 0s)"},
373}
374);
375
376const OptionMap<u32_t> Options::ClusterMethod(
377 "cluster-method",
378 "hierarchical clustering method for objects",
380{
381 {HCLUST_METHOD_SINGLE, "single", "single linkage; minimum spanning tree algorithm"},
382 {HCLUST_METHOD_COMPLETE, "complete", "complete linkage; nearest-neighbour-chain algorithm"},
383 {HCLUST_METHOD_AVERAGE, "average", "unweighted average linkage; nearest-neighbour-chain algorithm"},
384 {HCLUST_METHOD_SVF_BEST, "best", "try all linkage criteria; choose best"},
385}
386);
387
388const Option<bool> Options::RegionedClustering(
389 // Use cluster to "gather" the options closer together, even if it sounds a little worse.
390 "cluster-regioned",
391 "cluster regions separately",
392 true
393);
394
395const Option<bool> Options::RegionAlign(
396 "cluster-region-aligned",
397 "align each region's identifiers to the native word size",
398 true
399);
400
401const Option<bool> Options::PredictPtOcc(
402 "cluster-predict-occ",
403 "try to predict which points-to sets are more important in staged analysis",
404 false
405);
406
407// Memory region (MemRegion.cpp)
408const Option<bool> Options::IgnoreDeadFun(
409 "mssa-ignore-dead-fun",
410 "Don't construct memory SSA for deadfunction",
411 false
412);
413
414
415// Base class of pointer analyses (MemSSA.cpp)
416const Option<bool> Options::DumpMSSA(
417 "dump-mssa",
418 "Dump memory SSA",
419 false
420);
421
422const Option<std::string> Options::MSSAFun(
423 "mssa-fun",
424 "Please specify which function needs to be dumped",
425 ""
426);
427
428const OptionMap<u32_t> Options::MemPar(
429 "mem-par",
430 "Memory region partition strategies (e.g., for SVFG construction)",
432{
433 {MemSSA::MemPartition::Distinct, "distinct", "memory region per each object"},
434 {MemSSA::MemPartition::IntraDisjoint, "intra-disjoint", "memory regions partitioned based on each function"},
435 {MemSSA::MemPartition::InterDisjoint, "inter-disjoint", "memory regions partitioned across functions"},
436}
437);
438
439
440// SVFG builder (SVFGBuilder.cpp)
441const Option<bool> Options::SVFGWithIndirectCall(
442 "svfg-with-ind-call",
443 "Update Indirect Calls for SVFG using pre-analysis",
444 false
445);
446
447Option<bool> Options::OPTSVFG(
448 "opt-svfg",
449 "Optimize SVFG to eliminate formal-in and actual-out",
450 false
451);
452
453const Option<std::string> Options::WriteSVFG(
454 "write-svfg",
455 "Write SVFG's analysis results to a file",
456 ""
457);
458
459const Option<std::string> Options::ReadSVFG(
460 "read-svfg",
461 "Read SVFG's analysis results from a file",
462 ""
463);
464
465
466const Option<bool> Options::IntraLock(
467 "mta-intra-lock-td-edge",
468 "Use simple intra-procedural lock for adding SVFG edges",
469 true
470);
471
472
473// LockAnalysis.cpp
474const Option<bool> Options::PrintLockSpan(
475 "mta-print-lock",
476 "Print Thread Interleaving Results",
477 false
478);
479
480
481// MHP.cpp
482const Option<bool> Options::PrintInterLev(
483 "mta-print-interlev",
484 "Print Thread Interleaving Results",
485 false
486);
487
488const Option<bool> Options::DoLockAnalysis(
489 "mta-lock-analysis",
490 "Run Lock Analysis",
491 true
492);
493
494
495// TCT.cpp
496const Option<bool> Options::TCTDotGraph(
497 "mta-dump-tct",
498 "Dump dot graph of Call Graph",
499 false
500);
501
502
503// LeakChecker.cpp
504const Option<bool> Options::ValidateTests(
505 "valid-tests",
506 "Validate memory leak tests",
507 false
508);
509
510
511// Source-sink analyzer (SrcSnkDDA.cpp)
512const Option<bool> Options::DumpSlice(
513 "dump-slice",
514 "Dump dot graph of Saber Slices",
515 false
516);
517
518const Option<u32_t> Options::CxtLimit(
519 "cxt-limit",
520 "Source-Sink Analysis Contexts Limit",
521 3
522);
523
524
525// CHG.cpp
526const Option<bool> Options::DumpCHA(
527 "dump-cha",
528 "dump the class hierarchy graph",
529 false
530);
531
532
533// LLVMModule.cpp
534const Option<std::string> Options::Graphtxt(
535 "graph-txt",
536 "graph txt file to build SVFIR",
537 ""
538);
539
540Option<bool> Options::SVFMain(
541 "svf-main",
542 "add svf.main()",
543 false
544);
545
546Option<bool> Options::ModelConsts(
547 "model-consts",
548 "Modeling individual constant objects",
549 false
550);
551
552Option<bool> Options::ModelArrays(
553 "model-arrays",
554 "Modeling Gep offsets for array accesses",
555 false
556);
557
558const Option<bool> Options::CyclicFldIdx(
559 "cyclic-field-index",
560 "Enable cyclic field index when generating field objects using modulus offset",
561 false
562);
563
564const Option<bool> Options::SymTabPrint(
565 "print-symbol-table",
566 "Print Symbol Table to command line",
567 false
568);
569
570// Conditions.cpp
571const Option<u32_t> Options::MaxZ3Size(
572 "max-z3-size",
573 "Maximum size limit for Z3 expression",
574 30
575);
576
577// BoundedZ3Expr.cpp
578const Option<u32_t> Options::MaxBVLen(
579 "max-bv-len",
580 "Maximum length limit for Z3 bitvector",
581 64
582);
583
584
585
586// SaberCondAllocator.cpp
587const Option<bool> Options::PrintPathCond(
588 "print-pc",
589 "Print out path condition",
590 false
591);
592
593
594// SaberSVFGBuilder.cpp
595const Option<bool> Options::CollectExtRetGlobals(
596 "saber-collect-extret-globals",
597 "Don't include pointers returned by external function during collecting globals",
598 true
599);
600
601
602// SVFUtil.cpp
603const Option<bool> Options::DisableWarn(
604 "dwarn",
605 "Disable warning",
606 true
607);
608
609
610// Andersen.cpp
611const Option<bool> Options::ConsCGDotGraph(
612 "dump-constraint-graph",
613 "Dump dot graph of Constraint Graph",
614 false
615);
616
617const Option<bool> Options::BriefConsCGDotGraph(
618 "brief-constraint-graph",
619 "Dump dot graph of Constraint Graph",
620 true
621);
622
623const Option<bool> Options::PrintCGGraph(
624 "print-constraint-graph",
625 "Print Constraint Graph to Terminal",
626 false
627);
628
629const Option<std::string> Options::WriteAnder(
630 "write-ander",
631 "Write Andersen's analysis results to a user-specified text file",
632 ""
633);
634
635const Option<std::string> Options::ReadAnder(
636 "read-ander",
637 "Read Andersen's analysis results from a text file",
638 ""
639);
640
641const Option<bool> Options::DiffPts(
642 "diff",
643 "Enable differential point-to set",
644 true
645);
646
647Option<bool> Options::DetectPWC(
648 "merge-pwc",
649 "Enable PWC detection",
650 true
651);
652
653//SVFIRBuilder.cpp
654const Option<bool> Options::VtableInSVFIR(
655 "vt-in-ir",
656 "Handle vtable in ConstantArray/ConstantStruct in SVFIRBuilder (already handled in CHA?)",
657 false
658);
659
660//WPAPass.cpp
661const Option<std::string> Options::ExtAPIPath(
662 "extapi",
663 "External API extapi.bc",
664 ""
665);
666
667const Option<bool> Options::AnderSVFG(
668 "svfg",
669 "Generate SVFG after Andersen's Analysis",
670 false
671);
672
673const Option<bool> Options::SABERFULLSVFG(
674 "saber-full-svfg",
675 "When using SABER for bug detection pass, enable full svfg on top of the pointer-only one",
676 false
677);
678
679const Option<bool> Options::PrintAliases(
680 "print-aliases",
681 "Print results for all pair aliases",
682 false
683);
684
685OptionMultiple<PTATY> Options::PASelected(
686 "Select pointer analysis",
687{
688 {PTATY::Andersen_WPA, "nander", "Standard inclusion-based analysis"},
689 {PTATY::AndersenSCD_WPA, "sander", "Selective cycle detection inclusion-based analysis"},
690 {PTATY::AndersenSFR_WPA, "sfrander", "Stride-based field representation inclusion-based analysis"},
691 {PTATY::AndersenWaveDiff_WPA, "ander", "Diff wave propagation inclusion-based analysis"},
692 {PTATY::Steensgaard_WPA, "steens", "Steensgaard's pointer analysis"},
693 // Disabled till further work is done.
694 {PTATY::FSSPARSE_WPA, "fspta", "Sparse flow sensitive pointer analysis"},
695 {PTATY::VFS_WPA, "vfspta", "Versioned sparse flow-sensitive points-to analysis"},
696 {PTATY::TypeCPP_WPA, "type", "Type-based fast analysis for Callgraph, SVFIR and CHA"},
697}
698);
699
700
701OptionMultiple<u32_t> Options::AliasRule(
702 "Select alias check rule",
703{
704 {WPAPass::Conservative, "conservative", "return MayAlias if any pta says alias"},
705 {WPAPass::Veto, "veto", "return NoAlias if any pta says no alias"},
706}
707);
708
709const Option<bool> Options::ShowHiddenNode(
710 "show-hidden-nodes",
711 "Show hidden nodes on DOT Graphs (e.g., isolated node on a graph)",
712 false
713);
714
715const Option<std::string> Options::GrammarFilename(
716 "grammar",
717 "<Grammar textfile>",
718 ""
719);
720
721const Option<std::string> Options::CFLGraph(
722 "cflgraph",
723 "<Dot file as the CFLGraph input>",
724 ""
725);
726
727const Option<bool> Options::PrintCFL(
728 "print-cfl",
729 "Print ir, grammar and cflgraph for debug.",
730 false
731);
732
733const Option<bool> Options::FlexSymMap(
734 "flex-symmap",
735 "Extend exist sym map while read graph from dot if sym not in map.",
736 false
737);
738
739const Option<bool> Options::PEGTransfer(
740 "peg-transfer",
741 "When explicit to true, cfl graph builder will transfer PAG load and store edges to copy and addr.",
742 false
743);
744
745const Option<bool> Options::CFLSVFG(
746 "cflsvfg",
747 "When explicit to true, cfl graph builder will transfer SVFG to CFL Reachability.",
748 false
749);
750
751const Option<bool> Options::POCRAlias(
752 "pocr-alias",
753 "When explicit to true, cfl data builder will transfer CFL graph to CFLData.",
754 false
755);
756
757const Option<bool> Options::POCRHybrid(
758 "pocr-hybrid",
759 "When explicit to true, POCRHybridSolver transfer CFL graph to internal hybrid graph representation.",
760 false
761);
762
763const Option<bool> Options::Customized(
764 "customized",
765 "When explicit to true, user can use any grammar file.",
766 false
767);
768
769const Option<bool> Options::LoopAnalysis(
770 "loop-analysis",
771 "Analyze every func and get loop info and loop bounds.",
772 true
773);
774
775const Option<u32_t> Options::LoopBound(
776 "loop-bound",
777 "Maximum number of loop",
778 1
779);
780
781const OptionMap<u32_t> Options::AESparsity(
782 "ae-sparsity",
783 "Abstract execution mode (Default: dense)",
785{
786 {
788 "Dense abstract execution: all variables propagated along ICFG edges."
789 },
790 {
792 "Semi-sparse abstract execution: ObjVars dense, ValVars sparse."
793 },
794 {
796 "Sparse abstract execution via SVFG."
797 }
798});
799const OptionMap<u32_t> Options::AEFunEntry(
800 "ae-fun-entry",
801 "Abstract execution function entry mode (Default: main)",
803{
804 {
806 "Analyze from the program entry function only."
807 },
808 {
810 "Analyze from every no-external-caller SCC after Andersen resolves the call graph."
811 }
812});
813const Option<u32_t> Options::WidenDelay(
814 "widen-delay", "Loop Widen Delay", 3);
815const OptionMap<u32_t> Options::HandleRecur(
816 "handle-recur",
817 "Recursion handling mode in abstract execution (Default -widen-narrow)",
819{
820 {
822 "The return value, and any stored object pointed by q at *q = p in recursive functions will be set to the top value."
823 },
824 {
826 "Only apply widening at the cycle head of recursive functions."
827 },
828 {
830 "Apply both widening and narrowing at the cycle head of recursive functions."
831 }
832}
833);
834const Option<u32_t> Options::Timeout(
835 "timeout", "time out (seconds), set -1 (no timeout), default 14400s",14400);
836const Option<std::string> Options::OutputName(
837 "output","output db file","output.db");
838const Option<bool> Options::BufferOverflowCheck(
839 "overflow","Buffer Overflow Detection",false);
840const Option<bool> Options::NullDerefCheck(
841 "null-deref","Null Pointer Dereference Detection",false);
842const Option<bool> Options::MemoryLeakCheck(
843 "leak", "Memory Leak Detection",false);
844const Option<bool> Options::FileCheck(
845 "fileck", "File Open/Close Detection",false);
846const Option<bool> Options::DFreeCheck(
847 "dfree", "Double Free Detection",false);
848const Option<bool> Options::MTFlowSensitive(
849 "mta-flow-sensitive", "MTA: flow-sensitive (FSAM) main analysis; false = Andersen flow-insensitive base", true);
850const Option<bool> Options::DumpMTAGraphs(
851 "mta-dump-graphs", "MTA: dump the pointer-analysis and thread call graphs (ptacg/tcg.dot)", false);
852const Option<bool> Options::MTAEnableSlicing(
853 "mta-enable-slicing", "MTA slicing: slice before the FSAM main analysis (false = whole-program baseline)", true);
854const Option<bool> Options::MTASingleStageSlicing(
855 "mta-slicing-single", "MTA slicing: use one unified slice for both ILA and FSPTA (single-pass baseline)", false);
856const Option<bool> Options::GepUnknownIdx(
857 "gep-unknown-idx","Skip Gep Unknown Index",false);
858const Option<bool> Options::RunUncallFuncs(
859 "run-uncall-fun","Skip Gep Unknown Index",false);
860const Option<bool> Options::ICFGMergeAdjacentNodes(
861 "icfg-merge-adjnodes","ICFG Simplification - Merge Adjacent Nodes in the Same Basic Block.",false);
862
863
864const Option<u32_t> Options::AEPrecision(
865 "precision",
866 "symbolic abstraction precision for float",
867 0
868);
869
870const Option<u32_t> Options::MaxNodeLabelLength(
871 "max-node-label-length",
872 "maxmimum length of dumped graph node labels",
873 250
874);
875
876} // namespace SVF.
@ InterDisjoint
Definition MemSSA.h:117
@ IntraDisjoint
Definition MemSSA.h:116
@ SEQ
Allocate objects objects and values sequentially, intermixed.
static const Option< bool > IgnoreDeadFun
Definition Options.h:137
static const Option< bool > PlainMappingFs
Use an explicitly plain mapping with flow-sensitive (not null).
Definition Options.h:43
static const Option< bool > UndefAsNull
Definition Options.h:99
static const Option< std::string > ReadSVFG
Definition Options.h:150
static const Option< bool > SVFGWithIndirectCall
Definition Options.h:146
static const Option< bool > KeepAOFI
Definition Options.h:104
static const Option< bool > CallGraphDotGraph
Definition Options.h:124
static const Option< bool > DumpMSSA
Definition Options.h:140
static const Option< bool > InsenCycle
Definition Options.h:85
static const Option< bool > FirstFieldEqBase
Definition Options.h:100
static Option< bool > ModelArrays
Definition Options.h:180
static const Option< bool > Customized
Definition Options.h:231
static const Option< bool > DisableWarn
Definition Options.h:197
static const Option< bool > INCDFPTData
Definition Options.h:134
static const Option< u32_t > LoopBound
Definition Options.h:235
static const Option< bool > PrintInterLev
Definition Options.h:157
static const Option< bool > EnableThreadCallGraph
Definition Options.h:130
static const Option< bool > PAGDotGraph
Definition Options.h:119
static OptionMultiple< u32_t > AliasRule
Definition Options.h:217
static const Option< bool > BriefConsCGDotGraph
Definition Options.h:201
static const Option< std::string > WriteSVFG
Definition Options.h:149
static const OptionMap< u32_t > HandleRecur
recursion handling mode, Default: TOP
Definition Options.h:242
static const Option< std::string > ExtAPIPath
Definition Options.h:212
static const Option< bool > POCRAlias
Definition Options.h:229
static const Option< bool > EnableTypeCheck
Definition Options.h:129
static const Option< bool > PrintLockSpan
Definition Options.h:154
static const Option< u32_t > AnderTimeLimit
Time limit for the Andersen's analyses.
Definition Options.h:71
static const OptionMap< SVF::NodeIDAllocator::Strategy > NodeAllocStrat
Definition Options.h:31
static const Option< bool > POCRHybrid
Definition Options.h:230
static const Option< bool > CyclicFldIdx
Definition Options.h:181
static const Option< bool > DFreeCheck
double free checker, Default: false
Definition Options.h:256
static const Option< u32_t > CxtBudget
Definition Options.h:77
static const Option< bool > MTAEnableSlicing
MTA slicing: slice before the FSAM main analysis (false = whole-program baseline),...
Definition Options.h:263
static const Option< std::string > DumpJson
Definition Options.h:122
static Option< bool > DetectPWC
Definition Options.h:208
static const Option< u32_t > CxtLimit
Definition Options.h:168
static const Option< bool > PrintFieldWithBasePrefix
Definition Options.h:116
static const Option< bool > ShowSVFIRValue
Definition Options.h:120
static const Option< bool > PTSPrint
Definition Options.h:114
static const Option< std::string > ReadAnder
Definition Options.h:206
static const Option< bool > ClusterAnder
Whether to stage Andersen's with Steensgaard and cluster based on that data.
Definition Options.h:37
static const Option< bool > PEGTransfer
Definition Options.h:227
static const Option< u32_t > Timeout
the max time consumptions (seconds). Default: 4 hours 14400s
Definition Options.h:244
static Option< bool > HandBlackHole
Definition Options.h:98
static const Option< bool > SymTabPrint
Definition Options.h:182
static const OptionMap< u32_t > MemPar
Definition Options.h:143
static const Option< std::string > Graphtxt
Definition Options.h:174
static const OptionMap< PointsTo::Type > PtType
Type of points-to set to use for all analyses.
Definition Options.h:46
static const Option< bool > RegionAlign
Align identifiers in each region to a word.
Definition Options.h:58
static Option< bool > ModelConsts
Definition Options.h:179
static const Option< std::string > UserInputQuery
Definition Options.h:83
static const Option< bool > EnableAliasCheck
Definition Options.h:128
static const Option< bool > PrintPathCond
Definition Options.h:191
static const Option< u32_t > MaxPathLen
Definition Options.h:80
static const OptionMap< u32_t > AESparsity
Definition Options.h:238
static const Option< bool > GepUnknownIdx
if the access index of gepstmt is unknown, skip it, Default: false
Definition Options.h:267
static const Option< bool > FileCheck
file open close checker, Default: false
Definition Options.h:254
static const Option< bool > DumpSparseObjGraph
Definition Options.h:109
static const Option< bool > DumpMTAGraphs
MTA: dump the pointer-analysis and thread call graphs (ptacg/tcg.dot), Default: false.
Definition Options.h:260
static const Option< u32_t > FsTimeLimit
Time limit for the main phase (i.e., the actual solving) of FS analyses.
Definition Options.h:68
static const Option< u32_t > MaxBVLen
Definition Options.h:188
static const Option< bool > PTSAllPrint
Definition Options.h:115
static const Option< bool > ICFGMergeAdjacentNodes
Definition Options.h:270
static const Option< bool > WPANum
Definition Options.h:88
static const Option< bool > PAGPrint
Definition Options.h:125
static const Option< bool > CFLSVFG
Definition Options.h:228
static const Option< std::string > CFLGraph
Definition Options.h:224
static const Option< bool > TypePrint
Definition Options.h:112
static const Option< bool > ClusterFs
Whether to cluster FS or VFS with the auxiliary Andersen's.
Definition Options.h:40
static const Option< u32_t > MaxZ3Size
Definition Options.h:185
static const Option< bool > VtableInSVFIR
Definition Options.h:209
static const Option< u32_t > FlowBudget
Definition Options.h:92
static const Option< bool > RegionedClustering
Cluster partitions separately.
Definition Options.h:55
static const Option< bool > FlexSymMap
Definition Options.h:226
static const Option< u32_t > AEPrecision
Definition Options.h:273
static Option< bool > UsePreCompFieldSensitive
Definition Options.h:127
static const Option< bool > SABERFULLSVFG
Definition Options.h:214
static const Option< bool > CollectExtRetGlobals
Definition Options.h:194
static const Option< bool > PrintCGGraph
Definition Options.h:202
static const Option< std::string > SelfCycle
Definition Options.h:105
static const Option< bool > PrintCFL
Definition Options.h:225
static const Option< bool > MTASingleStageSlicing
MTA slicing: one unified slice for ILA + FSPTA (single-pass baseline), Default: false.
Definition Options.h:265
static const Option< u32_t > IndirectCallLimit
Definition Options.h:126
static const OptionMap< PTBackingType > ptDataBacking
PTData type.
Definition Options.h:65
static const Option< std::string > MSSAFun
Definition Options.h:141
static OptionMultiple< PTATY > PASelected
Definition Options.h:216
static const Option< u32_t > MaxFieldLimit
Maximum number of field derivations for an object.
Definition Options.h:34
static const OptionMap< u32_t > ClusterMethod
Definition Options.h:52
static const Option< u32_t > MaxStepInWrapper
Definition Options.h:82
static const Option< std::string > WriteAnder
Definition Options.h:204
static const Option< u32_t > WidenDelay
Definition Options.h:240
static const OptionMap< u32_t > AEFunEntry
Definition Options.h:239
static const Option< bool > NullDerefCheck
nullptr dereference checker, Default: false
Definition Options.h:250
static Option< bool > OPTSVFG
Definition Options.h:147
static const Option< bool > DumpSlice
Definition Options.h:167
static const Option< bool > FuncPointerPrint
Definition Options.h:113
static const Option< bool > RunUncallFuncs
Definition Options.h:268
static const Option< bool > MarkedClocksOnly
Definition Options.h:27
static const Option< bool > PrintCPts
Definition Options.h:86
static const Option< bool > ConnectVCallOnCHA
Definition Options.h:131
static const Option< bool > LoopAnalysis
Definition Options.h:234
static const Option< u32_t > MaxNodeLabelLength
Definition Options.h:276
static const OptionMap< SVFStat::ClockType > ClockType
Definition Options.h:20
static const Option< bool > PrintAliases
Definition Options.h:215
static const Option< bool > PStat
Definition Options.h:117
static Option< u32_t > MaxContextLen
Definition Options.h:81
static const Option< bool > ValidateTests
Definition Options.h:164
static const Option< std::string > GrammarFilename
Definition Options.h:223
static const Option< u32_t > StatBudget
Definition Options.h:118
static const Option< bool > MTFlowSensitive
MTA: flow-sensitive (FSAM) main analysis; false = Andersen flow-insensitive base, Default: true.
Definition Options.h:258
static const Option< bool > OCGDotGraph
Definition Options.h:95
static const Option< bool > ConsCGDotGraph
Definition Options.h:200
static OptionMultiple< PTATY > DDASelected
register this into alias analysis group
Definition Options.h:89
static const Option< std::string > OutputName
bug info output file, Default: output.db
Definition Options.h:246
static const Option< bool > TCTDotGraph
Definition Options.h:161
static const Option< bool > ShowHiddenNode
Definition Options.h:220
static const Option< bool > ReadJson
Definition Options.h:123
static const Option< bool > DoLockAnalysis
Definition Options.h:158
static const Option< bool > DumpVFG
Definition Options.h:108
static const Option< bool > ContextInsensitive
Definition Options.h:103
static const Option< bool > MemoryLeakCheck
memory leak check, Default: false
Definition Options.h:252
static const Option< bool > DiffPts
Definition Options.h:207
static const Option< bool > DumpICFG
Definition Options.h:121
static const Option< bool > PrintQueryPts
Definition Options.h:87
static const Option< bool > AnderSVFG
Definition Options.h:213
static const Option< bool > InsenRecur
Definition Options.h:84
static const Option< bool > PredictPtOcc
Definition Options.h:62
static Option< bool > SVFMain
Definition Options.h:175
static const Option< bool > IntraLock
Definition Options.h:153
static const Option< bool > BufferOverflowCheck
buffer overflow checker, Default: false
Definition Options.h:248
static const Option< bool > DumpCHA
Definition Options.h:171
static const Option< u32_t > VersioningThreads
Number of threads for the versioning phase.
Definition Options.h:74
@ Conservative
return MayAlias if any pta says alias
Definition WPAPass.h:67
@ Veto
return NoAlias if any pta says no alias
Definition WPAPass.h:68
@ HCLUST_METHOD_AVERAGE
Definition fastcluster.h:72
@ HCLUST_METHOD_COMPLETE
Definition fastcluster.h:70
@ HCLUST_METHOD_SVF_BEST
Definition fastcluster.h:76
@ HCLUST_METHOD_SINGLE
Definition fastcluster.h:68
for isBitcode
Definition BasicTypes.h:70
@ Cxt_DDA
context sensitive DDA
Definition PTATY.h:32
@ VFS_WPA
Versioned sparse flow-sensitive WPA.
Definition PTATY.h:21
@ Andersen_WPA
Andersen PTA.
Definition PTATY.h:12
@ FSSPARSE_WPA
Sparse flow sensitive WPA.
Definition PTATY.h:20
@ AndersenSFR_WPA
Stride-based field representation.
Definition PTATY.h:14
@ FlowS_DDA
Flow sensitive DDA.
Definition PTATY.h:30
@ AndersenWaveDiff_WPA
Diff wave propagation andersen-style WPA.
Definition PTATY.h:15
@ TypeCPP_WPA
Type-based analysis for C++.
Definition PTATY.h:26
@ Steensgaard_WPA
Steensgaard PTA.
Definition PTATY.h:16
@ AndersenSCD_WPA
Selective cycle detection andersen-style WPA.
Definition PTATY.h:13
@ Mutable
Definition PTATY.h:49
@ Persistent
Definition PTATY.h:50