commit:     acaae649785f0dca7922195aff762ce926124d3c
Author:     Fabian Groffen <grobian <AT> gentoo <DOT> org>
AuthorDate: Fri Mar  7 14:40:24 2025 +0000
Commit:     Fabian Groffen <grobian <AT> gentoo <DOT> org>
CommitDate: Fri Mar  7 14:40:24 2025 +0000
URL:        https://gitweb.gentoo.org/repo/proj/prefix.git/commit/?id=acaae649

sys-devel/binutils-2.44: version bump

Signed-off-by: Fabian Groffen <grobian <AT> gentoo.org>

 sys-devel/binutils/Manifest                        |   2 +
 sys-devel/binutils/binutils-2.44.ebuild            | 592 +++++++++++++++++++++
 .../files/binutils-2.41-linker-prefix.patch        |  56 ++
 3 files changed, 650 insertions(+)

diff --git a/sys-devel/binutils/Manifest b/sys-devel/binutils/Manifest
index b6c1313f33..e7358667e3 100644
--- a/sys-devel/binutils/Manifest
+++ b/sys-devel/binutils/Manifest
@@ -1,2 +1,4 @@
 DIST binutils-2.40-patches-7.tar.xz 299188 BLAKE2B 
170cd2432e0458889b240c3603461d0b4bfa62d5314634b101a629db455d87235ac14ad44c63920b713d5235fa8b73902960df1019153873ef06a33aa7050b4b
 SHA512 
a60da163caee68fe1fa355385d404e8998ebed0e390d50e0713e95334733a8b4e37bc63d522817284c027953e43848dbc98042461a47131fb53bc69203b4ee87
 DIST binutils-2.40.tar.xz 25241484 BLAKE2B 
8d799f7c595f878b9af5b17a490021dd8b8300ac2fe0ed8574c012929d22d2d0493e003a3e631a9436e8e712da801779b777c566167fe42b0bde119ffa5ad1c2
 SHA512 
a37e042523bc46494d99d5637c3f3d8f9956d9477b748b3b1f6d7dfbb8d968ed52c932e88a4e946c6f77b8f48f1e1b360ca54c3d298f17193f3b4963472f6925
+DIST binutils-2.44-patches-1.tar.xz 9156 BLAKE2B 
c72a7d0ffdb852f8de9c18e187b5768085b3a070744a4fadef508ab0e865d3a3967ec12a0ee7a325b6b689f39e5243aacd9d3f73ceb723d53592ec6ca640161b
 SHA512 
053de98536e92837d0a08fac26bb0f057431747fe6e82f8b9ac54dd9aed65d8de379d653c0e8a8cd31267b9769825a420db5f40957f8c4eb54a7e4a9d76fadb8
+DIST binutils-2.44.tar.xz 27285788 BLAKE2B 
0eb031ace9fb5a7047b81b5a05b1760f7d332c8ed67f98899f153a45f181b83e661a484551af05c0a9b2adc422da84619103c7b1f3c9fad5327872832b5446aa
 SHA512 
b85d3bbc0e334cf67a96219d3c7c65fbf3e832b2c98a7417bf131f3645a0307057ec81cd2b29ff2563cec53e3d42f73e2c60cc5708e80d4a730efdcc6ae14ad7

