mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
[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:
@@ -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;
|
||||
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user