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

Bug 555598

Summary: dev-lang/ocaml fails to build on x32 (with patch)
Product: Gentoo Linux Reporter: Josh Parsons <josh.parsons>
Component: Current packagesAssignee: Gentoo Team for the ML programming language family <ml>
Status: IN_PROGRESS ---    
Severity: normal CC: gienah
Priority: Normal Keywords: PATCH
Version: unspecified   
Hardware: AMD64   
OS: Linux   
Whiteboard:
Package list:
Runtime testing required: ---
Bug Depends on:    
Bug Blocks: 393673    
Attachments: check __LP64__ before assuming 64bit pointers on amd64
Same patch as above, adapted for ocaml-4.x

Description Josh Parsons 2015-07-22 10:02:48 UTC
Created attachment 407378 [details, diff]
check __LP64__ before assuming 64bit pointers on amd64

ocaml's runtime assumes that pointers are 64bit on amd64 (as of 3.12.1)

How to reproduce:
emerge =dev-lang/ocaml-3.12.1

results: compilation errors

I have a patch; will also try to send it upstream, but it is so simple suggest you apply it too.
Comment 1 Josh Parsons 2015-07-22 10:25:21 UTC
Output of emerge --info:

Portage 2.2.20 (python 2.7.9-final-0, default/linux/amd64/13.0/x32, gcc-4.9.3, glibc-2.20-r2, 4.0.8-gentoo x86_64)
=================================================================
System uname: Linux-4.0.8-gentoo-x86_64-Intel-R-_Atom-TM-_CPU_330_@_1.60GHz-with-gentoo-2.2
KiB Mem:     3468596 total,    233352 free
KiB Swap:   33554428 total,  33421112 free
Timestamp of repository gentoo: Wed, 22 Jul 2015 05:15:01 +0000
sh bash 4.3_p33-r2
ld GNU ld (Gentoo 2.24 p1.4) 2.24
distcc 3.1 x86_64-pc-linux-gnux32 [disabled]
app-shells/bash:          4.3_p33-r2::gentoo
dev-java/java-config:     2.2.0::gentoo
dev-lang/perl:            5.20.2::gentoo
dev-lang/python:          2.7.9-r1::gentoo, 3.3.5-r1::gentoo
dev-util/cmake:           3.2.2::gentoo
dev-util/pkgconfig:       0.28-r2::gentoo
sys-apps/baselayout:      2.2::gentoo
sys-apps/openrc:          0.17::gentoo
sys-apps/sandbox:         2.6-r1::gentoo
sys-devel/autoconf:       2.69::gentoo
sys-devel/automake:       1.11.6-r1::gentoo, 1.14.1::gentoo, 1.15::gentoo
sys-devel/binutils:       2.24-r3::gentoo
sys-devel/gcc:            4.8.4::gentoo, 4.9.3::gentoo
sys-devel/gcc-config:     1.7.3::gentoo
sys-devel/libtool:        2.4.6::gentoo
sys-devel/make:           4.1-r1::gentoo
sys-kernel/linux-headers: 3.18::gentoo (virtual/os-headers)
sys-libs/glibc:           2.20-r2::gentoo
Repositories:

gentoo
    location: /usr/portage
    sync-type: rsync
    sync-uri: rsync://rsync.uk.gentoo.org/gentoo-portage
    priority: 0

local
    location: /usr/local/portage
    masters: gentoo
    priority: 100

