summaryrefslogtreecommitdiffstats
path: root/lldb/source/Core/EmulateInstruction.cpp
diff options
context:
space:
mode:
authorCaroline Tice <ctice@apple.com>2011-04-06 23:30:18 +0000
committerCaroline Tice <ctice@apple.com>2011-04-06 23:30:18 +0000
commitc1bcafd8c1ffc6ec1421f7c6debc125f24d8b9ce (patch)
tree6700071794e414623b1baf404ebe8bf2ca0ae316 /lldb/source/Core/EmulateInstruction.cpp
parentf9bd6bad8a902b923cc53ebe584ad0f75a90ee02 (diff)
downloadbcm5719-llvm-c1bcafd8c1ffc6ec1421f7c6debc125f24d8b9ce.tar.gz
bcm5719-llvm-c1bcafd8c1ffc6ec1421f7c6debc125f24d8b9ce.zip
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
Diffstat (limited to 'lldb/source/Core/EmulateInstruction.cpp')
-rw-r--r--lldb/source/Core/EmulateInstruction.cpp12
1 files changed, 10 insertions, 2 deletions
diff --git a/lldb/source/Core/EmulateInstruction.cpp b/lldb/source/Core/EmulateInstruction.cpp
index 93c2bcc0706..8c3456e17da 100644
--- a/lldb/source/Core/EmulateInstruction.cpp
+++ b/lldb/source/Core/EmulateInstruction.cpp
@@ -272,8 +272,12 @@ EmulateInstruction::ReadRegisterFrame (void *baton,
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 @@ EmulateInstruction::WriteRegisterFrame (void *baton,
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
OpenPOWER on IntegriCloud