[Lldb-commits] [lldb] [lldb] Report the unwound PC for WebAssembly caller frames (PR #212326)
Felipe de Azevedo Piovezan via lldb-commits
lldb-commits at lists.llvm.org
Tue Jul 28 02:30:37 PDT 2026
================
@@ -64,9 +64,21 @@ const RegisterSet *RegisterContextWasm::GetRegisterSet(size_t reg_set) {
bool RegisterContextWasm::ReadRegister(const RegisterInfo *reg_info,
RegisterValue &value) {
- // The only real registers is the PC.
- if (reg_info->name)
+ // The only real register is the PC.
+ if (reg_info->name) {
+ // A caller frame's PC is the unwound return address, which the base
+ // register context cannot provide because it only sees the innermost
+ // frame's live PC. Use the PC the unwinder recorded for this frame.
+ if (m_concrete_frame_idx > 0) {
+ ThreadWasm &wasm_thread = static_cast<ThreadWasm &>(GetThread());
----------------
felipepiovezan wrote:
I don't want to open a patch now to avoid any conflicts, but on line 84 we have:
```
ThreadWasm *thread = static_cast<ThreadWasm *>(&GetThread());
ProcessWasm *process = static_cast<ProcessWasm *>(thread->GetProcess().get());
if (!thread)
return false;
```
It also declares a ThreadWasm variable, and does a null test which is non-sensical (the variable starts as a reference, and a static cast will never turn non-null into null).
I think it is defensible to hoist your variable to the function scope and delete the `if` in this PR, since you are indirectly re-using existing code. But I'm also happy to put a patch after you merge this.
https://github.com/llvm/llvm-project/pull/212326
More information about the lldb-commits
mailing list