[Lldb-commits] [lldb] [lldb][test][FreeBSD] Account for spsr being 8 bytes (PR #84032)

David Spickett via lldb-commits lldb-commits at lists.llvm.org
Tue Mar 5 07:34:07 PST 2024


https://github.com/DavidSpickett created https://github.com/llvm/llvm-project/pull/84032

Since https://reviews.freebsd.org/D38983, spsr (aka cpsr) is stored as an 8 byte value. However in lldb's structures it is a 32 bit value still.

The version number comes from
https://cgit.freebsd.org/src/commit/?id=ea3061526e9ce5d3b65932c1d3e4437abd556d65.

>From 6e131a102eb0914303d5bbe08b69ba52c36e958f Mon Sep 17 00:00:00 2001
From: David Spickett <david.spickett at linaro.org>
Date: Tue, 5 Mar 2024 15:27:40 +0000
Subject: [PATCH] [lldb][test][FreeBSD] Account for spsr being 8 bytes

Since https://reviews.freebsd.org/D38983, spsr (aka cpsr) is stored
as an 8 byte value. However in lldb's structures it is a 32 bit value
still.

The version number comes from
https://cgit.freebsd.org/src/commit/?id=ea3061526e9ce5d3b65932c1d3e4437abd556d65.
---
 .../Process/Utility/RegisterContextFreeBSDTest.cpp       | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/lldb/unittests/Process/Utility/RegisterContextFreeBSDTest.cpp b/lldb/unittests/Process/Utility/RegisterContextFreeBSDTest.cpp
index e541a34e6e22a0..70697766dd82ba 100644
--- a/lldb/unittests/Process/Utility/RegisterContextFreeBSDTest.cpp
+++ b/lldb/unittests/Process/Utility/RegisterContextFreeBSDTest.cpp
@@ -7,6 +7,7 @@
 //===----------------------------------------------------------------------===//
 
 // clang-format off
+#include <sys/param.h>
 #include <sys/types.h>
 #include <machine/reg.h>
 #if defined(__arm__)
@@ -362,7 +363,15 @@ TEST(RegisterContextFreeBSDTest, arm64) {
   EXPECT_GPR_ARM64(lr, lr);
   EXPECT_GPR_ARM64(sp, sp);
   EXPECT_GPR_ARM64(pc, elr);
+#if __FreeBSD_version >= 1400084
+  // LLDB assumes that cpsr is 32 bit but the kernel stores it as a 64 bit
+  // value.
+  EXPECT_THAT(GetRegParams(reg_ctx, gpr_cpsr_arm64),
+              ::testing::Pair(offsetof(reg, spsr), 4));
+#else
+  // Older kernels stored spsr as a 32 bit value.
   EXPECT_GPR_ARM64(cpsr, spsr);
+#endif
 
   size_t base_offset = reg_ctx.GetRegisterInfo()[fpu_v0_arm64].byte_offset;
 



More information about the lldb-commits mailing list