Translate dwarf register numbers to internal register numbers
before trying to look them up in register contexts, in the
emulation callback functions that read & write the frame registers.
llvm-svn: 129037
diff --git a/lldb/source/Core/EmulateInstruction.cpp b/lldb/source/Core/EmulateInstruction.cpp
index 93c2bcc..8c3456e 100644
--- a/lldb/source/Core/EmulateInstruction.cpp
+++ b/lldb/source/Core/EmulateInstruction.cpp
@@ -272,8 +272,12 @@
RegisterContext *reg_context = frame->GetRegisterContext().get();
Scalar value;
+ uint32_t internal_reg_num = reg_context->ConvertRegisterKindToRegisterNumber (reg_kind, reg_num);
- if (reg_context->ReadRegisterValue (reg_num, value))
+ if (internal_reg_num == LLDB_INVALID_REGNUM)
+ return false;
+
+ if (reg_context->ReadRegisterValue (internal_reg_num, value))
{
reg_value = value.GetRawBits64 (0);
return true;
@@ -296,7 +300,11 @@
RegisterContext *reg_context = frame->GetRegisterContext().get();
Scalar value (reg_value);
- return reg_context->WriteRegisterValue (reg_num, value);
+ uint32_t internal_reg_num = reg_context->ConvertRegisterKindToRegisterNumber (reg_kind, reg_num);
+ if (internal_reg_num != LLDB_INVALID_REGNUM)
+ return reg_context->WriteRegisterValue (internal_reg_num, value);
+ else
+ return false;
}
size_t