mib created this revision. mib added reviewers: teemperor, jingham. mib added a project: LLDB. Herald added a subscriber: JDevlieghere. mib requested review of this revision. Herald added a subscriber: lldb-commits.
This patch adds an `SBModule::IsLoaded(const SBTarget&) const` endpoint to lldb's Scripting Bridge API. As the name suggests, it will allow the user to know if the module is loaded in a specific target. rdar://37957625 Signed-off-by: Med Ismail Bennani <medismail.benn...@gmail.com> Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D95686 Files: lldb/bindings/interface/SBModule.i lldb/include/lldb/API/SBModule.h lldb/source/API/SBModule.cpp lldb/test/API/python_api/module_section/TestModuleAndSection.py Index: lldb/test/API/python_api/module_section/TestModuleAndSection.py =================================================================== --- lldb/test/API/python_api/module_section/TestModuleAndSection.py +++ lldb/test/API/python_api/module_section/TestModuleAndSection.py @@ -6,6 +6,7 @@ import lldb +import lldbsuite.test.lldbutil as lldbutil from lldbsuite.test.decorators import * from lldbsuite.test.lldbtest import * from lldbsuite.test import lldbutil @@ -165,3 +166,21 @@ self.assertTrue( sc.GetCompileUnit().GetFileSpec().GetFilename() == source_name) + + @add_test_categories(['pyapi']) + def test_is_loaded(self): + """Exercise SBModule.IsLoaded(SBTarget&) API.""" + self.build() + self.main_source_file = lldb.SBFileSpec("main.cpp") + + target, _, _, _ = lldbutil.run_to_line_breakpoint(self, + self.main_source_file, + line_number(self.main_source_file.GetFilename(), + 'Hello')) + + num_modules = target.GetNumModules() + for i in range(num_modules): + module = target.GetModuleAtIndex(i) + module_is_loaded = module.IsLoaded(target) + self.assertTrue(module_is_loaded, "Module is not loaded in " + "target.") Index: lldb/source/API/SBModule.cpp =================================================================== --- lldb/source/API/SBModule.cpp +++ lldb/source/API/SBModule.cpp @@ -251,6 +251,21 @@ return true; } +bool SBModule::IsLoaded(const SBTarget &target) const { + LLDB_RECORD_METHOD_CONST(bool, SBModule, IsLoaded, (const lldb::SBTarget &), + target); + + ModuleSP module_sp(GetSP()); + if (!module_sp) + return LLDB_RECORD_RESULT(false); + + TargetSP target_sp(target.GetSP()); + if (!target_sp) + return LLDB_RECORD_RESULT(false); + + return LLDB_RECORD_RESULT(module_sp->IsLoadedInTarget(target_sp.get())); +} + uint32_t SBModule::GetNumCompileUnits() { LLDB_RECORD_METHOD_NO_ARGS(uint32_t, SBModule, GetNumCompileUnits); @@ -730,6 +745,8 @@ ResolveSymbolContextForAddress, (const lldb::SBAddress &, uint32_t)); LLDB_REGISTER_METHOD(bool, SBModule, GetDescription, (lldb::SBStream &)); + LLDB_REGISTER_METHOD_CONST(bool, SBModule, IsLoaded, + (const lldb::SBTarget &)); LLDB_REGISTER_METHOD(uint32_t, SBModule, GetNumCompileUnits, ()); LLDB_REGISTER_METHOD(lldb::SBCompileUnit, SBModule, GetCompileUnitAtIndex, (uint32_t)); Index: lldb/include/lldb/API/SBModule.h =================================================================== --- lldb/include/lldb/API/SBModule.h +++ lldb/include/lldb/API/SBModule.h @@ -118,6 +118,8 @@ bool GetDescription(lldb::SBStream &description); + bool IsLoaded(const lldb::SBTarget &target) const; + uint32_t GetNumCompileUnits(); lldb::SBCompileUnit GetCompileUnitAtIndex(uint32_t); Index: lldb/bindings/interface/SBModule.i =================================================================== --- lldb/bindings/interface/SBModule.i +++ lldb/bindings/interface/SBModule.i @@ -197,6 +197,9 @@ bool GetDescription (lldb::SBStream &description); + bool + IsLoaded (const lldb::SBTarget &target) const; + uint32_t GetNumCompileUnits();
Index: lldb/test/API/python_api/module_section/TestModuleAndSection.py =================================================================== --- lldb/test/API/python_api/module_section/TestModuleAndSection.py +++ lldb/test/API/python_api/module_section/TestModuleAndSection.py @@ -6,6 +6,7 @@ import lldb +import lldbsuite.test.lldbutil as lldbutil from lldbsuite.test.decorators import * from lldbsuite.test.lldbtest import * from lldbsuite.test import lldbutil @@ -165,3 +166,21 @@ self.assertTrue( sc.GetCompileUnit().GetFileSpec().GetFilename() == source_name) + + @add_test_categories(['pyapi']) + def test_is_loaded(self): + """Exercise SBModule.IsLoaded(SBTarget&) API.""" + self.build() + self.main_source_file = lldb.SBFileSpec("main.cpp") + + target, _, _, _ = lldbutil.run_to_line_breakpoint(self, + self.main_source_file, + line_number(self.main_source_file.GetFilename(), + 'Hello')) + + num_modules = target.GetNumModules() + for i in range(num_modules): + module = target.GetModuleAtIndex(i) + module_is_loaded = module.IsLoaded(target) + self.assertTrue(module_is_loaded, "Module is not loaded in " + "target.") Index: lldb/source/API/SBModule.cpp =================================================================== --- lldb/source/API/SBModule.cpp +++ lldb/source/API/SBModule.cpp @@ -251,6 +251,21 @@ return true; } +bool SBModule::IsLoaded(const SBTarget &target) const { + LLDB_RECORD_METHOD_CONST(bool, SBModule, IsLoaded, (const lldb::SBTarget &), + target); + + ModuleSP module_sp(GetSP()); + if (!module_sp) + return LLDB_RECORD_RESULT(false); + + TargetSP target_sp(target.GetSP()); + if (!target_sp) + return LLDB_RECORD_RESULT(false); + + return LLDB_RECORD_RESULT(module_sp->IsLoadedInTarget(target_sp.get())); +} + uint32_t SBModule::GetNumCompileUnits() { LLDB_RECORD_METHOD_NO_ARGS(uint32_t, SBModule, GetNumCompileUnits); @@ -730,6 +745,8 @@ ResolveSymbolContextForAddress, (const lldb::SBAddress &, uint32_t)); LLDB_REGISTER_METHOD(bool, SBModule, GetDescription, (lldb::SBStream &)); + LLDB_REGISTER_METHOD_CONST(bool, SBModule, IsLoaded, + (const lldb::SBTarget &)); LLDB_REGISTER_METHOD(uint32_t, SBModule, GetNumCompileUnits, ()); LLDB_REGISTER_METHOD(lldb::SBCompileUnit, SBModule, GetCompileUnitAtIndex, (uint32_t)); Index: lldb/include/lldb/API/SBModule.h =================================================================== --- lldb/include/lldb/API/SBModule.h +++ lldb/include/lldb/API/SBModule.h @@ -118,6 +118,8 @@ bool GetDescription(lldb::SBStream &description); + bool IsLoaded(const lldb::SBTarget &target) const; + uint32_t GetNumCompileUnits(); lldb::SBCompileUnit GetCompileUnitAtIndex(uint32_t); Index: lldb/bindings/interface/SBModule.i =================================================================== --- lldb/bindings/interface/SBModule.i +++ lldb/bindings/interface/SBModule.i @@ -197,6 +197,9 @@ bool GetDescription (lldb::SBStream &description); + bool + IsLoaded (const lldb::SBTarget &target) const; + uint32_t GetNumCompileUnits();
_______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits