@@ -231,19 +231,26 @@ bool ValueObjectVariable::UpdateValue() {
231231 if (type->GetForwardCompilerType ()
232232 .GetTypeSystem ()
233233 .dyn_cast_or_null <TypeSystemSwift>() &&
234- TypePayloadSwift (type->GetPayload ()).IsFixedValueBuffer ())
234+ TypePayloadSwift (type->GetPayload ()).IsFixedValueBuffer () &&
235+ m_value.GetValueType () == Value::ValueType::FileAddress)
235236 if (auto process_sp = GetProcessSP ())
236237 if (auto runtime = process_sp->GetLanguageRuntime (
237238 compiler_type.GetMinimumLanguage ())) {
238239 if (!runtime->IsStoredInlineInBuffer (compiler_type)) {
239- lldb::addr_t addr =
240- m_value.GetScalar ().ULongLong (LLDB_INVALID_ADDRESS);
241- if (addr != LLDB_INVALID_ADDRESS) {
242- Target &target = process_sp->GetTarget ();
243- size_t ptr_size = process_sp->GetAddressByteSize ();
244- lldb::addr_t deref_addr;
245- target.ReadMemory (addr, &deref_addr, ptr_size, m_error, true );
246- m_value.GetScalar () = deref_addr;
240+ if (auto *scs = variable->GetSymbolContextScope ()) {
241+ if (auto module_sp = scs->CalculateSymbolContextModule ()) {
242+ lldb::addr_t file_addr =
243+ m_value.GetScalar ().ULongLong (LLDB_INVALID_ADDRESS);
244+ Address address (file_addr, module_sp->GetSectionList ());
245+ Target &target = process_sp->GetTarget ();
246+ size_t ptr_size = process_sp->GetAddressByteSize ();
247+ lldb::addr_t deref_addr;
248+ lldb::addr_t load_addr = address.GetLoadAddress (&target);
249+ // FIXME: Add error handling!
250+ if (target.ReadMemory (load_addr, &deref_addr, ptr_size,
251+ m_error, process_is_alive))
252+ m_value.GetScalar () = deref_addr;
253+ }
247254 }
248255 }
249256 }
0 commit comments