https://github.com/splhack created https://github.com/llvm/llvm-project/pull/117416
ELF core debugging fix #117070 broke TestLoadUnload.py tests due to GetModuleSpec call, ProcessGDBRemote fetches modules from remote. Revise the original PR, renamed FindBuildId to FindModuleUUID. >From 8fdc870f1c39d228e3af9a65fd0672fa52a326ef Mon Sep 17 00:00:00 2001 From: Kazuki Sakamoto <sakam...@splhack.org> Date: Fri, 22 Nov 2024 21:32:33 -0800 Subject: [PATCH] [lldb] Fix TestLoadUnload.py ELF core debugging fix #117070 broke TestLoadUnload.py tests due to GetModuleSpec call, ProcessGDBRemote fetches modules from remote. Revise the original PR, renamed FindBuildId to FindModuleUUID. --- lldb/include/lldb/Target/Process.h | 2 ++ lldb/source/Core/DynamicLoader.cpp | 8 +++----- .../Process/elf-core/ProcessElfCore.cpp | 20 ++++++------------- .../Plugins/Process/elf-core/ProcessElfCore.h | 4 +--- lldb/source/Target/Process.cpp | 4 ++++ 5 files changed, 16 insertions(+), 22 deletions(-) diff --git a/lldb/include/lldb/Target/Process.h b/lldb/include/lldb/Target/Process.h index b8c53a474ba6b9..a184e6dd891aff 100644 --- a/lldb/include/lldb/Target/Process.h +++ b/lldb/include/lldb/Target/Process.h @@ -1380,6 +1380,8 @@ class Process : public std::enable_shared_from_this<Process>, virtual bool GetProcessInfo(ProcessInstanceInfo &info); + virtual lldb_private::UUID FindModuleUUID(const llvm::StringRef path); + /// Get the exit status for a process. /// /// \return diff --git a/lldb/source/Core/DynamicLoader.cpp b/lldb/source/Core/DynamicLoader.cpp index 3c6c6bd365706e..acc84dbf016fbe 100644 --- a/lldb/source/Core/DynamicLoader.cpp +++ b/lldb/source/Core/DynamicLoader.cpp @@ -157,11 +157,9 @@ DynamicLoader::GetSectionListFromModule(const ModuleSP module) const { ModuleSP DynamicLoader::FindModuleViaTarget(const FileSpec &file) { Target &target = m_process->GetTarget(); ModuleSpec module_spec(file, target.GetArchitecture()); - ModuleSpec module_spec_from_process; - // Process may be able to augment the module_spec with UUID, e.g. ELF core. - if (m_process->GetModuleSpec(file, target.GetArchitecture(), - module_spec_from_process)) { - module_spec = module_spec_from_process; + if (UUID uuid = m_process->FindModuleUUID(file.GetPath())) { + // Process may be able to augment the module_spec with UUID, e.g. ELF core. + module_spec.GetUUID() = uuid; } if (ModuleSP module_sp = target.GetImages().FindFirstModule(module_spec)) diff --git a/lldb/source/Plugins/Process/elf-core/ProcessElfCore.cpp b/lldb/source/Plugins/Process/elf-core/ProcessElfCore.cpp index 57b12f07b5e0be..b3916cc913f7db 100644 --- a/lldb/source/Plugins/Process/elf-core/ProcessElfCore.cpp +++ b/lldb/source/Plugins/Process/elf-core/ProcessElfCore.cpp @@ -286,20 +286,12 @@ void ProcessElfCore::UpdateBuildIdForNTFileEntries() { } } -bool ProcessElfCore::GetModuleSpec(const FileSpec &module_file_spec, - const ArchSpec &arch, - ModuleSpec &module_spec) { - module_spec.Clear(); - for (NT_FILE_Entry &entry : m_nt_file_entries) { - if (module_file_spec.GetPath() == entry.path) { - module_spec.GetFileSpec() = module_file_spec; - module_spec.GetArchitecture() = arch; - module_spec.GetUUID() = entry.uuid; - return true; - } - } - - return false; +UUID ProcessElfCore::FindModuleUUID(const llvm::StringRef path) { + // Returns the gnu uuid from matched NT_FILE entry + for (NT_FILE_Entry &entry : m_nt_file_entries) + if (path == entry.path) + return entry.uuid; + return UUID(); } lldb_private::DynamicLoader *ProcessElfCore::GetDynamicLoader() { diff --git a/lldb/source/Plugins/Process/elf-core/ProcessElfCore.h b/lldb/source/Plugins/Process/elf-core/ProcessElfCore.h index a7b1822ccf01ff..a91c04a277f601 100644 --- a/lldb/source/Plugins/Process/elf-core/ProcessElfCore.h +++ b/lldb/source/Plugins/Process/elf-core/ProcessElfCore.h @@ -163,9 +163,7 @@ class ProcessElfCore : public lldb_private::PostMortemProcess { // Populate gnu uuid for each NT_FILE entry void UpdateBuildIdForNTFileEntries(); - bool GetModuleSpec(const lldb_private::FileSpec &module_file_spec, - const lldb_private::ArchSpec &arch, - lldb_private::ModuleSpec &module_spec) override; + lldb_private::UUID FindModuleUUID(const llvm::StringRef path) override; // Returns the value of certain type of note of a given start address lldb_private::UUID FindBuidIdInCoreMemory(lldb::addr_t address); diff --git a/lldb/source/Target/Process.cpp b/lldb/source/Target/Process.cpp index 9125ceca74a003..db33525978a16a 100644 --- a/lldb/source/Target/Process.cpp +++ b/lldb/source/Target/Process.cpp @@ -6080,6 +6080,10 @@ bool Process::GetProcessInfo(ProcessInstanceInfo &info) { return platform_sp->GetProcessInfo(GetID(), info); } +lldb_private::UUID Process::FindModuleUUID(const llvm::StringRef path) { + return lldb_private::UUID(); +} + ThreadCollectionSP Process::GetHistoryThreads(lldb::addr_t addr) { ThreadCollectionSP threads; _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits