diff --git a/include/swift/Remote/MemoryReader.h b/include/swift/Remote/MemoryReader.h index 1008650b43990..7e077a5f7d068 100644 --- a/include/swift/Remote/MemoryReader.h +++ b/include/swift/Remote/MemoryReader.h @@ -150,6 +150,13 @@ class MemoryReader { return RemoteAbsolutePointer("", readValue); } + /// Performs the inverse operation of \ref resolvePointer. + /// A use-case for this is to turn file addresses into in-process addresses. + virtual std::optional + resolveRemoteAddress(RemoteAddress address) const { + return std::nullopt; + } + virtual std::optional resolvePointerAsSymbol(RemoteAddress address) { return std::nullopt; diff --git a/include/swift/Remote/MetadataReader.h b/include/swift/Remote/MetadataReader.h index 262368e9f4a2b..a7d9485e6ad03 100644 --- a/include/swift/Remote/MetadataReader.h +++ b/include/swift/Remote/MetadataReader.h @@ -2907,8 +2907,10 @@ class MetadataReader { case ContextDescriptorKind::Anonymous: { // Use the remote address to identify the anonymous context. char addressBuf[18]; + RemoteAddress address(descriptor.getAddressData()); + address = Reader->resolveRemoteAddress(address).value_or(address); snprintf(addressBuf, sizeof(addressBuf), "$%" PRIx64, - (uint64_t)descriptor.getAddressData()); + (uint64_t)address.getAddressData()); auto anonNode = dem.createNode(Node::Kind::AnonymousContext); CharVector addressStr; addressStr.append(addressBuf, dem);