diff options
Diffstat (limited to 'lldb/source')
| -rw-r--r-- | lldb/source/Core/ValueObject.cpp | 10 | ||||
| -rw-r--r-- | lldb/source/Core/ValueObjectVariable.cpp | 1 | ||||
| -rw-r--r-- | lldb/source/Expression/ClangExpressionDeclMap.cpp | 9 | ||||
| -rw-r--r-- | lldb/source/Expression/IRInterpreter.cpp | 6 |
4 files changed, 20 insertions, 6 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 diff --git a/lldb/source/Core/ValueObjectVariable.cpp b/lldb/source/Core/ValueObjectVariable.cpp index 20a4af078ee..3ff37e9deac 100644 --- a/lldb/source/Core/ValueObjectVariable.cpp +++ b/lldb/source/Core/ValueObjectVariable.cpp @@ -176,6 +176,7 @@ ValueObjectVariable::UpdateValue () break; case Value::eValueTypeLoadAddress: case Value::eValueTypeScalar: + case Value::eValueTypeVector: SetAddressTypeOfChildren(eAddressTypeLoad); break; } diff --git a/lldb/source/Expression/ClangExpressionDeclMap.cpp b/lldb/source/Expression/ClangExpressionDeclMap.cpp index 940be042c3d..f8304b98b6b 100644 --- a/lldb/source/Expression/ClangExpressionDeclMap.cpp +++ b/lldb/source/Expression/ClangExpressionDeclMap.cpp @@ -1083,8 +1083,13 @@ ClangExpressionDeclMap::LookupDecl (clang::NamedDecl *decl, ClangExpressionVaria Value ret; ret.SetContext(Value::eContextTypeRegisterInfo, reg_info); - if (!reg_value.GetScalarValue(ret.GetScalar())) - return Value(); + if (reg_info->encoding == eEncodingVector) + { + if (ret.SetVectorBytes((uint8_t *)reg_value.GetBytes(), reg_value.GetByteSize(), reg_value.GetByteOrder())) + ret.SetScalarFromVector(); + } + else if (!reg_value.GetScalarValue(ret.GetScalar())) + return Value(); return ret; } diff --git a/lldb/source/Expression/IRInterpreter.cpp b/lldb/source/Expression/IRInterpreter.cpp index 421b4f9921a..4211c876bc6 100644 --- a/lldb/source/Expression/IRInterpreter.cpp +++ b/lldb/source/Expression/IRInterpreter.cpp @@ -676,7 +676,11 @@ public: if (bare_register) indirect_variable = false; - Memory::Region data_region = m_memory.Malloc(value->getType()); + lldb_private::RegisterInfo *reg_info = resolved_value.GetRegisterInfo(); + Memory::Region data_region = (reg_info->encoding == lldb::eEncodingVector) ? + m_memory.Malloc(reg_info->byte_size, m_target_data.getPrefTypeAlignment(value->getType())) : + m_memory.Malloc(value->getType()); + data_region.m_allocation->m_origin = resolved_value; Memory::Region ref_region = m_memory.Malloc(value->getType()); Memory::Region pointer_region; |

