commit:     b0b373d3f28f3d4742dc3c1216a8be8e3f3fa71a
Author:     Sam James <sam <AT> gentoo <DOT> org>
AuthorDate: Tue Feb  3 23:38:02 2026 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Tue Feb  3 23:39:20 2026 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=b0b373d3

sys-devel/mold: pull in upstream PR for AS_NEEDED group compat

This is needed for GCC 16. Was trying to wait but it's been a while
w/ no upstream reply and it breaks dot-a.eclass tests.

Closes: https://bugs.gentoo.org/968893
Signed-off-by: Sam James <sam <AT> gentoo.org>

 .../mold/files/mold-2.40.4-as-needed-group.patch   |  67 ++++++++++++
 sys-devel/mold/mold-2.40.4-r1.ebuild               | 121 +++++++++++++++++++++
 2 files changed, 188 insertions(+)

diff --git a/sys-devel/mold/files/mold-2.40.4-as-needed-group.patch 
b/sys-devel/mold/files/mold-2.40.4-as-needed-group.patch
new file mode 100644
index 000000000000..33bab61dbf17
--- /dev/null
+++ b/sys-devel/mold/files/mold-2.40.4-as-needed-group.patch
@@ -0,0 +1,67 @@
+From df7b1433b9dab52f207975a90bcef068e3999047 Mon Sep 17 00:00:00 2001
+From: Jonathan Wakely <[email protected]>
+Date: Wed, 21 Jan 2026 11:39:57 +0000
+Subject: [PATCH] Fix getting output type from linker scripts that use
+ AS_NEEDED
+
+Make Script<E>::get_script_output_type support AS_NEEDED inside an INPUT
+or GROUP group, so that the libatomic_asneeded.so linker script used by
+GCC 16 works.
+
+Fixes #1545
+
+Signed-off-by: Jonathan Wakely <[email protected]>
+---
+ src/linker-script.cc                  |  5 ++++-
+ test/linker-script-group-as-needed.sh | 24 ++++++++++++++++++++++++
+ 2 files changed, 28 insertions(+), 1 deletion(-)
+ create mode 100755 test/linker-script-group-as-needed.sh
+
+diff --git a/src/linker-script.cc b/src/linker-script.cc
+index 51144b3029..b40191887b 100644
+--- a/src/linker-script.cc
++++ b/src/linker-script.cc
+@@ -249,9 +249,12 @@ std::string_view Script<E>::get_script_output_type() {
+   }
+ 
+   if (tok.size() >= 3 && (tok[0] == "INPUT" || tok[0] == "GROUP") &&
+-      tok[1] == "(")
++      tok[1] == "(") {
++    if (tok[2] == "AS_NEEDED" && tok[3] == "(")
++      tok = tok.subspan(2);
+     if (MappedFile *mf = resolve_path(tok[2], false))
+       return get_machine_type(ctx, rctx, mf);
++  }
+   return "";
+ }
+ 
+diff --git a/test/linker-script-group-as-needed.sh 
b/test/linker-script-group-as-needed.sh
+new file mode 100755
+index 0000000000..61dcba76be
+--- /dev/null
++++ b/test/linker-script-group-as-needed.sh
+@@ -0,0 +1,24 @@
++#!/bin/bash
++. $(dirname $0)/common.inc
++
++cat <<EOF | $CC -o $t/a.o -c -xc -
++#include <stdio.h>
++int main() {
++  printf("Hello world\n");
++}
++EOF
++
++cat <<EOF | $CC -B. -shared -o $t/libB.so -c -xc -
++void not_needed() { }
++EOF
++$AR
++
++cat <<EOF > $t/libscript.a
++GROUP(AS_NEEDED("$t/libB.so"))
++EOF
++
++$CC -B. -o $t/exe -L$t -lscript $t/a.o
++$QEMU $t/exe | grep 'Hello world'
++
++$CC -B. -o $t/exe -L$t -l:libscript.a $t/a.o
++$QEMU $t/exe | grep 'Hello world'

