From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pg1-x52a.google.com (mail-pg1-x52a.google.com [IPv6:2607:f8b0:4864:20::52a]) by sourceware.org (Postfix) with ESMTPS id 6FA1C3857C42 for ; Wed, 9 Mar 2022 05:25:15 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 6FA1C3857C42 Received: by mail-pg1-x52a.google.com with SMTP id o23so1016101pgk.13 for ; Tue, 08 Mar 2022 21:25:15 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=IyuRJ+77M907S5itxUrew6OTVKRGLgovDjlleiseR2k=; b=lG/mHJ0M3bbbYprAccc2ZJMSGgx6SRF013Iwbz1RsL4zIe7e86thHbgz51qhdkNRZX AZjHNlYDqEXrEPP8wnR95p0iEBJb+znIa4yE21bQJyXsrLGluPzn0tpf5bJc/zvGV5aB luniR6yAwdaLyrOwy3yZewkP2RzY8ZVYiC5M1ymlC8x9HBcxV5tNTjBZTlX2ysfUD6bP i9TlezAVju04MDL0aHcGn0iTv5DNjkebp7/FtBkN4irTJZ5GPmOuEefWU1K3DxP3EYp+ KbEQPwwCYELCruvPaWNUxsIt++/Sbb6yPkK1h6e7pWhhFzyIaCxvjQ2tIaisuUlHY5YI lXMA== X-Gm-Message-State: AOAM532oOe6+rx6GMS1FG7vR5VSzUbY51toc/fUFWyzEAqFp+M11vmeI LXCCRag21VAUBhHpWlsYWeLgpre48ig= X-Google-Smtp-Source: ABdhPJyVdyPQ/Kfb/rcPImQwNAV+NYdXOxjN4h3b3Tobo+zCbQFfNV5CVmH7dxZKDpKAAFwtObj7Hg== X-Received: by 2002:a05:6a00:1a09:b0:4e1:67a7:2c87 with SMTP id g9-20020a056a001a0900b004e167a72c87mr21878120pfv.37.1646803514295; Tue, 08 Mar 2022 21:25:14 -0800 (PST) Received: from squeak.grove.modra.org ([2406:3400:51d:8cc0:aa4:674:e537:bdb6]) by smtp.gmail.com with ESMTPSA id z21-20020a17090a8b9500b001bf74f8bb3asm4671968pjn.24.2022.03.08.21.25.12 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 08 Mar 2022 21:25:13 -0800 (PST) From: Alan Modra To: binutils@sourceware.org Subject: [PATCH 1/2] Reduce duplicated symbol_clone_if_forward_ref work Date: Wed, 9 Mar 2022 15:55:05 +1030 Message-Id: <20220309052506.4000271-2-amodra@gmail.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20220309052506.4000271-1-amodra@gmail.com> References: <20220309052506.4000271-1-amodra@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-3036.2 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: binutils@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Binutils mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 09 Mar 2022 05:25:16 -0000 * symbol.c (struct symbol_flags): Add forward_resolved. (symbol_entry_find): Update needle initialisation. (symbol_clone_if_forward_ref): Do no work when forward_resolved is already set. Set forward_resolved. diff --git a/gas/symbols.c b/gas/symbols.c index 2a0ee7783c0..b35c6d25aca 100644 --- a/gas/symbols.c +++ b/gas/symbols.c @@ -61,8 +61,10 @@ struct symbol_flags /* Whether the symbol can be re-defined. */ unsigned int volatil : 1; - /* Whether the symbol is a forward reference. */ + /* Whether the symbol is a forward reference, and whether such has + been determined. */ unsigned int forward_ref : 1; + unsigned int forward_resolved : 1; /* This is set if the symbol is defined in an MRI common section. We handle such sections as single common symbols, so symbols @@ -202,7 +204,7 @@ static void * symbol_entry_find (htab_t table, const char *name) { hashval_t hash = htab_hash_string (name); - symbol_entry_t needle = { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + symbol_entry_t needle = { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, hash, name, 0, 0, 0 } }; return htab_find_with_hash (table, &needle, hash); } @@ -777,7 +779,9 @@ symbol_clone (symbolS *orgsymP, int replace) symbolS * symbol_clone_if_forward_ref (symbolS *symbolP, int is_forward) { - if (symbolP && !symbolP->flags.local_symbol) + if (symbolP + && !symbolP->flags.local_symbol + && !symbolP->flags.forward_resolved) { symbolS *orig_add_symbol = symbolP->x->value.X_add_symbol; symbolS *orig_op_symbol = symbolP->x->value.X_op_symbol; @@ -830,6 +834,7 @@ symbol_clone_if_forward_ref (symbolS *symbolP, int is_forward) symbolP->x->value.X_add_symbol = add_symbol; symbolP->x->value.X_op_symbol = op_symbol; + symbolP->flags.forward_resolved = 1; } return symbolP;