From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mailout3.rbg.tum.de (mailout3.rbg.tum.de [131.159.0.8]) by sourceware.org (Postfix) with ESMTPS id 769023858D28 for ; Mon, 19 Sep 2022 16:20:26 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 769023858D28 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=in.tum.de Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=in.tum.de Received: from mailrelay1.rbg.tum.de (mailrelay1.in.tum.de [131.159.254.14]) by mailout3.rbg.tum.de (Postfix) with ESMTPS id 006D61003BD; Mon, 19 Sep 2022 18:20:23 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=in.tum.de; s=20220209; t=1663604424; bh=dmqUsclje1VbV714APZpkNWih8pLSA7QF947RT/QcTY=; h=Date:To:Cc:From:Subject:From; b=GSlRbhQJtAyvKtwHpV+g53JHgk7e3M19jG61c/ie7QlnitwrlxtU/Y7TlgTg2SLYa yXdDGuRAptltGT1F9rQuBqFLuZug6J9n5Ymwy9xFDwnXw1yRsUzvyt4jx4UX4wBZSW i3jF65ydSl4VUtJ4fJ9ubehB+bvwL6IOriRE9PdQU2gQd+m6fTAvfJJbAI++jwvX/y TE9ViROo+Wd5PAMntDIc7IiWbr8rneen925EH4YU/mc/1ICfFMQoHmXFgSEt+R5hxq RETQxjA7hNYD/Ohc4qAL+a3mzaPVfmsG6VEwR/pWQOr2qCrkCfaR2ETR1f4+YxdtbK 0ehsty9Bjgqwg== Received: by mailrelay1.rbg.tum.de (Postfix, from userid 112) id ECC9E1AA; Mon, 19 Sep 2022 18:20:23 +0200 (CEST) Received: from mailrelay1.rbg.tum.de (localhost [127.0.0.1]) by mailrelay1.rbg.tum.de (Postfix) with ESMTP id CA0B41A8; Mon, 19 Sep 2022 18:20:23 +0200 (CEST) Received: from mail.in.tum.de (mailproxy.in.tum.de [IPv6:2a09:80c0::78]) by mailrelay1.rbg.tum.de (Postfix) with ESMTPS id C813ACD; Mon, 19 Sep 2022 18:20:23 +0200 (CEST) Received: by mail.in.tum.de (Postfix, from userid 112) id C59584A034B; Mon, 19 Sep 2022 18:20:23 +0200 (CEST) Received: (Authenticated sender: neumann) by mail.in.tum.de (Postfix) with ESMTPSA id 89C1D4A0063; Mon, 19 Sep 2022 18:20:23 +0200 (CEST) (Extended-Queue-bit xtech_vi@fff.in.tum.de) Message-ID: <5aba5553-ed71-50a8-e934-6e94f3a1057e@in.tum.de> Date: Mon, 19 Sep 2022 18:20:23 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.11.0 Content-Language: en-US To: gcc-patches@gcc.gnu.org Cc: Jason Merrill , Stephan Bergmann From: Thomas Neumann Subject: [PATCH] Avoid depending on destructor order Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-13.3 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,GIT_PATCH_0,RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE,SPF_PASS,TXREP 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: In some scenarios (e.g., when mixing gcc and clang code), it can happen that frames are deregistered after the lookup structure has already been destroyed. That in itself would be fine, but it triggers an assert in __deregister_frame_info_bases that expects to find the frame. To avoid that, we now remember that the btree as already been destroyed and disable the assert in that case. libgcc/ChangeLog: * unwind-dw2-fde.c: (release_register_frames) Remember when the btree has been destroyed. (__deregister_frame_info_bases) Disable the assert when shutting down. --- libgcc/unwind-dw2-fde.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/libgcc/unwind-dw2-fde.c b/libgcc/unwind-dw2-fde.c index 919abfe0664..d237179f4ea 100644 --- a/libgcc/unwind-dw2-fde.c +++ b/libgcc/unwind-dw2-fde.c @@ -48,6 +48,7 @@ typedef __UINTPTR_TYPE__ uintptr_type; #include "unwind-dw2-btree.h" static struct btree registered_frames; +static bool in_shutdown; static void release_registered_frames (void) __attribute__ ((destructor (110))); @@ -57,6 +58,7 @@ release_registered_frames (void) /* Release the b-tree and all frames. Frame releases that happen later are * silently ignored */ btree_destroy (®istered_frames); + in_shutdown = true; } static void @@ -282,7 +284,7 @@ __deregister_frame_info_bases (const void *begin) __gthread_mutex_unlock (&object_mutex); #endif - gcc_assert (ob); + gcc_assert (in_shutdown || ob); return (void *) ob; } -- 2.34.1