@@ -416,11 +416,9 @@ class MetadataReader {
416
416
}
417
417
418
418
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));
424
422
}
425
423
426
424
StoredPointer queryPtrAuthMask () {
@@ -519,29 +517,13 @@ class MetadataReader {
519
517
// The second entry is a relative address to the mangled protocol
520
518
// without symbolic references.
521
519
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
-
530
520
auto addr =
531
521
resolved.getResolvedAddress ().getAddressData () + sizeof (int32_t );
532
522
int32_t offset;
533
523
Reader->readInteger (RemoteAddress (addr), &offset);
534
524
auto addrOfTypeRef = addr + offset;
535
525
resolved = Reader->getSymbol (RemoteAddress (addrOfTypeRef));
536
526
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
-
545
527
// Dig out the protocol from the protocol list.
546
528
auto protocolList = readMangledName (resolved.getResolvedAddress (),
547
529
MangledNameKind::Type, dem);
@@ -1379,12 +1361,10 @@ class MetadataReader {
1379
1361
ParentContextDescriptorRef
1380
1362
readContextDescriptor (const RemoteAbsolutePointer &address) {
1381
1363
// Map an unresolved pointer to an unresolved context ref.
1382
- if (!address.isResolved ()) {
1364
+ if (!address.getSymbol (). empty ()) {
1383
1365
// 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 ());
1388
1368
}
1389
1369
1390
1370
return ParentContextDescriptorRef (
@@ -2016,7 +1996,7 @@ class MetadataReader {
2016
1996
2017
1997
std::optional<StoredPointer> readResolvedPointerValue (StoredPointer address) {
2018
1998
if (auto pointer = readPointer (address)) {
2019
- if (!pointer->isResolved ())
1999
+ if (!pointer->getResolvedAddress ())
2020
2000
return std::nullopt ;
2021
2001
return (StoredPointer)pointer->getResolvedAddress ().getAddressData ();
2022
2002
}
@@ -2079,7 +2059,7 @@ class MetadataReader {
2079
2059
return std::nullopt ;
2080
2060
}
2081
2061
2082
- return RemoteAbsolutePointer (" " , resultAddress);
2062
+ return RemoteAbsolutePointer (RemoteAddress ( resultAddress) );
2083
2063
}
2084
2064
2085
2065
// / Given a pointer to an Objective-C class, try to read its class name.
@@ -2335,13 +2315,11 @@ class MetadataReader {
2335
2315
auto parentAddress = resolveRelativeIndirectableField (base, base->Parent );
2336
2316
if (!parentAddress)
2337
2317
return std::nullopt ;
2338
- if (!parentAddress->isResolved ()) {
2318
+ if (!parentAddress->getSymbol (). empty ()) {
2339
2319
// Currently we can only handle references directly to a symbol without
2340
2320
// 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 ());
2345
2323
}
2346
2324
auto addr = parentAddress->getResolvedAddress ();
2347
2325
if (!addr)
0 commit comments