From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pj1-x102c.google.com (mail-pj1-x102c.google.com [IPv6:2607:f8b0:4864:20::102c]) by sourceware.org (Postfix) with ESMTPS id 859193858C27 for ; Tue, 8 Feb 2022 04:37:23 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 859193858C27 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=rivosinc.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=rivosinc.com Received: by mail-pj1-x102c.google.com with SMTP id om7so1872681pjb.5 for ; Mon, 07 Feb 2022 20:37:23 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20210112.gappssmtp.com; s=20210112; h=subject:date:message-id:mime-version:content-transfer-encoding:cc :from:to; bh=ZUp6bvog3f20iqRwGsXyPTVzpQ/HWaQdkZmyr+Op3Co=; b=LUPpKsswCZp1iqWqr9VGpy+ARCO2Bv3ey2539hzh/5E+tRF3I9If9JBVM9btoccyE0 9aUzWaUzsPpXB30acj0mcp8yOjYDye14UFqD5Yz/gd3YYIQsmWBl7VR0t0YLfXsuid70 /OxjOBtBpmY5pgoGhpcGsTlRz6dK/mtv2jGiFDxdxd4iFzPdxmxlBgvjYJbZaH8UQ4KN 4JGYwaEDQI+d7Vr9WYLrKz15slQfSJsoC5J67CGzqvqdHhujgbocoZ6lI+VP8LK5KUNt wa6fw0BzyFKHfi7Zr2sAvxQ89chhG0pVcGKA7Lizi1BksnTgVWDrd67iLSKyUOumVI0V ZsUg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:subject:date:message-id:mime-version :content-transfer-encoding:cc:from:to; bh=ZUp6bvog3f20iqRwGsXyPTVzpQ/HWaQdkZmyr+Op3Co=; b=vwKEEYGW2DJhHYTcHMvAj1Ubk1jK6cI4PZjBADOCQDV6Uau9OQMexlLF+XAc3qyyiK NtZjJAfTA+B+JXpqVoTV6WEzpbVx5slNwI85nm6JkFIminf2cyBRjzPWDvqS9LtD5UxX PMYN9S+4sYZcnDYE9AJw8KZBdoKYr3edlGI8zP8lIsTZsStj0Uw3i88g3Mni0l3R2daY ZLAQkfmY8dgrYsAmyP960UhnOkJLAYaEyJ1bzAlm11dew5bbVHSoh9+Ur0iECCoZEWPf F4d+JfXUpXAin2VglIoZIkAPUJa7tZbhS4f9HJKCYtL4CgaYVBxiHLqs4RNmkaIixmph d1Pw== X-Gm-Message-State: AOAM533R4t7vNpTc04rw+kA0X1DauSRVGL5Emsdp8XVUVGDNMonHwsc1 w/X0b/HRWAUtAp1rC78ia3JlDw== X-Google-Smtp-Source: ABdhPJw1aQjcJYikqnlr28ekQFuqHl0cP9PM1kLoRMRG4zuxdk35sxUqSC+KACforOS97yVnATV+MA== X-Received: by 2002:a17:902:ec8f:: with SMTP id x15mr2614524plg.105.1644295042499; Mon, 07 Feb 2022 20:37:22 -0800 (PST) Received: from localhost ([12.3.194.138]) by smtp.gmail.com with ESMTPSA id 132sm1221618pfw.21.2022.02.07.20.37.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 07 Feb 2022 20:37:22 -0800 (PST) Subject: [PATCH v2] RISC-V: Stop reporting warnings for mismatched extension versions Date: Mon, 7 Feb 2022 20:35:58 -0800 Message-Id: <20220208043558.29972-1-palmer@rivosinc.com> X-Mailer: git-send-email 2.34.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit From: Palmer Dabbelt To: Nelson Chu , binutils@sourceware.org X-Spam-Status: No, score=-12.2 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, 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: Tue, 08 Feb 2022 04:37:26 -0000 The extension version checking logic is really just too complicated to encode into the linker, trying to do so causes more harm than good. This removes the checks and the associated tests, leaving the logic to keep the largest version of each extension linked into the target. Signed-off-by: Palmer Dabbelt bfd/ * elfnn-riscv.c (riscv_version_mismatch): Rename to riscv_update_subset_version, and stop reporting warnings on version mismatches. (riscv_merge_std_ext): Adjust calls to riscv_version_mismatch. (riscv_merge_multi_letter_ext): Likewise. ld/ * testsuite/ld-riscv-elf/attr-merge-arch-failed-01.d: Remove * testsuite/ld-riscv-elf/attr-merge-arch-failed-01a.s: Likewise * testsuite/ld-riscv-elf/attr-merge-arch-failed-01b.s: Likewise * testsuite/ld-riscv-elf/attr-merge-arch-failed-02.d: Likewise * testsuite/ld-riscv-elf/attr-merge-arch-failed-02a.s: Likewise * testsuite/ld-riscv-elf/attr-merge-arch-failed-02b.s: Likewise * testsuite/ld-riscv-elf/attr-merge-arch-failed-02c.s: Likewise * testsuite/ld-riscv-elf/attr-merge-arch-failed-02d.s: Likewise * testsuite/ld-riscv-elf/attr-merge-user-ext-01.d: New test. * testsuite/ld-riscv-elf/attr-merge-user-ext-rv32i21_m2p0.s: Likewise. * testsuite/ld-riscv-elf/attr-merge-user-ext-rv32i21_m2p1.s: Likewise. * testsuite/ld-riscv-elf/ld-riscv-elf.exp: Remove obselete attr-merge-arch-failed-{01,02}, replace with attr-merge-user-ext-01. --- Changes since v1: * Tests added. * Fixed an refactoring issue related to missing a !. --- bfd/elfnn-riscv.c | 78 ++++++------------- .../ld-riscv-elf/attr-merge-arch-failed-01.d | 11 --- .../ld-riscv-elf/attr-merge-arch-failed-01a.s | 1 - .../ld-riscv-elf/attr-merge-arch-failed-01b.s | 1 - .../ld-riscv-elf/attr-merge-arch-failed-02.d | 27 ------- .../ld-riscv-elf/attr-merge-arch-failed-02a.s | 1 - .../ld-riscv-elf/attr-merge-arch-failed-02b.s | 1 - .../ld-riscv-elf/attr-merge-arch-failed-02c.s | 1 - .../ld-riscv-elf/attr-merge-arch-failed-02d.s | 1 - .../ld-riscv-elf/attr-merge-user-ext-01.d | 9 +++ .../attr-merge-user-ext-rv32i2p1_m2p0.s | 1 + .../attr-merge-user-ext-rv32i2p1_m2p1.s | 1 + ld/testsuite/ld-riscv-elf/ld-riscv-elf.exp | 3 +- 13 files changed, 36 insertions(+), 100 deletions(-) delete mode 100644 ld/testsuite/ld-riscv-elf/attr-merge-arch-failed-01.d delete mode 100644 ld/testsuite/ld-riscv-elf/attr-merge-arch-failed-01a.s delete mode 100644 ld/testsuite/ld-riscv-elf/attr-merge-arch-failed-01b.s delete mode 100644 ld/testsuite/ld-riscv-elf/attr-merge-arch-failed-02.d delete mode 100644 ld/testsuite/ld-riscv-elf/attr-merge-arch-failed-02a.s delete mode 100644 ld/testsuite/ld-riscv-elf/attr-merge-arch-failed-02b.s delete mode 100644 ld/testsuite/ld-riscv-elf/attr-merge-arch-failed-02c.s delete mode 100644 ld/testsuite/ld-riscv-elf/attr-merge-arch-failed-02d.s create mode 100644 ld/testsuite/ld-riscv-elf/attr-merge-user-ext-01.d create mode 100644 ld/testsuite/ld-riscv-elf/attr-merge-user-ext-rv32i2p1_m2p0.s create mode 100644 ld/testsuite/ld-riscv-elf/attr-merge-user-ext-rv32i2p1_m2p1.s diff --git a/bfd/elfnn-riscv.c b/bfd/elfnn-riscv.c index 95fcc77bea..8f9f0d8a86 100644 --- a/bfd/elfnn-riscv.c +++ b/bfd/elfnn-riscv.c @@ -3371,52 +3371,27 @@ riscv_std_ext_p (const char *name) return (strlen (name) == 1) && (name[0] != 'x') && (name[0] != 's'); } -/* Check if the versions are compatible. */ +/* Update the output subset's version to match the input when the input + subset's version is newer. */ -static bool -riscv_version_mismatch (bfd *ibfd, - struct riscv_subset_t *in, - struct riscv_subset_t *out) +static void +riscv_update_subset_version (struct riscv_subset_t *in, + struct riscv_subset_t *out) { if (in == NULL || out == NULL) - return true; + return; - /* Since there are no version conflicts for now, we just report - warning when the versions are mis-matched. */ - if (in->major_version != out->major_version - || in->minor_version != out->minor_version) + /* Update the output ISA versions to the newest ones, but otherwise don't + provide any errors or warnings about mis-matched ISA versions as it's + generally too tricky to check for these at link time. */ + if ((in->major_version > out->major_version) + || (in->major_version == out->major_version + && in->minor_version > out->minor_version) + || (out->major_version == RISCV_UNKNOWN_VERSION)) { - if ((in->major_version == RISCV_UNKNOWN_VERSION - && in->minor_version == RISCV_UNKNOWN_VERSION) - || (out->major_version == RISCV_UNKNOWN_VERSION - && out->minor_version == RISCV_UNKNOWN_VERSION)) - { - /* Do not report the warning when the version of input - or output is RISCV_UNKNOWN_VERSION, since the extension - is added implicitly. */ - } - else - _bfd_error_handler - (_("warning: %pB: mis-matched ISA version %d.%d for '%s' " - "extension, the output version is %d.%d"), - ibfd, - in->major_version, - in->minor_version, - in->name, - out->major_version, - out->minor_version); - - /* Update the output ISA versions to the newest ones. */ - if ((in->major_version > out->major_version) - || (in->major_version == out->major_version - && in->minor_version > out->minor_version)) - { - out->major_version = in->major_version; - out->minor_version = in->minor_version; - } + out->major_version = in->major_version; + out->minor_version = in->minor_version; } - - return true; } /* Return true if subset is 'i' or 'e'. */ @@ -3477,11 +3452,10 @@ riscv_merge_std_ext (bfd *ibfd, ibfd, in->name, out->name); return false; } - else if (!riscv_version_mismatch (ibfd, in, out)) - return false; - else - riscv_add_subset (&merged_subsets, - out->name, out->major_version, out->minor_version); + + riscv_update_subset_version(in, out); + riscv_add_subset (&merged_subsets, + out->name, out->major_version, out->minor_version); in = in->next; out = out->next; @@ -3499,10 +3473,8 @@ riscv_merge_std_ext (bfd *ibfd, if (!find_in && !find_out) continue; - if (find_in - && find_out - && !riscv_version_mismatch (ibfd, ext_in, ext_out)) - return false; + if (find_in && find_out) + riscv_update_subset_version(ext_in, ext_out); ext_merged = find_out ? ext_out : ext_in; riscv_add_subset (&merged_subsets, ext_merged->name, @@ -3524,8 +3496,7 @@ riscv_merge_std_ext (bfd *ibfd, on success and FALSE when a conflict is found. */ static bool -riscv_merge_multi_letter_ext (bfd *ibfd, - riscv_subset_t **pin, +riscv_merge_multi_letter_ext (riscv_subset_t **pin, riscv_subset_t **pout) { riscv_subset_t *in = *pin; @@ -3555,8 +3526,7 @@ riscv_merge_multi_letter_ext (bfd *ibfd, else { /* Both present, check version and increment both. */ - if (!riscv_version_mismatch (ibfd, in, out)) - return false; + riscv_update_subset_version (in, out); riscv_add_subset (&merged_subsets, out->name, out->major_version, out->minor_version); @@ -3629,7 +3599,7 @@ riscv_merge_arch_attr_info (bfd *ibfd, char *in_arch, char *out_arch) return NULL; /* Merge all non-single letter extensions with single call. */ - if (!riscv_merge_multi_letter_ext (ibfd, &in, &out)) + if (!riscv_merge_multi_letter_ext (&in, &out)) return NULL; if (xlen_in != xlen_out) diff --git a/ld/testsuite/ld-riscv-elf/attr-merge-arch-failed-01.d b/ld/testsuite/ld-riscv-elf/attr-merge-arch-failed-01.d deleted file mode 100644 index 669a139206..0000000000 --- a/ld/testsuite/ld-riscv-elf/attr-merge-arch-failed-01.d +++ /dev/null @@ -1,11 +0,0 @@ -#source: attr-merge-arch-failed-01a.s -#source: attr-merge-arch-failed-01b.s -#as: -march-attr -#ld: -r -m[riscv_choose_ilp32_emul] -#warning: .*mis-matched ISA version 3.0 for 'a' extension, the output version is 2.0 -#readelf: -A - -Attribute Section: riscv -File Attributes - Tag_RISCV_arch: ".*a3p0.*" -#.. diff --git a/ld/testsuite/ld-riscv-elf/attr-merge-arch-failed-01a.s b/ld/testsuite/ld-riscv-elf/attr-merge-arch-failed-01a.s deleted file mode 100644 index 365901d8dc..0000000000 --- a/ld/testsuite/ld-riscv-elf/attr-merge-arch-failed-01a.s +++ /dev/null @@ -1 +0,0 @@ - .attribute arch, "rv32i2p0_m2p0_a2p0" diff --git a/ld/testsuite/ld-riscv-elf/attr-merge-arch-failed-01b.s b/ld/testsuite/ld-riscv-elf/attr-merge-arch-failed-01b.s deleted file mode 100644 index 49263bf66d..0000000000 --- a/ld/testsuite/ld-riscv-elf/attr-merge-arch-failed-01b.s +++ /dev/null @@ -1 +0,0 @@ - .attribute arch, "rv32i2p0_m2p0_a3p0" diff --git a/ld/testsuite/ld-riscv-elf/attr-merge-arch-failed-02.d b/ld/testsuite/ld-riscv-elf/attr-merge-arch-failed-02.d deleted file mode 100644 index 2f2638ace2..0000000000 --- a/ld/testsuite/ld-riscv-elf/attr-merge-arch-failed-02.d +++ /dev/null @@ -1,27 +0,0 @@ -#source: attr-merge-arch-failed-02a.s -#source: attr-merge-arch-failed-02b.s -#source: attr-merge-arch-failed-02c.s -#source: attr-merge-arch-failed-02d.s -#as: -march-attr -#ld: -r -m[riscv_choose_ilp32_emul] -#warning: .*mis-matched ISA version 3.0 for 'i' extension, the output version is 2.0 -#warning: .*mis-matched ISA version 3.0 for 'm' extension, the output version is 2.0 -#warning: .*mis-matched ISA version 3.0 for 'a' extension, the output version is 2.0 -#warning: .*mis-matched ISA version 3.0 for 'zicsr' extension, the output version is 2.0 -#warning: .*mis-matched ISA version 3.0 for 'xunknown' extension, the output version is 2.0 -#warning: .*mis-matched ISA version 2.1 for 'i' extension, the output version is 3.0 -#warning: .*mis-matched ISA version 2.2 for 'm' extension, the output version is 3.0 -#warning: .*mis-matched ISA version 2.3 for 'a' extension, the output version is 3.0 -#warning: .*mis-matched ISA version 2.4 for 'zicsr' extension, the output version is 3.0 -#warning: .*mis-matched ISA version 2.5 for 'xunknown' extension, the output version is 3.0 -#warning: .*mis-matched ISA version 4.6 for 'i' extension, the output version is 3.0 -#warning: .*mis-matched ISA version 4.7 for 'm' extension, the output version is 3.0 -#warning: .*mis-matched ISA version 4.8 for 'a' extension, the output version is 3.0 -#warning: .*mis-matched ISA version 4.9 for 'zicsr' extension, the output version is 3.0 -#warning: .*mis-matched ISA version 4.0 for 'xunknown' extension, the output version is 3.0 -#readelf: -A - -Attribute Section: riscv -File Attributes - Tag_RISCV_arch: "rv32i4p6_m4p7_a4p8_zicsr4p9_zifencei2p0_xunknown4p0" -#.. diff --git a/ld/testsuite/ld-riscv-elf/attr-merge-arch-failed-02a.s b/ld/testsuite/ld-riscv-elf/attr-merge-arch-failed-02a.s deleted file mode 100644 index 3dbf8a20d5..0000000000 --- a/ld/testsuite/ld-riscv-elf/attr-merge-arch-failed-02a.s +++ /dev/null @@ -1 +0,0 @@ - .attribute arch, "rv32i2p0_m2p0_a2p0_zicsr2p0_xunknown2p0" diff --git a/ld/testsuite/ld-riscv-elf/attr-merge-arch-failed-02b.s b/ld/testsuite/ld-riscv-elf/attr-merge-arch-failed-02b.s deleted file mode 100644 index 7bbc39f425..0000000000 --- a/ld/testsuite/ld-riscv-elf/attr-merge-arch-failed-02b.s +++ /dev/null @@ -1 +0,0 @@ - .attribute arch, "rv32i3p0_m3p0_a3p0_zicsr3p0_xunknown3p0" diff --git a/ld/testsuite/ld-riscv-elf/attr-merge-arch-failed-02c.s b/ld/testsuite/ld-riscv-elf/attr-merge-arch-failed-02c.s deleted file mode 100644 index 2a921e62dc..0000000000 --- a/ld/testsuite/ld-riscv-elf/attr-merge-arch-failed-02c.s +++ /dev/null @@ -1 +0,0 @@ - .attribute arch, "rv32i2p1_m2p2_a2p3_zicsr2p4_xunknown2p5" diff --git a/ld/testsuite/ld-riscv-elf/attr-merge-arch-failed-02d.s b/ld/testsuite/ld-riscv-elf/attr-merge-arch-failed-02d.s deleted file mode 100644 index 6ef5ee5851..0000000000 --- a/ld/testsuite/ld-riscv-elf/attr-merge-arch-failed-02d.s +++ /dev/null @@ -1 +0,0 @@ - .attribute arch, "rv32i4p6_m4p7_a4p8_zicsr4p9_xunknown4p0" diff --git a/ld/testsuite/ld-riscv-elf/attr-merge-user-ext-01.d b/ld/testsuite/ld-riscv-elf/attr-merge-user-ext-01.d new file mode 100644 index 0000000000..d15bcdcab1 --- /dev/null +++ b/ld/testsuite/ld-riscv-elf/attr-merge-user-ext-01.d @@ -0,0 +1,9 @@ +#source: attr-merge-user-ext-rv32i2p1_m2p0.s +#source: attr-merge-user-ext-rv32i2p1_m2p1.s +#as: +#ld: -r -m[riscv_choose_ilp32_emul] +#readelf: -A + +Attribute Section: riscv +File Attributes + Tag_RISCV_arch: "rv32i2p1_m2p1" diff --git a/ld/testsuite/ld-riscv-elf/attr-merge-user-ext-rv32i2p1_m2p0.s b/ld/testsuite/ld-riscv-elf/attr-merge-user-ext-rv32i2p1_m2p0.s new file mode 100644 index 0000000000..a7e0547215 --- /dev/null +++ b/ld/testsuite/ld-riscv-elf/attr-merge-user-ext-rv32i2p1_m2p0.s @@ -0,0 +1 @@ +.attribute arch, "rv32i2p1_m2p0" diff --git a/ld/testsuite/ld-riscv-elf/attr-merge-user-ext-rv32i2p1_m2p1.s b/ld/testsuite/ld-riscv-elf/attr-merge-user-ext-rv32i2p1_m2p1.s new file mode 100644 index 0000000000..a1b61e3a94 --- /dev/null +++ b/ld/testsuite/ld-riscv-elf/attr-merge-user-ext-rv32i2p1_m2p1.s @@ -0,0 +1 @@ +.attribute arch, "rv32i2p1_m2p1" diff --git a/ld/testsuite/ld-riscv-elf/ld-riscv-elf.exp b/ld/testsuite/ld-riscv-elf/ld-riscv-elf.exp index 3d8950238a..272424b33e 100644 --- a/ld/testsuite/ld-riscv-elf/ld-riscv-elf.exp +++ b/ld/testsuite/ld-riscv-elf/ld-riscv-elf.exp @@ -160,8 +160,7 @@ if [istarget "riscv*-*-*"] { run_dump_test "attr-merge-priv-spec-01" run_dump_test "attr-merge-priv-spec-02" run_dump_test "attr-merge-priv-spec-03" - run_dump_test "attr-merge-arch-failed-01" - run_dump_test "attr-merge-arch-failed-02" + run_dump_test "attr-merge-user-ext-01" run_dump_test "attr-merge-stack-align-failed" run_dump_test "attr-merge-priv-spec-failed-01" run_dump_test "attr-merge-priv-spec-failed-02" -- 2.34.1