1e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham//===-- ValueObjectMemory.cpp ---------------------------------*- C++ -*-===// 2e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham// 3e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham// The LLVM Compiler Infrastructure 4e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham// 5e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham// This file is distributed under the University of Illinois Open Source 6e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham// License. See LICENSE.TXT for details. 7e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham// 8e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham//===----------------------------------------------------------------------===// 9e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham 10e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham 11e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham#include "lldb/Core/ValueObjectMemory.h" 12e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham 13e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham// C Includes 14e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham// C++ Includes 15e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham// Other libraries and framework includes 16e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham// Project includes 17e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham#include "lldb/Core/Module.h" 18e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham#include "lldb/Core/ValueObjectList.h" 19e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham#include "lldb/Core/Value.h" 20e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham#include "lldb/Core/ValueObject.h" 21e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham 22e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham#include "lldb/Symbol/ObjectFile.h" 23e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham#include "lldb/Symbol/SymbolContext.h" 24e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham#include "lldb/Symbol/Type.h" 25e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham#include "lldb/Symbol/Variable.h" 26e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham 27e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham#include "lldb/Target/ExecutionContext.h" 28e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham#include "lldb/Target/Process.h" 29e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham#include "lldb/Target/RegisterContext.h" 30e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham#include "lldb/Target/Target.h" 31e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham#include "lldb/Target/Thread.h" 32e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham 3347da810225d8674eb9158bcf5f1f5b847cbaeedfJim Inghamusing namespace lldb; 34e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Inghamusing namespace lldb_private; 35e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham 3647da810225d8674eb9158bcf5f1f5b847cbaeedfJim InghamValueObjectSP 3747da810225d8674eb9158bcf5f1f5b847cbaeedfJim InghamValueObjectMemory::Create (ExecutionContextScope *exe_scope, 3847da810225d8674eb9158bcf5f1f5b847cbaeedfJim Ingham const char *name, 3947da810225d8674eb9158bcf5f1f5b847cbaeedfJim Ingham const Address &address, 4047da810225d8674eb9158bcf5f1f5b847cbaeedfJim Ingham lldb::TypeSP &type_sp) 4147da810225d8674eb9158bcf5f1f5b847cbaeedfJim Ingham{ 4247da810225d8674eb9158bcf5f1f5b847cbaeedfJim Ingham return (new ValueObjectMemory (exe_scope, name, address, type_sp))->GetSP(); 4347da810225d8674eb9158bcf5f1f5b847cbaeedfJim Ingham} 4447da810225d8674eb9158bcf5f1f5b847cbaeedfJim Ingham 4557b3c6b12812b0a7a79f896855c787bd4d893ecbGreg ClaytonValueObjectSP 4657b3c6b12812b0a7a79f896855c787bd4d893ecbGreg ClaytonValueObjectMemory::Create (ExecutionContextScope *exe_scope, 4757b3c6b12812b0a7a79f896855c787bd4d893ecbGreg Clayton const char *name, 4857b3c6b12812b0a7a79f896855c787bd4d893ecbGreg Clayton const Address &address, 4957b3c6b12812b0a7a79f896855c787bd4d893ecbGreg Clayton const ClangASTType &ast_type) 5057b3c6b12812b0a7a79f896855c787bd4d893ecbGreg Clayton{ 5157b3c6b12812b0a7a79f896855c787bd4d893ecbGreg Clayton return (new ValueObjectMemory (exe_scope, name, address, ast_type))->GetSP(); 5257b3c6b12812b0a7a79f896855c787bd4d893ecbGreg Clayton} 5357b3c6b12812b0a7a79f896855c787bd4d893ecbGreg Clayton 54e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim InghamValueObjectMemory::ValueObjectMemory (ExecutionContextScope *exe_scope, 55e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham const char *name, 56e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham const Address &address, 57e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham lldb::TypeSP &type_sp) : 58e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham ValueObject(exe_scope), 59e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham m_address (address), 6057b3c6b12812b0a7a79f896855c787bd4d893ecbGreg Clayton m_type_sp(type_sp), 6157b3c6b12812b0a7a79f896855c787bd4d893ecbGreg Clayton m_clang_type() 62e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham{ 63e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham // Do not attempt to construct one of these objects with no variable! 64e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham assert (m_type_sp.get() != NULL); 65979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata SetName (ConstString(name)); 66e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham m_value.SetContext(Value::eContextTypeLLDBType, m_type_sp.get()); 67b4d7fc0c466d446876e5f2d701f0e574dd0be8e7Greg Clayton TargetSP target_sp (GetTargetSP()); 68b4d7fc0c466d446876e5f2d701f0e574dd0be8e7Greg Clayton lldb::addr_t load_address = m_address.GetLoadAddress(target_sp.get()); 69e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham if (load_address != LLDB_INVALID_ADDRESS) 70e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham { 71e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham m_value.SetValueType(Value::eValueTypeLoadAddress); 72e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham m_value.GetScalar() = load_address; 73e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham } 74e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham else 75e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham { 76e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham lldb::addr_t file_address = m_address.GetFileAddress(); 77e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham if (file_address != LLDB_INVALID_ADDRESS) 78e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham { 79e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham m_value.SetValueType(Value::eValueTypeFileAddress); 80e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham m_value.GetScalar() = file_address; 81e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham } 82e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham else 83e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham { 84e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham m_value.GetScalar() = m_address.GetOffset(); 85e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham m_value.SetValueType (Value::eValueTypeScalar); 86e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham } 87e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham } 88e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham} 89e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham 9057b3c6b12812b0a7a79f896855c787bd4d893ecbGreg ClaytonValueObjectMemory::ValueObjectMemory (ExecutionContextScope *exe_scope, 9157b3c6b12812b0a7a79f896855c787bd4d893ecbGreg Clayton const char *name, 9257b3c6b12812b0a7a79f896855c787bd4d893ecbGreg Clayton const Address &address, 9357b3c6b12812b0a7a79f896855c787bd4d893ecbGreg Clayton const ClangASTType &ast_type) : 9457b3c6b12812b0a7a79f896855c787bd4d893ecbGreg Clayton ValueObject(exe_scope), 9557b3c6b12812b0a7a79f896855c787bd4d893ecbGreg Clayton m_address (address), 9657b3c6b12812b0a7a79f896855c787bd4d893ecbGreg Clayton m_type_sp(), 9757b3c6b12812b0a7a79f896855c787bd4d893ecbGreg Clayton m_clang_type(ast_type) 9857b3c6b12812b0a7a79f896855c787bd4d893ecbGreg Clayton{ 9957b3c6b12812b0a7a79f896855c787bd4d893ecbGreg Clayton // Do not attempt to construct one of these objects with no variable! 10057b3c6b12812b0a7a79f896855c787bd4d893ecbGreg Clayton assert (m_clang_type.GetASTContext()); 10157b3c6b12812b0a7a79f896855c787bd4d893ecbGreg Clayton assert (m_clang_type.GetOpaqueQualType()); 10257b3c6b12812b0a7a79f896855c787bd4d893ecbGreg Clayton 103b4d7fc0c466d446876e5f2d701f0e574dd0be8e7Greg Clayton TargetSP target_sp (GetTargetSP()); 104b4d7fc0c466d446876e5f2d701f0e574dd0be8e7Greg Clayton 105979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata SetName (ConstString(name)); 10652f792329be5db8e38961350589e97e8f2823acdGreg Clayton// m_value.SetContext(Value::eContextTypeClangType, m_clang_type.GetOpaqueQualType()); 10752f792329be5db8e38961350589e97e8f2823acdGreg Clayton m_value.SetClangType(m_clang_type); 108b4d7fc0c466d446876e5f2d701f0e574dd0be8e7Greg Clayton lldb::addr_t load_address = m_address.GetLoadAddress (target_sp.get()); 10957b3c6b12812b0a7a79f896855c787bd4d893ecbGreg Clayton if (load_address != LLDB_INVALID_ADDRESS) 11057b3c6b12812b0a7a79f896855c787bd4d893ecbGreg Clayton { 11157b3c6b12812b0a7a79f896855c787bd4d893ecbGreg Clayton m_value.SetValueType(Value::eValueTypeLoadAddress); 11257b3c6b12812b0a7a79f896855c787bd4d893ecbGreg Clayton m_value.GetScalar() = load_address; 11357b3c6b12812b0a7a79f896855c787bd4d893ecbGreg Clayton } 11457b3c6b12812b0a7a79f896855c787bd4d893ecbGreg Clayton else 11557b3c6b12812b0a7a79f896855c787bd4d893ecbGreg Clayton { 11657b3c6b12812b0a7a79f896855c787bd4d893ecbGreg Clayton lldb::addr_t file_address = m_address.GetFileAddress(); 11757b3c6b12812b0a7a79f896855c787bd4d893ecbGreg Clayton if (file_address != LLDB_INVALID_ADDRESS) 11857b3c6b12812b0a7a79f896855c787bd4d893ecbGreg Clayton { 11957b3c6b12812b0a7a79f896855c787bd4d893ecbGreg Clayton m_value.SetValueType(Value::eValueTypeFileAddress); 12057b3c6b12812b0a7a79f896855c787bd4d893ecbGreg Clayton m_value.GetScalar() = file_address; 12157b3c6b12812b0a7a79f896855c787bd4d893ecbGreg Clayton } 12257b3c6b12812b0a7a79f896855c787bd4d893ecbGreg Clayton else 12357b3c6b12812b0a7a79f896855c787bd4d893ecbGreg Clayton { 12457b3c6b12812b0a7a79f896855c787bd4d893ecbGreg Clayton m_value.GetScalar() = m_address.GetOffset(); 12557b3c6b12812b0a7a79f896855c787bd4d893ecbGreg Clayton m_value.SetValueType (Value::eValueTypeScalar); 12657b3c6b12812b0a7a79f896855c787bd4d893ecbGreg Clayton } 12757b3c6b12812b0a7a79f896855c787bd4d893ecbGreg Clayton } 12857b3c6b12812b0a7a79f896855c787bd4d893ecbGreg Clayton} 12957b3c6b12812b0a7a79f896855c787bd4d893ecbGreg Clayton 130e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim InghamValueObjectMemory::~ValueObjectMemory() 131e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham{ 132e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham} 133e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham 13452f792329be5db8e38961350589e97e8f2823acdGreg ClaytonClangASTType 135931acecd4e3af534028936431dc0f75a9fd6eb02Sean CallananValueObjectMemory::GetClangTypeImpl () 136e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham{ 13757b3c6b12812b0a7a79f896855c787bd4d893ecbGreg Clayton if (m_type_sp) 13857b3c6b12812b0a7a79f896855c787bd4d893ecbGreg Clayton return m_type_sp->GetClangForwardType(); 13952f792329be5db8e38961350589e97e8f2823acdGreg Clayton return m_clang_type; 140e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham} 141e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham 142e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim InghamConstString 143e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim InghamValueObjectMemory::GetTypeName() 144e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham{ 14557b3c6b12812b0a7a79f896855c787bd4d893ecbGreg Clayton if (m_type_sp) 14657b3c6b12812b0a7a79f896855c787bd4d893ecbGreg Clayton return m_type_sp->GetName(); 14752f792329be5db8e38961350589e97e8f2823acdGreg Clayton return m_clang_type.GetConstTypeName(); 148e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham} 149e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham 15036da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Claytonsize_t 151e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim InghamValueObjectMemory::CalculateNumChildren() 152e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham{ 15357b3c6b12812b0a7a79f896855c787bd4d893ecbGreg Clayton if (m_type_sp) 15457b3c6b12812b0a7a79f896855c787bd4d893ecbGreg Clayton return m_type_sp->GetNumChildren(true); 15557b3c6b12812b0a7a79f896855c787bd4d893ecbGreg Clayton const bool omit_empty_base_classes = true; 15652f792329be5db8e38961350589e97e8f2823acdGreg Clayton return m_clang_type.GetNumChildren (omit_empty_base_classes); 157e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham} 158e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham 159fe6dc6e241c52822710380cec0931351a1d7b2d3Greg Claytonuint64_t 160e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim InghamValueObjectMemory::GetByteSize() 161e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham{ 16257b3c6b12812b0a7a79f896855c787bd4d893ecbGreg Clayton if (m_type_sp) 16357b3c6b12812b0a7a79f896855c787bd4d893ecbGreg Clayton return m_type_sp->GetByteSize(); 16452f792329be5db8e38961350589e97e8f2823acdGreg Clayton return m_clang_type.GetByteSize (); 165e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham} 166e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham 167e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Inghamlldb::ValueType 168e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim InghamValueObjectMemory::GetValueType() const 169e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham{ 170e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham // RETHINK: Should this be inherited from somewhere? 171e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham return lldb::eValueTypeVariableGlobal; 172e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham} 173e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham 174e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Inghambool 175e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim InghamValueObjectMemory::UpdateValue () 176e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham{ 177e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham SetValueIsValid (false); 178e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham m_error.Clear(); 179e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham 180b4d7fc0c466d446876e5f2d701f0e574dd0be8e7Greg Clayton ExecutionContext exe_ctx (GetExecutionContextRef()); 181e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham 182567e7f3ba16eb48cb9fd6a2f26f2f7269eb6983cGreg Clayton Target *target = exe_ctx.GetTargetPtr(); 183567e7f3ba16eb48cb9fd6a2f26f2f7269eb6983cGreg Clayton if (target) 184e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham { 185567e7f3ba16eb48cb9fd6a2f26f2f7269eb6983cGreg Clayton m_data.SetByteOrder(target->GetArchitecture().GetByteOrder()); 186567e7f3ba16eb48cb9fd6a2f26f2f7269eb6983cGreg Clayton m_data.SetAddressByteSize(target->GetArchitecture().GetAddressByteSize()); 187e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham } 188e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham 189e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham Value old_value(m_value); 190e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham if (m_address.IsValid()) 191e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham { 192e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham Value::ValueType value_type = m_value.GetValueType(); 193e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham 194e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham switch (value_type) 195e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham { 196e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham default: 197e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham assert(!"Unhandled expression result value kind..."); 198e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham break; 199e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham 200e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham case Value::eValueTypeScalar: 201e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham // The variable value is in the Scalar value inside the m_value. 202e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham // We can point our m_data right to it. 20352f792329be5db8e38961350589e97e8f2823acdGreg Clayton m_error = m_value.GetValueAsData (&exe_ctx, m_data, 0, GetModule().get()); 204e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham break; 205e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham 206e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham case Value::eValueTypeFileAddress: 207e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham case Value::eValueTypeLoadAddress: 208e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham case Value::eValueTypeHostAddress: 209e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham // The DWARF expression result was an address in the inferior 210e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham // process. If this variable is an aggregate type, we just need 211e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham // the address as the main value as all child variable objects 212e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham // will rely upon this location and add an offset and then read 213e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham // their own values as needed. If this variable is a simple 214e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham // type, we read all data for it into m_data. 215e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham // Make sure this type has a value before we try and read it 216e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham 217e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham // If we have a file address, convert it to a load address if we can. 218567e7f3ba16eb48cb9fd6a2f26f2f7269eb6983cGreg Clayton if (value_type == Value::eValueTypeFileAddress && exe_ctx.GetProcessPtr()) 219e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham { 220567e7f3ba16eb48cb9fd6a2f26f2f7269eb6983cGreg Clayton lldb::addr_t load_addr = m_address.GetLoadAddress(target); 221e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham if (load_addr != LLDB_INVALID_ADDRESS) 222e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham { 223e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham m_value.SetValueType(Value::eValueTypeLoadAddress); 224e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham m_value.GetScalar() = load_addr; 225e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham } 226e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham } 227e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham 22852f792329be5db8e38961350589e97e8f2823acdGreg Clayton if (GetClangType().IsAggregateType()) 229e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham { 230e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham // this value object represents an aggregate type whose 231e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham // children have values, but this object does not. So we 232e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham // say we are changed if our location has changed. 233e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham SetValueDidChange (value_type != old_value.GetValueType() || m_value.GetScalar() != old_value.GetScalar()); 234e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham } 235e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham else 236e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham { 237e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham // Copy the Value and set the context to use our Variable 238e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham // so it can extract read its value into m_data appropriately 239e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham Value value(m_value); 24057b3c6b12812b0a7a79f896855c787bd4d893ecbGreg Clayton if (m_type_sp) 24157b3c6b12812b0a7a79f896855c787bd4d893ecbGreg Clayton value.SetContext(Value::eContextTypeLLDBType, m_type_sp.get()); 24257b3c6b12812b0a7a79f896855c787bd4d893ecbGreg Clayton else 24352f792329be5db8e38961350589e97e8f2823acdGreg Clayton { 24452f792329be5db8e38961350589e97e8f2823acdGreg Clayton //value.SetContext(Value::eContextTypeClangType, m_clang_type.GetOpaqueQualType()); 24552f792329be5db8e38961350589e97e8f2823acdGreg Clayton value.SetClangType(m_clang_type); 24652f792329be5db8e38961350589e97e8f2823acdGreg Clayton } 24757b3c6b12812b0a7a79f896855c787bd4d893ecbGreg Clayton 24852f792329be5db8e38961350589e97e8f2823acdGreg Clayton m_error = value.GetValueAsData(&exe_ctx, m_data, 0, GetModule().get()); 249e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham } 250e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham break; 251e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham } 252e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham 253e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham SetValueIsValid (m_error.Success()); 254e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham } 255e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham return m_error.Success(); 256e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham} 257e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham 258e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham 259e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham 260e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Inghambool 261e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim InghamValueObjectMemory::IsInScope () 262e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham{ 263e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham // FIXME: Maybe try to read the memory address, and if that works, then 264e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham // we are in scope? 265e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham return true; 266e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham} 267e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham 268801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton 2693508c387c3f0c9ecc439d98048fd7694d41bab1bGreg Claytonlldb::ModuleSP 270801417e453f8531ac176cd952200587bf15d9ccfGreg ClaytonValueObjectMemory::GetModule() 271801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton{ 2723508c387c3f0c9ecc439d98048fd7694d41bab1bGreg Clayton return m_address.GetModule(); 273801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton} 274801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton 275801417e453f8531ac176cd952200587bf15d9ccfGreg Clayton 276