@@ -416,11 +416,9 @@ class MetadataReader {
416416 }
417417
418418 RemoteAbsolutePointer stripSignedPointer (const RemoteAbsolutePointer &P) {
419- if (P.isResolved ()) {
420- return RemoteAbsolutePointer (" " ,
421- P.getResolvedAddress ().getAddressData () & PtrAuthMask);
422- }
423- return P;
419+ return RemoteAbsolutePointer (
420+ P.getSymbol (), P.getOffset (),
421+ RemoteAddress (P.getResolvedAddress ().getAddressData () & PtrAuthMask));
424422 }
425423
426424 StoredPointer queryPtrAuthMask () {
@@ -519,29 +517,13 @@ class MetadataReader {
519517 // The second entry is a relative address to the mangled protocol
520518 // without symbolic references.
521519
522- // lldb might return an unresolved remote absolute pointer from its
523- // resolvePointerAsSymbol implementation -- workaround this.
524- if (!resolved.isResolved ()) {
525- auto remoteAddr = RemoteAddress (remoteAddress);
526- resolved =
527- RemoteAbsolutePointer (" " , remoteAddr.getAddressData ());
528- }
529-
530520 auto addr =
531521 resolved.getResolvedAddress ().getAddressData () + sizeof (int32_t );
532522 int32_t offset;
533523 Reader->readInteger (RemoteAddress (addr), &offset);
534524 auto addrOfTypeRef = addr + offset;
535525 resolved = Reader->getSymbol (RemoteAddress (addrOfTypeRef));
536526
537- // lldb might return an unresolved remote absolute pointer from its
538- // resolvePointerAsSymbol implementation -- workaround this.
539- if (!resolved.isResolved ()) {
540- auto remoteAddr = RemoteAddress (addrOfTypeRef);
541- resolved =
542- RemoteAbsolutePointer (" " , remoteAddr.getAddressData ());
543- }
544-
545527 // Dig out the protocol from the protocol list.
546528 auto protocolList = readMangledName (resolved.getResolvedAddress (),
547529 MangledNameKind::Type, dem);
@@ -1379,12 +1361,10 @@ class MetadataReader {
13791361 ParentContextDescriptorRef
13801362 readContextDescriptor (const RemoteAbsolutePointer &address) {
13811363 // Map an unresolved pointer to an unresolved context ref.
1382- if (!address.isResolved ()) {
1364+ if (!address.getSymbol (). empty ()) {
13831365 // We can only handle references to a symbol without an offset currently.
1384- if (address.getOffset () != 0 ) {
1385- return ParentContextDescriptorRef ();
1386- }
1387- return ParentContextDescriptorRef (address.getSymbol ());
1366+ if (address.getOffset () == 0 )
1367+ return ParentContextDescriptorRef (address.getSymbol ());
13881368 }
13891369
13901370 return ParentContextDescriptorRef (
@@ -2016,7 +1996,7 @@ class MetadataReader {
20161996
20171997 std::optional<StoredPointer> readResolvedPointerValue (StoredPointer address) {
20181998 if (auto pointer = readPointer (address)) {
2019- if (!pointer->isResolved ())
1999+ if (!pointer->getResolvedAddress ())
20202000 return std::nullopt ;
20212001 return (StoredPointer)pointer->getResolvedAddress ().getAddressData ();
20222002 }
@@ -2079,7 +2059,7 @@ class MetadataReader {
20792059 return std::nullopt ;
20802060 }
20812061
2082- return RemoteAbsolutePointer (" " , resultAddress);
2062+ return RemoteAbsolutePointer (RemoteAddress ( resultAddress) );
20832063 }
20842064
20852065 // / Given a pointer to an Objective-C class, try to read its class name.
@@ -2335,13 +2315,11 @@ class MetadataReader {
23352315 auto parentAddress = resolveRelativeIndirectableField (base, base->Parent );
23362316 if (!parentAddress)
23372317 return std::nullopt ;
2338- if (!parentAddress->isResolved ()) {
2318+ if (!parentAddress->getSymbol (). empty ()) {
23392319 // Currently we can only handle references directly to a symbol without
23402320 // an offset.
2341- if (parentAddress->getOffset () != 0 ) {
2342- return std::nullopt ;
2343- }
2344- return ParentContextDescriptorRef (parentAddress->getSymbol ());
2321+ if (parentAddress->getOffset () == 0 )
2322+ return ParentContextDescriptorRef (parentAddress->getSymbol ());
23452323 }
23462324 auto addr = parentAddress->getResolvedAddress ();
23472325 if (!addr)
0 commit comments