[PATCH v3 11/18] BFD: Correct archive format determination for non-default link emulations
Maciej W. Rozycki
macro@orcam.me.uk
Thu Nov 20 10:56:39 GMT 2025
More information about the Binutils mailing list
Thu Nov 20 10:56:39 GMT 2025
- Previous message (by thread): [PATCH v3 10/18] BFD: Unset the format on releasing a BFD's objalloc memory
- Next message (by thread): [PATCH v3 12/18] PR ld/24600: BFD: Add general linker support for mapless archives
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
From: Maciej W. Rozycki <macro@redhat.com> Fix an issue with archive format determination coming from commit b228303dd14e ("PR binutils/13278: --plugin doesn't work on archive"), <https://inbox.sourceware.org/binutils/20111011064345.GM25970@bubble.grove.modra.org/>, causing the default link emulation to be used despite archive members being in another object format and consequently triggering segmentation faults in `cris-aout' LD with the default (`crisaout') emulation where archive members are in the ELF format. Address the issue by always checking the format of the first member of an archive even if no default target has been specified, except when the target being checked against is be the plugin target. Verified by hand and the `powerpc64le-linux-gnu' target to cause no issue with the recipe in PR binutils/13278 and removing failures from segmentation faults with the new tests: cris-aout -FAIL: CRIS regular archive link (implicit emulation) cris-aout -FAIL: CRIS thin archive link (implicit emulation) --- New change in v3. --- bfd/archive.c | 2 +- ld/testsuite/ld-cris/archive.exp | 21 +++++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) binutils-bfd-archive-format-check-fix.diff Index: binutils-gdb/bfd/archive.c =================================================================== --- binutils-gdb.orig/bfd/archive.c +++ binutils-gdb/bfd/archive.c @@ -928,7 +928,7 @@ bfd_generic_archive_p (bfd *abfd) return NULL; } - if (abfd->target_defaulted && bfd_has_map (abfd)) + if (!bfd_plugin_target_p (abfd->xvec) && bfd_has_map (abfd)) { bfd *first; unsigned int save; Index: binutils-gdb/ld/testsuite/ld-cris/archive.exp =================================================================== --- binutils-gdb.orig/ld/testsuite/ld-cris/archive.exp +++ binutils-gdb/ld/testsuite/ld-cris/archive.exp @@ -68,6 +68,14 @@ run_ld_link_tests [list \ {nm "" ../ld-archive/nx.nd}} \ "abcx" \ ] \ + [list "CRIS regular archive link (implicit emulation)" \ + "-e ff" "tmpdir/ab.a --verbose --print-map" \ + "$asemul" {../ld-archive/abc.s} \ + {{ld ../ld-archive/abc.vd} \ + {nm "" ../ld-archive/abc.nd} \ + {nm "" ../ld-archive/nx.nd}} \ + "abci" \ + ] \ ] if { ![istarget cris-*-*aout*] } { setup_xfail "binutils/33485" "*-*-*" @@ -82,3 +90,16 @@ run_ld_link_tests [list \ "abtcx" \ ] \ ] +if { ![istarget cris-*-*aout*] } { + setup_xfail "binutils/33485" "*-*-*" +} +run_ld_link_tests [list \ + [list "CRIS thin archive link (implicit emulation)" \ + "-e ff" "tmpdir/abt.a --verbose --print-map" \ + "$asemul" {../ld-archive/abc.s} \ + {{ld ../ld-archive/abtc.vd} \ + {nm "" ../ld-archive/abc.nd} \ + {nm "" ../ld-archive/nx.nd}} \ + "abtci" \ + ] \ +]
- Previous message (by thread): [PATCH v3 10/18] BFD: Unset the format on releasing a BFD's objalloc memory
- Next message (by thread): [PATCH v3 12/18] PR ld/24600: BFD: Add general linker support for mapless archives
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Binutils mailing list