Skip to content

Commit cc7d462

Browse files
committed
fixup! search .o files when searching for module by UID
1 parent 75c5cd0 commit cc7d462

File tree

3 files changed

+31
-24
lines changed

3 files changed

+31
-24
lines changed

lldb/include/lldb/Core/ModuleList.h

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -352,14 +352,6 @@ class ModuleList {
352352
// UUID values is very efficient and accurate.
353353
lldb::ModuleSP FindModule(const UUID &uuid) const;
354354

355-
/// Find a module by LLDB-specific unique identifier.
356-
///
357-
/// \param[in] uid The UID of the module assigned to it on construction.
358-
///
359-
/// \returns ModuleSP of module with \c uid. Returns nullptr if no such
360-
/// module could be found.
361-
lldb::ModuleSP FindModule(lldb::user_id_t uid) const;
362-
363355
/// Finds the first module whose file specification matches \a module_spec.
364356
lldb::ModuleSP FindFirstModule(const ModuleSpec &module_spec) const;
365357

lldb/source/Core/ModuleList.cpp

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -584,20 +584,6 @@ ModuleSP ModuleList::FindModule(const UUID &uuid) const {
584584
return module_sp;
585585
}
586586

587-
ModuleSP ModuleList::FindModule(lldb::user_id_t uid) const {
588-
ModuleSP module_sp;
589-
ForEach([&](const ModuleSP &m) {
590-
if (m->GetID() == uid) {
591-
module_sp = m;
592-
return IterationAction::Stop;
593-
}
594-
595-
return IterationAction::Continue;
596-
});
597-
598-
return module_sp;
599-
}
600-
601587
void ModuleList::FindTypes(Module *search_first, const TypeQuery &query,
602588
TypeResults &results) const {
603589
std::lock_guard<std::recursive_mutex> guard(m_modules_mutex);

lldb/source/Expression/IRExecutionUnit.cpp

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -774,6 +774,36 @@ class LoadAddressResolver {
774774
lldb::addr_t m_best_internal_load_address = LLDB_INVALID_ADDRESS;
775775
};
776776

777+
/// Find a module by LLDB-specific unique identifier.
778+
///
779+
/// \param[in] uid The UID of the module assigned to it on construction.
780+
///
781+
/// \returns ModuleSP of module with \c uid. Returns nullptr if no such
782+
/// module could be found.
783+
static lldb::ModuleSP FindDebugModule(lldb::user_id_t uid,
784+
const ModuleList &modules) {
785+
lldb::ModuleSP module_sp;
786+
modules.ForEach([&](const lldb::ModuleSP &m) {
787+
if (m->GetID() == uid) {
788+
module_sp = m;
789+
return IterationAction::Stop;
790+
}
791+
792+
auto *sym = m->GetSymbolFile();
793+
if (!sym)
794+
return IterationAction::Continue;
795+
796+
auto debug_modules = sym->GetDebugInfoModules();
797+
module_sp = FindDebugModule(uid, debug_modules);
798+
if (module_sp)
799+
return IterationAction::Stop;
800+
801+
return IterationAction::Continue;
802+
});
803+
804+
return module_sp;
805+
}
806+
777807
/// Returns address of the function referred to by the special function call
778808
/// label \c label.
779809
///
@@ -799,8 +829,7 @@ ResolveFunctionCallLabel(llvm::StringRef name,
799829

800830
const auto &label = *label_or_err;
801831

802-
auto module_sp = sc.target_sp->GetImages().FindModule(label.module_id);
803-
832+
auto module_sp = FindDebugModule(label.module_id, sc.target_sp->GetImages());
804833
if (!module_sp)
805834
return llvm::createStringError(
806835
llvm::formatv("failed to find module by UID {0}", label.module_id));

0 commit comments

Comments
 (0)