From patchwork Fri May 15 13:35:06 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 135043 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from vm01.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 2928840A1FB4 for ; Fri, 15 May 2026 13:37:38 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 2928840A1FB4 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=eDEzwaJs X-Original-To: binutils@sourceware.org Delivered-To: binutils@sourceware.org Received: from mail-wm1-x32e.google.com (mail-wm1-x32e.google.com [IPv6:2a00:1450:4864:20::32e]) by sourceware.org (Postfix) with ESMTPS id A6A7B40A1F9B for ; Fri, 15 May 2026 13:35:09 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org A6A7B40A1F9B 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 A6A7B40A1F9B Authentication-Results: sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::32e ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1778852109; cv=none; b=LiUMEFuksuLKeUtIntZM855ryhPkZk/kkXExJZ4asQi5hqUWEJPTozznjkJ2iLUjKdSmFn8pLPHRI4lu3eeoqrO5om6sq5UIks0gsUefPG86hsnse6cCvi41+Gm3nwopoIMrpF9sSJ0lP6jqDiwE6fYfK7q3Sm9ZVQ7onvMroEE= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1778852109; c=relaxed/simple; bh=Z4fIgG1aiSciUBxUpPxEzOxaHElyE6VFJp46ieuDBy4=; h=DKIM-Signature:Message-ID:Date:MIME-Version:Subject:From:To; b=X/6Dtv3JTmxSnC3XgzmhURDtJJAcIMfFX6OJB2cw3Ge4VmwmMt+J0Z5lwGGX304X7L2NivhCRwmtIdZm2AcfwEP32hSq9l7U4OePLDQ/yar/99h48LyaoxbYppbzMzgFxFplRkcqww+a22QcjGGX9D9abj1b9X0BwmSfekCFzro= ARC-Authentication-Results: i=1; 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=eDEzwaJs DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org A6A7B40A1F9B Received: by mail-wm1-x32e.google.com with SMTP id 5b1f17b1804b1-4891e86fabeso105825375e9.1 for ; Fri, 15 May 2026 06:35:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=google; t=1778852108; x=1779456908; darn=sourceware.org; h=content-transfer-encoding:in-reply-to:autocrypt:content-language :references:cc:to:from:subject:user-agent:mime-version:date :message-id:from:to:cc:subject:date:message-id:reply-to; bh=fbqtC6sEHb5CozfhHTRA1rVddduefEqEXX3E0hxroSE=; b=eDEzwaJsp6kSAsAHgbqnN3vkRfLUpVFrQbQ0HmCrTGArn95sTF8ANegZUo7/F2quLo zgi2jpAnXmX3KCsWThKpE2jjBbpRRFL8Ujm1mdnizNDkkBUuXWWptlj9dZgPWkk7kLai IJePnIstgo0taoITGN2CExHeDFq92J/z7FpK2B8AOEmSXD64+mt9ppIKg/4J1BOSyfuu qwQIrliogeW06z/8ZREhdeMgACfiwhUomlsXCLF+kb6Ko/rrFX3nnV+imV9UydxvHvaa iruER0uvHUr3igriphVS4qeHjk34UkQWC5pXSKWAEu10VFZjbkt89ozHiiKJLKYIQ69v gGEw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778852108; x=1779456908; h=content-transfer-encoding:in-reply-to:autocrypt:content-language :references:cc:to:from:subject:user-agent:mime-version:date :message-id:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=fbqtC6sEHb5CozfhHTRA1rVddduefEqEXX3E0hxroSE=; b=qpTFgEgB3jFieoHbL4/RY7M40hnjSZyCEajj5Fop4aa8lklB/PxWjasn2Ody0fdV0P QiVwfXlpJm/zwuWaYiNwJg/c9Z6kjn4P56ucLl8iOWYhEUOKrIeQzdF4EwC3YVJQXHo1 VDjS4juAHKDVK5X9s61nbS6C6aB1pxH8VfoD/SuZL5uues5FE4/sTURnbr7MTzQGzKwl 9KTS27dzN5KYm0FTYwkUj8cz/R301s8XW17+LH1l0ULi4IkHzfbOF6OhBrBCq2cxC2LK 5faojgBSjM4UypyqreEDVurD9HFICkqjY0Pa5cxhw8gvwP2HYZWF9uOxjtmzP6YNkhIE iQfA== X-Gm-Message-State: AOJu0YzTqyAd0USOkwt6NKLv43ycXmPnjWvLRLwtQdNCmG+JZWJyBjH/ CSYzVvyYmbDTMPT/lADuJnhZvEPvd7mKCT90IQKsyynffBF4oPOtlRd6jtu66pYpicK474l+Tts z2LE= X-Gm-Gg: Acq92OGQbIOseE63XtrvqMCRj0J8w6UOV+xwKfzVIBJaB+bUaBEntm+J+kLnBTX1wqX tcxWl3AUXemWIS/h6ep0pmrTr0WHOrmqdMeDXZ0tPZEB2wZagHE5sG8OxvJ24pi8Ai3g9tsrle5 RQfFEVzWcSXDfmdojiPhs6sJoavLIdfm6xpj9oOcq0qSDI7odItKYUQuQivaXeBQApPioo6qNk3 KHOUQuKEag3GzGaLymtxTfvvpNYqVCnsGmDLjsSH+g2NzkACDFmMllzGFyrLcSIacYFLI6uRW1T GMhVF0JmfzarLxqaAZ3YQf+7nAqqkx66/Z3X93uucy4NVc/lfUyCijfbxInmKPwTP8HjB23JSSb KjHvUN9EMsEBUfov9weQwZ7KHTXf7bk8CxsbVMx3i9kzhLjcTJ8w2sK1RHd3JYZ60Lbjz0QHscX pR9VX3b68xEIFGNZiWijva5eabir16WwIXNElyBSFeqfUbOUQgLD/Z7xY235bKyDGVTQf9vd/xt g9V92/EX1I+gL8= X-Received: by 2002:a05:600c:c163:b0:48d:1a94:56c with SMTP id 5b1f17b1804b1-48fe6325a2emr64157135e9.18.1778852108593; Fri, 15 May 2026 06:35:08 -0700 (PDT) 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 5b1f17b1804b1-48fe4862209sm64380585e9.0.2026.05.15.06.35.07 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 15 May 2026 06:35:07 -0700 (PDT) Message-ID: <08e89d70-9330-4357-8049-cb20856ddb61@suse.com> Date: Fri, 15 May 2026 15:35:06 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: [PATCH v2 12/16] RISC-V: error handling for subset parsing From: Jan Beulich To: Binutils Cc: Palmer Dabbelt , Andrew Waterman , Jim Wilson , Nelson Chu , jiawei 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=-3016.3 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 shortcircuit=no autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on 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 The parsing of both the argument of -march= and the operand(s) of ".option arch, ..." can fail. In such a case for .option (and equally for .attribute) prior state should continue to be used, while for -march= defaults should be put in place. In particular, extensions conflicting with previously enabled extensions should not suddenly become available. While re-indenting riscv_set_rvc() invocations, leverage that C implies Zca (and hence a check for the latter suffices). Mirror that change to riscv_set_arch() for consistency. Reviewed-by: Jiawei --- a/bfd/elfxx-riscv.c +++ b/bfd/elfxx-riscv.c @@ -2768,7 +2768,28 @@ bool riscv_update_subset (riscv_parse_subset_t *rps, const char *str) { - return riscv_update_subset1 (rps, NULL, str); + unsigned int newxlen = *rps->xlen; + riscv_parse_subset_t newrps = { + .subset_list = riscv_copy_subset_list (rps->subset_list), + .error_handler = rps->error_handler, + .xlen = &newxlen, + .isa_spec = rps->isa_spec, + .check_unknown_prefixed_ext = rps->check_unknown_prefixed_ext, + }; + + if (!riscv_update_subset1 (&newrps, NULL, str)) + { + riscv_release_subset_list (newrps.subset_list); + free (newrps.subset_list); + return false; + } + + *rps->xlen = newxlen; + riscv_release_subset_list (rps->subset_list); + *rps->subset_list = *newrps.subset_list; + free (newrps.subset_list); + + return true; } /* Called from .option norvc directives. */ --- a/gas/config/tc-riscv.c +++ b/gas/config/tc-riscv.c @@ -350,20 +350,38 @@ riscv_set_arch (const char *s) s = DEFAULT_RISCV_ARCH_WITH_EXT; } - if (riscv_rps_as.subset_list == NULL) + unsigned int newxlen = xlen; + riscv_parse_subset_t newrps = { + .subset_list = XCNEW (riscv_subset_list_t), + .error_handler = as_bad, + .xlen = &newxlen, + .isa_spec = &default_isa_spec, + .check_unknown_prefixed_ext = true, + }; + + if (!riscv_parse_subset (&newrps, s)) { - riscv_rps_as.subset_list = XNEW (riscv_subset_list_t); - riscv_rps_as.subset_list->head = NULL; - riscv_rps_as.subset_list->tail = NULL; - riscv_rps_as.subset_list->arch_str = NULL; + riscv_release_subset_list (newrps.subset_list); + if (file_arch_str != NULL) + { + free (newrps.subset_list); + return; + } + if (!riscv_parse_subset (&newrps, DEFAULT_RISCV_ARCH_WITH_EXT)) + abort (); } - riscv_release_subset_list (riscv_rps_as.subset_list); - riscv_parse_subset (&riscv_rps_as, s); + xlen = newxlen; + if (riscv_rps_as.subset_list != NULL) + { + riscv_release_subset_list (riscv_rps_as.subset_list); + free (riscv_rps_as.subset_list); + } + riscv_rps_as.subset_list = newrps.subset_list; + riscv_arch_str (xlen, riscv_rps_as.subset_list, true/* update */); file_arch_str = xstrdup (riscv_rps_as.subset_list->arch_str); - riscv_set_rvc (riscv_subset_supports (&riscv_rps_as, "c") - || riscv_subset_supports (&riscv_rps_as, "zca")); + riscv_set_rvc (riscv_subset_supports (&riscv_rps_as, "zca")); if (riscv_subset_supports (&riscv_rps_as, "ztso")) riscv_set_tso (); @@ -5070,13 +5088,16 @@ s_riscv_option (int x ATTRIBUTE_UNUSED) if (strcmp (name, "rvc") == 0) { - riscv_update_subset (&riscv_rps_as, "+c"); - riscv_arch_str (xlen, riscv_rps_as.subset_list, true/* update */); - riscv_set_rvc (true); + if (riscv_update_subset (&riscv_rps_as, "+c")) + { + riscv_arch_str (xlen, riscv_rps_as.subset_list, true/* update */); + riscv_set_rvc (true); + } } else if (strcmp (name, "norvc") == 0) { - riscv_update_subset_norvc (&riscv_rps_as); + if (!riscv_update_subset_norvc (&riscv_rps_as)) + abort (); riscv_arch_str (xlen, riscv_rps_as.subset_list, true/* update */); riscv_set_rvc (false); } @@ -5097,14 +5118,15 @@ s_riscv_option (int x ATTRIBUTE_UNUSED) name += 5; if (is_whitespace (*name) && *name != '\0') name++; - riscv_update_subset (&riscv_rps_as, name); - riscv_arch_str (xlen, riscv_rps_as.subset_list, true/* update */); + if (riscv_update_subset (&riscv_rps_as, name)) + { + riscv_arch_str (xlen, riscv_rps_as.subset_list, true/* update */); - riscv_set_rvc (riscv_subset_supports (&riscv_rps_as, "c") - || riscv_subset_supports (&riscv_rps_as, "zca")); + riscv_set_rvc (riscv_subset_supports (&riscv_rps_as, "zca")); - if (riscv_subset_supports (&riscv_rps_as, "ztso")) - riscv_set_tso (); + if (riscv_subset_supports (&riscv_rps_as, "ztso")) + riscv_set_tso (); + } } else if (strcmp (name, "push") == 0) { --- a/gas/testsuite/gas/riscv/x-thead-vector-fail.d +++ b/gas/testsuite/gas/riscv/x-thead-vector-fail.d @@ -1,3 +1,3 @@ #as: -march=rv64gc_zve32x_xtheadvector -#source: x-thead-vector.s +#source: empty.s #error_output: x-thead-vector-fail.l