Created attachment 892322 [details] build log dev-libs/libffi-3.4.6 fails to build when using both lto and slibtool, switching to regular libtool or disabling LTO makes the build finish fine. I *think* this started happening only after rebuilding gcc itself with slibtool. rlibtool: link: x86_64-pc-linux-gnu-gcc src/.libs/prep_cif.o src/.libs/types.o src/.libs/raw_api.o src/.libs/java_raw_api.o src/.libs/closures.o src/.libs/tramp.o src/x86/.libs/ffi.o src/x86/.libs/sysv.o -m32 -mfpmath=sse -Wall -march=alderlake -mabm -mno-cldemote -mno-kl -mno-pconfig -mno-sgx -mno-widekl -mshstk -O3 -pipe -flto=auto -falign-functions=32 -ggdb3 -Werror=odr -Werror=lto-type-mismatch -Wstrict-aliasing=2 -Werror=strict-aliasing -fexceptions -Wl,--version-script,libffi.map -Wl,-O1 -Wl,--as-needed -Wl,-z,pack-relative-relocs -Wl,--sort-common -Werror=odr -Werror=lto-type-mismatch -Werror=strict-aliasing -Wl,-O1 -Wl,--as-needed -Wl,-z,pack-relative-relocs -Wl,--sort-common -Werror=odr -Werror=lto-type-mismatch -Werror=strict-aliasing -shared -fPIC -Wl,--no-undefined -Wl,-soname -Wl,libffi.so.8 -o .libs/libffi.so.8.1.4 /usr/lib/gcc/x86_64-pc-linux-gnu/14/../../../../x86_64-pc-linux-gnu/bin/ld: src/x86/.libs/sysv.o: warning: relocation against `ffi_closure_inner' in read-only section `.text' /usr/lib/gcc/x86_64-pc-linux-gnu/14/../../../../x86_64-pc-linux-gnu/bin/ld: src/x86/.libs/sysv.o: in function `ffi_closure_i386': /mnt/portage/portage/dev-libs/libffi-3.4.6/work/libffi-3.4.6/src/x86/sysv.S:358:(.text+0x14b): undefined reference to `ffi_closure_inner' /usr/lib/gcc/x86_64-pc-linux-gnu/14/../../../../x86_64-pc-linux-gnu/bin/ld: src/x86/.libs/sysv.o: in function `ffi_closure_STDCALL': /mnt/portage/portage/dev-libs/libffi-3.4.6/work/libffi-3.4.6/src/x86/sysv.S:495:(.text+0x26b): undefined reference to `ffi_closure_inner' /usr/lib/gcc/x86_64-pc-linux-gnu/14/../../../../x86_64-pc-linux-gnu/bin/ld: warning: creating DT_TEXTREL in a shared object collect2: fatal error: ld returned 1 exit status compilation terminated. rlibtool: error logged in slbt_exec_link_create_library(), line 367: flow error: unexpected condition or other. rlibtool: < returned to > slbt_exec_link(), line 407. make[2]: *** [Makefile:1114: libffi.la] Error 2 make[2]: Leaving directory '/mnt/portage/portage/dev-libs/libffi-3.4.6/work/libffi-3.4.6-abi_x86_32.x86' make[1]: *** [Makefile:1414: all-recursive] Error 1 make[1]: Leaving directory '/mnt/portage/portage/dev-libs/libffi-3.4.6/work/libffi-3.4.6-abi_x86_32.x86' make: *** [Makefile:627: all] Error 2
Portage 3.0.64-4+g7c9bb2cae-dirty (python 3.12.3-final-0, default/linux/amd64/23.0/desktop/plasma/systemd, gcc-14, glibc-2.39-r5, 6.8.9-gentoo x86_64) ================================================================= System uname: Linux-6.8.9-gentoo-x86_64-13th_Gen_Intel-R-_Core-TM-_i5-13600KF-with-glibc2.39 KiB Mem: 16240584 total, 270004 free KiB Swap: 24628216 total, 20779556 free Timestamp of repository gentoo: Sun, 05 May 2024 13:04:30 +0000 Head commit of repository gentoo: 7475ff2746e55dfda6c22df36dca90dd39c5320f Timestamp of repository guru: Sat, 04 May 2024 01:33:30 +0000 Head commit of repository guru: 6830a69913b15de8d18bec0a309719d57829fc2f Timestamp of repository kde: Fri, 03 May 2024 19:33:26 +0000 Head commit of repository kde: 83c26545d674a784bd547a5fc484f441e8735963 Timestamp of repository steam-overlay: Fri, 03 May 2024 11:48:51 +0000 Head commit of repository steam-overlay: 8bff481ed8bebdddc75673100c4f926d43465a52 sh bash 5.2_p26-r3 ld GNU ld (Gentoo 2.42 p3) 2.42.0 app-misc/pax-utils: 1.3.7::gentoo app-shells/bash: 5.2_p26-r3::gentoo dev-build/autoconf: 2.13-r8::gentoo, 2.71-r7::gentoo, 2.72-r1::gentoo dev-build/automake: 1.16.5-r2::gentoo dev-build/cmake: 3.29.2::gentoo dev-build/libtool: 2.4.7-r4::gentoo dev-build/make: 4.4.1-r1::gentoo dev-build/meson: 1.4.0-r1::gentoo dev-lang/perl: 5.38.2-r2::gentoo dev-lang/python: 3.12.3::gentoo dev-lang/rust: 1.77.1::local sys-apps/baselayout: 2.15::gentoo sys-apps/sandbox: 2.38::gentoo sys-apps/systemd: 255.5-r1::gentoo sys-devel/binutils: 2.42-r1::gentoo sys-devel/binutils-config: 5.5::gentoo sys-devel/clang: 17.0.6::gentoo, 19.0.0.9999::gentoo sys-devel/gcc: 13.2.1_p20240210::gentoo, 14.0.1_pre20240503::gentoo sys-devel/gcc-config: 2.11::gentoo sys-devel/lld: 19.0.0.9999::gentoo sys-devel/llvm: 17.0.6::gentoo, 19.0.0.9999::gentoo sys-kernel/linux-headers: 6.8-r1::gentoo (virtual/os-headers) sys-libs/glibc: 2.39-r5::local Repositories: gentoo location: /var/db/repos/gentoo sync-type: git sync-uri: https://github.com/gentoo-mirror/gentoo.git priority: -1000 eclass-overrides: local volatile: False guru location: /var/db/repos/guru sync-type: git sync-uri: https://github.com/gentoo-mirror/guru.git masters: gentoo eclass-overrides: local volatile: False kde location: /var/db/repos/kde sync-type: git sync-uri: https://github.com/gentoo-mirror/kde.git masters: gentoo eclass-overrides: local volatile: False local location: /var/db/repos/local masters: gentoo eclass-overrides: local volatile: False steam-overlay location: /var/db/repos/steam-overlay sync-type: git sync-uri: https://github.com/gentoo-mirror/steam-overlay.git masters: gentoo eclass-overrides: local volatile: False Binary Repositories: gentoobinhost priority: 1 sync-uri: https://distfiles.gentoo.org/releases/amd64/binpackages/23.0/x86-64 ACCEPT_KEYWORDS="amd64 ~amd64" ACCEPT_LICENSE="*" CBUILD="x86_64-pc-linux-gnu" CFLAGS="-march=alderlake -mabm -mno-cldemote -mno-kl -mno-pconfig -mno-sgx -mno-widekl -mshstk -O3 -pipe -flto=auto -falign-functions=32 -ggdb3 -Werror=odr -Werror=lto-type-mismatch -Wstrict-aliasing=2 -Werror=strict-aliasing" CHOST="x86_64-pc-linux-gnu" CONFIG_PROTECT="/etc /usr/share/config /usr/share/gnupg/qualified.txt" CONFIG_PROTECT_MASK="/etc/ca-certificates.conf /etc/dconf /etc/env.d /etc/fonts/fonts.conf /etc/gconf /etc/gentoo-release /etc/revdep-rebuild /etc/sandbox.d" CXXFLAGS="-march=alderlake -mabm -mno-cldemote -mno-kl -mno-pconfig -mno-sgx -mno-widekl -mshstk -O3 -pipe -flto=auto -falign-functions=32 -ggdb3 -Werror=odr -Werror=lto-type-mismatch -Wstrict-aliasing=2 -Werror=strict-aliasing" DISTDIR="/var/cache/distfiles" ENV_UNSET="CARGO_HOME DBUS_SESSION_BUS_ADDRESS DISPLAY GDK_PIXBUF_MODULE_FILE GOBIN GOPATH PERL5LIB PERL5OPT PERLPREFIX PERL_CORE PERL_MB_OPT PERL_MM_OPT XAUTHORITY XDG_CACHE_HOME XDG_CONFIG_HOME XDG_DATA_HOME XDG_RUNTIME_DIR XDG_STATE_HOME" FCFLAGS="-march=alderlake -mabm -mno-cldemote -mno-kl -mno-pconfig -mno-sgx -mno-widekl -mshstk -O3 -pipe -flto=auto -falign-functions=32 -ggdb3 -Werror=odr -Werror=lto-type-mismatch -Wstrict-aliasing=2 -Werror=strict-aliasing" FEATURES="assume-digests binpkg-docompress binpkg-dostrip binpkg-logs binpkg-multi-instance buildpkg-live compressdebug config-protect-if-modified dedupdebug distlocks ebuild-locks fixlafiles installsources ipc-sandbox merge-sync merge-wait multilib-strict network-sandbox news parallel-fetch pid-sandbox pkgdir-index-trusted preserve-libs protect-owned qa-unresolved-soname-deps sandbox sfperms splitdebug strict unknown-features-warn unmerge-logs unmerge-orphans userfetch userpriv usersandbox usersync xattr" FFLAGS="-march=alderlake -mabm -mno-cldemote -mno-kl -mno-pconfig -mno-sgx -mno-widekl -mshstk -O3 -pipe -flto=auto -falign-functions=32 -ggdb3 -Werror=odr -Werror=lto-type-mismatch -Wstrict-aliasing=2 -Werror=strict-aliasing" GENTOO_MIRRORS=" https://mirror.telepoint.bg/gentoo http://tux.rainside.sk/gentoo/ http://gentoo.mirror.root.lu/ ftp://tux.rainside.sk/gentoo/ http://ftp.vectranet.pl/gentoo/ " LANG="en_GB.UTF-8" LDFLAGS="-Wl,-O1 -Wl,--as-needed -Wl,-z,pack-relative-relocs -Wl,--sort-common -Werror=odr -Werror=lto-type-mismatch -Werror=strict-aliasing" LEX="flex" LIBTOOL="rlibtool" MAKE="make LIBTOOL=rlibtool" MAKEFLAGS="LIBTOOL=rlibtool" MAKEOPTS="-j20" PKGDIR="/var/cache/binpkgs" PORTAGE_COMPRESS="zstd" PORTAGE_CONFIGROOT="/" PORTAGE_RSYNC_OPTS="--recursive --links --safe-links --perms --times --omit-dir-times --compress --force --whole-file --delete --stats --human-readable --timeout=180 --exclude=/distfiles --exclude=/local --exclude=/packages --exclude=/.git" PORTAGE_TMPDIR="/mnt/portage" RUSTFLAGS="-C target-cpu=native -C opt-level=3 -Cdebuginfo=2 -Ccodegen-units=1 -Cstrip=none" SHELL="/bin/bash" USE="X aac acl acpi activities amd64 branding btrfs bzip2 cairo cdr crypt cups dbus declarative dri dvdr encode exif flac gdbm gif gtk gui iconv icu jpeg kde kf6compat kwallet lcms libnotify libtirpc mad mng mp3 mp4 mpeg multilib networkmanager nls ogg opengl pam pango pcre pdf pipewire plasma png policykit ppds pulseaudio qml qt5 readline screencast sdl seccomp sound ssl startup-notification svg systemd test-rust tiff truetype udev udisks unicode upower usb vaapi vulkan wayland widgets wxwidgets x264 xattr xcb xft xml xv zlib zstd" ABI_X86="64" ADA_TARGET="gcc_12" APACHE2_MODULES="authn_core authz_core socache_shmcb unixd actions alias auth_basic authn_anon authn_dbm authn_file authz_dbm authz_groupfile authz_host authz_owner authz_user autoindex cache cgi cgid dav dav_fs dav_lock deflate dir env expires ext_filter file_cache filter headers include info log_config logio mime mime_magic negotiation rewrite setenvif speling status unique_id userdir usertrack vhost_alias" CALLIGRA_FEATURES="karbon sheets words" COLLECTD_PLUGINS="df interface irq load memory rrdtool swap syslog" CPU_FLAGS_X86="mmx mmxext sse sse2 aes avx avx2 f16c fma3 pclmul popcnt rdrand sha sse3 sse4_1 sse4_2 ssse3 vpclmulqdq" ELIBC="glibc" GPSD_PROTOCOLS="ashtech aivdm earthmate evermore fv18 garmin garmintxt gpsclock greis isync itrax mtk3301 ntrip navcom oceanserver oncore rtcm104v2 rtcm104v3 sirf skytraq superstar2 tsip tripmate tnt ublox" INPUT_DEVICES="libinput" KERNEL="linux" LCD_DEVICES="bayrad cfontz glk hd44780 lb216 lcdm001 mtxorb text" LUA_SINGLE_TARGET="lua5-1" LUA_TARGETS="luajit" OFFICE_IMPLEMENTATION="libreoffice" PHP_TARGETS="php8-1" POSTGRES_TARGETS="postgres15" PYTHON_SINGLE_TARGET="python3_12" PYTHON_TARGETS="python3_12" RUBY_TARGETS="ruby31" XTABLES_ADDONS="quota2 psd pknock lscan length2 ipv4options ipp2p iface geoip fuzzy condition tarpit sysrq proto logmark ipmark dhcpmac delude chaos account" Unset: ADDR2LINE, AR, ARFLAGS, AS, ASFLAGS, CC, CCLD, CONFIG_SHELL, CPP, CPPFLAGS, CTARGET, CXX, CXXFILT, ELFEDIT, EMERGE_DEFAULT_OPTS, EXTRA_ECONF, F77FLAGS, FC, GCOV, GPROF, INSTALL_MASK, LC_ALL, LD, LFLAGS, LINGUAS, NM, OBJCOPY, OBJDUMP, PORTAGE_BINHOST, PORTAGE_BUNZIP2_COMMAND, PORTAGE_COMPRESS_FLAGS, PORTAGE_RSYNC_EXTRA_OPTS, PYTHONPATH, RANLIB, READELF, SIZE, STRINGS, STRIP, YACC, YFLAGS
Reproduced, by compiling GCC with slibtool, then compiling libffi with GNU libtool. It has nothing to do with building libffi with slibtool at all. With GNU libtool, the testsuite fails hard instead: === libffi Summary === # of expected passes 2 # of unexpected failures 1108 # of unresolved testcases 1108 make[2]: *** [Makefile:419: check-DEJAGNU] Error 1 make[2]: Leaving directory '/var/tmp/portage/dev-libs/libffi-3.4.6/work/libffi-3.4.6-abi_x86_64.amd64/testsuite' make[1]: *** [Makefile:495: check-am] Error 2 make[1]: Leaving directory '/var/tmp/portage/dev-libs/libffi-3.4.6/work/libffi-3.4.6-abi_x86_64.amd64/testsuite' make: *** [Makefile:1414: check-recursive] Error 1 * ERROR: dev-libs/libffi-3.4.6::gentoo failed (test phase): This happens because slibtool, like meson, likes to pass -Wl,--no-undefined (GNU libtool does not do this and has never claimed to, slibtool reinvents history to say that GNU libtool *does* do it, but then *also* says that GNU libtool silently ignores it, which is slightly funny...) And, indeed, when GCC is compiled with slibtool it is missing its LTO plugin and consequently libffi is miscompiled regardless of libtool implementation.
The bug has been closed via the following commit(s): https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=58128e2701881192e5d551d6b1d27bac3f6cde58 commit 58128e2701881192e5d551d6b1d27bac3f6cde58 Author: Eli Schwartz <eschwartz@gentoo.org> AuthorDate: 2024-09-25 17:51:52 +0000 Commit: Eli Schwartz <eschwartz@gentoo.org> CommitDate: 2024-09-25 18:22:23 +0000 toolchain.eclass: ban the use of rlibtool dev-build/slibtool provides an alternative implementation of libtool which is intended to hook itself into and replace the ltmain.sh-based ./libtool shell scripts installed into an autotools build system. It has some interesting quirks. In particular, it takes the idea of "packagers don't want to install libtool archives for random libraries because nobody uses them and pkg-config is better" and runs with it. It runs quite far with it, as it doesn't install them at all without a new flag passed to slibtool. This is redundant with our existing approach of deleting them in src_install when we know they are useless, and is downright broken in cases such as GCC, where the libtool archives are load-bearing and the resultant compiler is, in their absence, nonfunctional. slibtool supports a variety of wrappers to enable reasonable functionality which it by default disabled. The official recommendation is you are supposed to use "rlibtool" to replace ./libtool as it performs heuristics based on the generated config. But we actually need "rclibtool", which both respects the generated config and also generates the *.la archives and leaves it up to ebuilds to decide whether they should be removed. Raise a fatal error if the user has misconfigured slibtool. This prevents the user from building a broken and malformed GCC. Closes: https://bugs.gentoo.org/932245 Closes: https://bugs.gentoo.org/924150 Closes: https://bugs.gentoo.org/931268 Closes: https://bugs.gentoo.org/931279 Signed-off-by: Eli Schwartz <eschwartz@gentoo.org> Reviewed-by: Sam James <sam@gentoo.org> eclass/toolchain.eclass | 3 +++ 1 file changed, 3 insertions(+)