Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
Bug 931268 - dev-libs/libffi-3.4.6 fails to compile with slibtool and LTO: src/x86/.libs/sysv.o: warning: relocation against `ffi_closure_inner' in read-only section `.text
Summary: dev-libs/libffi-3.4.6 fails to compile with slibtool and LTO: src/x86/.libs/s...
Status: RESOLVED FIXED
Alias: None
Product: Gentoo Linux
Classification: Unclassified
Component: Current packages (show other bugs)
Hardware: All Linux
: Normal normal
Assignee: Gentoo Toolchain Maintainers
URL:
Whiteboard:
Keywords:
Depends on:
Blocks: lto slibtool
  Show dependency tree
 
Reported: 2024-05-05 21:59 UTC by Kostadin Shishmanov
Modified: 2024-09-25 19:29 UTC (History)
1 user (show)

See Also:
Package list:
Runtime testing required: ---


Attachments
build log (build.log,37.78 KB, text/x-log)
2024-05-05 21:59 UTC, Kostadin Shishmanov
Details

Note You need to log in before you can comment on or make changes to this bug.
Description Kostadin Shishmanov 2024-05-05 21:59:45 UTC
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
Comment 1 Kostadin Shishmanov 2024-05-05 22:00:11 UTC
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
Comment 2 Eli Schwartz gentoo-dev 2024-09-18 01:33:19 UTC
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.
Comment 3 Larry the Git Cow gentoo-dev 2024-09-25 19:29:13 UTC
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(+)