• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 //===-- SWIG Interface for SBFunction ---------------------------*- 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 namespace lldb {
11 
12 %feature("docstring",
13 "Represents a generic function, which can be inlined or not.
14 
15 For example (from test/lldbutil.py, but slightly modified for doc purpose),
16 
17         ...
18 
19         frame = thread.GetFrameAtIndex(i)
20         addr = frame.GetPCAddress()
21         load_addr = addr.GetLoadAddress(target)
22         function = frame.GetFunction()
23         mod_name = frame.GetModule().GetFileSpec().GetFilename()
24 
25         if not function:
26             # No debug info for 'function'.
27             symbol = frame.GetSymbol()
28             file_addr = addr.GetFileAddress()
29             start_addr = symbol.GetStartAddress().GetFileAddress()
30             symbol_name = symbol.GetName()
31             symbol_offset = file_addr - start_addr
32             print >> output, '  frame #{num}: {addr:#016x} {mod}`{symbol} + {offset}'.format(
33                 num=i, addr=load_addr, mod=mod_name, symbol=symbol_name, offset=symbol_offset)
34         else:
35             # Debug info is available for 'function'.
36             func_name = frame.GetFunctionName()
37             file_name = frame.GetLineEntry().GetFileSpec().GetFilename()
38             line_num = frame.GetLineEntry().GetLine()
39             print >> output, '  frame #{num}: {addr:#016x} {mod}`{func} at {file}:{line} {args}'.format(
40                 num=i, addr=load_addr, mod=mod_name,
41                 func='%s [inlined]' % func_name] if frame.IsInlined() else func_name,
42                 file=file_name, line=line_num, args=get_args_as_string(frame, showFuncName=False))
43 
44         ...
45 ") SBFunction;
46 class SBFunction
47 {
48 public:
49 
50     SBFunction ();
51 
52     SBFunction (const lldb::SBFunction &rhs);
53 
54     ~SBFunction ();
55 
56     bool
57     IsValid () const;
58 
59     const char *
60     GetName() const;
61 
62     const char *
63     GetMangledName () const;
64 
65     lldb::SBInstructionList
66     GetInstructions (lldb::SBTarget target);
67 
68     lldb::SBInstructionList
69     GetInstructions (lldb::SBTarget target, const char *flavor);
70 
71     lldb::SBAddress
72     GetStartAddress ();
73 
74     lldb::SBAddress
75     GetEndAddress ();
76 
77     uint32_t
78     GetPrologueByteSize ();
79 
80     lldb::SBType
81     GetType ();
82 
83     lldb::SBBlock
84     GetBlock ();
85 
86     bool
87     GetDescription (lldb::SBStream &description);
88 
89     bool
90     operator == (const lldb::SBFunction &rhs) const;
91 
92     bool
93     operator != (const lldb::SBFunction &rhs) const;
94 
95     %pythoncode %{
96         def get_instructions_from_current_target (self):
97             return self.GetInstructions (target)
98 
99         __swig_getmethods__["addr"] = GetStartAddress
100         if _newclass: addr = property(GetStartAddress, None, doc='''A read only property that returns an lldb object that represents the start address (lldb.SBAddress) for this function.''')
101 
102         __swig_getmethods__["end_addr"] = GetEndAddress
103         if _newclass: end_addr = property(GetEndAddress, None, doc='''A read only property that returns an lldb object that represents the end address (lldb.SBAddress) for this function.''')
104 
105         __swig_getmethods__["block"] = GetBlock
106         if _newclass: block = property(GetBlock, None, doc='''A read only property that returns an lldb object that represents the top level lexical block (lldb.SBBlock) for this function.''')
107 
108         __swig_getmethods__["instructions"] = get_instructions_from_current_target
109         if _newclass: instructions = property(get_instructions_from_current_target, None, doc='''A read only property that returns an lldb object that represents the instructions (lldb.SBInstructionList) for this function.''')
110 
111         __swig_getmethods__["mangled"] = GetMangledName
112         if _newclass: mangled = property(GetMangledName, None, doc='''A read only property that returns the mangled (linkage) name for this function as a string.''')
113 
114         __swig_getmethods__["name"] = GetName
115         if _newclass: name = property(GetName, None, doc='''A read only property that returns the name for this function as a string.''')
116 
117         __swig_getmethods__["prologue_size"] = GetPrologueByteSize
118         if _newclass: prologue_size = property(GetPrologueByteSize, None, doc='''A read only property that returns the size in bytes of the prologue instructions as an unsigned integer.''')
119 
120         __swig_getmethods__["type"] = GetType
121         if _newclass: type = property(GetType, None, doc='''A read only property that returns an lldb object that represents the return type (lldb.SBType) for this function.''')
122     %}
123 
124 };
125 
126 } // namespace lldb
127