retdec
idioms_libgcc.h
Go to the documentation of this file.
1 
7 #ifndef RETDEC_BIN2LLVMIR_OPTIMIZATIONS_IDIOMS_LIBGCC_IDIOMS_LIBGCC_H
8 #define RETDEC_BIN2LLVMIR_OPTIMIZATIONS_IDIOMS_LIBGCC_IDIOMS_LIBGCC_H
9 
10 #include <llvm/IR/Module.h>
11 #include <llvm/Pass.h>
12 
15 
16 namespace retdec {
17 namespace bin2llvmir {
18 
19 class IdiomsLibgccImpl;
20 
21 class IdiomsLibgcc : public llvm::ModulePass
22 {
23  public:
24  using Fnc2Action = std::vector<
25  std::pair<std::string,
26  std::function<void(llvm::CallInst*)>>>;
27 
28  public:
29  static char ID;
30  IdiomsLibgcc();
31  virtual bool runOnModule(llvm::Module& M) override;
32  bool runOnModuleCustom(llvm::Module& M, Config* c, Abi* abi);
33 
34  static bool checkFunctionToActionMap(const Fnc2Action& fnc2action);
35 
36  private:
37  bool run();
38  bool runInstruction(llvm::Instruction* inst);
39 
40  private:
41  std::unique_ptr<IdiomsLibgccImpl> _impl;
42  llvm::Module* _module = nullptr;
43  Config* _config = nullptr;
44  Abi* _abi = nullptr;
45 
47 };
48 
49 } // namespace bin2llvmir
50 } // namespace retdec
51 
52 #endif
ABI information.
Config DB provider for bin2llvmirl.
Definition: abi.h:27
Definition: config.h:24
Definition: idioms_libgcc.h:22
static char ID
Definition: idioms_libgcc.h:29
std::vector< std::pair< std::string, std::function< void(llvm::CallInst *)> >> Fnc2Action
Definition: idioms_libgcc.h:26
Config * _config
Definition: idioms_libgcc.h:43
Abi * _abi
Definition: idioms_libgcc.h:44
static bool checkFunctionToActionMap(const Fnc2Action &fnc2action)
Definition: idioms_libgcc.cpp:1232
llvm::Module * _module
Definition: idioms_libgcc.h:42
virtual bool runOnModule(llvm::Module &M) override
Definition: idioms_libgcc.cpp:1404
Fnc2Action _fnc2action
Definition: idioms_libgcc.h:46
IdiomsLibgcc()
Definition: idioms_libgcc.cpp:1251
bool runInstruction(llvm::Instruction *inst)
Definition: idioms_libgcc.cpp:1452
std::unique_ptr< IdiomsLibgccImpl > _impl
Definition: idioms_libgcc.h:41
bool runOnModuleCustom(llvm::Module &M, Config *c, Abi *abi)
Definition: idioms_libgcc.cpp:1412
bool run()
Definition: idioms_libgcc.cpp:1420
The frontend-end part of the decompiler.
Definition: archive_wrapper.h:19