diff options
| author | Caroline Tice <ctice@apple.com> | 2011-04-06 23:30:18 +0000 |
|---|---|---|
| committer | Caroline Tice <ctice@apple.com> | 2011-04-06 23:30:18 +0000 |
| commit | c1bcafd8c1ffc6ec1421f7c6debc125f24d8b9ce (patch) | |
| tree | 6700071794e414623b1baf404ebe8bf2ca0ae316 /lldb/source/Core/EmulateInstruction.cpp | |
| parent | f9bd6bad8a902b923cc53ebe584ad0f75a90ee02 (diff) | |
| download | bcm5719-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.cpp | 12 |
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 |