diff --git a/sys-devel/mold/mold-2.40.4-r1.ebuild 
b/sys-devel/mold/mold-2.40.4-r1.ebuild
new file mode 100644
index 000000000000..449dda0dfaf2
--- /dev/null
+++ b/sys-devel/mold/mold-2.40.4-r1.ebuild
@@ -0,0 +1,121 @@
+# Copyright 2021-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit cmake flag-o-matic toolchain-funcs
+
+DESCRIPTION="A Modern Linker"
+HOMEPAGE="https://github.com/rui314/mold";
+if [[ ${PV} == 9999 ]] ; then
+       EGIT_REPO_URI="https://github.com/rui314/mold.git";
+       inherit git-r3
+else
+       SRC_URI="https://github.com/rui314/mold/archive/refs/tags/v${PV}.tar.gz 
-> ${P}.tar.gz"
+       # -alpha: 
https://github.com/rui314/mold/commit/3711ddb95e23c12991f6b8c7bfeba4f1421d19d4
+       KEYWORDS="-alpha ~amd64 ~arm ~arm64 ~loong ~ppc ~riscv ~sparc ~x86"
+fi
+
+# mold (MIT)
+#  - xxhash (BSD-2)
+#  - siphash ( MIT CC0-1.0 )
+LICENSE="MIT BSD-2 CC0-1.0"
+SLOT="0"
+IUSE="debug test"
+RESTRICT="!test? ( test )"
+
+RDEPEND="
+       app-arch/zstd:=
+       >=dev-cpp/tbb-2021.7.0-r1:=
+       dev-libs/blake3:=
+       virtual/zlib:=
+       !kernel_Darwin? (
+               >=dev-libs/mimalloc-2:=
+       )
+"
+DEPEND="${RDEPEND}"
+
+PATCHES=(
+       "${FILESDIR}"/${PN}-2.40.4-as-needed-group.patch
+)
+
+pkg_pretend() {
+       # Requires a c++20 compiler, see #831473
+       if [[ ${MERGE_TYPE} != binary ]]; then
+               if tc-is-gcc && [[ $(gcc-major-version) -lt 10 ]]; then
+                       die "${PN} needs at least gcc 10"
+               elif tc-is-clang && [[ $(clang-major-version) -lt 12 ]]; then
+                       die "${PN} needs at least clang 12"
+               fi
+       fi
+}
+
+src_prepare() {
+       cmake_src_prepare
+
+       # Needs unpackaged dwarfdump
+       rm test/{{dead,compress}-debug-sections,compressed-debug-info}.sh || die
+
+       # Heavy tests, need qemu
+       rm test/gdb-index-{compress-output,dwarf{2,3,4,5}}.sh || die
+       rm test/lto-{archive,dso,gcc,llvm,version-script}.sh || die
+
+       # Sandbox sadness
+       rm test/run.sh || die
+       sed -i 's|`pwd`/mold-wrapper.so|"& ${LD_PRELOAD}"|' \
+               test/mold-wrapper{,2}.sh || die
+
+       # Fails if binutils errors out on textrels by default
+       rm test/textrel.sh test/textrel2.sh || die
+
+       # Fails with (sometimes, maybe dependent on sys-devel/clang default
+       # linker):
+       # "/usr/bin/x86_64-pc-linux-gnu-ld.bfd: unrecognised emulation mode: 
llvm"
+       rm test/lto-llvm2.sh || die
+
+       # static-pie tests require glibc built with static-pie support
+       if ! has_version -d 'sys-libs/glibc[static-pie(+)]'; then
+               rm test/{,ifunc-}static-pie.sh || die
+       fi
+}
+
+src_configure() {
+       use debug || append-cppflags "-DNDEBUG"
+
+       local mycmakeargs=(
+               -DBUILD_TESTING=$(usex test)
+               -DMOLD_LTO=OFF # Should be up to the user to decide this with 
CXXFLAGS.
+               -DMOLD_USE_MIMALLOC=$(usex !kernel_Darwin)
+               -DMOLD_USE_SYSTEM_MIMALLOC=ON
+               -DMOLD_USE_SYSTEM_TBB=ON
+       )
+
+       if use test ; then
+               mycmakeargs+=(
+                       -DMOLD_ENABLE_QEMU_TESTS=OFF
+               )
+       fi
+
+       cmake_src_configure
+}
+
+src_test() {
+       export TEST_CC="$(tc-getCC)" TEST_GCC="$(tc-getCC)" \
+               TEST_CXX="$(tc-getCXX)" TEST_GXX="$(tc-getCXX)"
+       cmake_src_test
+}
+
+src_install() {
+       dobin "${BUILD_DIR}"/${PN}
+
+       # https://bugs.gentoo.org/872773
+       insinto /usr/$(get_libdir)/mold
+       doins "${BUILD_DIR}"/${PN}-wrapper.so
+
+       dodoc docs/{design,execstack}.md
+       doman docs/${PN}.1
+
+       dosym ${PN} /usr/bin/ld.${PN}
+       dosym ${PN} /usr/bin/ld64.${PN}
+       dosym -r /usr/bin/${PN} /usr/libexec/${PN}/ld
+}

Reply via email to