diff options
Diffstat (limited to 'lldb/bindings/interface/SBInstructionList.i')
-rw-r--r-- | lldb/bindings/interface/SBInstructionList.i | 107 |
1 files changed, 107 insertions, 0 deletions
diff --git a/lldb/bindings/interface/SBInstructionList.i b/lldb/bindings/interface/SBInstructionList.i new file mode 100644 index 0000000000000..1357323027573 --- /dev/null +++ b/lldb/bindings/interface/SBInstructionList.i @@ -0,0 +1,107 @@ +//===-- SWIG Interface for SBInstructionList --------------------*- C++ -*-===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#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; + + explicit operator bool() const; + + size_t + GetSize (); + + lldb::SBInstruction + GetInstructionAtIndex (uint32_t idx); + + size_t GetInstructionsCount(const SBAddress &start, const SBAddress &end, + bool canSetBreakpoint); + + void + Clear (); + + void + AppendInstruction (lldb::SBInstruction inst); + + void + Print (lldb::SBFile out); + + void + Print (lldb::FileSP BORROWED); + + bool + GetDescription (lldb::SBStream &description); + + bool + DumpEmulationForAllInstructions (const char *triple); + + STRING_EXTENSION(SBInstructionList) + +#ifdef SWIGPYTHON + %pythoncode %{ + def __iter__(self): + '''Iterate over all instructions in a lldb.SBInstructionList + object.''' + return lldb_iter(self, 'GetSize', 'GetInstructionAtIndex') + + 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 + %} +#endif + +}; + +} // namespace lldb |