From patchwork Wed Aug 26 03:35:00 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "H.J. Lu" X-Patchwork-Id: 142211 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 32C574BA23CB for ; Wed, 26 Aug 2026 03:36:15 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 32C574BA23CB Authentication-Results: sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20251104 header.b=oYvsfVj8 X-Original-To: binutils@sourceware.org Delivered-To: binutils@sourceware.org Received: from mail-pf1-x435.google.com (mail-pf1-x435.google.com [IPv6:2607:f8b0:4864:20::435]) by sourceware.org (Postfix) with ESMTPS id 04F1A4BA2E38 for ; Wed, 26 Aug 2026 03:35:40 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 04F1A4BA2E38 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 04F1A4BA2E38 Authentication-Results: sourceware.org; arc=pass smtp.remote-ip=2607:f8b0:4864:20::435 ARC-Seal: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1787715340; cv=pass; b=ZDEIGw7EtLRq/M0WSOzj8LYLR5RgYj5/qVXOomPEyvM+sxB1PbkqL+PPg5XqR54YeIw9zmC6NjX6UEj5v3ye6EuCPpRHCeLsH/GJVgXcl9KzIvtoyEifyZVWirYd5AA8Y1tnWsPY9EvEs6AjpWzucsyAKllxd0vBW4MN/G22MUY= ARC-Message-Signature: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1787715340; c=relaxed/simple; bh=CmRCxYHUaKbnm7pBbhvjZWw7HTT85os7lu5nHLCuwQ4=; h=DKIM-Signature:MIME-Version:From:Date:Message-ID:Subject:To; b=ByXR/vHgN4i8zUkLvtN/7baPYoElDiAb+WHO2Jm6yhhX7V+QMRtycVak1z6FgyBK0RNz4wZ9O5N2PMGsx1d7wEU8TuYwt/Jx1q4M/rs75gNmxJBxxMMSS4xXvqCq6eilcnpy5WjAqf2y7QH6wXI2pMeToQFy9eyvgUHsf/YoSlI= ARC-Authentication-Results: i=2; sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20251104 header.b=oYvsfVj8 DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 04F1A4BA2E38 Received: by mail-pf1-x435.google.com with SMTP id d2e1a72fcca58-84830c774a0so692720b3a.1 for ; Tue, 25 Aug 2026 20:35:39 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1787715339; cv=none; d=google.com; s=arc-20260327; b=bWM3vHxLM5ZVR9gE8uaRsDGoJLdGUp+aJBFcQxERHJZDcVlYoiXIZQ1WPKgjpV2rY3 A7PS/ppmje0CKZUzsiFYB2Cfwv342BkXIn2Na+IOGeofRk1VCoZN0fS02a1bx6frMlmc DYk7sbdat0f8pmnExiiQX/XYY5aktuwUT5TCZUM+9Ej/N1/ihzKgwnBOys1PV8bowjDj CmNib2hIy2Um9UUctR1fZaiG86YgsmfDDoSlcRkb+9DZe/xXSfXBZm3nNDoec76Vrwyw oZ/yTaSXE8JqsO5/3yq8D6z+O5ndovT45XGHcf6gxkr6nT7ooiUoGUcGuM7kz+C4E8bu MSVA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20260327; h=to:subject:message-id:date:from:mime-version:dkim-signature; bh=k+w3H7KfuObsguaM87AZ/bgUyG7Cewlrf4AQ2zASu3g=; fh=Q47HalnpTgORlLRVXtkSKh9GsN3n6x4i6rvKHWwZ86A=; b=pek0FEGQl2MQvyPQUwIr+V0pFFUOO11fZHqf+bWZi6dxasaZNvQohSWpEgJwidbBqK 51RAykbXiv+SyGeYLP9QpPjPsKxFM9AsexB3XC01T2hbzL3iLdkqeBCNdI+iHGqKAd4v AzTo6fYv9qViZdTkWB2m+rerClS0pFxpYlPtP7+ZD2QgHuxTti+a7EHjAB2HpXSWlZ9n vI6irCfY6xA35sjt5m19FzN2D0yKl0aJuV8kNWD//or3EQ3suy0xFqDroPiapfl+N9+6 07rM4CAIjMnqAKyiWPv9p6bV0KgE9uVqL0Ls2Pf8Sr5iCB7BVynQD8ndYZp6hxsztfWu Q7Jg==; darn=sourceware.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787715339; x=1788320139; darn=sourceware.org; h=content-type:to:subject:message-id:date:from:mime-version:from:to :cc:subject:date:message-id:reply-to:content-type; bh=k+w3H7KfuObsguaM87AZ/bgUyG7Cewlrf4AQ2zASu3g=; b=oYvsfVj8U8hWiQdTDmW7PEuRg/S3UtKX2n/jt/iGgPKQI+Oy6bD5TnVJeVh46adBge AEZ03b3sWvcc0PR9xI/9BNiwkgOUoBY/o+El4QHCW39WO2rnVWBnlNfS72fx5p721DDZ zofYdFpjdhFZCOY4OfCm3jGSnUemmPps0Zz1RaeUBwGFvCr/Bb8p2NXWT+4IOOqYdDUc mtFL13ky4SzlxatB9ixxWpDvGJdoNqznpFSe3OWWHFfPbI7Nh37v+Unpn6A86UzeHOb7 4YkiCpIYBwFDTKkzhyU4Z0OF/LuxLwnFx13zqNQf7oscTMC5SZE32RfXgImAgjxMZwtd Ntgw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787715339; x=1788320139; h=content-type:to:subject:message-id:date:from:mime-version:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=k+w3H7KfuObsguaM87AZ/bgUyG7Cewlrf4AQ2zASu3g=; b=BNRNlT2HDVS4mP78QlaJT1BAQlzML1JG1R36GasOtjlR514S22K2Hc5vbZpA/Wfv9S brkTmC92A7UIopqQcbfkRHumrPIKGFzlCdLx7dKxN1v4mhpkZSBwaeuQW7nsr4r/En9g wA9Kk5yNuOppa90VzrjAV7Z0ACoQxBhFYHrukDz7ZqDyJrOU+GQlbEzqGI0KyCVPFMcK krZqYNCKxEcSi9BmtwLDu8/NGBW/4W/lGY3IT86sRYR0/ASZj8+lSxyueYMlyGwr5LFS VG3Lp0aaOv3K9vl1IxZTfX47VHrEGkAUaxfgoDcbRb5eeCGcWX/huiJDbPMcrPzFyJZ5 Dcjw== X-Gm-Message-State: AFuF++nmNaLauEObjdOLS3Z6PY8MZG8UGk+eEjiW+Hh4w1RIZh6sHMAo IpN5pO89sNtJ8sazXjLhkrl/hj4jvxgAy8dWDYHiXyczGFW1N84LJjfwkJmQIeae5fLIQ1Ywgpq 4eUcWaVH7a3TxE/XP7khqSody6Aohu8qAcSZHe+4= X-Gm-Gg: AR+sD11iEFguxSUx8NupZ/iyjM8GvB6O7QX4dX5LZDlgxiGrVPj3Uyp7+XRtLPwPmNK zpFTYzfl1+3774112pe4DP5/8KXJu68B7Dq9Sp7TcYlJe78oRU7ZJcrCUe0NuIuH2qqJf0wQ0Sx wvmY8rcrOh79q7xzJVt2vRpzAVtd4sbL3+Bmd3t3DM23JFQgb7oUoECOKtfFLxyuUtkAssd557/ 3zp6ZDkWqPrcOt3vR9RYHbC7rTJJ+nux+RzBsgvYE985PVUB6iUtN+gaHlgz1LJNPq9PV/t8JNk vDGTARkcbRxIW6X9ISSc7X5mLppIAu9l0GInzDt5nnqR X-Received: by 2002:a05:6a20:9149:b0:3cd:f6c:6cdd with SMTP id adf61e73a8af0-3cf8485e82dmr6293290637.16.1787715338373; Tue, 25 Aug 2026 20:35:38 -0700 (PDT) MIME-Version: 1.0 From: "H.J. Lu" Date: Wed, 26 Aug 2026 11:35:00 +0800 X-Gm-Features: AcwNN1VLLLv8hUzE_9Col35Uxvv5x96Zjwy2hgGhchVvZFfNiqDvVt2dU4jFnCs Message-ID: Subject: [PATCH] elf: Verify that there is only one default version To: Binutils , Nick Clifton , Alan Modra , "Maciej W. Rozycki" , Jan Beulich X-Spam-Status: No, score=-3008.5 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 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 When assigning the symbol version, verify that there is only one default version. bfd/ PR ld/34550 * elflink.c (_bfd_elf_link_assign_sym_version): Verify that there is only one default version. ld/ PR ld/34550 * testsuite/ld-elf/pr34550.d: New test. * testsuite/ld-elf/pr34550.s: Likewise. * testsuite/ld-elf/pr34550.t: Likewise. From 294ca43bc99d0c8a6d0d0ce3e3cea486f9823b3b Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Wed, 26 Aug 2026 11:29:39 +0800 Subject: [PATCH] elf: Verify that there is only one default version When assigning the symbol version, verify that there is only one default version. bfd/ PR ld/34550 * elflink.c (_bfd_elf_link_assign_sym_version): Verify that there is only one default version. ld/ PR ld/34550 * testsuite/ld-elf/pr34550.d: New test. * testsuite/ld-elf/pr34550.s: Likewise. * testsuite/ld-elf/pr34550.t: Likewise. Signed-off-by: H.J. Lu --- bfd/elflink.c | 50 ++++++++++++++++++++++++++++++++++- ld/testsuite/ld-elf/pr34550.d | 4 +++ ld/testsuite/ld-elf/pr34550.s | 10 +++++++ ld/testsuite/ld-elf/pr34550.t | 13 +++++++++ 4 files changed, 76 insertions(+), 1 deletion(-) create mode 100644 ld/testsuite/ld-elf/pr34550.d create mode 100644 ld/testsuite/ld-elf/pr34550.s create mode 100644 ld/testsuite/ld-elf/pr34550.t diff --git a/bfd/elflink.c b/bfd/elflink.c index cc29b99ba56..1245bf425b9 100644 --- a/bfd/elflink.c +++ b/bfd/elflink.c @@ -2693,10 +2693,14 @@ _bfd_elf_link_assign_sym_version (struct elf_link_hash_entry *h, void *data) if (p != NULL && h->verinfo.vertree == NULL) { struct bfd_elf_version_tree *t; + bool default_version = false; ++p; if (*p == ELF_VER_CHR) - ++p; + { + default_version = true; + ++p; + } /* If there is no version string, we can just return out. */ if (*p == '\0') @@ -2710,6 +2714,50 @@ _bfd_elf_link_assign_sym_version (struct elf_link_hash_entry *h, void *data) if (hide) obed->elf_backend_hide_symbol (info, h, true); + else if (default_version) + { + /* Get the unversioned symbol for the default version. */ + struct elf_link_hash_entry *h_u; + size_t size = p - h->root.root.string - 1; + char *unversioned_name = bfd_malloc (size); + if (unversioned_name == NULL) + { + sinfo->failed = true; + return false; + } + memcpy (unversioned_name, h->root.root.string, size - 1); + unversioned_name[size - 1] = 0; + h_u = elf_link_hash_lookup (elf_hash_table (info), + unversioned_name, false, + false, false); + + /* There must be an unversioned symbol. */ + if (h_u == NULL) + abort (); + + while (h_u->root.type == bfd_link_hash_indirect + || h_u->root.type == bfd_link_hash_warning) + h_u = (struct elf_link_hash_entry *) h_u->root.u.i.link; + + /* Verify that there is only one default version. */ + if (h_u->versioned != versioned_hidden + && h_u->verinfo.vertree != h->verinfo.vertree) + { + /* xgettext:c-format */ + info->callbacks->einfo + (_("%X%P: %pB: symbol `%s' has 2 default versions: " + "`%s', `%s'.\n"), + info->output_bfd, unversioned_name, + h_u->verinfo.vertree->name, + h->verinfo.vertree->name); + bfd_set_error (bfd_error_bad_value); + sinfo->failed = true; + free (unversioned_name); + return false; + } + + free (unversioned_name); + } /* If we are building an application, we need to create a version node for this version. */ diff --git a/ld/testsuite/ld-elf/pr34550.d b/ld/testsuite/ld-elf/pr34550.d new file mode 100644 index 00000000000..def41a1d1ec --- /dev/null +++ b/ld/testsuite/ld-elf/pr34550.d @@ -0,0 +1,4 @@ +#target: [check_shared_lib_support] +#as: +#ld: -shared --version-script=pr34550.t +#error: symbol `fmod' has 2 default versions: `GLIBC_2.0', `GLIBC_2.43'. diff --git a/ld/testsuite/ld-elf/pr34550.s b/ld/testsuite/ld-elf/pr34550.s new file mode 100644 index 00000000000..652aa35f31f --- /dev/null +++ b/ld/testsuite/ld-elf/pr34550.s @@ -0,0 +1,10 @@ + .text + .type fmod,%function + .globl fmod +fmod: + .dc.a 0 + .type fmod_new,%function + .globl fmod_new +fmod_new: + .dc.a 0 + .symver fmod_new, fmod@@GLIBC_2.43 diff --git a/ld/testsuite/ld-elf/pr34550.t b/ld/testsuite/ld-elf/pr34550.t new file mode 100644 index 00000000000..37dff255cdc --- /dev/null +++ b/ld/testsuite/ld-elf/pr34550.t @@ -0,0 +1,13 @@ +GLIBC_2.0 { + global: + fmod; + local: + *; +}; + +GLIBC_2.43 { + global: + fmod; + local: + *; +} GLIBC_2.0; -- 2.55.0