From 12f429a43a63249e836bff0f5dec8b3d4cdb75a5 Mon Sep 17 00:00:00 2001 From: Augusto Noronha Date: Tue, 8 Jul 2025 13:03:49 -0700 Subject: [PATCH] [NFC][lldb] Adapt LLDB to RemoteInspection's RemoteAddress changes Adapts LLDB to the new field in RemoteAddress. This is an NFC that maintains the current behavior. A follow up patch will be introduced later that takes advantage of the new behavior to fix a bug in reading metadata from files instead of the process. rdar://148361743 --- .../Swift/LLDBMemoryReader.cpp | 65 ++++++++++--------- .../LanguageRuntime/Swift/LLDBMemoryReader.h | 2 - .../Swift/ReflectionContext.cpp | 25 +++++-- .../Swift/SwiftLanguageRuntime.cpp | 27 +++++--- ...ftLanguageRuntimeDynamicTypeResolution.cpp | 22 ++++--- .../Swift/SwiftLanguageRuntimeRemoteAST.cpp | 26 +++++--- .../Swift/SwiftMetadataCache.cpp | 5 +- 7 files changed, 105 insertions(+), 67 deletions(-) diff --git a/lldb/source/Plugins/LanguageRuntime/Swift/LLDBMemoryReader.cpp b/lldb/source/Plugins/LanguageRuntime/Swift/LLDBMemoryReader.cpp index d06a68bab1142..5ad007bb22b70 100644 --- a/lldb/source/Plugins/LanguageRuntime/Swift/LLDBMemoryReader.cpp +++ b/lldb/source/Plugins/LanguageRuntime/Swift/LLDBMemoryReader.cpp @@ -84,7 +84,7 @@ swift::remote::RemoteAddress LLDBMemoryReader::getSymbolAddress(const std::string &name) { lldbassert(!name.empty()); if (name.empty()) - return swift::remote::RemoteAddress(nullptr); + return swift::remote::RemoteAddress(); Log *log = GetLog(LLDBLog::Types); @@ -97,7 +97,7 @@ LLDBMemoryReader::getSymbolAddress(const std::string &name) { name_cs, lldb::eSymbolTypeAny, sc_list); if (!sc_list.GetSize()) { LLDB_LOGV(log, "[MemoryReader] symbol resolution failed {0}", name); - return swift::remote::RemoteAddress(nullptr); + return swift::remote::RemoteAddress(); } SymbolContext sym_ctx; @@ -118,14 +118,15 @@ LLDBMemoryReader::getSymbolAddress(const std::string &name) { if (sym_ctx.symbol) { auto load_addr = sym_ctx.symbol->GetLoadAddress(&m_process.GetTarget()); LLDB_LOGV(log, "[MemoryReader] symbol resolved to {0:x}", load_addr); - return swift::remote::RemoteAddress(load_addr); + return swift::remote::RemoteAddress( + load_addr, swift::remote::RemoteAddress::DefaultAddressSpace); } } // Empty list, resolution failed. if (sc_list.GetSize() == 0) { LLDB_LOGV(log, "[MemoryReader] symbol resolution failed {0}", name); - return swift::remote::RemoteAddress(nullptr); + return swift::remote::RemoteAddress(); } // If there's a single symbol, then we're golden. If there's more than @@ -140,11 +141,12 @@ LLDBMemoryReader::getSymbolAddress(const std::string &name) { load_addr, m_process.GetAddressByteSize(), 0, error, true); if (sym_value != other_sym_value) { LLDB_LOGV(log, "[MemoryReader] symbol resolution failed {0}", name); - return swift::remote::RemoteAddress(nullptr); + return swift::remote::RemoteAddress(); } } LLDB_LOGV(log, "[MemoryReader] symbol resolved to {0}", load_addr); - return swift::remote::RemoteAddress(load_addr); + return swift::remote::RemoteAddress( + load_addr, swift::remote::RemoteAddress::DefaultAddressSpace); } static std::unique_ptr @@ -180,7 +182,7 @@ LLDBMemoryReader::resolvePointerAsSymbol(swift::remote::RemoteAddress address) { return {}; std::optional
maybeAddr = - resolveRemoteAddress(address.getAddressData()); + resolveRemoteAddress(address.getRawAddress()); // This is not an assert, but should never happen. if (!maybeAddr) return {}; @@ -191,7 +193,7 @@ LLDBMemoryReader::resolvePointerAsSymbol(swift::remote::RemoteAddress address) { addr = *maybeAddr; } else { // `address` is a real load address. - if (!target.ResolveLoadAddress(address.getAddressData(), addr)) + if (!target.ResolveLoadAddress(address.getRawAddress(), addr)) return {}; } @@ -229,7 +231,8 @@ LLDBMemoryReader::resolvePointer(swift::remote::RemoteAddress address, // to a tagged address so further memory reads originating from it benefit // from the file-cache optimization. swift::remote::RemoteAbsolutePointer process_pointer{ - swift::remote::RemoteAddress{readValue}}; + swift::remote::RemoteAddress{ + readValue, swift::remote::RemoteAddress::DefaultAddressSpace}}; if (!readMetadataFromFileCacheEnabled()) return process_pointer; @@ -237,7 +240,7 @@ LLDBMemoryReader::resolvePointer(swift::remote::RemoteAddress address, // Try to strip the pointer before checking if we have it mapped. auto strippedPointer = signedPointerStripper(process_pointer); if (auto resolved = strippedPointer.getResolvedAddress()) - readValue = resolved.getAddressData(); + readValue = resolved.getRawAddress(); auto &target = m_process.GetTarget(); Address addr; @@ -245,7 +248,7 @@ LLDBMemoryReader::resolvePointer(swift::remote::RemoteAddress address, LLDB_LOGV(log, "[MemoryReader] Could not resolve load address of pointer {0:x} " "read from {1:x}.", - readValue, address.getAddressData()); + readValue, address.getRawAddress()); return process_pointer; } @@ -263,7 +266,7 @@ LLDBMemoryReader::resolvePointer(swift::remote::RemoteAddress address, LLDB_LOG(log, "[MemoryReader] Could not resolve find module containing pointer " "{0:x} read from {1:x}.", - readValue, address.getAddressData()); + readValue, address.getRawAddress()); return process_pointer; } @@ -290,16 +293,17 @@ LLDBMemoryReader::resolvePointer(swift::remote::RemoteAddress address, LLDB_LOG(log, "[MemoryReader] Pointer {0:x} read from {1:x} resolved to tagged " "address {2:x}, which is outside its image address space.", - readValue, address.getAddressData(), tagged_address); + readValue, address.getRawAddress(), tagged_address); return process_pointer; } swift::remote::RemoteAbsolutePointer tagged_pointer{ - swift::remote::RemoteAddress{tagged_address}}; + swift::remote::RemoteAddress{ + tagged_address, swift::remote::RemoteAddress::DefaultAddressSpace}}; if (tagged_address != (uint64_t)signedPointerStripper(tagged_pointer) .getResolvedAddress() - .getAddressData()) { + .getRawAddress()) { lldbassert(false && "Tagged pointer runs into pointer authentication mask!"); return process_pointer; @@ -308,7 +312,7 @@ LLDBMemoryReader::resolvePointer(swift::remote::RemoteAddress address, LLDB_LOGV(log, "[MemoryReader] Successfully resolved pointer {0:x} read from " "{1:x} to tagged address {2:x}.", - readValue, address.getAddressData(), tagged_address); + readValue, address.getRawAddress(), tagged_address); return tagged_pointer; } @@ -317,7 +321,7 @@ bool LLDBMemoryReader::readBytes(swift::remote::RemoteAddress address, Log *log = GetLog(LLDBLog::Types); if (m_local_buffer) { bool overflow = false; - auto addr = address.getAddressData(); + auto addr = address.getRawAddress(); auto end = llvm::SaturatingAdd(addr, size, &overflow); if (overflow) { LLDB_LOGV(log, "[MemoryReader] address {0:x} + size {1} overflows", addr, @@ -335,16 +339,16 @@ bool LLDBMemoryReader::readBytes(swift::remote::RemoteAddress address, } LLDB_LOGV(log, "[MemoryReader] asked to read {0} bytes at address {1:x}", - size, address.getAddressData()); + size, address.getRawAddress()); std::optional
maybeAddr = - resolveRemoteAddressFromSymbolObjectFile(address.getAddressData()); + resolveRemoteAddressFromSymbolObjectFile(address.getRawAddress()); if (!maybeAddr) - maybeAddr = resolveRemoteAddress(address.getAddressData()); + maybeAddr = resolveRemoteAddress(address.getRawAddress()); if (!maybeAddr) { LLDB_LOGV(log, "[MemoryReader] could not resolve address {0:x}", - address.getAddressData()); + address.getRawAddress()); return false; } auto addr = *maybeAddr; @@ -411,17 +415,17 @@ bool LLDBMemoryReader::readString(swift::remote::RemoteAddress address, return std::string(stream.GetData()); }; LLDB_LOGV(log, "[MemoryReader] asked to read string data at address {0:x}", - address.getAddressData()); + address.getRawAddress()); std::optional
maybeAddr = - resolveRemoteAddressFromSymbolObjectFile(address.getAddressData()); + resolveRemoteAddressFromSymbolObjectFile(address.getRawAddress()); if (!maybeAddr) - maybeAddr = resolveRemoteAddress(address.getAddressData()); + maybeAddr = resolveRemoteAddress(address.getRawAddress()); if (!maybeAddr) { LLDB_LOGV(log, "[MemoryReader] could not resolve address {0:x}", - address.getAddressData()); + address.getRawAddress()); return false; } auto addr = *maybeAddr; @@ -539,10 +543,11 @@ LLDBMemoryReader::addModuleToAddressMap(ModuleSP module, if (module_end_address != signedPointerStripper( - swift::remote::RemoteAbsolutePointer{ - swift::remote::RemoteAddress{module_end_address}}) + swift::remote::RemoteAbsolutePointer{swift::remote::RemoteAddress{ + module_end_address, + swift::reflection::RemoteAddress::DefaultAddressSpace}}) .getResolvedAddress() - .getAddressData()) { + .getRawAddress()) { LLDB_LOG(GetLog(LLDBLog::Types), "[MemoryReader] module to address map ran into pointer " "authentication mask!"); @@ -615,12 +620,12 @@ std::optional LLDBMemoryReader::resolveRemoteAddress( swift::reflection::RemoteAddress address) const { std::optional
lldb_address = - LLDBMemoryReader::resolveRemoteAddress(address.getAddressData()); + LLDBMemoryReader::resolveRemoteAddress(address.getRawAddress()); if (!lldb_address) return {}; lldb::addr_t addr = lldb_address->GetLoadAddress(&m_process.GetTarget()); if (addr != LLDB_INVALID_ADDRESS) - return swift::reflection::RemoteAddress(addr); + return swift::reflection::RemoteAddress(addr, swift::reflection::RemoteAddress::DefaultAddressSpace); return {}; } diff --git a/lldb/source/Plugins/LanguageRuntime/Swift/LLDBMemoryReader.h b/lldb/source/Plugins/LanguageRuntime/Swift/LLDBMemoryReader.h index ae23fcb74ec8b..cd6d8a9bb3589 100644 --- a/lldb/source/Plugins/LanguageRuntime/Swift/LLDBMemoryReader.h +++ b/lldb/source/Plugins/LanguageRuntime/Swift/LLDBMemoryReader.h @@ -52,7 +52,6 @@ class MemoryReaderLocalBufferHolder { class LLDBMemoryReader : public swift::remote::MemoryReader { public: - LLDBMemoryReader(Process &p, std::function @@ -122,7 +121,6 @@ class LLDBMemoryReader : public swift::remote::MemoryReader { std::optional
resolveRemoteAddressFromSymbolObjectFile(uint64_t address) const; -private: Process &m_process; size_t m_max_read_amount; diff --git a/lldb/source/Plugins/LanguageRuntime/Swift/ReflectionContext.cpp b/lldb/source/Plugins/LanguageRuntime/Swift/ReflectionContext.cpp index ee0e5505c6d7d..01d0e0a834bd5 100644 --- a/lldb/source/Plugins/LanguageRuntime/Swift/ReflectionContext.cpp +++ b/lldb/source/Plugins/LanguageRuntime/Swift/ReflectionContext.cpp @@ -223,7 +223,10 @@ class TargetReflectionContext : public ReflectionContextInterface { lldb::addr_t instance, swift::remote::TypeInfoProvider *provider, swift::reflection::DescriptorFinder *descriptor_finder) override { auto on_exit = PushDescriptorFinderAndPopOnExit(descriptor_finder); - auto *ti = m_reflection_ctx.getInstanceTypeInfo(instance, provider); + auto *ti = m_reflection_ctx.getInstanceTypeInfo( + swift::remote::RemoteAddress( + instance, swift::remote::RemoteAddress::DefaultAddressSpace), + provider); if (!ti) return llvm::createStringError("could not get instance type info"); return *ti; @@ -273,7 +276,9 @@ class TargetReflectionContext : public ReflectionContextInterface { auto on_exit = PushDescriptorFinderAndPopOnExit(descriptor_finder); // Guard against faulty self-referential metadata. unsigned limit = 256; - auto md_ptr = m_reflection_ctx.readMetadataFromInstance(pointer); + auto md_ptr = + m_reflection_ctx.readMetadataFromInstance(swift::remote::RemoteAddress( + pointer, swift::remote::RemoteAddress::DefaultAddressSpace)); if (!md_ptr) return false; @@ -345,7 +350,10 @@ class TargetReflectionContext : public ReflectionContextInterface { bool skip_artificial_subclasses) override { auto on_exit = PushDescriptorFinderAndPopOnExit(descriptor_finder); if (auto *tr = m_reflection_ctx.readTypeFromMetadata( - metadata_address, skip_artificial_subclasses)) + swift::remote::RemoteAddress( + metadata_address, + swift::remote::RemoteAddress::DefaultAddressSpace), + skip_artificial_subclasses)) return *tr; return llvm::createStringError("could not read type from metadata"); } @@ -356,7 +364,9 @@ class TargetReflectionContext : public ReflectionContextInterface { bool skip_artificial_subclasses) override { auto on_exit = PushDescriptorFinderAndPopOnExit(descriptor_finder); auto metadata_address = - m_reflection_ctx.readMetadataFromInstance(instance_address); + m_reflection_ctx.readMetadataFromInstance(swift::remote::RemoteAddress( + instance_address, + swift::remote::RemoteAddress::DefaultAddressSpace)); if (!metadata_address) return llvm::createStringError( llvm::formatv("could not read heap metadata for object at {0:x}", @@ -370,7 +380,8 @@ class TargetReflectionContext : public ReflectionContextInterface { std::optional ReadPointer(lldb::addr_t instance_address) override { - auto ptr = m_reflection_ctx.readPointer(instance_address); + auto ptr = m_reflection_ctx.readPointer(swift::remote::RemoteAddress( + instance_address, swift::remote::RemoteAddress::DefaultAddressSpace)); return ptr; } @@ -399,7 +410,9 @@ class TargetReflectionContext : public ReflectionContextInterface { asyncTaskInfo(lldb::addr_t AsyncTaskPtr, unsigned ChildTaskLimit, unsigned AsyncBacktraceLimit) override { auto [error, task_info] = m_reflection_ctx.asyncTaskInfo( - AsyncTaskPtr, ChildTaskLimit, AsyncBacktraceLimit); + swift::remote::RemoteAddress( + AsyncTaskPtr, swift::remote::RemoteAddress::DefaultAddressSpace), + ChildTaskLimit, AsyncBacktraceLimit); if (error) return llvm::createStringError(*error); diff --git a/lldb/source/Plugins/LanguageRuntime/Swift/SwiftLanguageRuntime.cpp b/lldb/source/Plugins/LanguageRuntime/Swift/SwiftLanguageRuntime.cpp index dd6c4a3a586b2..0d897401e4527 100644 --- a/lldb/source/Plugins/LanguageRuntime/Swift/SwiftLanguageRuntime.cpp +++ b/lldb/source/Plugins/LanguageRuntime/Swift/SwiftLanguageRuntime.cpp @@ -584,8 +584,11 @@ bool SwiftLanguageRuntime::AddJitObjectFileToReflectionContext( auto *Buf = malloc(size); std::memcpy(Buf, data.begin(), size); - swift::remote::RemoteRef remote_ref(section->GetFileAddress(), - Buf); + swift::remote::RemoteRef remote_ref( + swift::remote::RemoteAddress( + section->GetFileAddress(), + swift::remote::RemoteAddress::DefaultAddressSpace), + Buf); return {remote_ref, size}; } @@ -723,7 +726,10 @@ std::optional SwiftLanguageRuntime::AddObjectFileToReflectionContext( section_list->GetSectionAtIndex(0)->GetFileAddress(); assert(address <= end_address && "Address outside of range!"); - swift::remote::RemoteRef remote_ref(address, Buf); + swift::remote::RemoteRef remote_ref( + swift::remote::RemoteAddress( + address, swift::remote::RemoteAddress::DefaultAddressSpace), + Buf); return {remote_ref, size}; } } @@ -794,18 +800,23 @@ bool SwiftLanguageRuntime::AddModuleToReflectionContext( const uint8_t *file_data = extractor.GetDataStart(); llvm::sys::MemoryBlock file_buffer((void *)file_data, size); info_id = m_reflection_ctx->ReadELF( - swift::remote::RemoteAddress(load_ptr), + swift::remote::RemoteAddress( + load_ptr, swift::remote::RemoteAddress::DefaultAddressSpace), std::optional(file_buffer), likely_module_names); } else if (read_from_file_cache && obj_file->GetPluginName() == "mach-o") { info_id = AddObjectFileToReflectionContext(module_sp, likely_module_names); if (!info_id) - info_id = m_reflection_ctx->AddImage(swift::remote::RemoteAddress(load_ptr), - likely_module_names); + info_id = m_reflection_ctx->AddImage( + swift::remote::RemoteAddress( + load_ptr, swift::remote::RemoteAddress::DefaultAddressSpace), + likely_module_names); } else { - info_id = m_reflection_ctx->AddImage(swift::remote::RemoteAddress(load_ptr), - likely_module_names); + info_id = m_reflection_ctx->AddImage( + swift::remote::RemoteAddress( + load_ptr, swift::remote::RemoteAddress::DefaultAddressSpace), + likely_module_names); } if (!info_id) { diff --git a/lldb/source/Plugins/LanguageRuntime/Swift/SwiftLanguageRuntimeDynamicTypeResolution.cpp b/lldb/source/Plugins/LanguageRuntime/Swift/SwiftLanguageRuntimeDynamicTypeResolution.cpp index 155d4f74f3415..8cc1c98254c93 100644 --- a/lldb/source/Plugins/LanguageRuntime/Swift/SwiftLanguageRuntimeDynamicTypeResolution.cpp +++ b/lldb/source/Plugins/LanguageRuntime/Swift/SwiftLanguageRuntimeDynamicTypeResolution.cpp @@ -1438,7 +1438,7 @@ llvm::Expected SwiftLanguageRuntime::GetEnumCaseName( auto *eti = llvm::cast(ti); auto buffer_holder = PushLocalBuffer((int64_t)data.GetDataStart(), data.GetByteSize()); - RemoteAddress addr(data.GetDataStart()); + RemoteAddress addr = RemoteAddress((uint64_t)data.GetDataStart(), swift::reflection::RemoteAddress::DefaultAddressSpace); int case_index; if (eti->projectEnumValue(*GetMemoryReader(), addr, &case_index)) return eti->getCases()[case_index].Name; @@ -1551,7 +1551,7 @@ SwiftLanguageRuntime::ProjectEnum(ValueObject &valobj) { } } - swift::reflection::RemoteAddress remote_addr(addr); + auto remote_addr = swift::reflection::RemoteAddress(addr, 0); int case_index; auto *eti = llvm::cast(ti); if (!eti->projectEnumValue(*GetMemoryReader(), remote_addr, &case_index)) @@ -2037,7 +2037,7 @@ CompilerType SwiftLanguageRuntime::GetDynamicTypeAndAddress_EmbeddedClass( if (pointer->getSymbol().empty() || pointer->getOffset()) { // Find the symbol name at this address. Address address; - address.SetLoadAddress(pointer->getResolvedAddress().getAddressData(), + address.SetLoadAddress(pointer->getResolvedAddress().getRawAddress(), &GetProcess().GetTarget()); Symbol *symbol = address.CalculateSymbolContextSymbol(); if (!symbol) @@ -2292,7 +2292,8 @@ bool SwiftLanguageRuntime::GetDynamicTypeAndAddress_Existential( existential_address, llvm::expectedToOptional(in_value.GetByteSize()).value_or(0)); - swift::remote::RemoteAddress remote_existential(existential_address); + auto remote_existential = swift::remote::RemoteAddress( + existential_address, swift::remote::RemoteAddress::DefaultAddressSpace); ThreadSafeReflectionContext reflection_ctx = GetReflectionContext(); if (!reflection_ctx) @@ -2317,7 +2318,7 @@ bool SwiftLanguageRuntime::GetDynamicTypeAndAddress_Existential( } const swift::reflection::TypeRef *typeref; - swift::remote::RemoteAddress out_address(nullptr); + swift::remote::RemoteAddress out_address; std::tie(typeref, out_address) = *pair; auto ts = tss->GetTypeSystemSwiftTypeRef(); @@ -2326,7 +2327,7 @@ bool SwiftLanguageRuntime::GetDynamicTypeAndAddress_Existential( swift::Demangle::Demangler dem; swift::Demangle::NodePointer node = typeref->getDemangling(dem); dynamic_type = ts->RemangleAsType(dem, node, flavor); - dynamic_address = out_address.getAddressData(); + dynamic_address = out_address.getRawAddress(); } else { // In the embedded Swift case, the existential container just points to // the instance. @@ -2341,7 +2342,7 @@ bool SwiftLanguageRuntime::GetDynamicTypeAndAddress_Existential( uint64_t address = 0; if (maybe_addr_or_symbol->getSymbol().empty() && maybe_addr_or_symbol->getOffset() == 0) { - address = maybe_addr_or_symbol->getResolvedAddress().getAddressData(); + address = maybe_addr_or_symbol->getResolvedAddress().getRawAddress(); } else { SymbolContextList sc_list; auto &module_list = GetProcess().GetTarget().GetImages(); @@ -2360,7 +2361,8 @@ bool SwiftLanguageRuntime::GetDynamicTypeAndAddress_Existential( GetDynamicTypeAndAddress_EmbeddedClass(address, existential_type); if (!dynamic_type) return false; - dynamic_address = maybe_addr_or_symbol->getResolvedAddress().getAddressData(); + dynamic_address = + maybe_addr_or_symbol->getResolvedAddress().getRawAddress(); } class_type_or_name.SetCompilerType(dynamic_type); address.SetRawAddress(dynamic_address); @@ -2829,7 +2831,9 @@ Value::ValueType SwiftLanguageRuntime::GetValueType( // Read the value witness table and check if the data is inlined in // the existential container or not. - swift::remote::RemoteAddress remote_existential(existential_address); + auto remote_existential = swift::remote::RemoteAddress( + existential_address, + swift::remote::RemoteAddress::DefaultAddressSpace); if (ThreadSafeReflectionContext reflection_ctx = GetReflectionContext()) { std::optional is_inlined = reflection_ctx->IsValueInlinedInExistentialContainer( diff --git a/lldb/source/Plugins/LanguageRuntime/Swift/SwiftLanguageRuntimeRemoteAST.cpp b/lldb/source/Plugins/LanguageRuntime/Swift/SwiftLanguageRuntimeRemoteAST.cpp index 2f3bd5151e73e..50a1fe6d05df2 100644 --- a/lldb/source/Plugins/LanguageRuntime/Swift/SwiftLanguageRuntimeRemoteAST.cpp +++ b/lldb/source/Plugins/LanguageRuntime/Swift/SwiftLanguageRuntimeRemoteAST.cpp @@ -106,7 +106,7 @@ std::optional SwiftLanguageRuntime::GetMemberVariableOffsetRemoteAST( // Dig out metadata describing the type, if it's easy to find. // FIXME: the Remote AST library should make this easier. - swift::remote::RemoteAddress optmeta(nullptr); + swift::remote::RemoteAddress optmeta; const swift::TypeKind type_kind = swift_type->getKind(); switch (type_kind) { case swift::TypeKind::Class: @@ -119,13 +119,14 @@ std::optional SwiftLanguageRuntime::GetMemberVariableOffsetRemoteAST( lldb::addr_t pointer = instance->GetPointerValue(); if (!pointer || pointer == LLDB_INVALID_ADDRESS) break; - swift::remote::RemoteAddress address(pointer); + auto address = swift::remote::RemoteAddress( + pointer, swift::remote::RemoteAddress::DefaultAddressSpace); if (auto metadata = remote_ast->getHeapMetadataForObject(address)) optmeta = metadata.getValue(); } LLDB_LOGF(GetLog(LLDBLog::Types), "[MemberVariableOffsetResolver] optmeta = 0x%" PRIx64, - optmeta.getAddressData()); + optmeta.getRawAddress()); break; } @@ -201,8 +202,9 @@ ConstString SwiftLanguageRuntime::GetDynamicTypeName_ClassRemoteAST( return {}; auto &remote_ast = GetRemoteASTContext(*swift_ast_ctx); - auto remote_ast_metadata_address = remote_ast.getHeapMetadataForObject( - swift::remote::RemoteAddress(instance_ptr)); + auto remote_ast_metadata_address = + remote_ast.getHeapMetadataForObject(swift::remote::RemoteAddress( + instance_ptr, swift::remote::RemoteAddress::DefaultAddressSpace)); if (remote_ast_metadata_address) { auto instance_type = remote_ast.getTypeForRemoteTypeMetadata( remote_ast_metadata_address.getValue(), @@ -239,7 +241,8 @@ SwiftLanguageRuntime::GetDynamicTypeAndAddress_ExistentialRemoteAST( if (!swift_ast_ctx) return {}; - swift::remote::RemoteAddress remote_existential(existential_address); + auto remote_existential = swift::remote::RemoteAddress( + existential_address, swift::remote::RemoteAddress::DefaultAddressSpace); auto &remote_ast = GetRemoteASTContext(*swift_ast_ctx); auto swift_type = llvm::expectedToStdOptional(swift_ast_ctx->GetSwiftType(existential_type)) @@ -262,7 +265,7 @@ SwiftLanguageRuntime::GetDynamicTypeAndAddress_ExistentialRemoteAST( CompilerType type = ToCompilerType(type_and_address.InstanceType); Address address; - address.SetRawAddress(type_and_address.PayloadAddress.getAddressData()); + address.SetRawAddress(type_and_address.PayloadAddress.getRawAddress()); return {{type, address}}; } #endif @@ -377,7 +380,9 @@ SwiftLanguageRuntime::BindGenericTypeParametersRemoteAST( ->getAs(); auto underlying_type_result = remote_ast.getUnderlyingTypeForOpaqueType( - swift::remote::RemoteAddress(addr), + swift::remote::RemoteAddress( + addr, + swift::remote::RemoteAddress::DefaultAddressSpace), opaque_type->getSubstitutions(), genericParam->getIndex()); @@ -474,8 +479,9 @@ CompilerType SwiftLanguageRuntime::MetadataPromise::FulfillTypePromise( } auto &remote_ast = m_swift_runtime.GetRemoteASTContext(*swift_ast_ctx); swift::remoteAST::Result result = - remote_ast.getTypeForRemoteTypeMetadata( - swift::remote::RemoteAddress(m_metadata_location)); + remote_ast.getTypeForRemoteTypeMetadata(swift::remote::RemoteAddress( + m_metadata_location, + swift::remote::RemoteAddress::DefaultAddressSpace)); if (result) { m_compiler_type = {swift_ast_ctx->weak_from_this(), diff --git a/lldb/source/Plugins/LanguageRuntime/Swift/SwiftMetadataCache.cpp b/lldb/source/Plugins/LanguageRuntime/Swift/SwiftMetadataCache.cpp index 292dada5832b0..255a34991eb56 100644 --- a/lldb/source/Plugins/LanguageRuntime/Swift/SwiftMetadataCache.cpp +++ b/lldb/source/Plugins/LanguageRuntime/Swift/SwiftMetadataCache.cpp @@ -172,8 +172,9 @@ SwiftMetadataCache::generateHashTableBlob( auto &mangled_name = std::get<1>(pair); if (mangled_name.empty()) continue; - auto offset = field_descriptor.getAddressData() - - field_descriptors.startAddress().getAddressData(); + auto offset = + field_descriptor.getRemoteAddress().getRawAddress() - + field_descriptors.startAddress().getRemoteAddress().getRawAddress(); table_generator.insert(mangled_name, offset, m_info); }