diff options
Diffstat (limited to 'scripts/interface/SBInstructionList.i')
-rw-r--r-- | scripts/interface/SBInstructionList.i | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/scripts/interface/SBInstructionList.i b/scripts/interface/SBInstructionList.i new file mode 100644 index 000000000000..32603be5cc1e --- /dev/null +++ b/scripts/interface/SBInstructionList.i @@ -0,0 +1,91 @@ +//===-- SWIG Interface for SBInstructionList --------------------*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#include <stdio.h> + +namespace lldb { + +%feature("docstring", +"Represents a list of machine instructions. SBFunction and SBSymbol have +GetInstructions() methods which return SBInstructionList instances. + +SBInstructionList supports instruction (SBInstruction instance) iteration. +For example (see also SBDebugger for a more complete example), + +def disassemble_instructions (insts): + for i in insts: + print i + +defines a function which takes an SBInstructionList instance and prints out +the machine instructions in assembly format." +) SBInstructionList; +class SBInstructionList +{ +public: + + SBInstructionList (); + + SBInstructionList (const SBInstructionList &rhs); + + ~SBInstructionList (); + + bool + IsValid () const; + + size_t + GetSize (); + + lldb::SBInstruction + GetInstructionAtIndex (uint32_t idx); + + void + Clear (); + + void + AppendInstruction (lldb::SBInstruction inst); + + void + Print (FILE *out); + + bool + GetDescription (lldb::SBStream &description); + + bool + DumpEmulationForAllInstructions (const char *triple); + + %pythoncode %{ + def __len__(self): + '''Access len of the instruction list.''' + return int(self.GetSize()) + + def __getitem__(self, key): + '''Access instructions by integer index for array access or by lldb.SBAddress to find an instruction that matches a section offset address object.''' + if type(key) is int: + # Find an instruction by index + if key < len(self): + return self.GetInstructionAtIndex(key) + elif type(key) is SBAddress: + # Find an instruction using a lldb.SBAddress object + lookup_file_addr = key.file_addr + closest_inst = None + for idx in range(self.GetSize()): + inst = self.GetInstructionAtIndex(idx) + inst_file_addr = inst.addr.file_addr + if inst_file_addr == lookup_file_addr: + return inst + elif inst_file_addr > lookup_file_addr: + return closest_inst + else: + closest_inst = inst + return None + %} + +}; + +} // namespace lldb |