@@ -2451,6 +2451,12 @@ class MetadataReader {
24512451 tryFindSymbol (_address, symbolName); \
24522452 tryReadSymbol (_address, dest); \
24532453 } while (0 )
2454+ # define tryFindAndReadSymbolWithDefault (dest, symbolName, default ) do { \
2455+ dest = default ; \
2456+ auto _address = Reader->getSymbolAddress (symbolName); \
2457+ if (_address) \
2458+ tryReadSymbol (_address, dest); \
2459+ } while (0 )
24542460
24552461 tryFindAndReadSymbol (TaggedPointerMask,
24562462 " objc_debug_taggedpointer_mask" );
@@ -2463,30 +2469,34 @@ class MetadataReader {
24632469 if (!TaggedPointerClassesAddr)
24642470 finish (TaggedPointerEncodingKind::Error);
24652471 TaggedPointerClasses = TaggedPointerClassesAddr.getAddressData ();
2466- tryFindAndReadSymbol (TaggedPointerExtendedMask,
2467- " objc_debug_taggedpointer_ext_mask" );
2468- tryFindAndReadSymbol (TaggedPointerExtendedSlotShift,
2469- " objc_debug_taggedpointer_ext_slot_shift" );
2470- tryFindAndReadSymbol (TaggedPointerExtendedSlotMask,
2471- " objc_debug_taggedpointer_ext_slot_mask" );
2472- tryFindSymbol (TaggedPointerExtendedClassesAddr,
2473- " objc_debug_taggedpointer_ext_classes" );
2474- if (!TaggedPointerExtendedClassesAddr)
2475- finish (TaggedPointerEncodingKind::Error);
2476- TaggedPointerExtendedClasses =
2477- TaggedPointerExtendedClassesAddr.getAddressData ();
2472+
2473+ // Extended tagged pointers don't exist on older OSes. Handle those
2474+ // by setting the variables to zero.
2475+ tryFindAndReadSymbolWithDefault (TaggedPointerExtendedMask,
2476+ " objc_debug_taggedpointer_ext_mask" ,
2477+ 0 );
2478+ tryFindAndReadSymbolWithDefault (TaggedPointerExtendedSlotShift,
2479+ " objc_debug_taggedpointer_ext_slot_shift" ,
2480+ 0 );
2481+ tryFindAndReadSymbolWithDefault (TaggedPointerExtendedSlotMask,
2482+ " objc_debug_taggedpointer_ext_slot_mask" ,
2483+ 0 );
2484+ auto TaggedPointerExtendedClassesAddr =
2485+ Reader->getSymbolAddress (" objc_debug_taggedpointer_ext_classes" );
2486+ if (TaggedPointerExtendedClassesAddr)
2487+ TaggedPointerExtendedClasses =
2488+ TaggedPointerExtendedClassesAddr.getAddressData ();
24782489
24792490 // The tagged pointer obfuscator is not present on older OSes, in
24802491 // which case we can treat it as zero.
2481- TaggedPointerObfuscator = 0 ;
2482- auto TaggedPointerObfuscatorAddr = Reader->getSymbolAddress (
2483- " objc_debug_taggedpointer_obfuscator" );
2484- if (TaggedPointerObfuscatorAddr)
2485- tryReadSymbol (TaggedPointerObfuscatorAddr, TaggedPointerObfuscator);
2486-
2492+ tryFindAndReadSymbolWithDefault (TaggedPointerObfuscator,
2493+ " objc_debug_taggedpointer_obfuscator" ,
2494+ 0 );
2495+
24872496# undef tryFindSymbol
24882497# undef tryReadSymbol
24892498# undef tryFindAndReadSymbol
2499+ # undef tryFindAndReadSymbolWithDefault
24902500
24912501 return finish (TaggedPointerEncodingKind::Extended);
24922502 }
0 commit comments