Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!

Bug 437460

Summary: dev-libs/libaio-0.3.109-r3 USE=multilib - /usr/lib*/libaio.so: different ABIs have the same "OUTPUT_FORMAT"
Product: Gentoo Linux Reporter: iGentoo <AlphatPC>
Component: [OLD] UnspecifiedAssignee: No maintainer - Look at https://wiki.gentoo.org/wiki/Project:Proxy_Maintainers if you want to take care of it <maintainer-needed>
Status: RESOLVED FIXED    
Severity: normal CC: binki, vincent
Priority: Normal Keywords: STABLE
Version: unspecified   
Hardware: All   
OS: Linux   
See Also: https://bugs.gentoo.org/show_bug.cgi?id=453938
Whiteboard:
Package list:
Runtime testing required: ---
Bug Depends on: 460704    
Bug Blocks:    
Attachments: gen_usr_ldscript.diff

Description iGentoo 2012-10-07 00:29:25 UTC
cat /usr/lib*/libaio.so:

/usr/lib32/libaio.so:
/* GNU ld script
   Since Gentoo has critical dynamic libraries in /lib, and the static versions
   in /usr/lib, we need to have a "fake" dynamic lib in /usr/lib, otherwise we
   run into linking problems.  This "fake" dynamic lib is a linker script that
   redirects the linker to the real lib.  And yes, this works in the cross-
   compiling scenario as the sysroot-ed linker will prepend the real path.

   See bug http://bugs.gentoo.org/4411 for more info.
 */
OUTPUT_FORMAT ( elf64-x86-64 )
GROUP ( /lib32/libaio.so.1 )

/usr/lib64/libaio.so:
/* GNU ld script
   Since Gentoo has critical dynamic libraries in /lib, and the static versions
   in /usr/lib, we need to have a "fake" dynamic lib in /usr/lib, otherwise we
   run into linking problems.  This "fake" dynamic lib is a linker script that
   redirects the linker to the real lib.  And yes, this works in the cross-
   compiling scenario as the sysroot-ed linker will prepend the real path.

   See bug http://bugs.gentoo.org/4411 for more info.
 */
OUTPUT_FORMAT ( elf64-x86-64 )
GROUP ( /lib64/libaio.so.1 )

/usr/libx32/libaio.so:
/* GNU ld script
   Since Gentoo has critical dynamic libraries in /lib, and the static versions
   in /usr/lib, we need to have a "fake" dynamic lib in /usr/lib, otherwise we
   run into linking problems.  This "fake" dynamic lib is a linker script that
   redirects the linker to the real lib.  And yes, this works in the cross-
   compiling scenario as the sysroot-ed linker will prepend the real path.

   See bug http://bugs.gentoo.org/4411 for more info.
 */
OUTPUT_FORMAT ( elf64-x86-64 )
GROUP ( /libx32/libaio.so.1 )

Portage 2.2.0_alpha135 (hardened/linux/amd64/selinux, gcc-4.7.2, glibc-2.16.0, 3.6.0-custom x86_64)
=================================================================
                        System Settings
