[Lldb-commits] [PATCH] D159076: [lldb] Add DynamicLoader for FreeBSD Kernel post-mortem debug facility

2023-08-29 Thread Sheng-Yi Hung via Phabricator via lldb-commits
aokblast created this revision.
Herald added a subscriber: emaste.
Herald added a project: All.
aokblast requested review of this revision.
Herald added a project: LLDB.
Herald added a subscriber: lldb-commits.

Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D159076

Files:
  lldb/source/Plugins/DynamicLoader/FreeBSD-Kernel/CMakeLists.txt
  
lldb/source/Plugins/DynamicLoader/FreeBSD-Kernel/DynamicLoaderFreeBSDKernel.cpp
  lldb/source/Plugins/DynamicLoader/FreeBSD-Kernel/DynamicLoaderFreeBSDKernel.h

Index: lldb/source/Plugins/DynamicLoader/FreeBSD-Kernel/DynamicLoaderFreeBSDKernel.h
===
--- /dev/null
+++ lldb/source/Plugins/DynamicLoader/FreeBSD-Kernel/DynamicLoaderFreeBSDKernel.h
@@ -0,0 +1,165 @@
+#ifndef LLDB_SOURCE_PLUGINS_DYNAMICLOADER_FREEBSD_KERNEL_DYNAMICLOADERFREEBSDKERNEL_H
+#define LLDB_SOURCE_PLUGINS_DYNAMICLOADER_FREEBSD_KERNEL_DYNAMICLOADERFREEBSDKERNEL_H
+
+#include 
+#include 
+#include 
+
+#include "lldb/Target/DynamicLoader.h"
+#include "lldb/Target/Process.h"
+#include "lldb/Utility/FileSpec.h"
+#include "lldb/Utility/UUID.h"
+#include "llvm/BinaryFormat/ELF.h"
+
+class DynamicLoaderFreeBSDKernel : public lldb_private::DynamicLoader {
+public:
+  DynamicLoaderFreeBSDKernel(lldb_private::Process *process,
+ lldb::addr_t kernel_addr);
+
+  ~DynamicLoaderFreeBSDKernel() override;
+
+  // Static Functions
+
+  static void Initialize();
+
+  static void Terminate();
+
+  static llvm::StringRef GetPluginNameStatic() {
+return "DynamicLoaderFreeBSDKernel";
+  }
+
+  static llvm::StringRef GetPluginDescriptionStatic();
+
+  static lldb_private::DynamicLoader *
+  CreateInstance(lldb_private::Process *process, bool force);
+
+  static void DebuggerInit(lldb_private::Debugger &debugger);
+
+  static lldb::addr_t FindFreeBSDKernel(lldb_private::Process *process);
+
+  // Hooks for time point that after attach to some proccess
+  void DidAttach() override;
+
+  void DidLaunch() override;
+
+  lldb::ThreadPlanSP GetStepThroughTrampolinePlan(lldb_private::Thread &thread,
+  bool stop_others) override;
+
+  lldb_private::Status CanLoadImage() override;
+
+  llvm::StringRef GetPluginName() override { return GetPluginNameStatic(); }
+
+protected:
+  class KModImageInfo {
+  public:
+KModImageInfo()
+: m_module_sp(), m_memory_module_sp(), m_uuid(), m_name(), m_path() {}
+
+void Clear() {
+  m_load_address = LLDB_INVALID_ADDRESS;
+  m_name.clear();
+  m_uuid.Clear();
+  m_module_sp.reset();
+  m_memory_module_sp.reset();
+  m_stop_id = UINT32_MAX;
+  m_path.clear();
+}
+
+void SetLoadAddress(lldb::addr_t load_address) {
+  m_load_address = load_address;
+}
+
+lldb::addr_t GetLoadAddress() const { return m_load_address; }
+
+void SetUUID(const lldb_private::UUID uuid) { m_uuid = uuid; }
+
+lldb_private::UUID GetUUID() const { return m_uuid; }
+
+void SetName(const char *name) { m_name = name; }
+
+std::string GetName() const { return m_name; }
+
+void SetPath(const char *path) { m_path = path; }
+
+std::string GetPath() const { return m_path; }
+
+void SetModule(lldb::ModuleSP module) { m_module_sp = module; }
+
+lldb::ModuleSP GetModule() { return m_module_sp; }
+
+void SetIsKernel(bool is_kernel) { m_is_kernel = is_kernel; }
+
+bool IsKernel() const { return m_is_kernel; };
+
+void SetStopID(uint32_t stop_id) { m_stop_id = stop_id; }
+
+uint32_t GetStopID() { return m_stop_id; }
+
+bool IsLoaded() const { return m_stop_id != UINT32_MAX; };
+
+bool ReadMemoryModule(lldb_private::Process *process);
+
+bool LoadImageUsingMemoryModule(lldb_private::Process *process);
+
+bool LoadImageUsingFileAddress(lldb_private::Process *process);
+
+using collection_type = std::vector;
+
+  private:
+lldb::ModuleSP m_module_sp;
+lldb::ModuleSP m_memory_module_sp;
+lldb::addr_t m_load_address = LLDB_INVALID_ADDRESS;
+lldb_private::UUID m_uuid;
+bool m_is_kernel = false;
+std::string m_name;
+std::string m_path;
+uint32_t m_stop_id = UINT32_MAX;
+  };
+
+  void PrivateInitialize(lldb_private::Process *process);
+
+  void Clear(bool clear_process);
+
+  void Update();
+
+  void LoadKernelModules();
+
+  bool ReadAllKmods();
+
+  bool ReadAllKmods(lldb_private::Address linker_files_head_address,
+KModImageInfo::collection_type &kmods_list);
+
+  bool ReadKmodsListHeader();
+
+  bool ParseKmods(lldb_private::Address linker_files_head_address);
+
+  void SetNotificationBreakPoint();
+
+  static lldb_private::UUID
+  CheckForKernelImageAtAddress(lldb_private::Process *process,
+   lldb::addr_t address,
+   bool *read_error = nullptr);
+
+  static lldb::addr_t FindKernelAtLoadAddress(lldb_private::Process *process);
+
+  static bool Read

[Lldb-commits] [PATCH] D159076: [lldb] Add DynamicLoader for FreeBSD Kernel post-mortem debug facility

2023-08-29 Thread Sheng-Yi Hung via Phabricator via lldb-commits
aokblast updated this revision to Diff 554235.
aokblast added a comment.

Change DynamicLoader plugin for ProcessFreeBSDKernel


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D159076/new/

https://reviews.llvm.org/D159076

Files:
  lldb/source/Plugins/DynamicLoader/FreeBSD-Kernel/CMakeLists.txt
  
lldb/source/Plugins/DynamicLoader/FreeBSD-Kernel/DynamicLoaderFreeBSDKernel.cpp
  lldb/source/Plugins/DynamicLoader/FreeBSD-Kernel/DynamicLoaderFreeBSDKernel.h
  lldb/source/Plugins/Process/FreeBSDKernel/ProcessFreeBSDKernel.cpp

Index: lldb/source/Plugins/Process/FreeBSDKernel/ProcessFreeBSDKernel.cpp
===
--- lldb/source/Plugins/Process/FreeBSDKernel/ProcessFreeBSDKernel.cpp
+++ lldb/source/Plugins/Process/FreeBSDKernel/ProcessFreeBSDKernel.cpp
@@ -10,7 +10,7 @@
 #include "lldb/Core/PluginManager.h"
 #include "lldb/Target/DynamicLoader.h"
 
-#include "Plugins/DynamicLoader/Static/DynamicLoaderStatic.h"
+#include "Plugins/DynamicLoader/FreeBSD-Kernel/DynamicLoaderFreeBSDKernel.h"
 #include "ProcessFreeBSDKernel.h"
 #include "ThreadFreeBSDKernel.h"
 
@@ -262,7 +262,7 @@
 DynamicLoader *ProcessFreeBSDKernel::GetDynamicLoader() {
   if (m_dyld_up.get() == nullptr)
 m_dyld_up.reset(DynamicLoader::FindPlugin(
-this, DynamicLoaderStatic::GetPluginNameStatic()));
+this, DynamicLoaderFreeBSDKernel::GetPluginNameStatic()));
   return m_dyld_up.get();
 }
 
