From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-yb1-xb4a.google.com (mail-yb1-xb4a.google.com [IPv6:2607:f8b0:4864:20::b4a]) by sourceware.org (Postfix) with ESMTPS id 05A8D38582BD for ; Thu, 29 Jun 2023 17:19:01 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 05A8D38582BD Authentication-Results: sourceware.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=flex--nhuck.bounces.google.com Received: by mail-yb1-xb4a.google.com with SMTP id 3f1490d57ef6-bb2a7308f21so731872276.2 for ; Thu, 29 Jun 2023 10:19:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1688059140; x=1690651140; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=+NIaKS9rbSsUS865OARCjoyXse7CkbWRYuOrnrUEUPE=; b=JoEXpy+b9RsyO0OlyYNSDy2SF5wEH3viOF2+jsUEMGcSUV2UocWc0g3lPLSS2Z1n2I CXI2JLmq5HRa4q+smkSdArmiqb0r7amUtTqyE2j/bDAiG2xOZ8hZ3MvGXgoZEGsTqMc6 OqTu2CbRgXt8F/qdYXgzva1ANefdrjPLVhRUPqUX56CS5HmIBSF6r/iCuOmhORiB6b0P KaPfz8ZgFKEjln7bUeyN8bhBkVsPAZd8V0YZ2FN8IRlOHEkXgon+cEW/Dq3RCOxEeynk AVNSGPkrxkklWkCciJHmlzdotzsCb2C4DdqSLxSBKZpfsQOAGR+4sEGUZ8+pI+TyTQ3r 4vNg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1688059140; x=1690651140; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=+NIaKS9rbSsUS865OARCjoyXse7CkbWRYuOrnrUEUPE=; b=iXdyGgsGnWNwAX7B7Ut4J1rUfj0CG1pauXuo4EojX+uviBbrvzo3sTRs8eahkpVRB9 hARJplPtWPCtMEcr9oFVDns++joHDPO7PvMvnOJ+rhiuJdr3P/X5xaF4E4VMoN9KdDue gtXrsK3bV0nCbPw0QGkNh+1bGLeeL/cZTlzMdcbdcDziLvfIkQ8J9cImiRbx+2JV/tqZ ZuzWERC/7f24pjI0Frr4PUcD2GVg7Pbu+IdKWyAPJk51TAScbKMnc5KA8JQuYsYClpAH vBe0EmEDruYTnbtAdLtY3whIIXawwWhPAoihnOkO7E2EEgq3DzYeRlSaxg94UIcC4ONy /50w== X-Gm-Message-State: ABy/qLZSkdb/7zs7eiUuFZ/tfn3fj/Df2EZYGgCaTV7lACVX5smItjsf kinjDTVbC1wscOBv40BgXpnuLiuiVgJw7XcNNOcYIOCPlubLIzV/gv36QqTjeZfhLwsAnpYQR0v /7alD54H4D4iPUSO9kyknvVNiWSPMbT8Ho/lxcth9AlWOv0V2m+o698POZPbs X-Google-Smtp-Source: APBJJlG4Ub2t8U3PZ+WU+FsBkkLooDAhqa8ISthcy4r5EoENZM8402FVt/PgvYlwAh8dBmeATouZNgs14g== X-Received: from nhuck.c.googlers.com ([fda3:e722:ac3:cc00:14:4d90:c0a8:39cc]) (user=nhuck job=sendgmr) by 2002:a5b:f07:0:b0:c12:8abd:7b1c with SMTP id x7-20020a5b0f07000000b00c128abd7b1cmr3309ybr.11.1688059140420; Thu, 29 Jun 2023 10:19:00 -0700 (PDT) Date: Thu, 29 Jun 2023 10:18:34 -0700 In-Reply-To: <20230629171839.573187-1-nhuck@google.com> Mime-Version: 1.0 References: <20230629171839.573187-1-nhuck@google.com> X-Mailer: git-send-email 2.41.0.255.g8b1d071c50-goog Message-ID: <20230629171839.573187-10-nhuck@google.com> Subject: [PATCH 09/14] Allow nested implications for extensions. From: Nathan Huckleberry To: binutils@sourceware.org Cc: nhuck@pmull.org, Nathan Huckleberry Content-Type: text/plain; charset="UTF-8" X-Spam-Status: No, score=-21.0 required=5.0 tests=BAYES_00,DKIMWL_WL_MED,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,TXREP,T_SCC_BODY_TEXT_LINE,USER_IN_DEF_DKIM_WL 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: Certain extensions require two levels of implications. For example, zvkng implies zvkn and zvkn implies zvkned. Enabling zvkng should also enable zvkned. This patch fixes this behavior. Signed-off-by: Nathan Huckleberry --- bfd/elfxx-riscv.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/bfd/elfxx-riscv.c b/bfd/elfxx-riscv.c index 890e10d1812..8bb77db5528 100644 --- a/bfd/elfxx-riscv.c +++ b/bfd/elfxx-riscv.c @@ -1870,15 +1870,27 @@ static void riscv_parse_add_implicit_subsets (riscv_parse_subset_t *rps) { struct riscv_implicit_subset *t = riscv_implicit_subsets; - for (; t->subset_name; t++) + bool finished = false; + while (!finished) { + finished = true; + for (; t->subset_name; t++) { riscv_subset_t *subset = NULL; + riscv_subset_t *implicit_subset = NULL; if (riscv_lookup_subset (rps->subset_list, t->subset_name, &subset) - && t->check_func (t->implicit_name, subset)) + && !riscv_lookup_subset (rps->subset_list, t->implicit_name, &implicit_subset) + && t->check_func (t->implicit_name, subset)) { riscv_parse_add_subset (rps, t->implicit_name, RISCV_UNKNOWN_VERSION, RISCV_UNKNOWN_VERSION, true); + + // Restart the loop and pick up any new implications. + finished = false; + t = riscv_implicit_subsets; + break; + } } + } } /* Check extensions conflicts. */ -- 2.41.0.255.g8b1d071c50-goog