https://github.com/mchoo7 created 
https://github.com/llvm/llvm-project/pull/183947

This commit address two issues with arm64 RegisterContext on FreeBSDKernelCore. 
Since LR in pcb structure stores LR for normal threads and PC for crashed 
thread, both `gpr_lr_arm64` and `gpr_pc_arm64` should point to the same field 
(the LR field in pcb). Also pcb's LR fields stores LR not PC for normal threads 
(i.e non-crashed threads) but `gpr_lr_arm64` was not exposed for FreeBSD 13.

>From 815f04ab0d0ab252c5e1c7b3d8fd67a70935e190 Mon Sep 17 00:00:00 2001
From: Minsoo Choo <[email protected]>
Date: Sat, 28 Feb 2026 15:13:29 -0500
Subject: [PATCH] [lldb][Process/FreeBSDKernelCore] Fix RegisterContext for
 arm64

Signed-off-by: Minsoo Choo <[email protected]>
---
 .../RegisterContextFreeBSDKernelCore_arm64.cpp           | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git 
a/lldb/source/Plugins/Process/FreeBSD-Kernel-Core/RegisterContextFreeBSDKernelCore_arm64.cpp
 
b/lldb/source/Plugins/Process/FreeBSD-Kernel-Core/RegisterContextFreeBSDKernelCore_arm64.cpp
index afd60a64a6365..442fa9b12460f 100644
--- 
a/lldb/source/Plugins/Process/FreeBSD-Kernel-Core/RegisterContextFreeBSDKernelCore_arm64.cpp
+++ 
b/lldb/source/Plugins/Process/FreeBSD-Kernel-Core/RegisterContextFreeBSDKernelCore_arm64.cpp
@@ -101,7 +101,7 @@ bool RegisterContextFreeBSDKernelCore_arm64::ReadRegister(
       // The pc of crashing thread is stored in lr.
       static_assert(gpr_lr_arm64 - gpr_x19_arm64 == PCB_LR,
                     "nonconsecutive arm64 register numbers");
-      value = pcb.x[reg - gpr_x19_arm64];
+      value = pcb.x[gpr_lr_arm64 - gpr_x19_arm64];
       break;
     case gpr_sp_arm64:
       value = pcb.sp;
@@ -151,13 +151,14 @@ bool RegisterContextFreeBSDKernelCore_arm64::ReadRegister(
                     "nonconsecutive arm64 register numbers");
       value = pcb13.x[reg - gpr_x0_arm64];
       break;
-    case gpr_sp_arm64:
-      value = pcb13.sp;
-      break;
+    case gpr_lr_arm64:
     case gpr_pc_arm64:
       // The pc of crashing thread is stored in lr.
       value = pcb13.lr;
       break;
+    case gpr_sp_arm64:
+      value = pcb13.sp;
+      break;
     default:
       return false;
     }

_______________________________________________
lldb-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to