=================================================================
System uname: Linux-3.6.0-custom-x86_64-Intel-R-_Core-TM-2_Quad_CPU_Q9300_@_2.50GHz-with-gentoo-2.2
Timestamp of tree: Sat, 06 Oct 2012 12:00:01 +0000
ccache version 3.1.8 [disabled]
app-shells/bash:          4.2_p37
dev-java/java-config:     2.1.12
dev-lang/python:          2.7.3-r2, 3.2.3-r1
dev-util/ccache:          3.1.8
dev-util/cmake:           2.8.9-r1
dev-util/pkgconfig:       0.27.1
sys-apps/baselayout:      2.2
sys-apps/openrc:          0.10.5
sys-apps/sandbox:         2.6
sys-devel/autoconf:       2.13, 2.69
sys-devel/automake:       1.11.6, 1.12.4
sys-devel/binutils:       2.22.90
sys-devel/gcc:            4.6.3, 4.7.2
sys-devel/gcc-config:     1.7.3
sys-devel/libtool:        2.4.2
sys-devel/make:           3.82-r4
sys-kernel/linux-headers: 3.6 (virtual/os-headers)
sys-libs/glibc:           2.16.0
Repositories: gentoo systemd hardened-dev custom
Installed sets: @local-boot, @local-protected, @local-selibs
ACCEPT_KEYWORDS="amd64 ~amd64"
ACCEPT_LICENSE="* -@EULA"
CBUILD="x86_64-pc-linux-gnu"
CFLAGS="-Wall -Wextra -march=native -pipe -O3 -fno-tree-vectorize"
CHOST="x86_64-pc-linux-gnu"
CONFIG_PROTECT="/etc /usr/share/config /usr/share/gnupg/qualified.txt /var/bind"
CONFIG_PROTECT_MASK="${EPREFIX}/etc/gconf /etc/ca-certificates.conf /etc/dconf /etc/env.d /etc/fonts/fonts.conf /etc/gconf /etc/gentoo-release /etc/revdep-rebuild /etc/sandbox.d /etc/splash /etc/terminfo"
CXXFLAGS="-Wall -Wextra -march=native -pipe -O3 -fno-tree-vectorize"
DISTDIR="/usr/local/portage/distfiles"
EMERGE_DEFAULT_OPTS="--quiet-build=n"
FCFLAGS="-O2 -pipe"
FEATURES="assume-digests binpkg-logs buildpkg collision-protect config-protect-if-modified distlocks ebuild-locks fixlafiles multilib-strict news parallel-fetch preserve-libs protect-owned sandbox selinux sesandbox sfperms split-elog split-log strict unknown-features-warn unmerge-logs unmerge-orphans userfetch userpriv usersandbox usersync webrsync-gpg xattr"
FFLAGS="-O2 -pipe"
GENTOO_MIRRORS="http://mirrors.163.com/gentoo http://distfiles.gentoo.org"
LANG="en_US.UTF-8"
LDFLAGS="-Wl,-O1 -Wl,--as-needed -Wl,--hash-style=gnu -Wl,--sort-common -Wl,--sort-section=alignment"
LINGUAS="en en_US zh zh_CN"
MAKEOPTS="V=1 -j10"
PKGDIR="/usr/local/portage/packages"
PORTAGE_COMPRESS="xz"
PORTAGE_COMPRESS_FLAGS="-9ef"
PORTAGE_CONFIGROOT="/"
PORTAGE_RSYNC_EXTRA_OPTS="--ipv4"
PORTAGE_RSYNC_OPTS="--recursive --links --safe-links --perms --times --compress --force --whole-file --delete --stats --human-readable --timeout=180 --exclude=/distfiles --exclude=/local --exclude=/packages"
PORTAGE_TMPDIR="/var/tmp"
PORTDIR="/usr/portage"
PORTDIR_OVERLAY="/var/lib/layman/systemd /var/lib/layman/hardened-development /usr/local/portage"
SYNC="rsync://rsync.gentoo.org/gentoo-portage"
USE="X acl alsa amd64 audit bash-completion berkdb bzip2 c++0x cairo caps cli cracklib crypt custom-cflags cxx dbus dri ffmpeg gdbm gmp gnome gpm gtk gtk3 hardened iconv icu ipv6 jit jpeg jpeg2k justify lzma mmx modules mudflap multilib ncurses nls nptl open_perms opengl openmp orc pam pcre png pppd pulseaudio qt4 readline selinux session sse sse2 ssl svg systemd tcpd threads tiff udev unicode urandom vim-syntax xattr xinetd zlib" ALSA_CARDS="hda-intel" ALSA_PCM_PLUGINS="adpcm alaw asym copy dmix dshare dsnoop empty extplug file hooks iec958 ioplug ladspa lfloat linear meter mmap_emul mulaw multi null plug rate route share shm softvol" APACHE2_MODULES="actions alias auth_basic authn_alias authn_anon authn_dbm authn_default authn_file authz_dbm authz_default authz_groupfile authz_host authz_owner authz_user autoindex cache cgi cgid dav dav_fs dav_lock deflate dir disk_cache env expires ext_filter file_cache filter headers include info log_config logio mem_cache mime mime_magic negotiation rewrite setenvif speling status unique_id userdir usertrack vhost_alias" CALLIGRA_FEATURES="kexi words flow plan sheets stage tables krita karbon braindump" CAMERAS="ptp2" COLLECTD_PLUGINS="df interface irq load memory rrdtool swap syslog" DRACUT_MODULES="bootchart btrfs caps dmsquash-live gensplash livenet lvm nfs ssh-client syslog systemd" ELIBC="glibc" GPSD_PROTOCOLS="ashtech aivdm earthmate evermore fv18 garmin garmintxt gpsclock itrax mtk3301 nmea ntrip navcom oceanserver oldstyle oncore rtcm104v2 rtcm104v3 sirf superstar2 timing tsip tripmate tnt ubx" INPUT_DEVICES="evdev" KERNEL="linux" LCD_DEVICES="bayrad cfontz cfontz633 glk hd44780 lb216 lcdm001 mtxorb ncurses text" LIBREOFFICE_EXTENSIONS="presenter-console presenter-minimizer" LINGUAS="en en_US zh zh_CN" PHP_TARGETS="php5-3" PYTHON_TARGETS="python3_2 python2_7" QEMU_SOFTMMU_TARGETS="arm mips64el x86_64" RUBY_TARGETS="ruby18 ruby19" USERLAND="GNU" VIDEO_CARDS="nouveau nvidia" XTABLES_ADDONS="quota2 psd pknock lscan length2 ipv4options ipset ipp2p iface geoip fuzzy condition tee tarpit sysrq steal rawnat logmark ipmark dhcpmac delude chaos account"
Unset:  CPPFLAGS, CTARGET, INSTALL_MASK, LC_ALL, PORTAGE_BUNZIP2_COMMAND, USE_PYTHON

