Export the APIs submitted by Dawn to the Python bindings. Add a simple test case for the SBModule.compile_unit_iter() API.

llvm-svn: 152952
This commit is contained in:
Johnny Chen 2012-03-16 21:55:42 +00:00
parent f6af30f4c7
commit 1b72f09150
7 changed files with 59 additions and 2 deletions

View File

@ -77,6 +77,15 @@ public:
lldb::SBFileSpec *inline_file_spec,
bool exact) const;
SBFileSpec
GetSupportFileAtIndex (uint32_t idx) const;
uint32_t
GetNumSupportFiles () const;
uint32_t
FindSupportFileIndex (uint32_t start_idx, const SBFileSpec &sb_file, bool full);
bool
GetDescription (lldb::SBStream &description);

View File

@ -165,6 +165,12 @@ public:
bool
GetDescription (lldb::SBStream &description);
uint32_t
GetNumCompileUnits();
lldb::SBCompileUnit
GetCompileUnitAtIndex (uint32_t);
size_t
GetNumSymbols ();

View File

@ -175,6 +175,7 @@ module_iter = " def module_iter(self): return lldb_iter(self, '%s', '%s')"
breakpoint_iter = " def breakpoint_iter(self): return lldb_iter(self, '%s', '%s')"
watchpoint_iter = " def watchpoint_iter(self): return lldb_iter(self, '%s', '%s')"
section_iter = " def section_iter(self): return lldb_iter(self, '%s', '%s')"
compile_unit_iter = " def compile_unit_iter(self): return lldb_iter(self, '%s', '%s')"
# Called to implement the built-in function len().
# Eligible objects are those containers with unambiguous iteration support.
@ -227,6 +228,8 @@ d = { 'SBBreakpoint': ('GetNumLocations', 'GetLocationAtIndex'),
# SBModule has an additional section_iter(), see below.
'SBModule-section': ('GetNumSections', 'GetSectionAtIndex'),
# And compile_unit_iter().
'SBModule-compile-unit': ('GetNumCompileUnits', 'GetCompileUnitAtIndex'),
# As well as symbol_in_section_iter().
'SBModule-symbol-in-section': symbol_in_section_iter_def
}
@ -378,9 +381,10 @@ for line in content.splitlines():
new_content.add_line(eq_def % (cls, list_to_frag(e[cls])))
new_content.add_line(ne_def)
# SBModule has an extra SBSection iterator and symbol_in_section_iter()!
# SBModule has extra SBSection, SBCompileUnit iterators and symbol_in_section_iter()!
if cls == "SBModule":
new_content.add_line(section_iter % d[cls+'-section'])
new_content.add_line(compile_unit_iter % d[cls+'-compile-unit'])
new_content.add_line(d[cls+'-symbol-in-section'])
# This special purpose iterator is for SBValue only!!!

View File

@ -1,6 +1,6 @@
LEVEL = ../../make
CXX_SOURCES := main.cpp
CXX_SOURCES := main.cpp b.cpp c.cpp
MAKE_DSYM :=NO
include $(LEVEL)/Makefile.rules

View File

@ -25,6 +25,12 @@ class ModuleAndSectionAPIsTestCase(TestBase):
self.buildDefault()
self.module_and_section_boundary_condition()
@python_api_test
def test_module_compile_unit_iter(self):
"""Test module's compile unit iterator APIs."""
self.buildDefault()
self.module_compile_unit_iter()
def module_and_section(self):
exe = os.path.join(os.getcwd(), "a.out")
@ -100,6 +106,32 @@ class ModuleAndSectionAPIsTestCase(TestBase):
if sec1:
sec1.FindSubSection(None)
def module_compile_unit_iter(self):
exe = os.path.join(os.getcwd(), "a.out")
target = self.dbg.CreateTarget(exe)
self.assertTrue(target, VALID_TARGET)
self.assertTrue(target.GetNumModules() > 0)
# Hide stdout if not running with '-t' option.
if not self.TraceOn():
self.HideStdout()
print "Number of modules for the target: %d" % target.GetNumModules()
for module in target.module_iter():
print module
# Get the executable module at index 0.
exe_module = target.GetModuleAtIndex(0)
print "Exe module: %s" % str(exe_module)
print "Number of compile units: %d" % exe_module.GetNumCompileUnits()
INDENT = ' ' * 4
INDENT2 = INDENT * 2
for cu in exe_module.compile_unit_iter():
print cu
if __name__ == '__main__':
import atexit
lldb.SBDebugger.Initialize()

View File

@ -0,0 +1,3 @@
int b_function(int input) {
return input * 2;
}

View File

@ -0,0 +1,3 @@
int c_function(int input) {
return input * 3;
}