diff --git a/sys-devel/binutils/binutils-2.44.ebuild 
b/sys-devel/binutils/binutils-2.44.ebuild
new file mode 100644
index 0000000000..5fc13a3fa6
--- /dev/null
+++ b/sys-devel/binutils/binutils-2.44.ebuild
@@ -0,0 +1,592 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+inherit libtool flag-o-matic gnuconfig strip-linguas toolchain-funcs
+
+DESCRIPTION="Tools necessary to build programs"
+HOMEPAGE="https://sourceware.org/binutils/";
+
+LICENSE="GPL-3+"
+IUSE="cet debuginfod doc gprofng hardened multitarget +nls pgo +plugins 
static-libs test vanilla xxhash zstd"
+
+# Variables that can be set here  (ignored for live ebuilds)
+# PATCH_VER          - the patchset version
+#                      Default: empty, no patching
+# PATCH_BINUTILS_VER - the binutils version in the patchset name
+#                    - Default: PV
+# PATCH_DEV          - Use download URI 
https://dev.gentoo.org/~{PATCH_DEV}/distfiles/...
+#                      for the patchsets
+
+PATCH_VER=1
+PATCH_DEV=dilfridge
+
+if [[ ${PV} == 9999 ]]; then
+       inherit git-r3
+       SLOT=${PV}
+elif [[ ${PV} == *9999 ]]; then
+       inherit git-r3
+       SLOT=$(ver_cut 1-2)
+else
+       PATCH_BINUTILS_VER=${PATCH_BINUTILS_VER:-${PV}}
+       PATCH_DEV=${PATCH_DEV:-dilfridge}
+       SRC_URI="mirror://gnu/binutils/binutils-${PV}.tar.xz 
https://sourceware.org/pub/binutils/releases/binutils-${PV}.tar.xz 
https://dev.gentoo.org/~${PATCH_DEV}/distfiles/binutils-${PV}.tar.xz";
+       [[ -z ${PATCH_VER} ]] || SRC_URI="${SRC_URI}
+               
https://dev.gentoo.org/~${PATCH_DEV}/distfiles/binutils-${PATCH_BINUTILS_VER}-patches-${PATCH_VER}.tar.xz";
+       SLOT=$(ver_cut 1-2)
+       KEYWORDS="~amd64-linux ~x86-linux ~x64-solaris"
+fi
+
+#
+# The cross-compile logic
+#
+export CTARGET=${CTARGET:-${CHOST}}
+if [[ ${CTARGET} == ${CHOST} ]] ; then
+       if [[ ${CATEGORY} == cross-* ]] ; then
+               export CTARGET=${CATEGORY#cross-}
+       fi
+fi
+is_cross() { [[ ${CHOST} != ${CTARGET} ]] ; }
+
+#
+# The dependencies
+#
+RDEPEND="
+       >=sys-devel/binutils-config-3
+       sys-libs/zlib
+       debuginfod? (
+               dev-libs/elfutils[debuginfod(-)]
+       )
+       zstd? ( app-arch/zstd:= )
+"
+DEPEND="
+       ${RDEPEND}
+       xxhash? ( dev-libs/xxhash )
+"
+BDEPEND="
+       doc? ( sys-apps/texinfo )
+       pgo? (
+               dev-util/dejagnu
+               app-alternatives/bc
+       )
+       test? (
+               dev-util/dejagnu
+               app-alternatives/bc
+       )
+       nls? ( sys-devel/gettext )
+       zstd? ( virtual/pkgconfig )
+       app-alternatives/lex
+       app-alternatives/yacc
+"
+
+RESTRICT="!test? ( test )"
+
+PATCHES=(
+       "${FILESDIR}"/${PN}-2.22-solaris-anonymous-version-script-fix.patch
+)
+
+MY_BUILDDIR=${WORKDIR}/build
+
+src_unpack() {
+       if [[ ${PV} == *9999 ]] ; then
+               EGIT_REPO_URI="
+                       
https://anongit.gentoo.org/git/proj/toolchain/binutils-patches.git
+                       https://github.com/gentoo/binutils-patches
+               "
+               EGIT_CHECKOUT_DIR=${WORKDIR}/patches-git
+               git-r3_src_unpack
+               mv patches-git/9999 patch || die
+
+               if [[ ${PV} != 9999 ]] ; then
+                       EGIT_BRANCH=binutils-$(ver_cut 1)_$(ver_cut 2)-branch
+               fi
+               EGIT_REPO_URI="
+                       https://sourceware.org/git/binutils-gdb.git
+                       https://git.sr.ht/~sourceware/binutils-gdb
+                       https://gitlab.com/x86-binutils/binutils-gdb.git
+               "
+               S=${WORKDIR}/binutils
+               EGIT_CHECKOUT_DIR=${S}
+               git-r3_src_unpack
+       else
+               unpack ${P/-hppa64/}.tar.xz
+
+               cd "${WORKDIR}" || die
+               unpack 
binutils-${PATCH_BINUTILS_VER}-patches-${PATCH_VER}.tar.xz
+
+               # _p patch versions are Gentoo specific tarballs ...
+               local dir=${P%_p?}
+               dir=${dir/-hppa64/}
+
+               S=${WORKDIR}/${dir}
+       fi
+
+       cd "${WORKDIR}" || die
+       mkdir -p "${MY_BUILDDIR}" || die
+}
+
+src_prepare() {
+       local patchsetname
+       if [[ ${PV} == 9999 ]] ; then
+               patchsetname="from git master"
+       elif [[ ${PV} == *9999 ]] ; then
+               patchsetname="from git branch ${EGIT_BRANCH}"
+       else
+               patchsetname="${PATCH_BINUTILS_VER}-${PATCH_VER}"
+       fi
+
+       if [[ -n ${PATCH_VER} ]] || [[ ${PV} == *9999 ]] ; then
+               if ! use vanilla; then
+                       einfo "Applying binutils patchset ${patchsetname}"
+                       eapply "${WORKDIR}/patch"
+                       einfo "Done."
+
+                       # This is applied conditionally for now just out of 
caution.
+                       # It should be okay on non-prefix systems though. See 
bug #892549.
+                       if is_cross || use prefix; then
+                               eapply 
"${FILESDIR}"/binutils-2.40-linker-search-path.patch \
+                                          
"${FILESDIR}"/binutils-2.41-linker-prefix.patch
+                       fi
+               fi
+       fi
+
+       # Make sure our explicit libdir paths don't get clobbered, bug #562460
+       sed -i \
+               -e 's:@bfdlibdir@:@libdir@:g' \
+               -e 's:@bfdincludedir@:@includedir@:g' \
+               {bfd,opcodes}/Makefile.in || die
+
+       # Apply things from PATCHES and user dirs
+       default
+
+       # Run misc portage update scripts
+       gnuconfig_update
+       elibtoolize --portage --no-uclibc
+}
+
+toolchain-binutils_bugurl() {
+       printf "https://bugs.gentoo.org/";
+}
+toolchain-binutils_pkgversion() {
+       printf "Gentoo ${PV}"
+       [[ -n ${PATCH_VER} ]] && printf " p${PATCH_VER}"
+}
+
+src_configure() {
+       # See 
https://www.gnu.org/software/make/manual/html_node/Parallel-Output.html
+       # Avoid really confusing logs from subconfigure spam, makes logs far
+       # more legible.
+       MAKEOPTS="--output-sync=line ${MAKEOPTS}"
+
+       # Setup some paths
+       LIBPATH=/usr/$(get_libdir)/binutils/${CTARGET}/${PV}
+       INCPATH=${LIBPATH}/include
+       DATAPATH=/usr/share/binutils-data/${CTARGET}/${PV}
+       if is_cross ; then
+               TOOLPATH=/usr/${CHOST}/${CTARGET}
+       else
+               TOOLPATH=/usr/${CTARGET}
+       fi
+       BINPATH=${TOOLPATH}/binutils-bin/${PV}
+
+       # Make sure we filter $LINGUAS so that only ones that
+       # actually work make it through, bug #42033
+       strip-linguas -u */po
+
+       # Keep things sane
+       strip-flags
+       use cet && filter-flags -mindirect-branch -mindirect-branch=*
+       use elibc_musl && append-ldflags -Wl,-z,stack-size=2097152
+
+       local x
+       echo
+       for x in CATEGORY CBUILD CHOST CTARGET CFLAGS LDFLAGS ; do
+               einfo "$(printf '%10s' ${x}:) ${!x}"
+       done
+       echo
+
+       cd "${MY_BUILDDIR}" || die
+       local myconf=()
+
+       if use plugins ; then
+               myconf+=( --enable-plugins )
+       fi
+
+       if use nls ; then
+               myconf+=( --without-included-gettext )
+       else
+               myconf+=( --disable-nls )
+       fi
+
+       myconf+=( --with-system-zlib )
+
+       # For bi-arch systems, enable a 64bit bfd. This matches the bi-arch
+       # logic in toolchain.eclass. bug #446946
+       #
+       # We used to do it for everyone, but it's slow on 32bit arches. bug 
#438522
+       case $(tc-arch) in
+               ppc|sparc|x86) myconf+=( --enable-64-bit-bfd ) ;;
+       esac
+
+       use multitarget && myconf+=( --enable-targets=all --enable-64-bit-bfd )
+
+       [[ -n ${CBUILD} ]] && myconf+=( --build=${CBUILD} )
+
+       is_cross && myconf+=(
+               --with-sysroot="${EPREFIX}"/usr/${CTARGET}
+               --enable-poison-system-directories
+       )
+
+       myconf+=( --enable-secureplt )
+
+       # mips can't do hash-style=gnu ...
+       # let's not do this on Solaris either
+       if [[ $(tc-arch) != mips && ${CHOST} != *-solaris* ]] ; then
+               myconf+=( --enable-default-hash-style=gnu )
+       fi
+
+       myconf+=(
+               --prefix="${EPREFIX}"/usr
+               --host=${CHOST}
+               --target=${CTARGET}
+               --datadir="${EPREFIX}"${DATAPATH}
+               --datarootdir="${EPREFIX}"${DATAPATH}
+               --infodir="${EPREFIX}"${DATAPATH}/info
+               --mandir="${EPREFIX}"${DATAPATH}/man
+               --bindir="${EPREFIX}"${BINPATH}
+               --libdir="${EPREFIX}"${LIBPATH}
+               --libexecdir="${EPREFIX}"${LIBPATH}
+               --includedir="${EPREFIX}"${INCPATH}
+               # portage's econf() does not detect presence of --d-d-t
+               # because it greps only top-level ./configure. But not
+               # libiberty's or bfd's configure.
+               --disable-dependency-tracking
+               --disable-silent-rules
+               --enable-obsolete
+               --enable-shared
+               --enable-threads
+               --enable-relro
+               --enable-install-libiberty
+               --enable-textrel-check=$(usex hardened error warning)
+               # Things to think about
+               #--enable-deterministic-archives
+               --enable-new-dtags
+               --disable-jansson
+               --disable-werror
+               --with-bugurl="$(toolchain-binutils_bugurl)"
+               --with-pkgversion="$(toolchain-binutils_pkgversion)"
+               $(use_enable static-libs static)
+               $(use_with xxhash)
+               $(use_with zstd)
+
+               # Disable modules that are in a combined binutils/gdb tree, bug 
#490566
+               --disable-{gdb,gdbserver,libbacktrace,libdecnumber,readline,sim}
+               # Strip out broken static link flags: 
https://gcc.gnu.org/PR56750
+               --without-stage1-ldflags
+               # Change SONAME to avoid conflict across 
{native,cross}/binutils, binutils-libs. bug #666100
+               --with-extra-soversion-suffix=gentoo-${CATEGORY}-${PN}-$(usex 
multitarget mt st)
+
+               $(use_with debuginfod)
+
+               # Avoid automagic dev-libs/msgpack dep, bug #865875
+               --without-msgpack
+
+               # Allow user to opt into CET for host libraries.
+               # Ideally we would like automagic-or-disabled here.
+               # But the check does not quite work on i686: bug #760926.
+               $(use_enable cet)
+
+               # We can enable this by default in future, but it's brand new
+               # in 2.39 with several bugs:
+               # - Doesn't build on musl 
(https://sourceware.org/bugzilla/show_bug.cgi?id=29477)
+               # - No man pages 
(https://sourceware.org/bugzilla/show_bug.cgi?id=29521)
+               # - Broken at runtime without Java 
(https://sourceware.org/bugzilla/show_bug.cgi?id=29479)
+               # - binutils-config (and this ebuild?) needs adaptation first 
(https://bugs.gentoo.org/865113)
+               $(use_enable gprofng)
+
+               # Enables colored disassembly by default (equivalent to passing
+               # --disassembler-color=terminal to all objdump invocations).
+               --enable-colored-disassembly
+       )
+
+       case ${CTARGET} in
+               x86_64-*|aarch64*|arm64*|i[3456]*)
+                       # These hardening options are available from 2.39+ but
+                       # they unconditionally enable the behaviour even on 
arches
+                       # where e.g. execstacks can't be avoided.
+                       # See 
https://sourceware.org/bugzilla/show_bug.cgi?id=29592.
+                       #
+                       # TODO: Get the logic for this fixed upstream so it 
doesn't
+                       # create impossible broken combinations on some arches, 
like mips.
+                       #
+                       # TODO: Get the logic for this fixed upstream so 
--disable-* works
+                       # as expected.
+                       myconf+=(
+                               --enable-warn-execstack=yes
+                               --enable-warn-rwx-segments=yes
+                       )
+
+                       if use hardened ; then
+                               myconf+=(
+                                       # TODO: breaks glibc test suite
+                                       #--enable-error-execstack=yes
+                                       #--enable-error-rwx-segments=yes
+                                       --enable-default-execstack=no
+                               )
+                       fi
+                       ;;
+               *)
+                       ;;
+       esac
+
+       if use elibc_musl ; then
+               # Override our earlier setting for musl, as textrels don't
+               # work there at all. See bug #707660.
+               myconf+=(
+                       --enable-textrel-check=error
+               )
+       fi
+
+       if [[ ${CHOST} == *-solaris* ]]; then
+               # override earlier settings for Solaris, textrels and
+               # relocations in general cause relocation errors all over the
+               # place
+               myconf+=(
+                       --enable-textrel-check=error
+               )
+       fi
+
+       if use test || { use pgo && tc-is-lto ; } ; then
+               # -Wa,* needs to be consistent everywhere or lto-wrapper will 
complain
+               filter-flags '-Wa,*'
+       fi
+
+       if ! is_cross ; then
+               myconf+=( $(use_enable pgo pgo-build $(tc-is-lto && echo "lto" 
|| echo "yes")) )
+
+               if use pgo ; then
+                       # We let configure handle it for us because it has to 
run
+                       # the testsuite later on for profiling, and LTO isn't 
compatible
+                       # with the testsuite.
+                       filter-lto
+
+                       export BUILD_CFLAGS="${CFLAGS}"
+               fi
+       fi
+
+       ECONF_SOURCE="${S}" econf "${myconf[@]}"
+
+       # Prevent makeinfo from running if doc is unset.
+       if ! use doc ; then
+               sed -i \
+                       -e '/^MAKEINFO/s:=.*:= true:' \
+                       Makefile || die
+       fi
+}
+
+src_compile() {
+       cd "${MY_BUILDDIR}" || die
+
+       # see Note [tooldir hack for ldscripts]
+       # see linker prefix patch
+       emake \
+               tooldir="${EPREFIX}${TOOLPATH}" \
+               gentoo_prefix=$(usex prefix-guest "${EPREFIX}"/usr /usr) \
+               all
+
+       # only build info pages if the user wants them
+       if use doc ; then
+               emake info
+       fi
+
+       # we nuke the manpages when we're left with junk
+       # (like when we bootstrap, no perl -> no manpages)
+       find . -name '*.1' -a -size 0 -delete
+}
+
+src_test() {
+       cd "${MY_BUILDDIR}" || die
+
+       (
+               # Tests don't expect LTO
+               filter-lto
+
+               # If we have e.g. -mfpmath=sse -march=pentium4 in CFLAGS,
+               # we'll get lto1 warnings for some tests which cause
+               # spurious failures because -mfpmath isn't passed at
+               # link-time. Filter accordingly.
+               #
+               # Alternatively, we could pass C{C,XX}_FOR_TARGET with
+               # some (ideally not all, surely would break some tests)
+               # stuffed in.
+               filter-flags '-mfpmath=*'
+
+               # lto-wrapper warnings which confuse tests
+               filter-flags '-Wa,*'
+
+               # bug #637066
+               filter-flags -Wall -Wreturn-type
+
+               emake -k check \
+                       CFLAGS_FOR_TARGET="${CFLAGS_FOR_TARGET:-${CFLAGS}}" \
+                       
CXXFLAGS_FOR_TARGET="${CXXFLAGS_FOR_TARGET:-${CXXFLAGS}}" \
+                       LDFLAGS_FOR_TARGET="${LDFLAGS_FOR_TARGET:-${LDFLAGS}}" \
+                       CFLAGS="${CFLAGS}" \
+                       CXXFLAGS="${CXXFLAGS}" \
+                       LDFLAGS="${LDFLAGS}"
+       )
+}
+
+src_install() {
+       local x d
+
+       cd "${MY_BUILDDIR}" || die
+
+       # see Note [tooldir hack for ldscripts]
+       emake DESTDIR="${D}" tooldir="${EPREFIX}${LIBPATH}" install
+       rm -rf "${ED}"/${LIBPATH}/bin || die
+       use static-libs || find "${ED}" -name '*.la' -delete
+
+       # Newer versions of binutils get fancy with ${LIBPATH}, bug #171905
+       cd "${ED}"/${LIBPATH} || die
+       for d in ../* ; do
+               [[ ${d} == ../${PV} ]] && continue
+               mv ${d}/* . || die
+               rmdir ${d} || die
+       done
+
+       # Now we collect everything intp the proper SLOT-ed dirs
+       # When something is built to cross-compile, it installs into
+       # /usr/$CHOST/ by default ... we have to 'fix' that :)
+       if is_cross ; then
+               cd "${ED}"/${BINPATH} || die
+               for x in * ; do
+                       mv ${x} ${x/${CTARGET}-} || die
+               done
+
+               if [[ -d ${ED}/usr/${CHOST}/${CTARGET} ]] ; then
+                       mv "${ED}"/usr/${CHOST}/${CTARGET}/include 
"${ED}"/${INCPATH}
+                       mv "${ED}"/usr/${CHOST}/${CTARGET}/lib/* 
"${ED}"/${LIBPATH}/
+                       rm -r "${ED}"/usr/${CHOST}/{include,lib}
+               fi
+       fi
+
+       insinto ${INCPATH}
+       local libiberty_headers=(
+               # Not all the libiberty headers.  See 
libiberty/Makefile.in:install_to_libdir.
+               demangle.h
+               dyn-string.h
+               fibheap.h
+               hashtab.h
+               libiberty.h
+               objalloc.h
+               splay-tree.h
+       )
+       doins "${libiberty_headers[@]/#/${S}/include/}"
+       if [[ -d ${ED}/${LIBPATH}/lib ]] ; then
+               mv "${ED}"/${LIBPATH}/lib/* "${ED}"/${LIBPATH}/ || die
+               rm -r "${ED}"/${LIBPATH}/lib || die
+       fi
+
+       # Generate an env.d entry for this binutils
+       insinto /etc/env.d/binutils
+       cat <<-EOF > "${T}"/env.d
+               TARGET="${CTARGET}"
+               VER="${PV}"
+               LIBPATH="${EPREFIX}${LIBPATH}"
+       EOF
+       newins "${T}"/env.d ${CTARGET}-${PV}
+
+       # Handle documentation
+       if ! is_cross ; then
+               cd "${S}" || die
+               dodoc README
+
+               docinto bfd
+               dodoc bfd/ChangeLog* bfd/README bfd/PORTING bfd/TODO
+
+               docinto binutils
+               dodoc binutils/ChangeLog binutils/NEWS binutils/README
+
+               docinto gas
+               dodoc gas/ChangeLog* gas/CONTRIBUTORS gas/NEWS gas/README*
+
+               docinto gprof
+               dodoc gprof/ChangeLog* gprof/TEST gprof/TODO gprof/bbconv.pl
+
+               docinto ld
+               dodoc ld/ChangeLog* ld/README ld/NEWS ld/TODO
+
+               docinto libiberty
+               dodoc libiberty/ChangeLog* libiberty/README
+
+               docinto opcodes
+               dodoc opcodes/ChangeLog*
+       fi
+
+       # Remove shared info pages
+       rm -f "${ED}"/${DATAPATH}/info/{dir,configure.info,standards.info}
+
+       docompress "${DATAPATH}"/{info,man}
+
+       # Trim all empty dirs
+       find "${ED}" -depth -type d -exec rmdir {} + 2>/dev/null
+}
+
+pkg_postinst() {
+       # Make sure this ${CTARGET} has a binutils version selected
+       [[ -e ${EROOT}/etc/env.d/binutils/config-${CTARGET} ]] && return 0
+       binutils-config ${CTARGET}-${PV} || eerror binutils-config returned an 
error
+}
+
+pkg_postrm() {
+       local current_profile=$(binutils-config -c ${CTARGET})
+
+       # If no other versions exist, then uninstall for this
+       # target ... otherwise, switch to the newest version
+       # Note: only do this if this version is unmerged.  We
+       #       rerun binutils-config if this is a remerge, as
+       #       we want the mtimes on the symlinks updated (if
+       #       it is the same as the current selected profile)
+       if [[ ! -e ${EPREFIX}${BINPATH}/ld ]] && [[ ${current_profile} == 
${CTARGET}-${PV} ]] ; then
+               local choice=$(binutils-config -l | grep ${CTARGET} | awk 
'{print $2}')
+               choice=${choice//$'\n'/ }
+               choice=${choice/* }
+               if [[ -z ${choice} ]] ; then
+                       binutils-config -u ${CTARGET} || eerror binutils-config 
returned an error
+               else
+                       binutils-config ${choice} || eerror binutils-config 
returned an error
+               fi
+       elif [[ $(CHOST=${CTARGET} binutils-config -c) == ${CTARGET}-${PV} ]] ; 
then
+               binutils-config ${CTARGET}-${PV} || eerror binutils-config 
returned an error
+       fi
+}
+
+# Note [slotting support]
+# -----------------------
+# Gentoo's layout for binutils files is non-standard as Gentoo
+# supports slotted installation for binutils. Many tools
+# still expect binutils to reside in known locations.
+# binutils-config package restores symlinks into known locations,
+# like:
+#    /usr/bin/${CTARGET}-<tool>
+#    /usr/bin/${CHOST}/${CTARGET}/lib/ldscrips
+#    /usr/include/
+#
+# Note [tooldir hack for ldscripts]
+# ---------------------------------
+# Build system does not allow ./configure to tweak every location
+# we need for slotting binutils hence all the shuffling in
+# src_install(). This note is about SCRIPTDIR define handling.
+#
+# SCRIPTDIR defines 'ldscripts/' directory location. SCRIPTDIR value
+# is set at build-time in ld/Makefile.am as: 'scriptdir = $(tooldir)/lib'
+# and hardcoded as -DSCRIPTDIR='"$(scriptdir)"' at compile time.
+# Thus we can't just move files around after compilation finished.
+#
+# Our goal is the following:
+# - at build-time set scriptdir to point to symlinked location:
+#   ${TOOLPATH}: /usr/${CHOST} (or /usr/${CHOST}/${CTARGET} for cross-case)
+# - at install-time set scriptdir to point to slotted location:
+#   ${LIBPATH}: /usr/$(get_libdir)/binutils/${CTARGET}/${PV}

diff --git a/sys-devel/binutils/files/binutils-2.41-linker-prefix.patch 
b/sys-devel/binutils/files/binutils-2.41-linker-prefix.patch
new file mode 100644
index 0000000000..d97a155992
--- /dev/null
+++ b/sys-devel/binutils/files/binutils-2.41-linker-prefix.patch
@@ -0,0 +1,56 @@
+https://bugs.gentoo.org/892549
+https://github.com/gentoo/binutils-gdb/pull/5
+
+From 531bc1536dfc3070c1f7d03e98fa14bcb81fdcd0 Mon Sep 17 00:00:00 2001
+From: James Le Cuirot <[email protected]>
+Date: Sat, 23 Dec 2023 13:48:10 +0000
+Subject: [PATCH 2/2] ld: Allow a Gentoo-specific prefix to override the prefix
+ used by ld.bfd
+
+This prefix is only used to locate $prefix/etc/ld.so.conf, with $prefix
+usually being /usr. This file is important on Gentoo Prefix systems,
+where the /usr prefix is within another directory. The problem is that
+Gentoo already passes the same directory as the sysroot, and ld.bfd
+therefore looks for /myprefix/myprefix/usr/etc/ld.so.conf.
+
+The sysroot is dynamic, while the prefix is hardcoded. A hardcoded
+prefix that isn't just /usr is unhelpful, not just because of the
+doubled prefix issue above, but also because it prevents ld.bfd from
+working effectively outside its native environment. We will therefore
+hardcode it to just /usr.
+
+This change does not simply do that though and sets up a $gentoo_prefix
+variable instead, with $prefix as a fallback. This is necessary because
+Gentoo prefix-guest systems, which use the host's libc, do not apply a
+sysroot like RAP prefix systems do. In that case, we must preserve the
+existing behaviour. The binutils ebuild will be responsible for setting
+this variable appropriately.
+---
+ ld/emultempl/elf.em | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/ld/emultempl/elf.em b/ld/emultempl/elf.em
+index 3f67f8b09d9..78c8e909b6c 100644
+--- a/ld/emultempl/elf.em
++++ b/ld/emultempl/elf.em
+@@ -138,7 +138,7 @@ gld${EMULATION_NAME}_before_plugin_all_symbols_read (void)
+   ldelf_before_plugin_all_symbols_read ($IS_LIBPATH, $IS_NATIVE,
+                                       $IS_LINUX_TARGET,
+                                       $IS_FREEBSD_TARGET,
+-                                      $ELFSIZE, "$prefix");
++                                      $ELFSIZE, "${gentoo_prefix-${prefix}}");
+ }
+ 
+ /* This is called after all the input files have been opened.  */
+@@ -147,7 +147,7 @@ static void
+ gld${EMULATION_NAME}_after_open (void)
+ {
+   ldelf_after_open ($IS_LIBPATH, $IS_NATIVE,
+-                  $IS_LINUX_TARGET, $IS_FREEBSD_TARGET, $ELFSIZE, "$prefix");
++                  $IS_LINUX_TARGET, $IS_FREEBSD_TARGET, $ELFSIZE, 
"${gentoo_prefix-${prefix}}");
+ }
+ 
+ EOF
+-- 
+2.43.0
+

Reply via email to