[Lldb-commits] [PATCH] D159076: [lldb] Add DynamicLoader for FreeBSD Kernel post-mortem debug facility
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
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
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
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
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
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