7 #ifndef RETDEC_BIN2LLVMIR_PROVIDERS_ASM_INSTRUCTION_H
8 #define RETDEC_BIN2LLVMIR_PROVIDERS_ASM_INSTRUCTION_H
10 #include <capstone/capstone.h>
16 #include <llvm/IR/Instructions.h>
17 #include <llvm/IR/Module.h>
50 explicit operator bool()
const;
58 typename Reference = Type&,
59 typename Pointer = Type*,
60 typename Distance = std::ptrdiff_t>
64 std::bidirectional_iterator_tag,
67 std::bidirectional_iterator_tag,
68 const llvm::Instruction>;
88 std::string
getDsm()
const;
101 llvm::BasicBlock*
makeStart(
const std::string& name =
"");
111 llvm::Instruction*
front();
112 llvm::Instruction*
back();
115 llvm::Instruction*
insertBack(llvm::Instruction* i);
120 std::string
dump()
const;
131 for (
auto& i : *
this)
133 if (llvm::isa<T>(&i))
144 for (
auto& i : *
this)
146 if (
auto* ret = llvm::dyn_cast<T>(&i))
156 const llvm::Module* m);
158 const llvm::Module* m);
160 const llvm::Module* m,
161 llvm::GlobalVariable* gv);
163 llvm::Instruction* inst);
165 llvm::Instruction* inst);
167 llvm::BasicBlock* bb);
169 llvm::BasicBlock* bb);
171 llvm::BasicBlock* bb);
181 llvm::Module* m)
const;
187 llvm::GlobalVariable*>;
190 std::map<llvm::StoreInst*, cs_insn*>>;
222 llvm::Instruction* i = s;
224 auto* bb = i->getParent();
237 if (&bb->back() == i)
239 if (&bb->getParent()->back() == bb)
245 bb = bb->getNextNode();
251 i = i->getNextNode();
277 auto* bb =
_current->getParent()->getNextNode();
301 auto* bb =
_current->getParent()->getNextNode();
329 auto* bb =
_current->getParent()->getPrevNode();
356 auto* bb =
_current->getParent()->getPrevNode();
390 return !(*
this == rhs);
396 auto* s = llvm::dyn_cast_or_null<llvm::StoreInst>(i);
398 s->getPointerOperand() ==
_first->getPointerOperand();
Additional (on top of Capstone) definitions for ARM translator.
Definition: asm_instruction.h:205
iterator_impl operator++(int)
Definition: asm_instruction.h:293
reference operator*()
Definition: asm_instruction.h:368
Reference reference
Definition: asm_instruction.h:209
iterator_impl operator--(int)
Definition: asm_instruction.h:341
iterator_impl & operator--()
Definition: asm_instruction.h:317
iterator_impl(llvm::StoreInst *s, bool end=false)
Definition: asm_instruction.h:214
iterator_impl & operator++()
Definition: asm_instruction.h:270
pointer operator->()
Definition: asm_instruction.h:374
bool isLlvmToAsmInstruction(const llvm::Instruction *i) const
Definition: asm_instruction.h:394
llvm::StoreInst * _first
Definition: asm_instruction.h:402
Pointer pointer
Definition: asm_instruction.h:210
llvm::Instruction * _last
Definition: asm_instruction.h:403
Category iterator_category
Definition: asm_instruction.h:211
iterator_impl(const iterator_impl &itr)=default
iterator_impl & operator=(iterator_impl rhs)
Definition: asm_instruction.h:262
bool operator!=(const iterator_impl &rhs) const
Definition: asm_instruction.h:388
Distance difference_type
Definition: asm_instruction.h:207
bool operator==(const iterator_impl &rhs) const
Definition: asm_instruction.h:380
llvm::Instruction * _current
Definition: asm_instruction.h:404
Type value_type
Definition: asm_instruction.h:208
Definition: asm_instruction.h:34
std::vector< llvm::Instruction * > getInstructions()
Definition: asm_instruction.cpp:683
std::pair< const llvm::Module *, std::map< llvm::StoreInst *, cs_insn * > > ModuleInstructionMap
Definition: asm_instruction.h:190
bool isInvalid() const
Definition: asm_instruction.cpp:340
llvm::Instruction * front()
Definition: asm_instruction.cpp:712
bool operator==(const AsmInstruction &o) const
Definition: asm_instruction.cpp:122
bool containsInstruction()
Definition: asm_instruction.h:129
static std::vector< ModuleInstructionMap > _module2instMap
Definition: asm_instruction.h:195
llvm::LLVMContext & getContext() const
Definition: asm_instruction.cpp:678
friend std::ostream & operator<<(std::ostream &out, const AsmInstruction &a)
Definition: asm_instruction.cpp:820
bool operator!=(const AsmInstruction &o) const
Definition: asm_instruction.cpp:127
T * getInstructionFirst()
Definition: asm_instruction.h:142
std::reverse_iterator< iterator > reverse_iterator
Definition: asm_instruction.h:69
static retdec::common::Address getBasicBlockAddress(llvm::BasicBlock *bb)
Definition: asm_instruction.cpp:247
llvm::Instruction * back()
Definition: asm_instruction.cpp:729
bool instructionsCanBeErased()
Definition: asm_instruction.cpp:477
bool operator<(const AsmInstruction &o) const
Definition: asm_instruction.cpp:117
bool isValid() const
Definition: asm_instruction.cpp:335
static retdec::common::Address getBasicBlockEndAddress(llvm::BasicBlock *bb)
Definition: asm_instruction.cpp:283
llvm::Instruction * insertBack(llvm::Instruction *i)
Definition: asm_instruction.cpp:743
std::size_t getBitSize() const
Definition: asm_instruction.cpp:384
std::string dump() const
Definition: asm_instruction.cpp:792
reverse_iterator rbegin()
Definition: asm_instruction.cpp:148
llvm::Instruction * makeTerminal()
Definition: asm_instruction.cpp:589
bool isLlvmToAsmInstructionPrivate(llvm::Value *inst) const
Definition: asm_instruction.cpp:307
retdec::common::Address getEndAddress() const
Definition: asm_instruction.cpp:378
llvm::StoreInst * _llvmToAsmInstr
Definition: asm_instruction.h:193
bool contains(retdec::common::Address addr) const
Definition: asm_instruction.cpp:390
static retdec::common::Address getFunctionEndAddress(llvm::Function *f)
Definition: asm_instruction.cpp:299
llvm::BasicBlock * makeStart(const std::string &name="")
Definition: asm_instruction.cpp:630
static Llvm2CapstoneInsnMap & getLlvmToCapstoneInsnMap(const llvm::Module *m)
Definition: asm_instruction.cpp:186
std::string getDsm() const
Definition: asm_instruction.cpp:359
AsmInstruction getNext() const
Definition: asm_instruction.cpp:404
llvm::BasicBlock * getBasicBlock() const
Definition: asm_instruction.cpp:651
iterator end()
Definition: asm_instruction.cpp:144
AsmInstruction()
Definition: asm_instruction.cpp:26
static bool isLlvmToAsmInstruction(const llvm::Value *inst)
Definition: asm_instruction.cpp:318
bool empty()
Definition: asm_instruction.cpp:718
static void clear()
Definition: asm_instruction.cpp:329
retdec::common::Address getAddress() const
Definition: asm_instruction.cpp:370
static retdec::common::Address getTrueBasicBlockAddress(llvm::BasicBlock *bb)
Definition: asm_instruction.cpp:265
std::size_t getByteSize() const
Definition: asm_instruction.cpp:365
bool storesValue(llvm::Value *val) const
Definition: asm_instruction.cpp:776
llvm::Module * getModule() const
Definition: asm_instruction.cpp:669
cs_insn * getCapstoneInsn() const
Definition: asm_instruction.cpp:345
iterator begin()
Definition: asm_instruction.cpp:140
llvm::Instruction * insertBackSafe(llvm::Instruction *i)
Definition: asm_instruction.cpp:758
AsmInstruction getPrev() const
Definition: asm_instruction.cpp:440
bool eraseInstructions()
Definition: asm_instruction.cpp:517
reverse_iterator rend()
Definition: asm_instruction.cpp:152
static std::vector< ModuleGlobalPair > _module2global
Definition: asm_instruction.h:194
static void setLlvmToAsmGlobalVariable(const llvm::Module *m, llvm::GlobalVariable *gv)
Definition: asm_instruction.cpp:216
std::reverse_iterator< const_iterator > const_reverse_iterator
Definition: asm_instruction.h:70
llvm::StoreInst * getLlvmToAsmInstruction() const
Definition: asm_instruction.cpp:395
static retdec::common::Address getInstructionEndAddress(llvm::Instruction *inst)
Definition: asm_instruction.cpp:235
const llvm::GlobalVariable * getLlvmToAsmGlobalVariablePrivate(llvm::Module *m) const
Definition: asm_instruction.cpp:173
static llvm::GlobalVariable * getLlvmToAsmGlobalVariable(const llvm::Module *m)
Definition: asm_instruction.cpp:203
static retdec::common::Address getFunctionAddress(llvm::Function *f)
Definition: asm_instruction.cpp:291
std::pair< const llvm::Module *, llvm::GlobalVariable * > ModuleGlobalPair
Definition: asm_instruction.h:187
llvm::Function * getFunction() const
Definition: asm_instruction.cpp:660
std::vector< llvm::BasicBlock * > getBasicBlocks()
Definition: asm_instruction.cpp:693
static retdec::common::Address getInstructionAddress(llvm::Instruction *inst)
Definition: asm_instruction.cpp:223
Address, address pair and other derived class representation.
Additional (on top of Capstone) definitions for MIPS translator.
The frontend-end part of the decompiler.
typename std::map< llvm::StoreInst *, cs_insn * > Llvm2CapstoneInsnMap
Definition: asm_instruction.h:25
Definition: archive_wrapper.h:19
Additional (on top of Capstone) definitions for PowerPC translator.
Additional (on top of Capstone) definitions for x86 translator.