Fix segmentation fault on macOS 15.4 (#21176)

Strips off additional bits that are not part of the actual TLV key to avoid applications using DRuntime crashing during initialization.

Fixes #21126.
This commit is contained in:
Sönke Ludwig 2025-04-12 11:53:18 +02:00 committed by GitHub
parent 1b34fea478
commit 09ed02ce56
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 14 additions and 1 deletions

View file

@ -145,7 +145,13 @@ pthread_key_t firstTLVKey(const mach_header_64* header) pure nothrow @nogc
if ((section.flags & SECTION_TYPE) != S_THREAD_LOCAL_VARIABLES)
continue;
return section.firstTLVDescriptor(slide).key;
// NOTE: macOS 15.4 has started to fill the upper 32 bits of
// the `key` field with an additional number. Using the whole
// 64-bit field as a key results in a segmentation fault. Even
// though none of this appears to be documented anywhere, we
// assume that only the lower 32 bits are used for the actual
// key and this results in binaries that execute normally.
return section.firstTLVDescriptor(slide).key & 0xFFFF_FFFF;
}
}