[PATCH 0/3] PE-COFF: Fix weak external symbol resolution bugs
Peter Damianov
peter0x44@disroot.org
Sat May 30 19:15:19 GMT 2026
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
--
2.54.0
More information about the Binutils
mailing list