Skip to content

Commit 3968b99

Browse files
authored
Merge pull request #22999 from mikeash/handle-no-ext-tagged-pointers
2 parents bd8890a + 78e7106 commit 3968b99

File tree

1 file changed

+28
-18
lines changed

1 file changed

+28
-18
lines changed

include/swift/Remote/MetadataReader.h

Lines changed: 28 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)