[Lldb-commits] [lldb] [llvm] [lldb][Process/FreeBSDKernelCore] Set kernel displacement (PR #183975)

Minsoo Choo via lldb-commits lldb-commits at lists.llvm.org
Thu Mar 12 10:40:07 PDT 2026


https://github.com/mchoo7 updated https://github.com/llvm/llvm-project/pull/183975

>From af81454d1d1fa8519729e3c9db3162950535aa5a Mon Sep 17 00:00:00 2001
From: Minsoo Choo <minsoochoo0122 at proton.me>
Date: Sat, 28 Feb 2026 22:11:06 -0500
Subject: [PATCH 1/4] [lldb][Process/FreeBSDKernelCore] Load core according to
 KASLR

Signed-off-by: Minsoo Choo <minsoochoo0122 at proton.me>
---
 .../ProcessFreeBSDKernelCore.cpp              | 24 +++++++++++++++++++
 .../ProcessFreeBSDKernelCore.h                |  2 ++
 llvm/docs/ReleaseNotes.md                     |  2 ++
 3 files changed, 28 insertions(+)

diff --git a/lldb/source/Plugins/Process/FreeBSD-Kernel-Core/ProcessFreeBSDKernelCore.cpp b/lldb/source/Plugins/Process/FreeBSD-Kernel-Core/ProcessFreeBSDKernelCore.cpp
index 577d8e0d50cf1..0217177c87dbd 100644
--- a/lldb/source/Plugins/Process/FreeBSD-Kernel-Core/ProcessFreeBSDKernelCore.cpp
+++ b/lldb/source/Plugins/Process/FreeBSD-Kernel-Core/ProcessFreeBSDKernelCore.cpp
@@ -118,6 +118,8 @@ bool ProcessFreeBSDKernelCore::CanDebug(lldb::TargetSP target_sp,
 
 Status ProcessFreeBSDKernelCore::DoLoadCore() {
   // The core is already loaded by CreateInstance().
+  ApplyKASLR();
+
   return Status();
 }
 
@@ -324,6 +326,28 @@ lldb::addr_t ProcessFreeBSDKernelCore::FindSymbol(const char *name) {
   return sym ? sym->GetLoadAddress(&GetTarget()) : LLDB_INVALID_ADDRESS;
 }
 
+void ProcessFreeBSDKernelCore::ApplyKASLR() {
+  kssize_t displacement = kvm_kerndisp(m_kvm);
+
+  if (displacement == 0)
+    return;
+
+  Target &target = GetTarget();
+  lldb::ModuleSP kernel_module_sp = target.GetExecutableModule();
+  if (!kernel_module_sp)
+    return;
+
+  bool changed = false;
+  kernel_module_sp->SetLoadAddress(
+      target, static_cast<lldb::addr_t>(displacement), true, changed);
+
+  if (changed) {
+    ModuleList loaded_module_list;
+    loaded_module_list.Append(kernel_module_sp);
+    target.ModulesDidLoad(loaded_module_list);
+  }
+}
+
 void ProcessFreeBSDKernelCore::PrintUnreadMessage() {
   Target &target = GetTarget();
   Debugger &debugger = target.GetDebugger();
diff --git a/lldb/source/Plugins/Process/FreeBSD-Kernel-Core/ProcessFreeBSDKernelCore.h b/lldb/source/Plugins/Process/FreeBSD-Kernel-Core/ProcessFreeBSDKernelCore.h
index 67cfae13d2a4d..92ddec4696066 100644
--- a/lldb/source/Plugins/Process/FreeBSD-Kernel-Core/ProcessFreeBSDKernelCore.h
+++ b/lldb/source/Plugins/Process/FreeBSD-Kernel-Core/ProcessFreeBSDKernelCore.h
@@ -64,6 +64,8 @@ class ProcessFreeBSDKernelCore : public lldb_private::PostMortemProcess {
   lldb::addr_t FindSymbol(const char *name);
 
 private:
+  void ApplyKASLR();
+
   void PrintUnreadMessage();
 
   const char *GetError();
diff --git a/llvm/docs/ReleaseNotes.md b/llvm/docs/ReleaseNotes.md
index 2e0c5c5cb9370..86d4669e37db5 100644
--- a/llvm/docs/ReleaseNotes.md
+++ b/llvm/docs/ReleaseNotes.md
@@ -230,6 +230,8 @@ Changes to LLDB
   `plugin.process.freebsd-kernel-core.read-only` must be set to `false`. This setting is available when
   using `/dev/mem` or a kernel dump. However, since `kvm_write()` does not support writing to kernel dumps,
   writes to a kernel dump will still fail when the setting is false.
+* Debugging core with KASLR applied is now supported. Note that this doesn't work for some crash dumps due to
+  kvm's limitation.
 
 ### Linux
 

>From 891e8661ac889728e60e34b6cdb97d2ffdc0fd56 Mon Sep 17 00:00:00 2001
From: Minsoo Choo <minsoochoo0122 at proton.me>
Date: Mon, 2 Mar 2026 10:59:25 -0500
Subject: [PATCH 2/4] fixup! [lldb][Process/FreeBSDKernelCore] Load core
 according to KASLR

Signed-off-by: Minsoo Choo <minsoochoo0122 at proton.me>
---
 llvm/docs/ReleaseNotes.md | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/llvm/docs/ReleaseNotes.md b/llvm/docs/ReleaseNotes.md
index 86d4669e37db5..dcb13069abc6c 100644
--- a/llvm/docs/ReleaseNotes.md
+++ b/llvm/docs/ReleaseNotes.md
@@ -230,8 +230,8 @@ Changes to LLDB
   `plugin.process.freebsd-kernel-core.read-only` must be set to `false`. This setting is available when
   using `/dev/mem` or a kernel dump. However, since `kvm_write()` does not support writing to kernel dumps,
   writes to a kernel dump will still fail when the setting is false.
-* Debugging core with KASLR applied is now supported. Note that this doesn't work for some crash dumps due to
-  kvm's limitation.
+* Debugging core with KASLR applied is now supported. Note that this does not work for some crash dumps due to
+  kvm's limitations.
 
 ### Linux
 

>From 2f8efb7a7dc259b84b1d0dbe38cf861c4e8ff953 Mon Sep 17 00:00:00 2001
From: Minsoo Choo <minsoochoo0122 at proton.me>
Date: Wed, 4 Mar 2026 10:28:58 -0500
Subject: [PATCH 3/4] fixup! [lldb][Process/FreeBSDKernelCore] Load core
 according to KASLR

Signed-off-by: Minsoo Choo <minsoochoo0122 at proton.me>
---
 .../Process/FreeBSD-Kernel-Core/ProcessFreeBSDKernelCore.cpp  | 4 ++--
 .../Process/FreeBSD-Kernel-Core/ProcessFreeBSDKernelCore.h    | 2 +-
 llvm/docs/ReleaseNotes.md                                     | 2 --
 3 files changed, 3 insertions(+), 5 deletions(-)

diff --git a/lldb/source/Plugins/Process/FreeBSD-Kernel-Core/ProcessFreeBSDKernelCore.cpp b/lldb/source/Plugins/Process/FreeBSD-Kernel-Core/ProcessFreeBSDKernelCore.cpp
index 0217177c87dbd..d2f663f810bfe 100644
--- a/lldb/source/Plugins/Process/FreeBSD-Kernel-Core/ProcessFreeBSDKernelCore.cpp
+++ b/lldb/source/Plugins/Process/FreeBSD-Kernel-Core/ProcessFreeBSDKernelCore.cpp
@@ -118,7 +118,7 @@ bool ProcessFreeBSDKernelCore::CanDebug(lldb::TargetSP target_sp,
 
 Status ProcessFreeBSDKernelCore::DoLoadCore() {
   // The core is already loaded by CreateInstance().
-  ApplyKASLR();
+  SetKernelDisplacement();
 
   return Status();
 }
@@ -326,7 +326,7 @@ lldb::addr_t ProcessFreeBSDKernelCore::FindSymbol(const char *name) {
   return sym ? sym->GetLoadAddress(&GetTarget()) : LLDB_INVALID_ADDRESS;
 }
 
-void ProcessFreeBSDKernelCore::ApplyKASLR() {
+void ProcessFreeBSDKernelCore::SetKernelDisplacement() {
   kssize_t displacement = kvm_kerndisp(m_kvm);
 
   if (displacement == 0)
diff --git a/lldb/source/Plugins/Process/FreeBSD-Kernel-Core/ProcessFreeBSDKernelCore.h b/lldb/source/Plugins/Process/FreeBSD-Kernel-Core/ProcessFreeBSDKernelCore.h
index 92ddec4696066..d82e55ea74bd9 100644
--- a/lldb/source/Plugins/Process/FreeBSD-Kernel-Core/ProcessFreeBSDKernelCore.h
+++ b/lldb/source/Plugins/Process/FreeBSD-Kernel-Core/ProcessFreeBSDKernelCore.h
@@ -64,7 +64,7 @@ class ProcessFreeBSDKernelCore : public lldb_private::PostMortemProcess {
   lldb::addr_t FindSymbol(const char *name);
 
 private:
-  void ApplyKASLR();
+  void SetKernelDisplacement();
 
   void PrintUnreadMessage();
 
diff --git a/llvm/docs/ReleaseNotes.md b/llvm/docs/ReleaseNotes.md
index dcb13069abc6c..2e0c5c5cb9370 100644
--- a/llvm/docs/ReleaseNotes.md
+++ b/llvm/docs/ReleaseNotes.md
@@ -230,8 +230,6 @@ Changes to LLDB
   `plugin.process.freebsd-kernel-core.read-only` must be set to `false`. This setting is available when
   using `/dev/mem` or a kernel dump. However, since `kvm_write()` does not support writing to kernel dumps,
   writes to a kernel dump will still fail when the setting is false.
-* Debugging core with KASLR applied is now supported. Note that this does not work for some crash dumps due to
-  kvm's limitations.
 
 ### Linux
 

>From 8da122876c97f92e34d305dd8929b7861fd624db Mon Sep 17 00:00:00 2001
From: Minsoo Choo <minsoochoo0122 at proton.me>
Date: Thu, 12 Mar 2026 13:37:06 -0400
Subject: [PATCH 4/4] fixup! [lldb][Process/FreeBSDKernelCore] Load core
 according to KASLR

Signed-off-by: Minsoo Choo <minsoochoo0122 at proton.me>
---
 .../FreeBSD-Kernel-Core/ProcessFreeBSDKernelCore.cpp        | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/lldb/source/Plugins/Process/FreeBSD-Kernel-Core/ProcessFreeBSDKernelCore.cpp b/lldb/source/Plugins/Process/FreeBSD-Kernel-Core/ProcessFreeBSDKernelCore.cpp
index d2f663f810bfe..f5e4e7ef5e8d0 100644
--- a/lldb/source/Plugins/Process/FreeBSD-Kernel-Core/ProcessFreeBSDKernelCore.cpp
+++ b/lldb/source/Plugins/Process/FreeBSD-Kernel-Core/ProcessFreeBSDKernelCore.cpp
@@ -338,8 +338,10 @@ void ProcessFreeBSDKernelCore::SetKernelDisplacement() {
     return;
 
   bool changed = false;
-  kernel_module_sp->SetLoadAddress(
-      target, static_cast<lldb::addr_t>(displacement), true, changed);
+  // Set offset (or displacement), not absolute address value
+  kernel_module_sp->SetLoadAddress(target,
+                                   static_cast<lldb::addr_t>(displacement),
+                                   /*value_is_offset*/ true, changed);
 
   if (changed) {
     ModuleList loaded_module_list;



More information about the lldb-commits mailing list