Author: Minsoo Choo Date: 2026-02-19T13:14:27-05:00 New Revision: a8cd1ac7058efdf7a9be823182da884243ca6c0b
URL: https://github.com/llvm/llvm-project/commit/a8cd1ac7058efdf7a9be823182da884243ca6c0b DIFF: https://github.com/llvm/llvm-project/commit/a8cd1ac7058efdf7a9be823182da884243ca6c0b.diff LOG: [lldb][Process/FreeBSDKernel] Remove libfbsdvmcore support (#181283) Due to libfbsdvmcore, adding new features requires modifying both `ProcessFreeBSDKernelFVC` and `ProcessFreeBSDKernelKVM` which also requires testing on both. This is highly inefficient while the user base of fvc is currently invisible since most package manager don't ship libfbsdvmcore with LLDB. There is still demand for cross-platform kernel dump debugging. This will be implemented in future either by cloning and embedding kvm interface into LLDB or unifying dump formats to ELF core with minidump-to-elf conversion tool on FreeBSD side. --------- Signed-off-by: Minsoo Choo <[email protected]> Added: Modified: lldb/cmake/modules/LLDBConfig.cmake lldb/source/Plugins/Process/CMakeLists.txt lldb/source/Plugins/Process/FreeBSDKernel/CMakeLists.txt lldb/source/Plugins/Process/FreeBSDKernel/ProcessFreeBSDKernel.cpp lldb/source/Plugins/Process/FreeBSDKernel/ProcessFreeBSDKernel.h llvm/docs/ReleaseNotes.md Removed: ################################################################################ diff --git a/lldb/cmake/modules/LLDBConfig.cmake b/lldb/cmake/modules/LLDBConfig.cmake index f00824d692fe1..6ce4853cf4a44 100644 --- a/lldb/cmake/modules/LLDBConfig.cmake +++ b/lldb/cmake/modules/LLDBConfig.cmake @@ -63,7 +63,6 @@ add_optional_dependency(LLDB_ENABLE_LZMA "Enable LZMA compression support in LLD add_optional_dependency(LLDB_ENABLE_LUA "Enable Lua scripting support in LLDB" LuaAndSwig LUAANDSWIG_FOUND) add_optional_dependency(LLDB_ENABLE_PYTHON "Enable Python scripting support in LLDB" PythonAndSwig PYTHONANDSWIG_FOUND) add_optional_dependency(LLDB_ENABLE_LIBXML2 "Enable Libxml 2 support in LLDB" LibXml2 LIBXML2_FOUND VERSION ${LLDB_LIBXML2_VERSION}) -add_optional_dependency(LLDB_ENABLE_FBSDVMCORE "Enable libfbsdvmcore support in LLDB" FBSDVMCore FBSDVMCore_FOUND QUIET) add_optional_dependency(LLDB_ENABLE_TREESITTER "Enable Tree-sitter syntax highlighting" TreeSitter TREESITTER_FOUND) option(LLDB_USE_ENTITLEMENTS "When codesigning, use entitlements if available" ON) diff --git a/lldb/source/Plugins/Process/CMakeLists.txt b/lldb/source/Plugins/Process/CMakeLists.txt index 3413360e975fb..9a5f1cd433717 100644 --- a/lldb/source/Plugins/Process/CMakeLists.txt +++ b/lldb/source/Plugins/Process/CMakeLists.txt @@ -8,6 +8,7 @@ if (CMAKE_SYSTEM_NAME MATCHES "Linux|Android") add_subdirectory(POSIX) elseif (CMAKE_SYSTEM_NAME MATCHES "FreeBSD") add_subdirectory(FreeBSD) + add_subdirectory(FreeBSDKernel) add_subdirectory(POSIX) elseif (CMAKE_SYSTEM_NAME MATCHES "NetBSD") add_subdirectory(NetBSD) @@ -28,5 +29,4 @@ add_subdirectory(Utility) add_subdirectory(elf-core) add_subdirectory(mach-core) add_subdirectory(minidump) -add_subdirectory(FreeBSDKernel) add_subdirectory(wasm) diff --git a/lldb/source/Plugins/Process/FreeBSDKernel/CMakeLists.txt b/lldb/source/Plugins/Process/FreeBSDKernel/CMakeLists.txt index c35b4def24e25..2d90d0c333026 100644 --- a/lldb/source/Plugins/Process/FreeBSDKernel/CMakeLists.txt +++ b/lldb/source/Plugins/Process/FreeBSDKernel/CMakeLists.txt @@ -1,16 +1,3 @@ -set(FBSDKERNEL_LIBS) -if(FBSDVMCore_FOUND) - list(APPEND FBSDKERNEL_LIBS fbsdvmcore) -endif() -if("${CMAKE_SYSTEM_NAME}" MATCHES "FreeBSD") - list(APPEND FBSDKERNEL_LIBS kvm) -endif() - -if (NOT FBSDKERNEL_LIBS) - message(STATUS "Skipping FreeBSDKernel plugin due to missing libfbsdvmcore") - return() -endif() - add_lldb_library(lldbPluginProcessFreeBSDKernel PLUGIN ProcessFreeBSDKernel.cpp RegisterContextFreeBSDKernel_arm64.cpp @@ -23,5 +10,5 @@ add_lldb_library(lldbPluginProcessFreeBSDKernel PLUGIN LINK_LIBS lldbCore lldbTarget - ${FBSDKERNEL_LIBS} + kvm ) diff --git a/lldb/source/Plugins/Process/FreeBSDKernel/ProcessFreeBSDKernel.cpp b/lldb/source/Plugins/Process/FreeBSDKernel/ProcessFreeBSDKernel.cpp index 196cb5a620f32..beb7e52adf49e 100644 --- a/lldb/source/Plugins/Process/FreeBSDKernel/ProcessFreeBSDKernel.cpp +++ b/lldb/source/Plugins/Process/FreeBSDKernel/ProcessFreeBSDKernel.cpp @@ -14,62 +14,20 @@ #include "ProcessFreeBSDKernel.h" #include "ThreadFreeBSDKernel.h" -#if LLDB_ENABLE_FBSDVMCORE -#include <fvc.h> -#endif -#if defined(__FreeBSD__) -#include <kvm.h> -#endif - using namespace lldb; using namespace lldb_private; LLDB_PLUGIN_DEFINE(ProcessFreeBSDKernel) -namespace { - -#if LLDB_ENABLE_FBSDVMCORE -class ProcessFreeBSDKernelFVC : public ProcessFreeBSDKernel { -public: - ProcessFreeBSDKernelFVC(lldb::TargetSP target_sp, lldb::ListenerSP listener, - fvc_t *fvc, const FileSpec &core_file); - - ~ProcessFreeBSDKernelFVC(); - - size_t DoReadMemory(lldb::addr_t addr, void *buf, size_t size, - lldb_private::Status &error) override; - -private: - fvc_t *m_fvc; - - const char *GetError(); -}; -#endif // LLDB_ENABLE_FBSDVMCORE - -#if defined(__FreeBSD__) -class ProcessFreeBSDKernelKVM : public ProcessFreeBSDKernel { -public: - ProcessFreeBSDKernelKVM(lldb::TargetSP target_sp, lldb::ListenerSP listener, - kvm_t *fvc, const FileSpec &core_file); - - ~ProcessFreeBSDKernelKVM(); - - size_t DoReadMemory(lldb::addr_t addr, void *buf, size_t size, - lldb_private::Status &error) override; - -private: - kvm_t *m_kvm; - - const char *GetError(); -}; -#endif // defined(__FreeBSD__) - -} // namespace - ProcessFreeBSDKernel::ProcessFreeBSDKernel(lldb::TargetSP target_sp, - ListenerSP listener_sp, + ListenerSP listener_sp, kvm_t *kvm, const FileSpec &core_file) - : PostMortemProcess(target_sp, listener_sp, core_file) {} + : PostMortemProcess(target_sp, listener_sp, core_file), m_kvm(kvm) {} + +ProcessFreeBSDKernel::~ProcessFreeBSDKernel() { + if (m_kvm) + kvm_close(m_kvm); +} lldb::ProcessSP ProcessFreeBSDKernel::CreateInstance(lldb::TargetSP target_sp, ListenerSP listener_sp, @@ -77,23 +35,12 @@ lldb::ProcessSP ProcessFreeBSDKernel::CreateInstance(lldb::TargetSP target_sp, bool can_connect) { ModuleSP executable = target_sp->GetExecutableModule(); if (crash_file && !can_connect && executable) { -#if LLDB_ENABLE_FBSDVMCORE - fvc_t *fvc = - fvc_open(executable->GetFileSpec().GetPath().c_str(), - crash_file->GetPath().c_str(), nullptr, nullptr, nullptr); - if (fvc) - return std::make_shared<ProcessFreeBSDKernelFVC>(target_sp, listener_sp, - fvc, *crash_file); -#endif - -#if defined(__FreeBSD__) kvm_t *kvm = kvm_open2(executable->GetFileSpec().GetPath().c_str(), crash_file->GetPath().c_str(), O_RDONLY, nullptr, nullptr); if (kvm) - return std::make_shared<ProcessFreeBSDKernelKVM>(target_sp, listener_sp, - kvm, *crash_file); -#endif + return std::make_shared<ProcessFreeBSDKernel>(target_sp, listener_sp, kvm, + *crash_file); } return nullptr; } @@ -287,50 +234,8 @@ lldb::addr_t ProcessFreeBSDKernel::FindSymbol(const char *name) { return sym ? sym->GetLoadAddress(&GetTarget()) : LLDB_INVALID_ADDRESS; } -#if LLDB_ENABLE_FBSDVMCORE - -ProcessFreeBSDKernelFVC::ProcessFreeBSDKernelFVC(lldb::TargetSP target_sp, - ListenerSP listener_sp, - fvc_t *fvc, - const FileSpec &core_file) - : ProcessFreeBSDKernel(target_sp, listener_sp, crash_file), m_fvc(fvc) {} - -ProcessFreeBSDKernelFVC::~ProcessFreeBSDKernelFVC() { - if (m_fvc) - fvc_close(m_fvc); -} - -size_t ProcessFreeBSDKernelFVC::DoReadMemory(lldb::addr_t addr, void *buf, - size_t size, Status &error) { - ssize_t rd = 0; - rd = fvc_read(m_fvc, addr, buf, size); - if (rd < 0 || static_cast<size_t>(rd) != size) { - error = Status::FromErrorStringWithFormat("Reading memory failed: %s", - GetError()); - return rd > 0 ? rd : 0; - } - return rd; -} - -const char *ProcessFreeBSDKernelFVC::GetError() { return fvc_geterr(m_fvc); } - -#endif // LLDB_ENABLE_FBSDVMCORE - -#if defined(__FreeBSD__) - -ProcessFreeBSDKernelKVM::ProcessFreeBSDKernelKVM(lldb::TargetSP target_sp, - ListenerSP listener_sp, - kvm_t *fvc, - const FileSpec &core_file) - : ProcessFreeBSDKernel(target_sp, listener_sp, core_file), m_kvm(fvc) {} - -ProcessFreeBSDKernelKVM::~ProcessFreeBSDKernelKVM() { - if (m_kvm) - kvm_close(m_kvm); -} - -size_t ProcessFreeBSDKernelKVM::DoReadMemory(lldb::addr_t addr, void *buf, - size_t size, Status &error) { +size_t ProcessFreeBSDKernel::DoReadMemory(lldb::addr_t addr, void *buf, + size_t size, Status &error) { ssize_t rd = 0; rd = kvm_read2(m_kvm, addr, buf, size); if (rd < 0 || static_cast<size_t>(rd) != size) { @@ -341,6 +246,4 @@ size_t ProcessFreeBSDKernelKVM::DoReadMemory(lldb::addr_t addr, void *buf, return rd; } -const char *ProcessFreeBSDKernelKVM::GetError() { return kvm_geterr(m_kvm); } - -#endif // defined(__FreeBSD__) +const char *ProcessFreeBSDKernel::GetError() { return kvm_geterr(m_kvm); } diff --git a/lldb/source/Plugins/Process/FreeBSDKernel/ProcessFreeBSDKernel.h b/lldb/source/Plugins/Process/FreeBSDKernel/ProcessFreeBSDKernel.h index 81c567581dd56..d933f7bc219f2 100644 --- a/lldb/source/Plugins/Process/FreeBSDKernel/ProcessFreeBSDKernel.h +++ b/lldb/source/Plugins/Process/FreeBSDKernel/ProcessFreeBSDKernel.h @@ -11,10 +11,14 @@ #include "lldb/Target/PostMortemProcess.h" +#include <kvm.h> + class ProcessFreeBSDKernel : public lldb_private::PostMortemProcess { public: ProcessFreeBSDKernel(lldb::TargetSP target_sp, lldb::ListenerSP listener, - const lldb_private::FileSpec &core_file); + kvm_t *kvm, const lldb_private::FileSpec &core_file); + + ~ProcessFreeBSDKernel(); static lldb::ProcessSP CreateInstance(lldb::TargetSP target_sp, lldb::ListenerSP listener, @@ -44,11 +48,19 @@ class ProcessFreeBSDKernel : public lldb_private::PostMortemProcess { lldb_private::DynamicLoader *GetDynamicLoader() override; + size_t DoReadMemory(lldb::addr_t addr, void *buf, size_t size, + lldb_private::Status &error) override; + protected: bool DoUpdateThreadList(lldb_private::ThreadList &old_thread_list, lldb_private::ThreadList &new_thread_list) override; lldb::addr_t FindSymbol(const char *name); + +private: + kvm_t *m_kvm; + + const char *GetError(); }; #endif // LLDB_SOURCE_PLUGINS_PROCESS_FREEBSDKERNEL_PROCESSFREEBSDKERNEL_H diff --git a/llvm/docs/ReleaseNotes.md b/llvm/docs/ReleaseNotes.md index 69c1cfcd9396c..2e121923e0bb9 100644 --- a/llvm/docs/ReleaseNotes.md +++ b/llvm/docs/ReleaseNotes.md @@ -207,6 +207,9 @@ Changes to LLDB #### Kernel Debugging +* Support for libfbsdvmcore has been removed. As a result, FreeBSD kernel dump debugging is now only + available on FreeBSD hosts. Live kernel debugging through the GDB remote protocol is still available + from any platform. * The crashed thread is now automatically selected on start. * Threads are listed in incrmental order by pid then by tid. _______________________________________________ lldb-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
