From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from smtp001-out.apm-internet.net (smtp001-out.apm-internet.net [85.119.248.222]) by sourceware.org (Postfix) with ESMTPS id B3845385AC2F for ; Sun, 4 Sep 2022 19:50:52 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org B3845385AC2F Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=sandoe.co.uk Authentication-Results: sourceware.org; spf=none smtp.mailfrom=sandoe.co.uk Received: (qmail 33016 invoked from network); 4 Sep 2022 19:50:50 -0000 X-APM-Out-ID: 16623210503301 X-APM-Authkey: 257869/1(257869/1) 7 Received: from unknown (HELO ?192.168.1.95?) (81.138.1.83) by smtp001.apm-internet.net with SMTP; 4 Sep 2022 19:50:50 -0000 Content-Type: text/plain; charset=utf-8 Mime-Version: 1.0 (Mac OS X Mail 13.4 \(3608.120.23.2.7\)) Subject: Re: libsanitizer: merge from upstream From: Iain Sandoe In-Reply-To: <10f0f307-2522-fa2f-ae66-e842c76a7f55@suse.cz> Date: Sun, 4 Sep 2022 20:50:49 +0100 Cc: GCC Patches Content-Transfer-Encoding: quoted-printable Message-Id: <71E19ED7-144A-4DC2-A2DA-6E86AB66597F@sandoe.co.uk> References: <10f0f307-2522-fa2f-ae66-e842c76a7f55@suse.cz> To: Martin Liska X-Mailer: Apple Mail (2.3608.120.23.2.7) X-Spam-Status: No, score=-14.5 required=5.0 tests=BAYES_00,GIT_PATCH_0,KAM_COUK,KAM_DMARC_STATUS,KAM_LAZY_DOMAIN_SECURITY,RCVD_IN_DNSWL_LOW,SPF_HELO_NONE,SPF_NONE,TXREP,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: Hi Martin, > On 30 Aug 2022, at 11:53, Martin Li=C5=A1ka wrote: >=20 > On 5/4/22 10:59, Martin Li=C5=A1ka wrote: >> Hello. > I've just done one more merge from upstream. > Upstream revision: 84a71d5259c2682403cdbd8710592410a2f128ab. Which (again) breaks bootstrap on Darwin (since upstream uses features and APIs not present in GCC and/or supported by the systems we support). Worked around as below; we will need to find a way to handle the macOS 13+ changes. Iain [pushed] [libsanitizer, Darwin] Fix bootstrap after recent merge. The latest merge to libsanitizer includes changes to handle macOS 13+. However, these changes are incompatible with GCC and so we need to find an alternate solution. To restore bootstrap back this change out until the alternate can be found. --- .../sanitizer_procmaps_mac.cpp | 62 +++---------------- 1 file changed, 10 insertions(+), 52 deletions(-) diff --git a/libsanitizer/sanitizer_common/sanitizer_procmaps_mac.cpp = b/libsanitizer/sanitizer_common/sanitizer_procmaps_mac.cpp index 4b0e6781976..ba4259acd46 100644 --- a/libsanitizer/sanitizer_common/sanitizer_procmaps_mac.cpp +++ b/libsanitizer/sanitizer_common/sanitizer_procmaps_mac.cpp @@ -146,8 +146,13 @@ static bool IsDyldHdr(const mach_header *hdr) { // until we hit a Mach header matching dyld instead. These recurse // calls are expensive, but the first memory map generation occurs // early in the process, when dyld is one of the only images loaded, -// so it will be hit after only a few iterations. These assumptions = don't hold -// on macOS 13+ anymore (dyld itself has moved into the shared cache). +// so it will be hit after only a few iterations. These assumptions = don't +// hold on macOS 13+ anymore (dyld itself has moved into the shared = cache). + +// FIXME: Unfortunately, the upstream revised version to deal with = macOS 13+ +// is incompatible with GCC and also uses APIs not available on earlier +// systems which we support; backed out for now. + static mach_header *GetDyldImageHeaderViaVMRegion() { vm_address_t address =3D 0; =20 @@ -171,64 +176,17 @@ static mach_header = *GetDyldImageHeaderViaVMRegion() { } } =20 -extern "C" { -struct dyld_shared_cache_dylib_text_info { - uint64_t version; // current version 2 - // following fields all exist in version 1 - uint64_t loadAddressUnslid; - uint64_t textSegmentSize; - uuid_t dylibUuid; - const char *path; // pointer invalid at end of iterations - // following fields all exist in version 2 - uint64_t textSegmentOffset; // offset from start of cache -}; -typedef struct dyld_shared_cache_dylib_text_info - dyld_shared_cache_dylib_text_info; - -extern bool _dyld_get_shared_cache_uuid(uuid_t uuid); -extern const void *_dyld_get_shared_cache_range(size_t *length); -extern int dyld_shared_cache_iterate_text( - const uuid_t cacheUuid, - void (^callback)(const dyld_shared_cache_dylib_text_info *info)); -} // extern "C" - -static mach_header *GetDyldImageHeaderViaSharedCache() { - uuid_t uuid; - bool hasCache =3D _dyld_get_shared_cache_uuid(uuid); - if (!hasCache) - return nullptr; - - size_t cacheLength; - __block uptr cacheStart =3D = (uptr)_dyld_get_shared_cache_range(&cacheLength); - CHECK(cacheStart && cacheLength); - - __block mach_header *dyldHdr =3D nullptr; - int res =3D dyld_shared_cache_iterate_text( - uuid, ^(const dyld_shared_cache_dylib_text_info *info) { - CHECK_GE(info->version, 2); - mach_header *hdr =3D - (mach_header *)(cacheStart + info->textSegmentOffset); - if (IsDyldHdr(hdr)) - dyldHdr =3D hdr; - }); - CHECK_EQ(res, 0); - - return dyldHdr; -} - const mach_header *get_dyld_hdr() { if (!dyld_hdr) { // On macOS 13+, dyld itself has moved into the shared cache. = Looking it up // via vm_region_recurse_64() causes spins/hangs/crashes. + // FIXME: find a way to do this compatible with GCC. if (GetMacosAlignedVersion() >=3D MacosVersion(13, 0)) { - dyld_hdr =3D GetDyldImageHeaderViaSharedCache(); - if (!dyld_hdr) { VReport(1, - "Failed to lookup the dyld image header in the shared = cache on " - "macOS 13+ (or no shared cache in use). Falling back = to " + "looking up the dyld image header in the shared cache = on " + "macOS 13+ is not yet supported. Falling back to " "lookup via vm_region_recurse_64().\n"); dyld_hdr =3D GetDyldImageHeaderViaVMRegion(); - } } else { dyld_hdr =3D GetDyldImageHeaderViaVMRegion(); } --=20 2.24.3 (Apple Git-128)