retdec
reachable_funcs_analysis.h
Go to the documentation of this file.
1 
7 #ifndef RETDEC_BIN2LLVMIR_ANALYSES_REACHABLE_FUNCS_ANALYSIS_H
8 #define RETDEC_BIN2LLVMIR_ANALYSES_REACHABLE_FUNCS_ANALYSIS_H
9 
10 #include <string>
11 
12 #include <llvm/ADT/SCCIterator.h>
13 #include <llvm/Analysis/CallGraph.h>
14 
15 namespace retdec {
16 namespace bin2llvmir {
17 
23 public:
24  std::string getName() const { return "ReachableFuncsAnalysis"; }
25 
26  static std::set<llvm::Function*> getReachableDefinedFuncsFor(llvm::Function &func,
27  llvm::Module &module, llvm::CallGraph &callGraph);
28  static std::set<llvm::Function*> getGloballyReachableFuncsFor(llvm::Module &module);
29 
30 private:
31  std::set<llvm::Function*> getDirectlyReachableDefinedFuncsFor(
32  const std::set<llvm::Function*> &funcs, llvm::CallGraph &callGraph) const;
33  std::set<llvm::Function*> getDirectlyReachableDefinedFuncsFor(
34  llvm::CallGraphNode &reachableFrom) const;
35  std::set<llvm::Function*> getIndirectlyReachableDefinedFuncsFor(
36  const std::set<llvm::Function*> &funcs, llvm::Module &module) const;
37 };
38 
39 } // namespace bin2llvmir
40 } // namespace retdec
41 
42 #endif
Analysis for finding out which defined functions are directly and indirectly reachable from some func...
Definition: reachable_funcs_analysis.h:22
std::string getName() const
Definition: reachable_funcs_analysis.h:24
static std::set< llvm::Function * > getGloballyReachableFuncsFor(llvm::Module &module)
Returns functions that are referenced from global variables, such as virtual function tables.
Definition: reachable_funcs_analysis.cpp:179
std::set< llvm::Function * > getDirectlyReachableDefinedFuncsFor(const std::set< llvm::Function * > &funcs, llvm::CallGraph &callGraph) const
Returns defined functions that are directly reachable from funcs.
Definition: reachable_funcs_analysis.cpp:202
static std::set< llvm::Function * > getReachableDefinedFuncsFor(llvm::Function &func, llvm::Module &module, llvm::CallGraph &callGraph)
Returns defined functions that are reachable directly and indirectly from function func.
Definition: reachable_funcs_analysis.cpp:144
std::set< llvm::Function * > getIndirectlyReachableDefinedFuncsFor(const std::set< llvm::Function * > &funcs, llvm::Module &module) const
Returns indirectly reachable functions from funcs that are in module.
Definition: reachable_funcs_analysis.cpp:267
ShPtr< Module > module
The current module.
Definition: hll_writer.cpp:100
The frontend-end part of the decompiler.
Definition: archive_wrapper.h:19