Index: lldb/source/Plugins/DynamicLoader/FreeBSD-Kernel/DynamicLoaderFreeBSDKernel.h
===
--- /dev/null
+++ lldb/source/Plugins/DynamicLoader/FreeBSD-Kernel/DynamicLoaderFreeBSDKernel.h
@@ -0,0 +1,165 @@
+#ifndef LLDB_SOURCE_PLUGINS_DYNAMICLOADER_FREEBSD_KERNEL_DYNAMICLOADERFREEBSDKERNEL_H
+#define LLDB_SOURCE_PLUGINS_DYNAMICLOADER_FREEBSD_KERNEL_DYNAMICLOADERFREEBSDKERNEL_H
+
+#include 
+#include 
+#include 
+
+#include "lldb/Target/DynamicLoader.h"
+#include "lldb/Target/Process.h"
+#include "lldb/Utility/FileSpec.h"
+#include "lldb/Utility/UUID.h"
+#include "llvm/BinaryFormat/ELF.h"
+
+class DynamicLoaderFreeBSDKernel : public lldb_private::DynamicLoader {
+public:
+  DynamicLoaderFreeBSDKernel(lldb_private::Process *process,
+ lldb::addr_t kernel_addr);
+
+  ~DynamicLoaderFreeBSDKernel() override;
+
+  // Static Functions
+
+  static void Initialize();
+
+  static void Terminate();
+
+  static llvm::StringRef GetPluginNameStatic() {
+return "DynamicLoaderFreeBSDKernel";
+  }
+
+  static llvm::StringRef GetPluginDescriptionStatic();
+
+  static lldb_private::DynamicLoader *
+  CreateInstance(lldb_private::Process *process, bool force);
+
+  static void DebuggerInit(lldb_private::Debugger &debugger);
+
+  static lldb::addr_t FindFreeBSDKernel(lldb_private::Process *process);
+
+  // Hooks for time point that after attach to some proccess
+  void DidAttach() override;
+
+  void DidLaunch() override;
+
+  lldb::ThreadPlanSP GetStepThroughTrampolinePlan(lldb_private::Thread &thread,
+  bool stop_others) override;
+
+  lldb_private::Status CanLoadImage() override;
+
+  llvm::StringRef GetPluginName() override { return GetPluginNameStatic(); }
+
+protected:
+  class KModImageInfo {
+  public:
+KModImageInfo()
+: m_module_sp(), m_memory_module_sp(), m_uuid(), m_name(), m_path() {}
+
+void Clear() {
+  m_load_address = LLDB_INVALID_ADDRESS;
+  m_name.clear();
+  m_uuid.Clear();
+  m_module_sp.reset();
+  m_memory_module_sp.reset();
+  m_stop_id = UINT32_MAX;
+  m_path.clear();
+}
+
+void SetLoadAddress(lldb::addr_t load_address) {
+  m_load_address = load_address;
+}
+
+lldb::addr_t GetLoadAddress() const { return m_load_address; }
+
+void SetUUID(const lldb_private::UUID uuid) { m_uuid = uuid; }
+
+lldb_private::UUID GetUUID() const { return m_uuid; }
+
+void SetName(const char *name) { m_name = name; }
+
+std::string GetName() const { return m_name; }
+
+void SetPath(const char *path) { m_path = path; }
+
+std::string GetPath() const { return m_path; }
+
+void SetModule(lldb::ModuleSP module) { m_module_sp = module; }
+
+lldb::ModuleSP GetModule() { return m_module_sp; }
+
+void SetIsKernel(bool is_kernel) { m_is_kernel = is_kernel; }
+
+bool IsKernel() const { return m_is_kernel; };
+
+void SetStopID(uint32_t stop_id) { m_stop_id = stop_id; }
+
+uint32_t GetStopID() { return m_stop_id; }
+
+bool IsLoaded() const { return m_stop_id != UINT32_MAX; };
+
+bool ReadMemoryModule(lldb_private::Process *process);
+
+bool LoadImageUsingMemoryModule(lldb_private::Process *process);
+
+bool LoadImageUsingFileAddress(lldb_private::Process *process);
+
+using collection_type = std::vector;
+
+  private:
+lldb::ModuleSP m_module_sp;
+lldb::ModuleSP m_memory_module_sp;
+lldb::ad

[Lldb-commits] [PATCH] D159076: [lldb] Add DynamicLoader for FreeBSD Kernel post-mortem debug facility

2023-08-29 Thread Sheng-Yi Hung via Phabricator via lldb-commits
aokblast updated this revision to Diff 554236.
aokblast added a comment.
Herald added a subscriber: MaskRay.

Add relocatable file support for kernel module


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D159076/new/

https://reviews.llvm.org/D159076

Files:
  lldb/source/Plugins/DynamicLoader/FreeBSD-Kernel/CMakeLists.txt
  
lldb/source/Plugins/DynamicLoader/FreeBSD-Kernel/DynamicLoaderFreeBSDKernel.cpp
  lldb/source/Plugins/DynamicLoader/FreeBSD-Kernel/DynamicLoaderFreeBSDKernel.h
  lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp
  lldb/source/Plugins/Process/FreeBSDKernel/ProcessFreeBSDKernel.cpp

Index: lldb/source/Plugins/Process/FreeBSDKernel/ProcessFreeBSDKernel.cpp
===
--- lldb/source/Plugins/Process/FreeBSDKernel/ProcessFreeBSDKernel.cpp
+++ lldb/source/Plugins/Process/FreeBSDKernel/ProcessFreeBSDKernel.cpp
@@ -10,7 +10,7 @@
 #include "lldb/Core/PluginManager.h"
 #include "lldb/Target/DynamicLoader.h"
 
-#include "Plugins/DynamicLoader/Static/DynamicLoaderStatic.h"
+#include "Plugins/DynamicLoader/FreeBSD-Kernel/DynamicLoaderFreeBSDKernel.h"
 #include "ProcessFreeBSDKernel.h"
 #include "ThreadFreeBSDKernel.h"
 
@@ -262,7 +262,7 @@
 DynamicLoader *ProcessFreeBSDKernel::GetDynamicLoader() {
   if (m_dyld_up.get() == nullptr)
 m_dyld_up.reset(DynamicLoader::FindPlugin(
-this, DynamicLoaderStatic::GetPluginNameStatic()));
+this, DynamicLoaderFreeBSDKernel::GetPluginNameStatic()));
   return m_dyld_up.get();
 }
 
