summaryrefslogtreecommitdiffstats
path: root/lldb/source
diff options
context:
space:
mode:
Diffstat (limited to 'lldb/source')
-rw-r--r--lldb/source/Core/ValueObject.cpp10
-rw-r--r--lldb/source/Core/ValueObjectVariable.cpp1
-rw-r--r--lldb/source/Expression/ClangExpressionDeclMap.cpp9
-rw-r--r--lldb/source/Expression/IRInterpreter.cpp6
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;
OpenPOWER on IntegriCloud