[RemoteMirrors] Fix losing the remote address on StaticMirror

The Offset field of a DynamicRelocation is either an offset or a remote
address, but was being treated only as a remote address on
getDynamicSymbol.
This commit is contained in:
Augusto Noronha
2025-07-11 16:33:19 -07:00
parent 44bd5be56f
commit b6ce889c8d
4 changed files with 11 additions and 4 deletions

View File

@@ -39,8 +39,12 @@ private:
uint64_t HeaderAddress;
std::vector<Segment> Segments;
struct DynamicRelocation {
/// The symbol name that the pointer refers to. Empty if only an absolute
/// address is available.
StringRef Symbol;
uint64_t Offset;
// The offset (if the symbol is available), or the resolved remote address
// if the symbol is empty.
uint64_t OffsetOrAddress;
};
llvm::DenseMap<uint64_t, DynamicRelocation> DynamicRelocations;

View File

@@ -333,8 +333,13 @@ remote::RemoteAbsolutePointer Image::getDynamicSymbol(uint64_t Addr) const {
auto found = DynamicRelocations.find(Addr);
if (found == DynamicRelocations.end())
return nullptr;
if (!found->second.Symbol.empty())
return remote::RemoteAbsolutePointer(found->second.Symbol,
found->second.OffsetOrAddress,
remote::RemoteAddress());
return remote::RemoteAbsolutePointer(
found->second.Symbol, found->second.Offset, remote::RemoteAddress());
remote::RemoteAddress(found->second.OffsetOrAddress,
remote::RemoteAddress::DefaultAddressSpace));
}
std::pair<const Image *, uint64_t>

View File

@@ -5,7 +5,6 @@
//
// Temporarily disable on AArch64 Linux (rdar://88451721)
// UNSUPPORTED: OS=linux-gnu && CPU=aarch64
// XFAIL: OS=linux-android
// rdar://100558042
// UNSUPPORTED: CPU=arm64e

View File

@@ -10,7 +10,6 @@
// FIXME: rdar://127796117
// UNSUPPORTED: OS=linux-gnu && CPU=aarch64
// XFAIL: OS=linux-android
// RUN: %target-build-swift -target %target-swift-5.2-abi-triple -Xfrontend -enable-anonymous-context-mangled-names %S/Inputs/ConcreteTypes.swift %S/Inputs/GenericTypes.swift %S/Inputs/Protocols.swift %S/Inputs/Extensions.swift %S/Inputs/Closures.swift -parse-as-library -emit-module -emit-library %no-fixup-chains -module-name TypesToReflect -o %t/%target-library-name(TypesToReflect)
// RUN: %target-build-swift -target %target-swift-5.2-abi-triple -Xfrontend -enable-anonymous-context-mangled-names %S/Inputs/ConcreteTypes.swift %S/Inputs/GenericTypes.swift %S/Inputs/Protocols.swift %S/Inputs/Extensions.swift %S/Inputs/Closures.swift %S/Inputs/main.swift -emit-module -emit-executable %no-fixup-chains -module-name TypesToReflect -o %t/TypesToReflect