[Lldb-commits] [lldb] 1290e95 - [lldb] Fix ELF core debugging (#117070)

via lldb-commits lldb-commits at lists.llvm.org
Fri Nov 22 13:55:59 PST 2024


Author: Kazuki Sakamoto
Date: 2024-11-22T13:55:55-08:00
New Revision: 1290e95849aaad2fbd813aa15da667b2103ecc64

URL: https://github.com/llvm/llvm-project/commit/1290e95849aaad2fbd813aa15da667b2103ecc64
DIFF: https://github.com/llvm/llvm-project/commit/1290e95849aaad2fbd813aa15da667b2103ecc64.diff

LOG: [lldb] Fix ELF core debugging (#117070)

DynamicLoader does not use ProcessElfCore NT_FILE entries to get
UUID. Use GetModuleSpec to get UUID from Process.

Added: 
    

Modified: 
    lldb/source/Core/DynamicLoader.cpp
    lldb/source/Plugins/Process/elf-core/ProcessElfCore.cpp
    lldb/source/Plugins/Process/elf-core/ProcessElfCore.h

Removed: 
    


################################################################################
diff  --git a/lldb/source/Core/DynamicLoader.cpp b/lldb/source/Core/DynamicLoader.cpp
index 68d6ab0850853f..3c6c6bd365706e 100644
--- a/lldb/source/Core/DynamicLoader.cpp
+++ b/lldb/source/Core/DynamicLoader.cpp
@@ -157,6 +157,12 @@ 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 (ModuleSP module_sp = target.GetImages().FindFirstModule(module_spec))
     return module_sp;

diff  --git a/lldb/source/Plugins/Process/elf-core/ProcessElfCore.cpp b/lldb/source/Plugins/Process/elf-core/ProcessElfCore.cpp
index a5ee3cfdb2932a..57b12f07b5e0be 100644
--- a/lldb/source/Plugins/Process/elf-core/ProcessElfCore.cpp
+++ b/lldb/source/Plugins/Process/elf-core/ProcessElfCore.cpp
@@ -286,6 +286,22 @@ 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;
+}
+
 lldb_private::DynamicLoader *ProcessElfCore::GetDynamicLoader() {
   if (m_dyld_up.get() == nullptr)
     m_dyld_up.reset(DynamicLoader::FindPlugin(

diff  --git a/lldb/source/Plugins/Process/elf-core/ProcessElfCore.h b/lldb/source/Plugins/Process/elf-core/ProcessElfCore.h
index 280c61ed376396..a7b1822ccf01ff 100644
--- a/lldb/source/Plugins/Process/elf-core/ProcessElfCore.h
+++ b/lldb/source/Plugins/Process/elf-core/ProcessElfCore.h
@@ -163,6 +163,10 @@ 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;
+
   // Returns the value of certain type of note of a given start address
   lldb_private::UUID FindBuidIdInCoreMemory(lldb::addr_t address);
 


        


More information about the lldb-commits mailing list