[Lldb-commits] [lldb] [lldb] Number the Wasm virtual registers (PR #237243)

Felipe de Azevedo Piovezan via lldb-commits lldb-commits at lists.llvm.org
Fri Oct 30 08:02:32 PDT 2026


https://github.com/felipepiovezan updated https://github.com/llvm/llvm-project/pull/237243

>From bd828c9d38ac7a72fb7b761cc5a69384230924d9 Mon Sep 17 00:00:00 2001
From: Felipe de Azevedo Piovezan <fpiovezan at apple.com>
Date: Fri, 30 Oct 2026 13:34:50 +0000
Subject: [PATCH] [lldb] Number the Wasm virtual registers

WasmVirtualRegisterInfo current leaves every register number at 0, the default
constructed value.

This PR gives each virtual register its own number,
GetWasmRegister(kind, index), as its LLDB number.

Other kinds are left as invalid: DWARF names these values with
DW_OP_WASM_location, not with register numbers, and they have no EH
frame or generic number.

code assisted by claude
---
 .../Process/wasm/RegisterContextWasm.h        |  7 +++++-
 lldb/unittests/Process/CMakeLists.txt         |  1 +
 lldb/unittests/Process/wasm/CMakeLists.txt    |  6 +++++
 .../Process/wasm/RegisterContextWasmTest.cpp  | 22 +++++++++++++++++++
 4 files changed, 35 insertions(+), 1 deletion(-)
 create mode 100644 lldb/unittests/Process/wasm/CMakeLists.txt
 create mode 100644 lldb/unittests/Process/wasm/RegisterContextWasmTest.cpp

diff --git a/lldb/source/Plugins/Process/wasm/RegisterContextWasm.h b/lldb/source/Plugins/Process/wasm/RegisterContextWasm.h
index dcb6e021435d0d..a9fc177b3bb5d0 100644
--- a/lldb/source/Plugins/Process/wasm/RegisterContextWasm.h
+++ b/lldb/source/Plugins/Process/wasm/RegisterContextWasm.h
@@ -14,6 +14,7 @@
 #include "ThreadWasm.h"
 #include "Utility/WasmVirtualRegisters.h"
 #include "lldb/lldb-private-types.h"
+#include <algorithm>
 #include <unordered_map>
 
 namespace lldb_private {
@@ -28,7 +29,11 @@ struct WasmVirtualRegisterInfo : public RegisterInfo {
   uint32_t index;
 
   WasmVirtualRegisterInfo(WasmVirtualRegisterKinds kind, uint32_t index)
-      : RegisterInfo(), kind(kind), index(index) {}
+      : RegisterInfo(), kind(kind), index(index) {
+    // RegisterInfo() zeroes the numbers, and 0 is the generic PC.
+    std::fill(std::begin(kinds), std::end(kinds), LLDB_INVALID_REGNUM);
+    kinds[lldb::eRegisterKindLLDB] = GetWasmRegister(kind, index);
+  }
 };
 
 class RegisterContextWasm
diff --git a/lldb/unittests/Process/CMakeLists.txt b/lldb/unittests/Process/CMakeLists.txt
index da997e1073e909..a8dc6e7f112085 100644
--- a/lldb/unittests/Process/CMakeLists.txt
+++ b/lldb/unittests/Process/CMakeLists.txt
@@ -9,6 +9,7 @@ if (CMAKE_SYSTEM_NAME MATCHES "Windows")
 endif()
 add_subdirectory(Utility)
 add_subdirectory(minidump)
+add_subdirectory(wasm)
 
 add_lldb_unittest(ProcessTests
   ProcessEventDataTest.cpp
diff --git a/lldb/unittests/Process/wasm/CMakeLists.txt b/lldb/unittests/Process/wasm/CMakeLists.txt
new file mode 100644
index 00000000000000..7f5f85df1b366d
--- /dev/null
+++ b/lldb/unittests/Process/wasm/CMakeLists.txt
@@ -0,0 +1,6 @@
+add_lldb_unittest(ProcessWasmTests
+  RegisterContextWasmTest.cpp
+
+  LINK_LIBS
+    lldbPluginProcessWasm
+  )
diff --git a/lldb/unittests/Process/wasm/RegisterContextWasmTest.cpp b/lldb/unittests/Process/wasm/RegisterContextWasmTest.cpp
new file mode 100644
index 00000000000000..f2b7ea03a1fbc3
--- /dev/null
+++ b/lldb/unittests/Process/wasm/RegisterContextWasmTest.cpp
@@ -0,0 +1,22 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "Plugins/Process/wasm/RegisterContextWasm.h"
+#include "gtest/gtest.h"
+
+using namespace lldb;
+using namespace lldb_private;
+using namespace lldb_private::wasm;
+
+TEST(WasmVirtualRegisterInfoTest, RegisterNumbers) {
+  const WasmVirtualRegisterInfo info(eWasmTagLocal, 3);
+  EXPECT_EQ(info.kinds[eRegisterKindLLDB], GetWasmRegister(eWasmTagLocal, 3));
+  for (RegisterKind kind : {eRegisterKindEHFrame, eRegisterKindDWARF,
+                            eRegisterKindGeneric, eRegisterKindProcessPlugin})
+    EXPECT_EQ(info.kinds[kind], LLDB_INVALID_REGNUM) << "kind " << kind;
+}



More information about the lldb-commits mailing list