SBModule.i revision 5cac6a54b36dd4f9b0db570720b8d47a487343f9
1//===-- SWIG Interface for SBModule -----------------------------*- 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
10namespace lldb {
11
12%feature("docstring",
13"Represents an executable image and its associated object and symbol files.
14
15The module is designed to be able to select a single slice of an
16executable image as it would appear on disk and during program
17execution.
18
19You can retrieve SBModule from SBSymbolContext, which in turn is available
20from SBFrame.
21
22SBModule supports symbol iteration, for example,
23
24    for symbol in module:
25        name = symbol.GetName()
26        saddr = symbol.GetStartAddress()
27        eaddr = symbol.GetEndAddress()
28
29and rich comparion methods which allow the API program to use,
30
31    if thisModule == thatModule:
32        print 'This module is the same as that module'
33
34to test module equality.  A module also contains object file sections, namely
35SBSection.  SBModule supports section iteration through section_iter(), for
36example,
37
38    print 'Number of sections: %d' % module.GetNumSections()
39    for sec in module.section_iter():
40        print sec
41
42And to iterate the symbols within a SBSection, use symbol_in_section_iter(),
43
44    # Iterates the text section and prints each symbols within each sub-section.
45    for subsec in text_sec:
46        print INDENT + repr(subsec)
47        for sym in exe_module.symbol_in_section_iter(subsec):
48            print INDENT2 + repr(sym)
49            print INDENT2 + 'symbol type: %s' % symbol_type_to_str(sym.GetType())
50
51produces this following output:
52
53    [0x0000000100001780-0x0000000100001d5c) a.out.__TEXT.__text
54        id = {0x00000004}, name = 'mask_access(MaskAction, unsigned int)', range = [0x00000001000017c0-0x0000000100001870)
55        symbol type: code
56        id = {0x00000008}, name = 'thread_func(void*)', range = [0x0000000100001870-0x00000001000019b0)
57        symbol type: code
58        id = {0x0000000c}, name = 'main', range = [0x00000001000019b0-0x0000000100001d5c)
59        symbol type: code
60        id = {0x00000023}, name = 'start', address = 0x0000000100001780
61        symbol type: code
62    [0x0000000100001d5c-0x0000000100001da4) a.out.__TEXT.__stubs
63        id = {0x00000024}, name = '__stack_chk_fail', range = [0x0000000100001d5c-0x0000000100001d62)
64        symbol type: trampoline
65        id = {0x00000028}, name = 'exit', range = [0x0000000100001d62-0x0000000100001d68)
66        symbol type: trampoline
67        id = {0x00000029}, name = 'fflush', range = [0x0000000100001d68-0x0000000100001d6e)
68        symbol type: trampoline
69        id = {0x0000002a}, name = 'fgets', range = [0x0000000100001d6e-0x0000000100001d74)
70        symbol type: trampoline
71        id = {0x0000002b}, name = 'printf', range = [0x0000000100001d74-0x0000000100001d7a)
72        symbol type: trampoline
73        id = {0x0000002c}, name = 'pthread_create', range = [0x0000000100001d7a-0x0000000100001d80)
74        symbol type: trampoline
75        id = {0x0000002d}, name = 'pthread_join', range = [0x0000000100001d80-0x0000000100001d86)
76        symbol type: trampoline
77        id = {0x0000002e}, name = 'pthread_mutex_lock', range = [0x0000000100001d86-0x0000000100001d8c)
78        symbol type: trampoline
79        id = {0x0000002f}, name = 'pthread_mutex_unlock', range = [0x0000000100001d8c-0x0000000100001d92)
80        symbol type: trampoline
81        id = {0x00000030}, name = 'rand', range = [0x0000000100001d92-0x0000000100001d98)
82        symbol type: trampoline
83        id = {0x00000031}, name = 'strtoul', range = [0x0000000100001d98-0x0000000100001d9e)
84        symbol type: trampoline
85        id = {0x00000032}, name = 'usleep', range = [0x0000000100001d9e-0x0000000100001da4)
86        symbol type: trampoline
87    [0x0000000100001da4-0x0000000100001e2c) a.out.__TEXT.__stub_helper
88    [0x0000000100001e2c-0x0000000100001f10) a.out.__TEXT.__cstring
89    [0x0000000100001f10-0x0000000100001f68) a.out.__TEXT.__unwind_info
90    [0x0000000100001f68-0x0000000100001ff8) a.out.__TEXT.__eh_frame
91"
92) SBModule;
93class SBModule
94{
95public:
96
97    SBModule ();
98
99    SBModule (const SBModule &rhs);
100
101    ~SBModule ();
102
103    bool
104    IsValid () const;
105
106    %feature("docstring", "
107    //------------------------------------------------------------------
108    /// Get const accessor for the module file specification.
109    ///
110    /// This function returns the file for the module on the host system
111    /// that is running LLDB. This can differ from the path on the
112    /// platform since we might be doing remote debugging.
113    ///
114    /// @return
115    ///     A const reference to the file specification object.
116    //------------------------------------------------------------------
117    ") GetFileSpec;
118    lldb::SBFileSpec
119    GetFileSpec () const;
120
121    %feature("docstring", "
122    //------------------------------------------------------------------
123    /// Get accessor for the module platform file specification.
124    ///
125    /// Platform file refers to the path of the module as it is known on
126    /// the remote system on which it is being debugged. For local
127    /// debugging this is always the same as Module::GetFileSpec(). But
128    /// remote debugging might mention a file '/usr/lib/liba.dylib'
129    /// which might be locally downloaded and cached. In this case the
130    /// platform file could be something like:
131    /// '/tmp/lldb/platform-cache/remote.host.computer/usr/lib/liba.dylib'
132    /// The file could also be cached in a local developer kit directory.
133    ///
134    /// @return
135    ///     A const reference to the file specification object.
136    //------------------------------------------------------------------
137    ") GetPlatformFileSpec;
138    lldb::SBFileSpec
139    GetPlatformFileSpec () const;
140
141    bool
142    SetPlatformFileSpec (const lldb::SBFileSpec &platform_file);
143
144    %feature("docstring", "Returns the UUID of the module as a Python string."
145    ) GetUUIDString;
146    const char *
147    GetUUIDString () const;
148
149    lldb::SBSection
150    FindSection (const char *sect_name);
151
152    lldb::SBAddress
153    ResolveFileAddress (lldb::addr_t vm_addr);
154
155    lldb::SBSymbolContext
156    ResolveSymbolContextForAddress (const lldb::SBAddress& addr,
157                                    uint32_t resolve_scope);
158
159    bool
160    GetDescription (lldb::SBStream &description);
161
162    size_t
163    GetNumSymbols ();
164
165    lldb::SBSymbol
166    GetSymbolAtIndex (size_t idx);
167
168    size_t
169    GetNumSections ();
170
171    lldb::SBSection
172    GetSectionAtIndex (size_t idx);
173
174
175    %feature("docstring", "
176    //------------------------------------------------------------------
177    /// Find functions by name.
178    ///
179    /// @param[in] name
180    ///     The name of the function we are looking for.
181    ///
182    /// @param[in] name_type_mask
183    ///     A logical OR of one or more FunctionNameType enum bits that
184    ///     indicate what kind of names should be used when doing the
185    ///     lookup. Bits include fully qualified names, base names,
186    ///     C++ methods, or ObjC selectors.
187    ///     See FunctionNameType for more details.
188    ///
189    /// @param[in] append
190    ///     If true, any matches will be appended to \a sc_list, else
191    ///     matches replace the contents of \a sc_list.
192    ///
193    /// @param[out] sc_list
194    ///     A symbol context list that gets filled in with all of the
195    ///     matches.
196    ///
197    /// @return
198    ///     The number of matches added to \a sc_list.
199    //------------------------------------------------------------------
200    ") FindFunctions;
201    uint32_t
202    FindFunctions (const char *name,
203                   uint32_t name_type_mask, // Logical OR one or more FunctionNameType enum bits
204                   bool append,
205                   lldb::SBSymbolContextList& sc_list);
206
207    lldb::SBType
208    FindFirstType (const char* name);
209
210    lldb::SBTypeList
211    FindTypes (const char* type);
212
213
214    %feature("docstring", "
215    //------------------------------------------------------------------
216    /// Find global and static variables by name.
217    ///
218    /// @param[in] target
219    ///     A valid SBTarget instance representing the debuggee.
220    ///
221    /// @param[in] name
222    ///     The name of the global or static variable we are looking
223    ///     for.
224    ///
225    /// @param[in] max_matches
226    ///     Allow the number of matches to be limited to \a max_matches.
227    ///
228    /// @return
229    ///     A list of matched variables in an SBValueList.
230    //------------------------------------------------------------------
231    ") FindGlobalVariables;
232    lldb::SBValueList
233    FindGlobalVariables (lldb::SBTarget &target,
234                         const char *name,
235                         uint32_t max_matches);
236};
237
238} // namespace lldb
239