From 1b72f09150b1333e33773882e9c035ac896acc5e Mon Sep 17 00:00:00 2001 From: Johnny Chen <johnny.chen@apple.com> Date: Fri, 16 Mar 2012 21:55:42 +0000 Subject: [PATCH] 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 --- lldb/scripts/Python/interface/SBCompileUnit.i | 9 ++++++ lldb/scripts/Python/interface/SBModule.i | 6 ++++ lldb/scripts/Python/modify-python-lldb.py | 6 +++- lldb/test/python_api/module_section/Makefile | 2 +- .../module_section/TestModuleAndSection.py | 32 +++++++++++++++++++ lldb/test/python_api/module_section/b.cpp | 3 ++ lldb/test/python_api/module_section/c.cpp | 3 ++ 7 files changed, 59 insertions(+), 2 deletions(-) create mode 100644 lldb/test/python_api/module_section/b.cpp create mode 100644 lldb/test/python_api/module_section/c.cpp diff --git a/lldb/scripts/Python/interface/SBCompileUnit.i b/lldb/scripts/Python/interface/SBCompileUnit.i index be4f740c12ee..6f9d023295e2 100644 --- a/lldb/scripts/Python/interface/SBCompileUnit.i +++ b/lldb/scripts/Python/interface/SBCompileUnit.i @@ -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); diff --git a/lldb/scripts/Python/interface/SBModule.i b/lldb/scripts/Python/interface/SBModule.i index c826134ff420..1b6d4ecac432 100644 --- a/lldb/scripts/Python/interface/SBModule.i +++ b/lldb/scripts/Python/interface/SBModule.i @@ -165,6 +165,12 @@ public: bool GetDescription (lldb::SBStream &description); + uint32_t + GetNumCompileUnits(); + + lldb::SBCompileUnit + GetCompileUnitAtIndex (uint32_t); + size_t GetNumSymbols (); diff --git a/lldb/scripts/Python/modify-python-lldb.py b/lldb/scripts/Python/modify-python-lldb.py index 034e2add86e5..75f97e78ba9e 100644 --- a/lldb/scripts/Python/modify-python-lldb.py +++ b/lldb/scripts/Python/modify-python-lldb.py @@ -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!!! diff --git a/lldb/test/python_api/module_section/Makefile b/lldb/test/python_api/module_section/Makefile index 86af2f4bc70e..5738d5684daf 100644 --- a/lldb/test/python_api/module_section/Makefile +++ b/lldb/test/python_api/module_section/Makefile @@ -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 diff --git a/lldb/test/python_api/module_section/TestModuleAndSection.py b/lldb/test/python_api/module_section/TestModuleAndSection.py index ebd0ea04909f..7038d6e71090 100644 --- a/lldb/test/python_api/module_section/TestModuleAndSection.py +++ b/lldb/test/python_api/module_section/TestModuleAndSection.py @@ -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() diff --git a/lldb/test/python_api/module_section/b.cpp b/lldb/test/python_api/module_section/b.cpp new file mode 100644 index 000000000000..4e3e54138e5b --- /dev/null +++ b/lldb/test/python_api/module_section/b.cpp @@ -0,0 +1,3 @@ +int b_function(int input) { + return input * 2; +} diff --git a/lldb/test/python_api/module_section/c.cpp b/lldb/test/python_api/module_section/c.cpp new file mode 100644 index 000000000000..3c87bfe30c6c --- /dev/null +++ b/lldb/test/python_api/module_section/c.cpp @@ -0,0 +1,3 @@ +int c_function(int input) { + return input * 3; +}