[Lldb-commits] [lldb] [lldb] Support arbitrary precision integer registers (PR #166363)

David Spickett via lldb-commits lldb-commits at lists.llvm.org
Fri Nov 7 02:17:59 PST 2025


Matej =?utf-8?q?Košík?= <matej.kosik at codasip.com>,
Matej =?utf-8?q?Košík?= <matej.kosik at codasip.com>,
Matej =?utf-8?q?Košík?= <matej.kosik at codasip.com>,
Matej =?utf-8?q?Košík?= <matej.kosik at codasip.com>,
Matej =?utf-8?q?Košík?= <matej.kosik at codasip.com>,
Matej =?utf-8?q?Košík?= <matej.kosik at codasip.com>,
Matej =?utf-8?q?Košík?= <matej.kosik at codasip.com>,
Matej =?utf-8?q?Košík?= <m4tej.kosik at gmail.com>,
Matej =?utf-8?q?Košík?= <matej.kosik at codasip.com>,
Matej =?utf-8?q?Košík?= <matej.kosik at codasip.com>,
Matej =?utf-8?q?Košík?= <matej.kosik at codasip.com>,
Matej =?utf-8?q?Košík?= <matej.kosik at codasip.com>,
Matej =?utf-8?q?Košík?= <matej.kosik at codasip.com>,
Matej =?utf-8?q?Košík?= <matej.kosik at codasip.com>,
Matej =?utf-8?q?Košík?= <matej.kosik at codasip.com>,
Matej =?utf-8?q?Košík?= <matej.kosik at codasip.com>,
Matej =?utf-8?q?Košík?= <matej.kosik at codasip.com>,
Matej =?utf-8?q?Košík?= <matej.kosik at codasip.com>,
Matej =?utf-8?q?Košík?= <matej.kosik at codasip.com>
Message-ID:
In-Reply-To: <llvm.org/llvm/llvm-project/pull/166363 at github.com>


================
@@ -206,7 +206,30 @@ Status RegisterValue::SetValueFromData(const RegisterInfo &reg_info,
         int128.x[0] = data2;
         int128.x[1] = data1;
       }
-      SetUInt128(llvm::APInt(128, int128.x));
+      SetUIntN(llvm::APInt(128, int128.x));
+    } else {
+      std::vector<uint8_t> bytes(src_len, 0);
+      for (size_t i = 0; i < src_len; i++)
+        bytes[i] = src.GetU8(&src_offset);
+
+      if (src.GetByteOrder() == eByteOrderBig)
+        // Transform the big-endian input to little-endian
+        // because that is what the "llvm::LoadIntFromMemory" function
+        // we call below expects.
+        std::reverse(bytes.begin(), bytes.end());
+
+      if (llvm::sys::IsBigEndianHost) {
+        // If LLDB runs on a big-endian architecture,
+        // make sure that the input data can be read in
+        // 64-bit chunks because that is what
+        // the "llvm::LoadIntFromMemory" function will do.
----------------
DavidSpickett wrote:

Can you explain what happens on little endian that means we don't need this rounding up?

Is it because the least significant bytes come first and so if the last uint64 is truncated, it's fine as long as we didn't need all of its bits?

https://github.com/llvm/llvm-project/pull/166363


More information about the lldb-commits mailing list