From patchwork Fri Nov 22 12:44:29 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 101741 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 3B5F3385AC12 for ; Fri, 22 Nov 2024 12:45:14 +0000 (GMT) X-Original-To: binutils@sourceware.org Delivered-To: binutils@sourceware.org Received: from mail-ej1-x635.google.com (mail-ej1-x635.google.com [IPv6:2a00:1450:4864:20::635]) by sourceware.org (Postfix) with ESMTPS id D1F2A3857438 for ; Fri, 22 Nov 2024 12:44:51 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org D1F2A3857438 Authentication-Results: sourceware.org; dmarc=pass (p=quarantine dis=none) header.from=suse.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=suse.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org D1F2A3857438 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::635 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1732279492; cv=none; b=QedxHLt5p3kMH+1XHGa0gipDGjY/oyB2ZJoXOamXm0rEsY16n4h2TYISxkAJ+OBvUibLDzipKxTGuasTOEN51hVRDJbBbfTwfvTTn6c5UaeOvKdS8Zwn9ZHAsNbV06camkc1dUcjMXK4vY/RysioLoimKP8SXpUfoBdw8fFOwsg= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1732279492; c=relaxed/simple; bh=eB4yJP3Fstbls99BX1TzOdg6+SSDh+zC5J5jLJiOdb4=; h=DKIM-Signature:Message-ID:Date:MIME-Version:Subject:From:To; b=FqsXLHMy+TXOTdxq10X3XJmumtf5drBWhPDE2b7yif61ezihUUn4mHSKnHuzpixBPtZTrIE5G4ypECv5R75AtYG6csc9/p9XlXAA+UARywyD83f1/g+0Kp1RUfXF4pBTksnas1kNydi7IMj7GNWARnVUtvCgzZjq6GT1+shOM48= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org D1F2A3857438 Authentication-Results: sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=suse.com header.i=@suse.com header.a=rsa-sha256 header.s=google header.b=bAWxk8DL Received: by mail-ej1-x635.google.com with SMTP id a640c23a62f3a-a9ef275b980so332853266b.0 for ; Fri, 22 Nov 2024 04:44:51 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=google; t=1732279471; x=1732884271; darn=sourceware.org; h=content-transfer-encoding:in-reply-to:autocrypt:content-language :references:to:from:subject:user-agent:mime-version:date:message-id :from:to:cc:subject:date:message-id:reply-to; bh=oSFZM8SN81xJiGYiyU+hRdTNZiVk1LS5ZAABBfsXWfg=; b=bAWxk8DLTUktSRBtQaqMyQhPjf7mlkOmsf63GJO/AovQqyduJlejM4B7uDKYGO/6GU /6dgSnMFGo373yrHqC6SBypd1aoBPukxnpVZlj0e8HhEXX4vvrwwawmslnMtMny3C4PQ ua7qYTNUAC85EbqM488TZC3V+2TxzL8G737tJwZ/gFFMHaA2XTDq9HMhByFTAnPqH9om ePgQvFvz+mp8m6i826wpEJ4e8OJ0I+nvS29nJh3uC9wgjLwlAlbWhM0/4HJZjySoGOD/ /FtPBkqj2z0UZ2GA4q8hV5VLoJoO+5GYib5k61F6dVklQWzRrBnbs4HDBKQL6L2fOGbo zb1Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1732279471; x=1732884271; h=content-transfer-encoding:in-reply-to:autocrypt:content-language :references:to:from:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=oSFZM8SN81xJiGYiyU+hRdTNZiVk1LS5ZAABBfsXWfg=; b=iblPvI0Oa26rCVZloNB4j8lYtgYPUecPnjYXd0cSMWpfn2Q/O2euYt9fsS1hlMHIDX 1Hlg2SDC9G73rPpJ4FPNhcW4BQ2a5Eo/1TqwiSUZ5ZXfwNChBh41ql/A8K+WA/Zwve2K nNkN+dB6yp+wwe9c8dgocYxoi5ivy0i4hbJo4yvkSfDeP1u2IQBiebAYLhQhtvtq0Mws XD4Qo4BodVKF9BkJv5NPfSB6rF5o7Zk2+JbWARUzxxnh4j1s7/BTizEIT8weNaJIqztL YqBAFP7Bq97NkUbT3524AoB/drHR+9ynF20FYPwhHKS5zMZrdhuxNVav2g3o+SkL8E6J k1sA== X-Gm-Message-State: AOJu0Yx+r0lYHX8ZuRXt/iRHyr/QKSmnGGiEJDl0fgnPhR2GYPW9yVey KWBYPo3aFgoeat/v9Zv+wZKN+3xi2vLB9bHlBIutxPZp7lWD/di06TqWOJFhPzxAF7/QtuIhXNE = X-Gm-Gg: ASbGncuvRA7YQVVzzmNs3Xz1/MEbgc8ULkjQVu8gCHV57LMiEi6ekIp2isqMr9xcgtA hrGz5nWzL5rCr0ca2RAUD3b0Y6NnZVM5jGigZDB3jazr1N0e0pfpaE3GP2W+1LK2aaQJ4vdi49I 8yodquzbgdqkz01R2TGrqH0qOsNNffyMUqLriHL/EhFgLqoIBZAzd1VIKREvPjDrZeLxQQJaF8C aBHLcWE5uS47L9m+ja4n8h1UlYeNRE2yJ+xYIRKNM0ghf2WQgnD8ZHilCyF2xwzJoaB+f0UiB7x wQ1nxqeT5E6JtckU4SapeCwrNu7/2qsHonE= X-Google-Smtp-Source: AGHT+IHeWJVVJ0tF/93mP3vpw22F6xnx5Z1s65A1m1UWFR8JZPiAy9qJTpaRZhyZK4e3M7pRHMlpQg== X-Received: by 2002:a17:906:1daa:b0:aa5:bda:f11 with SMTP id a640c23a62f3a-aa50bda10b6mr198280366b.12.1732279471023; Fri, 22 Nov 2024 04:44:31 -0800 (PST) Received: from [10.156.60.236] (ip-037-024-206-209.um08.pools.vodafone-ip.de. [37.24.206.209]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-aa50b28fd61sm94927966b.5.2024.11.22.04.44.30 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 22 Nov 2024 04:44:30 -0800 (PST) Message-ID: <789a0964-de22-4017-92c7-9d5ec51e6a94@suse.com> Date: Fri, 22 Nov 2024 13:44:29 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: [PATCH 4/5] gas: introduce deferred expression evaluation mode latching dot From: Jan Beulich To: Binutils References: Content-Language: en-US Autocrypt: addr=jbeulich@suse.com; keydata= xsDiBFk3nEQRBADAEaSw6zC/EJkiwGPXbWtPxl2xCdSoeepS07jW8UgcHNurfHvUzogEq5xk hu507c3BarVjyWCJOylMNR98Yd8VqD9UfmX0Hb8/BrA+Hl6/DB/eqGptrf4BSRwcZQM32aZK 7Pj2XbGWIUrZrd70x1eAP9QE3P79Y2oLrsCgbZJfEwCgvz9JjGmQqQkRiTVzlZVCJYcyGGsD /0tbFCzD2h20ahe8rC1gbb3K3qk+LpBtvjBu1RY9drYk0NymiGbJWZgab6t1jM7sk2vuf0Py O9Hf9XBmK0uE9IgMaiCpc32XV9oASz6UJebwkX+zF2jG5I1BfnO9g7KlotcA/v5ClMjgo6Gl MDY4HxoSRu3i1cqqSDtVlt+AOVBJBACrZcnHAUSuCXBPy0jOlBhxPqRWv6ND4c9PH1xjQ3NP nxJuMBS8rnNg22uyfAgmBKNLpLgAGVRMZGaGoJObGf72s6TeIqKJo/LtggAS9qAUiuKVnygo 3wjfkS9A3DRO+SpU7JqWdsveeIQyeyEJ/8PTowmSQLakF+3fote9ybzd880fSmFuIEJldWxp Y2ggPGpiZXVsaWNoQHN1c2UuY29tPsJgBBMRAgAgBQJZN5xEAhsDBgsJCAcDAgQVAggDBBYC AwECHgECF4AACgkQoDSui/t3IH4J+wCfQ5jHdEjCRHj23O/5ttg9r9OIruwAn3103WUITZee e7Sbg12UgcQ5lv7SzsFNBFk3nEQQCACCuTjCjFOUdi5Nm244F+78kLghRcin/awv+IrTcIWF hUpSs1Y91iQQ7KItirz5uwCPlwejSJDQJLIS+QtJHaXDXeV6NI0Uef1hP20+y8qydDiVkv6l IreXjTb7DvksRgJNvCkWtYnlS3mYvQ9NzS9PhyALWbXnH6sIJd2O9lKS1Mrfq+y0IXCP10eS FFGg+Av3IQeFatkJAyju0PPthyTqxSI4lZYuJVPknzgaeuJv/2NccrPvmeDg6Coe7ZIeQ8Yj t0ARxu2xytAkkLCel1Lz1WLmwLstV30g80nkgZf/wr+/BXJW/oIvRlonUkxv+IbBM3dX2OV8 AmRv1ySWPTP7AAMFB/9PQK/VtlNUJvg8GXj9ootzrteGfVZVVT4XBJkfwBcpC/XcPzldjv+3 HYudvpdNK3lLujXeA5fLOH+Z/G9WBc5pFVSMocI71I8bT8lIAzreg0WvkWg5V2WZsUMlnDL9 mpwIGFhlbM3gfDMs7MPMu8YQRFVdUvtSpaAs8OFfGQ0ia3LGZcjA6Ik2+xcqscEJzNH+qh8V m5jjp28yZgaqTaRbg3M/+MTbMpicpZuqF4rnB0AQD12/3BNWDR6bmh+EkYSMcEIpQmBM51qM EKYTQGybRCjpnKHGOxG0rfFY1085mBDZCH5Kx0cl0HVJuQKC+dV2ZY5AqjcKwAxpE75MLFkr wkkEGBECAAkFAlk3nEQCGwwACgkQoDSui/t3IH7nnwCfcJWUDUFKdCsBH/E5d+0ZnMQi+G0A nAuWpQkjM1ASeQwSHEeAWPgskBQL In-Reply-To: X-Spam-Status: No, score=-3022.8 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_NONE, 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 X-BeenThere: binutils@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Binutils mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: binutils-bounces~patchwork=sourceware.org@sourceware.org Deferring expression evaluation is often necessary. However, the value current_location() records typically is intended to represent the location at the point of use of the expression, with the main exception being .eqv (or its == equivalent). Introduce a predicate to cover both "deferred" modes, and use it everywhere except in current_location(). --- a/gas/config/tc-m32r.c +++ b/gas/config/tc-m32r.c @@ -2335,13 +2335,13 @@ m32r_parse_name (char const *name, /* If we have an absolute symbol or a reg, then we know its value now. */ segment = S_GET_SEGMENT (exprP->X_add_symbol); - if (mode != expr_defer && segment == absolute_section) + if (!expr_defer_p (mode) && segment == absolute_section) { exprP->X_op = O_constant; exprP->X_add_number = S_GET_VALUE (exprP->X_add_symbol); exprP->X_add_symbol = NULL; } - else if (mode != expr_defer && segment == reg_section) + else if (!expr_defer_p (mode) && segment == reg_section) { exprP->X_op = O_register; exprP->X_add_number = S_GET_VALUE (exprP->X_add_symbol); --- a/gas/config/tc-metag.c +++ b/gas/config/tc-metag.c @@ -6908,13 +6908,13 @@ metag_parse_name (char const * name, exp /* If we have an absolute symbol or a reg, then we know its value now. */ segment = S_GET_SEGMENT (exprP->X_add_symbol); - if (mode != expr_defer && segment == absolute_section) + if (!expr_defer_p (mode) && segment == absolute_section) { exprP->X_op = O_constant; exprP->X_add_number = S_GET_VALUE (exprP->X_add_symbol); exprP->X_add_symbol = NULL; } - else if (mode != expr_defer && segment == reg_section) + else if (!expr_defer_p (mode) && segment == reg_section) { exprP->X_op = O_register; exprP->X_add_number = S_GET_VALUE (exprP->X_add_symbol); --- a/gas/config/tc-mn10300.c +++ b/gas/config/tc-mn10300.c @@ -2478,13 +2478,13 @@ mn10300_parse_name (char const *name, /* If we have an absolute symbol or a reg, then we know its value now. */ segment = S_GET_SEGMENT (exprP->X_add_symbol); - if (mode != expr_defer && segment == absolute_section) + if (!expr_defer_p (mode) && segment == absolute_section) { exprP->X_op = O_constant; exprP->X_add_number = S_GET_VALUE (exprP->X_add_symbol); exprP->X_add_symbol = NULL; } - else if (mode != expr_defer && segment == reg_section) + else if (!expr_defer_p (mode) && segment == reg_section) { exprP->X_op = O_register; exprP->X_add_number = S_GET_VALUE (exprP->X_add_symbol); --- a/gas/config/tc-ppc.c +++ b/gas/config/tc-ppc.c @@ -902,7 +902,7 @@ ppc_parse_name (const char *name, expres /* If we have an absolute symbol or a reg, then we know its value now. Copy the symbol value expression to propagate X_md. */ bool done = false; - if (mode != expr_defer + if (!expr_defer_p (mode) && !S_FORCE_RELOC (sym, 0)) { segT segment = S_GET_SEGMENT (sym); --- a/gas/config/tc-sh.c +++ b/gas/config/tc-sh.c @@ -3933,13 +3933,13 @@ sh_parse_name (char const *name, /* If we have an absolute symbol or a reg, then we know its value now. */ segment = S_GET_SEGMENT (exprP->X_add_symbol); - if (mode != expr_defer && segment == absolute_section) + if (!expr_defer_p (mode) && segment == absolute_section) { exprP->X_op = O_constant; exprP->X_add_number = S_GET_VALUE (exprP->X_add_symbol); exprP->X_add_symbol = NULL; } - else if (mode != expr_defer && segment == reg_section) + else if (!expr_defer_p (mode) && segment == reg_section) { exprP->X_op = O_register; exprP->X_add_number = S_GET_VALUE (exprP->X_add_symbol); --- a/gas/expr.c +++ b/gas/expr.c @@ -1387,14 +1387,14 @@ operand (expressionS *expressionP, enum /* If we have an absolute symbol or a reg, then we know its value now. */ segment = S_GET_SEGMENT (symbolP); - if (mode != expr_defer + if (!expr_defer_p (mode) && segment == absolute_section && !S_FORCE_RELOC (symbolP, 0)) { expressionP->X_op = O_constant; expressionP->X_add_number = S_GET_VALUE (symbolP); } - else if (mode != expr_defer && segment == reg_section) + else if (!expr_defer_p (mode) && segment == reg_section) { expressionP->X_op = O_register; expressionP->X_add_number = S_GET_VALUE (symbolP); @@ -1438,7 +1438,7 @@ operand (expressionS *expressionP, enum if (expressionP->X_add_symbol) symbol_mark_used (expressionP->X_add_symbol); - if (mode != expr_defer) + if (!expr_defer_p (mode)) { expressionP->X_add_symbol = symbol_clone_if_forward_ref (expressionP->X_add_symbol); @@ -1933,7 +1933,7 @@ expr (int rankarg, /* Larger # is highe is_unsigned = resultP->X_unsigned && right.X_unsigned; - if (mode == expr_defer + if (expr_defer_p (mode) && ((resultP->X_add_symbol != NULL && S_IS_FORWARD_REF (resultP->X_add_symbol)) || (right.X_add_symbol != NULL --- a/gas/expr.h +++ b/gas/expr.h @@ -153,9 +153,12 @@ enum expr_mode { expr_evaluate, expr_normal, - expr_defer + expr_defer, + expr_defer_latch_dot, }; +#define expr_defer_p(m) ((m) >= expr_defer) + /* "result" should be type (expressionS *). */ #define expression(result) expr (0, result, expr_normal) #define expression_and_evaluate(result) expr (0, result, expr_evaluate)