Index: lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp
===
--- lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp
+++ lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp
@@ -935,6 +935,16 @@
 }
 
 Address ObjectFileELF::GetBaseAddress() {
+  if (GetType() == ObjectFile::eTypeObjectFile) {
+for (SectionHeaderCollIter I = std::next(m_section_headers.begin());
+	 I != m_section_headers.end(); ++I) {
+  const ELFSectionHeaderInfo &header = *I;
+  if (header.sh_flags & SHF_ALLOC)
+	return Address(GetSectionList()->FindSectionByID(SectionIndex(I)), 0);
+}
+return LLDB_INVALID_ADDRESS;
+  }
+
   for (const auto &EnumPHdr : llvm::enumerate(ProgramHeaders())) {
 const ELFProgramHeader &H = EnumPHdr.value();
 if (H.p_type != PT_LOAD)
@@ -1763,7 +1773,10 @@
   VMRange GetVMRange(const ELFSectionHeader &H) {
 addr_t Address = H.sh_addr;
 addr_t Size = H.sh_flags & SHF_ALLOC ? H.sh_size : 0;
-if (ObjectType == ObjectFile::Type::eTypeObjectFile && Segments.empty() && (H.sh_flags & SHF_ALLOC)) {
+
+// When this is a debug file for relocatable file, the address is all zero
+if ((ObjectType == ObjectFile::Type::eTypeObjectFile ||
+	 (ObjectType == ObjectFile::Type::eTypeDebugInfo && H.sh_addr == 0)) && Segments.empty() && (H.sh_flags & SHF_ALLOC)) {
   NextVMAddress =
   llvm::alignTo(NextVMAddress, std::max(H.sh_addralign, 1));
   Address = NextVMAddress;
Index: lldb/source/Plugins/DynamicLoader/FreeBSD-Kernel/DynamicLoaderFreeBSDKernel.h
===
--- /dev/null
+++ lldb/source/Plugins/DynamicLoader/FreeBSD-Kernel/DynamicLoaderFreeBSDKernel.h
@@ -0,0 +1,165 @@
+#ifndef LLDB_SOURCE_PLUGINS_DYNAMICLOADER_FREEBSD_KERNEL_DYNAMICLOADERFREEBSDKERNEL_H
+#define LLDB_SOURCE_PLUGINS_DYNAMICLOADER_FREEBSD_KERNEL_DYNAMICLOADERFREEBSDKERNEL_H
+
+#include 
+#include 
+#include 
+
+#include "lldb/Target/DynamicLoader.h"
+#include "lldb/Target/Process.h"
+#include "lldb/Utility/FileSpec.h"
+#include "lldb/Utility/UUID.h"
+#include "llvm/BinaryFormat/ELF.h"
+
+class DynamicLoaderFreeBSDKernel : public lldb_private::DynamicLoader {
+public:
+  DynamicLoaderFreeBSDKernel(lldb_private::Process *process,
+ lldb::addr_t kernel_addr);
+
+  ~DynamicLoaderFreeBSDKernel() override;
+
+  // Static Functions
+
+  static void Initialize();
+
+  static void Terminate();
+
+  static llvm::StringRef GetPluginNameStatic() {
+return "DynamicLoaderFreeBSDKernel";
+  }
+
+  static llvm::StringRef GetPluginDescriptionStatic();
+
+  static lldb_private::DynamicLoader *
+  CreateInstance(lldb_private::Process *process, bool force);
+
+  static void DebuggerInit(lldb_private::Debugger &debugger);
+
+  static lldb::addr_t FindFreeBSDKernel(lldb_private::Process *process);
+
+  // Hooks for time point that after attach to some proccess
+  void DidAttach() override;
+
+  void DidLaunch() override;
+
+  lldb::ThreadPlanSP GetStepThroughTrampolinePlan(lldb_private::Thread &thread,
+  bool stop_others) override;
+
+  lldb_private::Status CanLoadImage() override;
+
+  llvm::StringRef GetPluginName() override { return GetPluginNameStatic(); }
+
+protected:
+  class KModImageInfo {
+  public:
+KModImageInfo()
+: m_module_sp(), m_memory_module

[Lldb-commits] [PATCH] D159076: [lldb] Add DynamicLoader for FreeBSD Kernel post-mortem debug facility

2023-08-29 Thread Sheng-Yi Hung via Phabricator via lldb-commits
aokblast updated this revision to Diff 554237.
aokblast added a comment.

Add subdirectory for DynamicLoader Plugin directory


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D159076/new/

https://reviews.llvm.org/D159076

Files:
  lldb/source/Plugins/DynamicLoader/CMakeLists.txt
  lldb/source/Plugins/DynamicLoader/FreeBSD-Kernel/CMakeLists.txt
  
lldb/source/Plugins/DynamicLoader/FreeBSD-Kernel/DynamicLoaderFreeBSDKernel.cpp
  lldb/source/Plugins/DynamicLoader/FreeBSD-Kernel/DynamicLoaderFreeBSDKernel.h
  lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp
  lldb/source/Plugins/Process/FreeBSDKernel/ProcessFreeBSDKernel.cpp

Index: lldb/source/Plugins/Process/FreeBSDKernel/ProcessFreeBSDKernel.cpp
===
--- lldb/source/Plugins/Process/FreeBSDKernel/ProcessFreeBSDKernel.cpp
+++ lldb/source/Plugins/Process/FreeBSDKernel/ProcessFreeBSDKernel.cpp
@@ -10,7 +10,7 @@
 #include "lldb/Core/PluginManager.h"
 #include "lldb/Target/DynamicLoader.h"
 
-#include "Plugins/DynamicLoader/Static/DynamicLoaderStatic.h"
+#include "Plugins/DynamicLoader/FreeBSD-Kernel/DynamicLoaderFreeBSDKernel.h"
 #include "ProcessFreeBSDKernel.h"
 #include "ThreadFreeBSDKernel.h"
 
@@ -262,7 +262,7 @@
 DynamicLoader *ProcessFreeBSDKernel::GetDynamicLoader() {
   if (m_dyld_up.get() == nullptr)
 m_dyld_up.reset(DynamicLoader::FindPlugin(
-this, DynamicLoaderStatic::GetPluginNameStatic()));
+this, DynamicLoaderFreeBSDKernel::GetPluginNameStatic()));
   return m_dyld_up.get();
 }
 
Index: lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp
===
--- lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp
+++ lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp
@@ -935,6 +935,16 @@
 }
 
 Address ObjectFileELF::GetBaseAddress() {
+  if (GetType() == ObjectFile::eTypeObjectFile) {
+for (SectionHeaderCollIter I = std::next(m_section_headers.begin());
+	 I != m_section_headers.end(); ++I) {
+  const ELFSectionHeaderInfo &header = *I;
+  if (header.sh_flags & SHF_ALLOC)
+	return Address(GetSectionList()->FindSectionByID(SectionIndex(I)), 0);
+}
+return LLDB_INVALID_ADDRESS;
+  }
+
   for (const auto &EnumPHdr : llvm::enumerate(ProgramHeaders())) {
 const ELFProgramHeader &H = EnumPHdr.value();
 if (H.p_type != PT_LOAD)
@@ -1763,7 +1773,10 @@
   VMRange GetVMRange(const ELFSectionHeader &H) {
 addr_t Address = H.sh_addr;
 addr_t Size = H.sh_flags & SHF_ALLOC ? H.sh_size : 0;
-if (ObjectType == ObjectFile::Type::eTypeObjectFile && Segments.empty() && (H.sh_flags & SHF_ALLOC)) {
+
+// When this is a debug file for relocatable file, the address is all zero
+if ((ObjectType == ObjectFile::Type::eTypeObjectFile ||
+	 (ObjectType == ObjectFile::Type::eTypeDebugInfo && H.sh_addr == 0)) && Segments.empty() && (H.sh_flags & SHF_ALLOC)) {
   NextVMAddress =
   llvm::alignTo(NextVMAddress, std::max(H.sh_addralign, 1));
   Address = NextVMAddress;
Index: lldb/source/Plugins/DynamicLoader/FreeBSD-Kernel/DynamicLoaderFreeBSDKernel.h
===
--- /dev/null
+++ lldb/source/Plugins/DynamicLoader/FreeBSD-Kernel/DynamicLoaderFreeBSDKernel.h
@@ -0,0 +1,165 @@
+#ifndef LLDB_SOURCE_PLUGINS_DYNAMICLOADER_FREEBSD_KERNEL_DYNAMICLOADERFREEBSDKERNEL_H
+#define LLDB_SOURCE_PLUGINS_DYNAMICLOADER_FREEBSD_KERNEL_DYNAMICLOADERFREEBSDKERNEL_H
+
+#include 
+#include 
+#include 
+
+#include "lldb/Target/DynamicLoader.h"
+#include "lldb/Target/Process.h"
+#include "lldb/Utility/FileSpec.h"
+#include "lldb/Utility/UUID.h"
+#include "llvm/BinaryFormat/ELF.h"
+
+class DynamicLoaderFreeBSDKernel : public lldb_private::DynamicLoader {
+public:
+  DynamicLoaderFreeBSDKernel(lldb_private::Process *process,
+ lldb::addr_t kernel_addr);
+
+  ~DynamicLoaderFreeBSDKernel() override;
+
+  // Static Functions
+
+  static void Initialize();
+
+  static void Terminate();
+
+  static llvm::StringRef GetPluginNameStatic() {
+return "DynamicLoaderFreeBSDKernel";
+  }
+
+  static llvm::StringRef GetPluginDescriptionStatic();
+
+  static lldb_private::DynamicLoader *
+  CreateInstance(lldb_private::Process *process, bool force);
+
+  static void DebuggerInit(lldb_private::Debugger &debugger);
+
+  static lldb::addr_t FindFreeBSDKernel(lldb_private::Process *process);
+
+  // Hooks for time point that after attach to some proccess
+  void DidAttach() override;
+
+  void DidLaunch() override;
+
+  lldb::ThreadPlanSP GetStepThroughTrampolinePlan(lldb_private::Thread &thread,
+  bool stop_others) override;
+
+  lldb_private::Status CanLoadImage() override;
+
+  llvm::StringRef GetPluginName() override { return GetPluginNameStatic(); }
+
+protected:
+  class KModImageInfo {
+  public:
+KModImageInfo()
+: m_module_s

[Lldb-commits] [PATCH] D159076: [lldb] Add DynamicLoader for FreeBSD Kernel post-mortem debug facility

2023-08-30 Thread Sheng-Yi Hung via Phabricator via lldb-commits
aokblast updated this revision to Diff 554722.
aokblast added a comment.

Add "real comment" for commented code


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D159076/new/

https://reviews.llvm.org/D159076

Files:
  
lldb/source/Plugins/DynamicLoader/FreeBSD-Kernel/DynamicLoaderFreeBSDKernel.cpp


Index: 
lldb/source/Plugins/DynamicLoader/FreeBSD-Kernel/DynamicLoaderFreeBSDKernel.cpp
===
--- 
lldb/source/Plugins/DynamicLoader/FreeBSD-Kernel/DynamicLoaderFreeBSDKernel.cpp
+++ 
lldb/source/Plugins/DynamicLoader/FreeBSD-Kernel/DynamicLoaderFreeBSDKernel.cpp
@@ -181,6 +181,7 @@
 
   if (header.getDataEncoding() == llvm::ELF::ELFDATA2MSB) {
 // TODO: swap byte order for big endian
+return false;
   }
 
   return true;
@@ -321,6 +322,7 @@
 
   bool this_is_kernel = is_kernel(memory_module_sp.get());
 
+  // TODO: figure out why UUID is not same in FreeBSD Kernel dump
   // If the kernel specify what UUID should be found, we should match it
   // if (m_uuid.IsValid() && m_uuid != memory_module_sp->GetUUID()) {
   // if (log) {
@@ -368,6 +370,7 @@
 s.Printf("Kernel UUID: %s\n", m_uuid.GetAsString().c_str());
 s.Printf("Load Address: 0x%" PRIx64 "\n", m_load_address);
 
+// TODO: figure out why UUID is not same in FreeBSD Kernel dump
 // Delete more than one kernel image that accidently add by user
 // ModuleList incorrect_kernels;
 // for (ModuleSP module_sp : target.GetImages().Modules()) {


Index: lldb/source/Plugins/DynamicLoader/FreeBSD-Kernel/DynamicLoaderFreeBSDKernel.cpp
===
--- lldb/source/Plugins/DynamicLoader/FreeBSD-Kernel/DynamicLoaderFreeBSDKernel.cpp
+++ lldb/source/Plugins/DynamicLoader/FreeBSD-Kernel/DynamicLoaderFreeBSDKernel.cpp
@@ -181,6 +181,7 @@
 
   if (header.getDataEncoding() == llvm::ELF::ELFDATA2MSB) {
 // TODO: swap byte order for big endian
+return false;
   }
 
   return true;
@@ -321,6 +322,7 @@
 
   bool this_is_kernel = is_kernel(memory_module_sp.get());
 
+  // TODO: figure out why UUID is not same in FreeBSD Kernel dump
   // If the kernel specify what UUID should be found, we should match it
   // if (m_uuid.IsValid() && m_uuid != memory_module_sp->GetUUID()) {
   // if (log) {
@@ -368,6 +370,7 @@
 s.Printf("Kernel UUID: %s\n", m_uuid.GetAsString().c_str());
 s.Printf("Load Address: 0x%" PRIx64 "\n", m_load_address);
 
+// TODO: figure out why UUID is not same in FreeBSD Kernel dump
 // Delete more than one kernel image that accidently add by user
 // ModuleList incorrect_kernels;
 // for (ModuleSP module_sp : target.GetImages().Modules()) {
___
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


[Lldb-commits] [PATCH] D159076: [lldb] Add DynamicLoader for FreeBSD Kernel post-mortem debug facility

2023-08-30 Thread Sheng-Yi Hung via Phabricator via lldb-commits
aokblast updated this revision to Diff 554724.
aokblast added a comment.

This change fix the indentation for the ObjectFileELF.cpp


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D159076/new/

https://reviews.llvm.org/D159076

Files:
  lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp


Index: lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp
===
--- lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp
+++ lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp
@@ -937,7 +937,7 @@
 Address ObjectFileELF::GetBaseAddress() {
   if (GetType() == ObjectFile::eTypeObjectFile) {
 for (SectionHeaderCollIter I = std::next(m_section_headers.begin());
-I != m_section_headers.end(); ++I) {
+ I != m_section_headers.end(); ++I) {
   const ELFSectionHeaderInfo &header = *I;
   if (header.sh_flags & SHF_ALLOC)
return Address(GetSectionList()->FindSectionByID(SectionIndex(I)), 0);


Index: lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp
===
--- lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp
+++ lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp
@@ -937,7 +937,7 @@
 Address ObjectFileELF::GetBaseAddress() {
   if (GetType() == ObjectFile::eTypeObjectFile) {
 for (SectionHeaderCollIter I = std::next(m_section_headers.begin());
-	 I != m_section_headers.end(); ++I) {
+ I != m_section_headers.end(); ++I) {
   const ELFSectionHeaderInfo &header = *I;
   if (header.sh_flags & SHF_ALLOC)
 	return Address(GetSectionList()->FindSectionByID(SectionIndex(I)), 0);
___
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits