diff options
| author | Sean Callanan <scallanan@apple.com> | 2013-04-30 21:41:44 +0000 |
|---|---|---|
| committer | Sean Callanan <scallanan@apple.com> | 2013-04-30 21:41:44 +0000 |
| commit | 9b7005bf428b0ac50c95a007eb0a42f5702e5dda (patch) | |
| tree | 2e1968b87abfb724ea67da52bc2c4cd0985c3845 /lldb/source/Core/RegisterValue.cpp | |
| parent | e6c878c0c67972a5f4bb14076f3d71c6b5c15083 (diff) | |
| download | bcm5719-llvm-9b7005bf428b0ac50c95a007eb0a42f5702e5dda.tar.gz bcm5719-llvm-9b7005bf428b0ac50c95a007eb0a42f5702e5dda.zip | |
RegisterValues can now report their contents as
UInts even if their contents were set as bytes.
This makes expressions using registers work
better, especially with core files.
<rdar://problem/13743427>
llvm-svn: 180810
Diffstat (limited to 'lldb/source/Core/RegisterValue.cpp')
| -rw-r--r-- | lldb/source/Core/RegisterValue.cpp | 59 |
1 files changed, 58 insertions, 1 deletions
diff --git a/lldb/source/Core/RegisterValue.cpp b/lldb/source/Core/RegisterValue.cpp index 16559e2b478..91f5bea805c 100644 --- a/lldb/source/Core/RegisterValue.cpp +++ b/lldb/source/Core/RegisterValue.cpp @@ -237,7 +237,17 @@ RegisterValue::GetScalarValue (Scalar &scalar) const switch (m_type) { case eTypeInvalid: break; - case eTypeBytes: break; + case eTypeBytes: + { + switch (m_data.buffer.length) + { + default: break; + case 1: scalar = m_data.uint8; return true; + case 2: scalar = m_data.uint16; return true; + case 4: scalar = m_data.uint32; return true; + case 8: scalar = m_data.uint64; return true; + } + } case eTypeUInt8: scalar = m_data.uint8; return true; case eTypeUInt16: scalar = m_data.uint16; return true; case eTypeUInt32: scalar = m_data.uint32; return true; @@ -669,6 +679,16 @@ RegisterValue::GetAsUInt16 (uint16_t fail_value, bool *success_ptr) const default: break; case eTypeUInt8: return m_data.uint8; case eTypeUInt16: return m_data.uint16; + case eTypeBytes: + { + switch (m_data.buffer.length) + { + default: break; + case 1: return m_data.uint8; + case 2: return m_data.uint16; + } + } + break; } if (success_ptr) *success_ptr = false; @@ -698,6 +718,17 @@ RegisterValue::GetAsUInt32 (uint32_t fail_value, bool *success_ptr) const if (sizeof(long double) == sizeof(uint32_t)) return m_data.uint32; break; + case eTypeBytes: + { + switch (m_data.buffer.length) + { + default: break; + case 1: return m_data.uint8; + case 2: return m_data.uint16; + case 4: return m_data.uint32; + } + } + break; } if (success_ptr) *success_ptr = false; @@ -728,6 +759,18 @@ RegisterValue::GetAsUInt64 (uint64_t fail_value, bool *success_ptr) const if (sizeof(long double) == sizeof(uint64_t)) return m_data.uint64; break; + case eTypeBytes: + { + switch (m_data.buffer.length) + { + default: break; + case 1: return m_data.uint8; + case 2: return m_data.uint16; + case 4: return m_data.uint32; + case 8: return m_data.uint64; + } + } + break; } if (success_ptr) *success_ptr = false; @@ -760,6 +803,20 @@ RegisterValue::GetAsUInt128 (__uint128_t fail_value, bool *success_ptr) const if (sizeof(long double) == sizeof(__uint128_t)) return m_data.uint128; break; + case eTypeBytes: + { + switch (m_data.buffer.length) + { + default: + break; + case 1: return m_data.uint8; + case 2: return m_data.uint16; + case 4: return m_data.uint32; + case 8: return m_data.uint64; + case 16: return m_data.uint128; + } + } + break; } if (success_ptr) *success_ptr = false; |

