| Message ID | 20260530191522.57144-1-peter0x44@disroot.org |
|---|---|
| Headers |
Return-Path: <binutils-bounces~patchwork=sourceware.org@sourceware.org> 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 C00184BA79AE for <patchwork@sourceware.org>; Sat, 30 May 2026 19:16:36 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org C00184BA79AE DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1780168596; bh=r82AljTrmiIFiUamim1n/jvtO0PlH7LXnt741g5BqtY=; h=To:Cc:Subject:Date:List-Id:List-Unsubscribe:List-Archive: List-Post:List-Help:List-Subscribe:From:Reply-To:From; b=ls9kpbZ6cglNe/LdcPnbY1TcoW856KvIx9pt0w/tpot6A8Fm2mdvWpA+P81hJ9nNe DNPIF6QGBvGzpn3RNTIIl7Yv4gOzueoUwcjYXkVfgvbYxiYlC10BEIpTGK8EcVWOYI piVY+2yVBnlZ4tuFHzUJCna4PhArO7qyvXh6HpwI= X-Original-To: binutils@sourceware.org Delivered-To: binutils@sourceware.org Received: from layka.disroot.org (layka.disroot.org [178.21.23.139]) by sourceware.org (Postfix) with ESMTPS id 8D66A4BA7987 for <binutils@sourceware.org>; Sat, 30 May 2026 19:16:01 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 8D66A4BA7987 ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 8D66A4BA7987 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1780168561; cv=none; b=xbCQrHjju3vjx+wcurqfqRNLSz7SsM8JpDiyvztVvp1wzTmEkaENVHrWJjhZJSa8a6h41im7fFRLs8BsmuMkln9IP47NrxTYTrmPbhY/i1K6DyehKsW3juactUnzc+K3hD32UkHXSDzpNHf8y3i4R8OzjWzoivZHCCRRmKzJTNM= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1780168561; c=relaxed/simple; bh=XJyTK5/2Op+xmkHpFxrTKIJBRGUyfrHKISqZk7ICV8E=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=NhENbm6sq6JsYEB54o0M4PIuSHr5bnqO/Z/v8o9ijvqzaZVEem+LaamuqsKM4JcFEJuo5Oz8EJ/3Y4jW7xWSBgcqOB0zgkbXp8nXeGvzgxCja2rc/qmS4VeVGpa2OV0x+Z4BmuW0ueRYkiq+qjhbBJgC9cvV63z6ZroVuoNxlRk= ARC-Authentication-Results: i=1; sourceware.org; dkim=pass (2048-bit key, secure) header.d=disroot.org header.i=@disroot.org header.a=rsa-sha256 header.s=mail header.b=OeXNzAti DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 8D66A4BA7987 Received: from mail01.disroot.lan (localhost [127.0.0.1]) by disroot.org (Postfix) with ESMTP id 5910526687; Sat, 30 May 2026 21:16:00 +0200 (CEST) X-Virus-Scanned: SPAM Filter at disroot.org Received: from layka.disroot.org ([127.0.0.1]) by localhost (disroot.org [127.0.0.1]) (amavis, port 10024) with ESMTP id YK0uvk9Wcp7m; Sat, 30 May 2026 21:15:59 +0200 (CEST) To: binutils@sourceware.org Cc: martin@martin.st, pali@kernel.org, lh_mouse@126.com, oleg.tolmatcev@gmail.com, amodra@gmail.com, jbeulich@suse.com, Peter Damianov <peter0x44@disroot.org> Subject: [PATCH 0/3] PE-COFF: Fix weak external symbol resolution bugs Date: Sat, 30 May 2026 15:15:19 -0400 Message-ID: <20260530191522.57144-1-peter0x44@disroot.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-5.9 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, RCVD_IN_DNSWL_BLOCKED, SPF_HELO_NONE, SPF_PASS, TXREP, URIBL_BLOCKED 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 <binutils.sourceware.org> List-Unsubscribe: <https://sourceware.org/mailman/options/binutils>, <mailto:binutils-request@sourceware.org?subject=unsubscribe> List-Archive: <https://sourceware.org/pipermail/binutils/> List-Post: <mailto:binutils@sourceware.org> List-Help: <mailto:binutils-request@sourceware.org?subject=help> List-Subscribe: <https://sourceware.org/mailman/listinfo/binutils>, <mailto:binutils-request@sourceware.org?subject=subscribe> From: Peter Damianov via Binutils <binutils@sourceware.org> Reply-To: Peter Damianov <peter0x44@disroot.org> Errors-To: binutils-bounces~patchwork=sourceware.org@sourceware.org |
| Series |
PE-COFF: Fix weak external symbol resolution bugs
|
|
Message
Peter0x44
May 30, 2026, 7:15 p.m. UTC
This series fixes two bugs in the PE COFF weak external symbol
resolution in the BFD linker, plus adds testsuite coverage.
The first patch fixes the case where a strong undefined reference is
seen before the weak external definition. The linker was losing the
weak's aux record and failing to resolve the fallback alias.
The second patch fixes the case where two weak externals for the same
symbol meet. The linker always kept the first one's fallback
regardless of whether it pointed to a real definition or NULL. This
matches lld's behavior after:
https://github.com/llvm/llvm-project/commit/7ca5698b4c3698d06065e0941df7f23d72913d23
The third patch adds tests covering a wide matrix
of weak/strong interactions, based on testcases by Martin Storsjo.
Peter Damianov (3):
PE-COFF: Fix weak external symbol resolution when strong undef is seen
first
PE-COFF: Prefer weak external with defined fallback over null fallback
ld/testsuite: Add comprehensive PE COFF weak external tests
bfd/cofflink.c | 118 ++++++++++++++++--
ld/testsuite/ld-pe/pe-compile.exp | 88 +++++++++++++
.../ld-pe/weak-ext-add1-weak-chained.c | 13 ++
ld/testsuite/ld-pe/weak-ext-add2.c | 8 ++
ld/testsuite/ld-pe/weak-ext-dummy.c | 5 +
ld/testsuite/ld-pe/weak-ext-expected1.c | 1 +
.../ld-pe/weak-ext-expected3-add1-weak.c | 9 ++
ld/testsuite/ld-pe/weak-ext-expected3.c | 1 +
ld/testsuite/ld-pe/weak-ext-expected5.c | 1 +
ld/testsuite/ld-pe/weak-ext-main-weak-def.c | 26 ++++
ld/testsuite/ld-pe/weak-ext-main-weak.c | 22 ++++
ld/testsuite/ld-pe/weak-ext-main.c | 21 ++++
12 files changed, 304 insertions(+), 9 deletions(-)
create mode 100644 ld/testsuite/ld-pe/weak-ext-add1-weak-chained.c
create mode 100644 ld/testsuite/ld-pe/weak-ext-add2.c
create mode 100644 ld/testsuite/ld-pe/weak-ext-dummy.c
create mode 100644 ld/testsuite/ld-pe/weak-ext-expected1.c
create mode 100644 ld/testsuite/ld-pe/weak-ext-expected3-add1-weak.c
create mode 100644 ld/testsuite/ld-pe/weak-ext-expected3.c
create mode 100644 ld/testsuite/ld-pe/weak-ext-expected5.c
create mode 100644 ld/testsuite/ld-pe/weak-ext-main-weak-def.c
create mode 100644 ld/testsuite/ld-pe/weak-ext-main-weak.c
create mode 100644 ld/testsuite/ld-pe/weak-ext-main.c