diff options
| author | Greg Clayton <gclayton@apple.com> | 2012-10-30 18:18:43 +0000 |
|---|---|---|
| committer | Greg Clayton <gclayton@apple.com> | 2012-10-30 18:18:43 +0000 |
| commit | 0665a0f09e6597937766c32e606346baf055a495 (patch) | |
| tree | 5a66d2a020dfaab582cb9ced2080a31eb01014c4 /lldb/source/Core/ValueObject.cpp | |
| parent | b3e8e688da4e71a77399f21318f89e4010094324 (diff) | |
| download | bcm5719-llvm-0665a0f09e6597937766c32e606346baf055a495.tar.gz bcm5719-llvm-0665a0f09e6597937766c32e606346baf055a495.zip | |
Path from Ashok Thirumurthi:
The attached patch adds eValueTypeVector to lldb_private::Value. The nested struct Vector is patterned after RegisterValue::m_data.buffer. This change to Value allows ClangExpressionDeclMap::LookupDecl to return vector register data for consumption by InterpreterStackFrame::ResolveValue. Note that ResolveValue was tweaked slightly to allocate enough memory for vector registers.
An immediate result of this patch is that "expr $xmm0" generates the same results on Linux as on the Mac, which is good enough for TestRegisters.py. In addition, the log of m_memory.PrintData(data_region.m_base, data_region.m_extent) shows that the register content has been resolved successfully. On the other hand, the output is glaringly empty:
runCmd: expr $xmm0
output: (unsigned char __attribute__((ext_vector_type(16)))) $0 = {}
Expecting sub string: vector_type
Matched
llvm-svn: 167033
Diffstat (limited to 'lldb/source/Core/ValueObject.cpp')
| -rw-r--r-- | lldb/source/Core/ValueObject.cpp | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/lldb/source/Core/ValueObject.cpp b/lldb/source/Core/ValueObject.cpp index c3560f1089e..08f43085015 100644 --- a/lldb/source/Core/ValueObject.cpp +++ b/lldb/source/Core/ValueObject.cpp @@ -422,6 +422,7 @@ ValueObject::GetLocationAsCString () break; case Value::eValueTypeScalar: + case Value::eValueTypeVector: if (m_value.GetContextType() == Value::eContextTypeRegisterInfo) { RegisterInfo *reg_info = m_value.GetRegisterInfo(); @@ -431,10 +432,10 @@ ValueObject::GetLocationAsCString () m_location_str = reg_info->name; else if (reg_info->alt_name) m_location_str = reg_info->alt_name; - break; + + m_location_str = (reg_info->encoding == lldb::eEncodingVector) ? "vector" : "scalar"; } } - m_location_str = "scalar"; break; case Value::eValueTypeLoadAddress: @@ -1585,6 +1586,7 @@ ValueObject::GetAddressOf (bool scalar_is_load_address, AddressType *address_typ switch (m_value.GetValueType()) { case Value::eValueTypeScalar: + case Value::eValueTypeVector: if (scalar_is_load_address) { if(address_type) @@ -1621,6 +1623,7 @@ ValueObject::GetPointerValue (AddressType *address_type) switch (m_value.GetValueType()) { case Value::eValueTypeScalar: + case Value::eValueTypeVector: address = m_value.GetScalar().ULongLong(LLDB_INVALID_ADDRESS); break; @@ -1720,7 +1723,8 @@ ValueObject::SetValueFromCString (const char *value_str, Error& error) break; case Value::eValueTypeFileAddress: case Value::eValueTypeScalar: - break; + case Value::eValueTypeVector: + break; } } else |