ACCEPT_KEYWORDS="amd64"
ACCEPT_LICENSE="*"
CBUILD="x86_64-pc-linux-gnux32"
CFLAGS="-pipe -march=bonnell -O2 -fno-stack-protector"
CHOST="x86_64-pc-linux-gnux32"
CONFIG_PROTECT="/etc /usr/share/gnupg/qualified.txt"
CONFIG_PROTECT_MASK="/etc/ca-certificates.conf /etc/env.d /etc/fonts/fonts.conf /etc/gconf /etc/gentoo-release /etc/revdep-rebuild /etc/sandbox.d /etc/terminfo /etc/texmf/language.dat.d /etc/texmf/language.def.d /etc/texmf/updmap.d /etc/texmf/web2c"
CPPFLAGS="-DG_DISABLE_CAST_CHECKS"
CXXFLAGS="-pipe -march=bonnell -O2 -fno-stack-protector"
DISTDIR="/usr/portage/distfiles"
FCFLAGS="-O2 -pipe"
FEATURES="assume-digests binpkg-logs collision-protect config-protect-if-modified distlocks ebuild-locks fixlafiles merge-sync multilib-strict news parallel-fetch preserve-libs protect-owned sandbox sfperms strict unknown-features-warn unmerge-logs unmerge-orphans usersandbox usersync"
FFLAGS="-O2 -pipe"
GENTOO_MIRRORS="http://mirror.bytemark.co.uk/gentoo ftp://mirror.bytemark.co.uk/gentoo"
LANG="en_GB.utf8"
LDFLAGS="-Wl,-O1 -Wl,--as-needed"
MAKEOPTS="-j4"
PKGDIR="/usr/portage/packages"
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"
PORTAGE_TMPDIR="/var/tmp"
USE="X aac acl alsa amd64 berkdb bitcoin_policy_spamfilter broadway bzip2 cli cracklib crypt cups cxx dri drm emacs faac fastcgi fortran gdbm gtk gtk3 gudev iconv icu ipv6 ithreads libav libkms lm_sensors logrotate mmx mmxext modules mp3 multilib ncurses nls nossp nptl offensive ogg openmp pam pcre policykit qt3support readline sctp session squashfs sse sse2 sse3 ssl ssse3 sync-plugin-portage syslog tcpd theora threads toolkit-scroll-bars udev unicode v4l vpx wayland wayland-compositor xetex xft xkb xnest xwayland zlib" ABI_X86="x32 64" APACHE2_MODULES="authn_core authz_core socache_shmcb unixd 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 author" CAMERAS="ptp2" COLLECTD_PLUGINS="df interface irq load memory rrdtool swap syslog" CPU_FLAGS_X86="mmx mmxext sse sse2 sse3 ssse3" DRACUT_MODULES="lvm" 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 ublox ubx" INPUT_DEVICES="evdev" KERNEL="linux" LCD_DEVICES="bayrad cfontz cfontz633 glk hd44780 lb216 lcdm001 mtxorb ncurses text" LIBREOFFICE_EXTENSIONS="presenter-console presenter-minimizer" OFFICE_IMPLEMENTATION="libreoffice" PHP_TARGETS="php5-5" PYTHON_SINGLE_TARGET="python2_7" PYTHON_TARGETS="python2_7 python3_3" RUBY_TARGETS="ruby19 ruby20" USERLAND="GNU" VIDEO_CARDS="nouveau modesetting" 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:  CTARGET, EMERGE_DEFAULT_OPTS, INSTALL_MASK, LC_ALL, PORTAGE_BUNZIP2_COMMAND, PORTAGE_COMPRESS, PORTAGE_COMPRESS_FLAGS, PORTAGE_RSYNC_EXTRA_OPTS, USE_PYTHON
Comment 2 Alexis Ballier gentoo-dev 2015-07-22 15:35:11 UTC
what about 4.02.2 ? I prefer not to add patches to stable, which is also very outdated
Comment 3 Josh Parsons 2015-07-27 11:04:41 UTC
4.02.2 also fails:

x86_64-pc-linux-gnux32-gcc -DCAML_NAME_SPACE -pipe -march=bonnell -O2 -fno-stack-protector -O -fno-defer-pop -Wall -D_FILE_OFFSET_BITS=64 -D_REENTRANT    -c -o signals.o signals.c
signals.c: Assembler messages:
signals.c:93: Error: incorrect register `%eax' used with `q' suffix
signals.c:93: Error: incorrect register `%eax' used with `q' suffix
<builtin>: recipe for target 'signals.o' failed
make: *** [signals.o] Error 1

I'll try fixing it and attach a patch if successful.
Comment 4 Josh Parsons 2015-07-27 11:25:13 UTC
Created attachment 407696 [details, diff]
Same patch as above, adapted for ocaml-4.x

This one should fix 4.02.2
Comment 5 Josh Parsons 2015-07-27 11:42:11 UTC
Please patch both versions though; mldonkey does not build with ocaml-4.x
Comment 6 Josh Parsons 2015-07-27 11:53:33 UTC
Also, the ocamlopt useflag breaks on x32, should probably by usemasked by the x32 profile.
Comment 7 Alexis Ballier gentoo-dev 2015-07-27 13:34:15 UTC
thx; could you please submit a pull request upstream ?
https://github.com/ocaml/ocaml
Comment 8 Mark Wright gentoo-dev 2020-09-27 07:45:30 UTC
ocaml-4.11.1/runtime/caml contains:

#elif defined(__GNUC__) && (defined(__i386__) || (defined(__x86_64__) \
      && defined(__ILP32__)))

So I think it has been fixed upstream.
Comment 9 Larry the Git Cow gentoo-dev 2020-10-13 12:54:12 UTC
The bug has been referenced in the following commit(s):

https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=6b92854d276a8b00adccea7265b068b961530a3e

commit 6b92854d276a8b00adccea7265b068b961530a3e
Author:     Mark Wright <gienah@gentoo.org>
AuthorDate: 2020-10-10 08:13:21 +0000
Commit:     Mark Wright <gienah@gentoo.org>
CommitDate: 2020-10-13 12:52:57 +0000

    dev-lang/ocaml: Bump to 4.11.1
    
    Thanks to Martin 'The Bishop' Scheffler for reporting ocaml does
    not compile with gcc-10, and for the patch.  This appears to be fixed
    upstream.
    
    Thanks to Josh Parsons for the x32 compile patch, this appears to be
    fixed upstream.
    
    Bug: https://bugs.gentoo.org/735274
    Bug: https://bugs.gentoo.org/555598
    Package-Manager: Portage-3.0.8, Repoman-3.0.1
    Signed-off-by: Mark Wright <gienah@gentoo.org>

 dev-lang/ocaml/Manifest            |  1 +
 dev-lang/ocaml/metadata.xml        |  5 ++-
 dev-lang/ocaml/ocaml-4.11.1.ebuild | 74 ++++++++++++++++++++++++++++++++++++++
 3 files changed, 79 insertions(+), 1 deletion(-)