@@ -457,18 +457,20 @@ class MetadataReader {
457457        swift::Demangle::NodePointer {
458458      //  Resolve the reference to a remote address.
459459      auto  offsetInMangledName =
460-             (const  char  *)base - mangledName.getLocalBuffer ();
461-       auto  remoteAddress =
462-           mangledName.getRemoteAddress () + offsetInMangledName + offset;
460+           (const  char  *)base - mangledName.getLocalBuffer ();
461+       auto  offsetAddress = mangledName.getRemoteAddress () + offsetInMangledName;
463462
464463      RemoteAbsolutePointer resolved;
465464      if  (directness == Directness::Indirect) {
465+         auto  remoteAddress = Reader->resolveIndirectAddressAtOffset (
466+             offsetAddress, offset, /* directnessEncodedInOffset=*/ false );
466467        if  (auto  indirectAddress = readPointer (remoteAddress)) {
467468          resolved = stripSignedPointer (*indirectAddress);
468469        } else  {
469470          return  nullptr ;
470471        }
471472      } else  {
473+         auto  remoteAddress = offsetAddress + offset;
472474        resolved = Reader->getSymbol (remoteAddress);
473475      }
474476
@@ -2084,17 +2086,19 @@ class MetadataReader {
20842086
20852087    using  SignedPointer = typename  std::make_signed<StoredPointer>::type;
20862088
2087-     RemoteAddress resultAddress = getAddress (fieldRef) + (SignedPointer)offset;
2088- 
20892089    //  Low bit set in the offset indicates that the offset leads to the absolute
20902090    //  address in memory.
20912091    if  (indirect) {
2092+       RemoteAddress resultAddress = Reader->resolveIndirectAddressAtOffset (
2093+           getAddress (fieldRef), (SignedPointer)offset,
2094+           /* directnessEncodedInOffset=*/ true );
20922095      if  (auto  ptr = readPointer (resultAddress)) {
20932096        return  stripSignedPointer (*ptr);
20942097      }
20952098      return  std::nullopt ;
20962099    }
20972100
2101+     RemoteAddress resultAddress = getAddress (fieldRef) + (SignedPointer)offset;
20982102    return  RemoteAbsolutePointer (resultAddress);
20992103  }
21002104
0 commit comments