1 //===-- SWIG Interface for SBInstructionList --------------------*- C++ -*-===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 
10 #include <stdio.h>
11 
12 namespace lldb {
13 
14 %feature("docstring",
15 "Represents a list of machine instructions.  SBFunction and SBSymbol have
16 GetInstructions() methods which return SBInstructionList instances.
17 
18 SBInstructionList supports instruction (SBInstruction instance) iteration.
19 For example (see also SBDebugger for a more complete example),
20 
21 def disassemble_instructions (insts):
22     for i in insts:
23         print i
24 
25 defines a function which takes an SBInstructionList instance and prints out
26 the machine instructions in assembly format."
27 ) SBInstructionList;
28 class SBInstructionList
29 {
30 public:
31 
32     SBInstructionList ();
33 
34     SBInstructionList (const SBInstructionList &rhs);
35 
36     ~SBInstructionList ();
37 
38     bool
39     IsValid () const;
40 
41     size_t
42     GetSize ();
43 
44     lldb::SBInstruction
45     GetInstructionAtIndex (uint32_t idx);
46 
47     void
48     Clear ();
49 
50     void
51     AppendInstruction (lldb::SBInstruction inst);
52 
53     void
54     Print (FILE *out);
55 
56     bool
57     GetDescription (lldb::SBStream &description);
58 
59     bool
60     DumpEmulationForAllInstructions (const char *triple);
61 
62     %pythoncode %{
63         def __len__(self):
64             '''Access len of the instruction list.'''
65             return int(self.GetSize())
66 
67         def __getitem__(self, key):
68             '''Access instructions by integer index for array access or by lldb.SBAddress to find an instruction that matches a section offset address object.'''
69             if type(key) is int:
70                 # Find an instruction by index
71                 if key < len(self):
72                     return self.GetInstructionAtIndex(key)
73             elif type(key) is SBAddress:
74                 # Find an instruction using a lldb.SBAddress object
75                 lookup_file_addr = key.file_addr
76                 closest_inst = None
77                 for idx in range(self.GetSize()):
78                     inst = self.GetInstructionAtIndex(idx)
79                     inst_file_addr = inst.addr.file_addr
80                     if inst_file_addr == lookup_file_addr:
81                         return inst
82                     elif inst_file_addr > lookup_file_addr:
83                         return closest_inst
84                     else:
85                         closest_inst = inst
86             return None
87     %}
88 
89 };
90 
91 } // namespace lldb
92