@@ -2451,6 +2451,12 @@ class MetadataReader {
2451
2451
tryFindSymbol (_address, symbolName); \
2452
2452
tryReadSymbol (_address, dest); \
2453
2453
} 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 )
2454
2460
2455
2461
tryFindAndReadSymbol (TaggedPointerMask,
2456
2462
" objc_debug_taggedpointer_mask" );
@@ -2463,30 +2469,34 @@ class MetadataReader {
2463
2469
if (!TaggedPointerClassesAddr)
2464
2470
finish (TaggedPointerEncodingKind::Error);
2465
2471
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 ();
2478
2489
2479
2490
// The tagged pointer obfuscator is not present on older OSes, in
2480
2491
// 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
+
2487
2496
# undef tryFindSymbol
2488
2497
# undef tryReadSymbol
2489
2498
# undef tryFindAndReadSymbol
2499
+ # undef tryFindAndReadSymbolWithDefault
2490
2500
2491
2501
return finish (TaggedPointerEncodingKind::Extended);
2492
2502
}
0 commit comments