@@ -231,19 +231,26 @@ bool ValueObjectVariable::UpdateValue() {
231
231
if (type->GetForwardCompilerType ()
232
232
.GetTypeSystem ()
233
233
.dyn_cast_or_null <TypeSystemSwift>() &&
234
- TypePayloadSwift (type->GetPayload ()).IsFixedValueBuffer ())
234
+ TypePayloadSwift (type->GetPayload ()).IsFixedValueBuffer () &&
235
+ m_value.GetValueType () == Value::ValueType::FileAddress)
235
236
if (auto process_sp = GetProcessSP ())
236
237
if (auto runtime = process_sp->GetLanguageRuntime (
237
238
compiler_type.GetMinimumLanguage ())) {
238
239
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
+ }
247
254
}
248
255
}
249
256
}
0 commit comments