From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from gnu.wildebeest.org (wildebeest.demon.nl [212.238.236.112]) by sourceware.org (Postfix) with ESMTPS id D90873857C6F for ; Mon, 22 Feb 2021 22:29:03 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org D90873857C6F Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=klomp.org Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=mark@klomp.org Received: from librem (84-29-170-194.cable.dynamic.v4.ziggo.nl [84.29.170.194]) (using TLSv1.2 with cipher ADH-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by gnu.wildebeest.org (Postfix) with ESMTPSA id 236B0301BC18; Mon, 22 Feb 2021 23:29:01 +0100 (CET) Received: by librem (Postfix, from userid 1000) id E08C5C222A; Mon, 22 Feb 2021 23:27:49 +0100 (CET) Date: Mon, 22 Feb 2021 23:27:49 +0100 From: Mark Wielaard To: Tom de Vries Cc: dwz@sourceware.org, jakub@redhat.com Subject: Re: [committed] Don't call die_odr_state with unnecessarily defined cu arg Message-ID: <20210222222749.GF2992@wildebeest.org> References: <20210222153902.GA412@delia.home> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20210222153902.GA412@delia.home> User-Agent: Mutt/1.10.1 (2018-07-13) X-Spam-Status: No, score=-10.7 required=5.0 tests=BAYES_00, GIT_PATCH_0, JMQ_SPF_NEUTRAL, KAM_DMARC_STATUS, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: dwz@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Dwz mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 22 Feb 2021 22:29:05 -0000 Hi Tom, On Mon, Feb 22, 2021 at 04:39:03PM +0100, Tom de Vries wrote: > Hi, > > When compiling dwz with this patch: > ... > die_odr_state (dw_cu_ref cu, dw_die_ref die) > { > if (die->die_odr_state != ODR_UNKNOWN) > - return die->die_odr_state; > + { > + assert (cu == NULL); > + return die->die_odr_state; > + } > ... > and running f.i. odr-struct.sh, we run into the abort. > > The recent commit 3312feb "Fix CK_BAD propagation for --odr" introduced this > code: > ... > if (die_odr_state (die_cu (die), die) != ODR_NONE) > die->u.p1.die_ref_hash = die->u.p1.die_hash; > ... > and there's no need to pass a CU argument, which makes the abort trigger. > > Fix this by passing a NULL CU instead. > > Committed to trunk. > > Thanks, > - Tom > > Don't call die_odr_state with unnecessarily defined cu arg > > 2021-02-22 Tom de Vries > > * dwz.c (read_debug_info): Pass NULL CU to die_odr_state call. > > --- > dwz.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/dwz.c b/dwz.c > index 076f39c..86863ce 100644 > --- a/dwz.c > +++ b/dwz.c > @@ -7253,7 +7253,7 @@ read_debug_info (DSO *dso, int kind, unsigned int *die_count) > { > if (die->die_ck_state != CK_KNOWN) > continue; > - if (die_odr_state (die_cu (die), die) != ODR_NONE) > + if (die_odr_state (NULL, die) != ODR_NONE) > die->u.p1.die_ref_hash = die->u.p1.die_hash; > else > die->die_ref_hash_computed = 0; I might be a little lost in the odr code. It seems there is only one call to die_odr_state that passes a non-NULL cu (the call in checksum_die). What does passing a NULL cu signify in this code? If cu is NULL it seems the code that calls set_die_odr_state at the end of die_ord_state is unsafe (because it might check cu). Just wondering if when passing NULL in as cu the result isn't simply always die->die_odr_state? (And if so, do we even need the function call?) Cheers, Mark