1 //===-- SWIG Interface for SBModule -----------------------------*- C++ -*-===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
13 "Represents an executable image and its associated object and symbol files.
15 The module is designed to be able to select a single slice of an
16 executable image as it would appear on disk and during program
19 You can retrieve SBModule from SBSymbolContext, which in turn is available
22 SBModule supports symbol iteration, for example,
25 name = symbol.GetName()
26 saddr = symbol.GetStartAddress()
27 eaddr = symbol.GetEndAddress()
29 and rich comparion methods which allow the API program to use,
31 if thisModule == thatModule:
32 print('This module is the same as that module')
34 to test module equality. A module also contains object file sections, namely
35 SBSection. SBModule supports section iteration through section_iter(), for
38 print('Number of sections: %d' % module.GetNumSections())
39 for sec in module.section_iter():
42 And to iterate the symbols within a SBSection, use symbol_in_section_iter(),
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()))
51 produces this following output:
53 [0x0000000100001780-0x0000000100001d5c) a.out.__TEXT.__text
54 id = {0x00000004}, name = 'mask_access(MaskAction, unsigned int)', range = [0x00000001000017c0-0x0000000100001870)
56 id = {0x00000008}, name = 'thread_func(void*)', range = [0x0000000100001870-0x00000001000019b0)
58 id = {0x0000000c}, name = 'main', range = [0x00000001000019b0-0x0000000100001d5c)
60 id = {0x00000023}, name = 'start', address = 0x0000000100001780
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
99 SBModule (const lldb::SBModule &rhs);
101 SBModule (const lldb::SBModuleSpec &module_spec);
103 SBModule (lldb::SBProcess &process,
104 lldb::addr_t header_addr);
114 %feature("docstring", "
115 //------------------------------------------------------------------
116 /// Get const accessor for the module file specification.
118 /// This function returns the file for the module on the host system
119 /// that is running LLDB. This can differ from the path on the
120 /// platform since we might be doing remote debugging.
123 /// A const reference to the file specification object.
124 //------------------------------------------------------------------
127 GetFileSpec () const;
129 %feature("docstring", "
130 //------------------------------------------------------------------
131 /// Get accessor for the module platform file specification.
133 /// Platform file refers to the path of the module as it is known on
134 /// the remote system on which it is being debugged. For local
135 /// debugging this is always the same as Module::GetFileSpec(). But
136 /// remote debugging might mention a file '/usr/lib/liba.dylib'
137 /// which might be locally downloaded and cached. In this case the
138 /// platform file could be something like:
139 /// '/tmp/lldb/platform-cache/remote.host.computer/usr/lib/liba.dylib'
140 /// The file could also be cached in a local developer kit directory.
143 /// A const reference to the file specification object.
144 //------------------------------------------------------------------
145 ") GetPlatformFileSpec;
147 GetPlatformFileSpec () const;
150 SetPlatformFileSpec (const lldb::SBFileSpec &platform_file);
153 GetRemoteInstallFileSpec ();
156 SetRemoteInstallFileSpec (lldb::SBFileSpec &file);
158 %feature("docstring", "Returns the UUID of the module as a Python string."
161 GetUUIDString () const;
164 FindSection (const char *sect_name);
167 ResolveFileAddress (lldb::addr_t vm_addr);
169 lldb::SBSymbolContext
170 ResolveSymbolContextForAddress (const lldb::SBAddress& addr,
171 uint32_t resolve_scope);
174 GetDescription (lldb::SBStream &description);
177 GetNumCompileUnits();
180 GetCompileUnitAtIndex (uint32_t);
186 GetSymbolAtIndex (size_t idx);
189 FindSymbol (const char *name,
190 lldb::SymbolType type = eSymbolTypeAny);
192 lldb::SBSymbolContextList
193 FindSymbols (const char *name,
194 lldb::SymbolType type = eSymbolTypeAny);
201 GetSectionAtIndex (size_t idx);
204 %feature("docstring", "
205 //------------------------------------------------------------------
206 /// Find functions by name.
209 /// The name of the function we are looking for.
211 /// @param[in] name_type_mask
212 /// A logical OR of one or more FunctionNameType enum bits that
213 /// indicate what kind of names should be used when doing the
214 /// lookup. Bits include fully qualified names, base names,
215 /// C++ methods, or ObjC selectors.
216 /// See FunctionNameType for more details.
219 /// A symbol context list that gets filled in with all of the
221 //------------------------------------------------------------------
223 lldb::SBSymbolContextList
224 FindFunctions (const char *name,
225 uint32_t name_type_mask = lldb::eFunctionNameTypeAny);
228 FindFirstType (const char* name);
231 FindTypes (const char* type);
234 GetTypeByID (lldb::user_id_t uid);
237 GetBasicType(lldb::BasicType type);
239 %feature("docstring", "
240 //------------------------------------------------------------------
241 /// Get all types matching \a type_mask from debug info in this
244 /// @param[in] type_mask
245 /// A bitfield that consists of one or more bits logically OR'ed
246 /// together from the lldb::TypeClass enumeration. This allows
247 /// you to request only structure types, or only class, struct
248 /// and union types. Passing in lldb::eTypeClassAny will return
249 /// all types found in the debug information for this module.
252 /// A list of types in this module that match \a type_mask
253 //------------------------------------------------------------------
256 GetTypes (uint32_t type_mask = lldb::eTypeClassAny);
258 %feature("docstring", "
259 //------------------------------------------------------------------
260 /// Find global and static variables by name.
262 /// @param[in] target
263 /// A valid SBTarget instance representing the debuggee.
266 /// The name of the global or static variable we are looking
269 /// @param[in] max_matches
270 /// Allow the number of matches to be limited to \a max_matches.
273 /// A list of matched variables in an SBValueList.
274 //------------------------------------------------------------------
275 ") FindGlobalVariables;
277 FindGlobalVariables (lldb::SBTarget &target,
279 uint32_t max_matches);
281 %feature("docstring", "
282 //------------------------------------------------------------------
283 /// Find the first global (or static) variable by name.
285 /// @param[in] target
286 /// A valid SBTarget instance representing the debuggee.
289 /// The name of the global or static variable we are looking
293 /// An SBValue that gets filled in with the found variable (if any).
294 //------------------------------------------------------------------
295 ") FindFirstGlobalVariable;
297 FindFirstGlobalVariable (lldb::SBTarget &target, const char *name);
303 GetAddressByteSize();
309 GetVersion (uint32_t *versions,
310 uint32_t num_versions);
313 GetSymbolFileSpec() const;
316 GetObjectFileHeaderAddress() const;
319 operator == (const lldb::SBModule &rhs) const;
322 operator != (const lldb::SBModule &rhs) const;
325 class symbols_access(object):
326 re_compile_type = type(re.compile('.'))
327 '''A helper object that will lazily hand out lldb.SBSymbol objects for a module when supplied an index, name, or regular expression.'''
328 def __init__(self, sbmodule):
329 self.sbmodule = sbmodule
333 return int(self.sbmodule.GetNumSymbols())
336 def __getitem__(self, key):
340 return self.sbmodule.GetSymbolAtIndex(key)
341 elif type(key) is str:
343 sc_list = self.sbmodule.FindSymbols(key)
347 matches.append(symbol)
349 elif isinstance(key, self.re_compile_type):
351 for idx in range(count):
352 symbol = self.sbmodule.GetSymbolAtIndex(idx)
356 re_match = key.search(name)
358 matches.append(symbol)
361 mangled = symbol.mangled
363 re_match = key.search(mangled)
365 matches.append(symbol)
368 print("error: unsupported item type: %s" % type(key))
371 def get_symbols_access_object(self):
372 '''An accessor function that returns a symbols_access() object which allows lazy symbol access from a lldb.SBModule object.'''
373 return self.symbols_access (self)
375 def get_compile_units_access_object (self):
376 '''An accessor function that returns a compile_units_access() object which allows lazy compile unit access from a lldb.SBModule object.'''
377 return self.compile_units_access (self)
379 def get_symbols_array(self):
380 '''An accessor function that returns a list() that contains all symbols in a lldb.SBModule object.'''
382 for idx in range(self.num_symbols):
383 symbols.append(self.GetSymbolAtIndex(idx))
386 class sections_access(object):
387 re_compile_type = type(re.compile('.'))
388 '''A helper object that will lazily hand out lldb.SBSection objects for a module when supplied an index, name, or regular expression.'''
389 def __init__(self, sbmodule):
390 self.sbmodule = sbmodule
394 return int(self.sbmodule.GetNumSections())
397 def __getitem__(self, key):
401 return self.sbmodule.GetSectionAtIndex(key)
402 elif type(key) is str:
403 for idx in range(count):
404 section = self.sbmodule.GetSectionAtIndex(idx)
405 if section.name == key:
407 elif isinstance(key, self.re_compile_type):
409 for idx in range(count):
410 section = self.sbmodule.GetSectionAtIndex(idx)
413 re_match = key.search(name)
415 matches.append(section)
418 print("error: unsupported item type: %s" % type(key))
421 class compile_units_access(object):
422 re_compile_type = type(re.compile('.'))
423 '''A helper object that will lazily hand out lldb.SBCompileUnit objects for a module when supplied an index, full or partial path, or regular expression.'''
424 def __init__(self, sbmodule):
425 self.sbmodule = sbmodule
429 return int(self.sbmodule.GetNumCompileUnits())
432 def __getitem__(self, key):
436 return self.sbmodule.GetCompileUnitAtIndex(key)
437 elif type(key) is str:
438 is_full_path = key[0] == '/'
439 for idx in range(count):
440 comp_unit = self.sbmodule.GetCompileUnitAtIndex(idx)
442 if comp_unit.file.fullpath == key:
445 if comp_unit.file.basename == key:
447 elif isinstance(key, self.re_compile_type):
449 for idx in range(count):
450 comp_unit = self.sbmodule.GetCompileUnitAtIndex(idx)
451 fullpath = comp_unit.file.fullpath
453 re_match = key.search(fullpath)
455 matches.append(comp_unit)
458 print("error: unsupported item type: %s" % type(key))
461 def get_sections_access_object(self):
462 '''An accessor function that returns a sections_access() object which allows lazy section array access.'''
463 return self.sections_access (self)
465 def get_sections_array(self):
466 '''An accessor function that returns an array object that contains all sections in this module object.'''
467 if not hasattr(self, 'sections_array'):
468 self.sections_array = []
469 for idx in range(self.num_sections):
470 self.sections_array.append(self.GetSectionAtIndex(idx))
471 return self.sections_array
473 def get_compile_units_array(self):
474 '''An accessor function that returns an array object that contains all compile_units in this module object.'''
475 if not hasattr(self, 'compile_units_array'):
476 self.compile_units_array = []
477 for idx in range(self.GetNumCompileUnits()):
478 self.compile_units_array.append(self.GetCompileUnitAtIndex(idx))
479 return self.compile_units_array
481 __swig_getmethods__["symbols"] = get_symbols_array
482 if _newclass: symbols = property(get_symbols_array, None, doc='''A read only property that returns a list() of lldb.SBSymbol objects contained in this module.''')
484 __swig_getmethods__["symbol"] = get_symbols_access_object
485 if _newclass: symbol = property(get_symbols_access_object, None, doc='''A read only property that can be used to access symbols by index ("symbol = module.symbol[0]"), name ("symbols = module.symbol['main']"), or using a regular expression ("symbols = module.symbol[re.compile(...)]"). The return value is a single lldb.SBSymbol object for array access, and a list() of lldb.SBSymbol objects for name and regular expression access''')
487 __swig_getmethods__["sections"] = get_sections_array
488 if _newclass: sections = property(get_sections_array, None, doc='''A read only property that returns a list() of lldb.SBSection objects contained in this module.''')
490 __swig_getmethods__["compile_units"] = get_compile_units_array
491 if _newclass: compile_units = property(get_compile_units_array, None, doc='''A read only property that returns a list() of lldb.SBCompileUnit objects contained in this module.''')
493 __swig_getmethods__["section"] = get_sections_access_object
494 if _newclass: section = property(get_sections_access_object, None, doc='''A read only property that can be used to access symbols by index ("section = module.section[0]"), name ("sections = module.section[\'main\']"), or using a regular expression ("sections = module.section[re.compile(...)]"). The return value is a single lldb.SBSection object for array access, and a list() of lldb.SBSection objects for name and regular expression access''')
496 __swig_getmethods__["compile_unit"] = get_compile_units_access_object
497 if _newclass: section = property(get_sections_access_object, None, doc='''A read only property that can be used to access compile units by index ("compile_unit = module.compile_unit[0]"), name ("compile_unit = module.compile_unit[\'main.cpp\']"), or using a regular expression ("compile_unit = module.compile_unit[re.compile(...)]"). The return value is a single lldb.SBCompileUnit object for array access or by full or partial path, and a list() of lldb.SBCompileUnit objects regular expressions.''')
500 return uuid.UUID (self.GetUUIDString())
502 __swig_getmethods__["uuid"] = get_uuid
503 if _newclass: uuid = property(get_uuid, None, doc='''A read only property that returns a standard python uuid.UUID object that represents the UUID of this module.''')
505 __swig_getmethods__["file"] = GetFileSpec
506 if _newclass: file = property(GetFileSpec, None, doc='''A read only property that returns an lldb object that represents the file (lldb.SBFileSpec) for this object file for this module as it is represented where it is being debugged.''')
508 __swig_getmethods__["platform_file"] = GetPlatformFileSpec
509 if _newclass: platform_file = property(GetPlatformFileSpec, None, doc='''A read only property that returns an lldb object that represents the file (lldb.SBFileSpec) for this object file for this module as it is represented on the current host system.''')
511 __swig_getmethods__["byte_order"] = GetByteOrder
512 if _newclass: byte_order = property(GetByteOrder, None, doc='''A read only property that returns an lldb enumeration value (lldb.eByteOrderLittle, lldb.eByteOrderBig, lldb.eByteOrderInvalid) that represents the byte order for this module.''')
514 __swig_getmethods__["addr_size"] = GetAddressByteSize
515 if _newclass: addr_size = property(GetAddressByteSize, None, doc='''A read only property that returns the size in bytes of an address for this module.''')
517 __swig_getmethods__["triple"] = GetTriple
518 if _newclass: triple = property(GetTriple, None, doc='''A read only property that returns the target triple (arch-vendor-os) for this module.''')
520 __swig_getmethods__["num_symbols"] = GetNumSymbols
521 if _newclass: num_symbols = property(GetNumSymbols, None, doc='''A read only property that returns number of symbols in the module symbol table as an integer.''')
523 __swig_getmethods__["num_sections"] = GetNumSections
524 if _newclass: num_sections = property(GetNumSections, None, doc='''A read only property that returns number of sections in the module as an integer.''')