=================================================================
                        Package Settings
=================================================================

dev-libs/libaio-0.3.109-r3 was built with the following:
USE="(multilib) -static-libs"
Comment 1 iGentoo 2012-10-07 00:31:42 UTC
Created attachment 325864 [details, diff]
gen_usr_ldscript.diff

For reference only...
Comment 2 Pacho Ramos gentoo-dev 2012-12-01 08:22:15 UTC
How do you suggest to fix this? I don't fully understand this one :S

Thanks a lot
Comment 3 iGentoo 2013-01-20 19:25:50 UTC
(In reply to comment #2)
> How do you suggest to fix this? I don't fully understand this one :S
> 
> Thanks a lot

set ld.bfd as default linker.

$ gcc -Wl,--verbose 2>&1 | grep OUTPUT_FORMAT
OUTPUT_FORMAT("elf64-x86-64", "elf64-x86-64",

$ gcc -m32 -Wl,--verbose 2>&1 | grep OUTPUT_FORMAT
OUTPUT_FORMAT("elf32-i386", "elf32-i386",

$ gcc -mx32 -Wl,--verbose 2>&1 | grep OUTPUT_FORMAT
OUTPUT_FORMAT("elf32-x86-64", "elf32-x86-64",

$ gcc -m64 -Wl,--verbose 2>&1 | grep OUTPUT_FORMAT
OUTPUT_FORMAT("elf64-x86-64", "elf64-x86-64",

On x86 multilib machine:
ABI=x86                     -> $(get_abi_CFLAGS)= ${CFLAGS_x86}     = -m32
ABI=x32                     -> $(get_abi_CFLAGS)= ${CFLAGS_x32}     = -mx32
ABI=amd64                   -> $(get_abi_CFLAGS)= ${CFLAGS_amd64}   = -m64
ABI=${DEFAULT_ABI:-default} -> $(get_abi_CFLAGS)= ${CFLAGS_default} = ""

Adding $(get_abi_CFLAGS) to CC for multilib build would be nice
when generating *.so scripts.

You can see multilib.eclass - multilib_toolchain_setup() for more details:
multilib_toolchain_setup() {
	...
	if [[ ${ABI} != ${DEFAULT_ABI} ]] ; then
		...
		export CC="$(tc-getCC) $(get_abi_CFLAGS)"
		...
	fi
	...
}
Comment 4 iGentoo 2013-01-20 19:29:37 UTC
Seems that gen_usr_ldscript() doesn't work well with gold linker.
Comment 5 Julian Ospald 2013-03-07 16:45:46 UTC
+*libaio-0.3.109-r4 (07 Mar 2013)
+
+  07 Mar 2013; Julian Ospald <hasufell@gentoo.org> +libaio-0.3.109-r4.ebuild:
+  fix multilib and bump EAPI
Comment 6 Julian Ospald 2013-03-07 16:52:08 UTC
let's close this when -r4 hits stable