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

Bug 567806

Summary: sys-devel/gcc-5[go]: go & gofmt programs are installed which clobber dev-lang/go
Product: Gentoo Linux Reporter: Andrius Štikonas <andrius>
Component: [OLD] Core systemAssignee: Gentoo Toolchain Maintainers <toolchain>
Status: RESOLVED FIXED    
Severity: normal CC: williamh, zmedico
Priority: Normal    
Version: unspecified   
Hardware: ARM   
OS: Linux   
Whiteboard:
Package list:
Runtime testing required: ---
Bug Depends on:    
Bug Blocks: 536984    
Attachments: toolchain.eclass: install go and gofmt as go-5 and gofmt-5

Description Andrius Štikonas 2015-12-09 02:08:37 UTC
GCC5 provides a new go binary. However, it does not work on ARMv7 (Odroid-U2). I tried running
/usr/armv7a-hardfloat-linux-gnueabi/gcc-bin/5.3.0/go
without any arguments or with simple arguments like "version"
go binary works fine on amd64.

Reproducible: Always

Steps to Reproduce:
1. emerge sys-devel/gcc-5.3.0[go] on ARMv7
2. run /usr/armv7a-hardfloat-linux-gnueabi/gcc-bin/5.3.0/go
Actual Results:  
go is stuck forever with 100% CPU usage.


Portage 2.2.24 (python 3.4.3-final-0, !../../usr/portage/profiles/default/linux/arm/13.0/armv7a/desktop/kde, gcc-5.3.0, glibc-2.21-r1, 4.3.0-gentoo-gnu armv7l)
=================================================================
System uname: Linux-4.3.0-gentoo-gnu-armv7l-with-gentoo-2.2
KiB Mem:     2069928 total,    442448 free
KiB Swap:    4094972 total,   4067260 free
Timestamp of repository gentoo: Tue, 08 Dec 2015 18:15:01 +0000
sh bash 4.3_p39
ld GNU ld (Gentoo 2.25.1 p1.1) 2.25.1
dev-lang/python:          2.7.10-r1::gentoo, 3.4.3::gentoo
sys-devel/autoconf:       2.13::gentoo, 2.69::gentoo
sys-devel/automake:       1.11.6-r1::gentoo, 1.13.4::gentoo, 1.14.1::gentoo, 1.15::gentoo
sys-devel/binutils:       2.25.1-r1::gentoo
sys-devel/libtool:        2.4.6::gentoo
sys-kernel/linux-headers: 3.18::gentoo (virtual/os-headers)
Repositories:

digint
    location: /var/lib/layman/btrbk
    sync-type: git
    sync-uri: git://dev.tty0.ch/portage/digint-overlay.git
    masters: gentoo

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

sunxi
    location: /var/lib/layman/sunxi
    masters: gentoo
    priority: 0

chaos-gitlabhq
    location: /var/lib/layman/chaos-gitlabhq
    masters: gentoo
    priority: 1

bor
    location: /var/lib/layman/bor
    masters: gentoo
    priority: 2

Local-overlay
    location: /var/lib/portage/overlay/
    masters: gentoo
    priority: 1000

ACCEPT_KEYWORDS="arm"
ACCEPT_LICENSE="@FREE"
CFLAGS="-O2 -pipe -march=armv7-a -mcpu=cortex-a9 -mfpu=neon -mfloat-abi=hard"
CHOST="armv7a-hardfloat-linux-gnueabi"
CONFIG_PROTECT="/etc /etc/stunnel/stunnel.conf /usr/share/config /usr/share/easy-rsa /usr/share/gnupg/qualified.txt /var/bind"
CONFIG_PROTECT_MASK="/etc/ca-certificates.conf /etc/dconf /etc/env.d /etc/fonts/fonts.conf /etc/gconf /etc/gentoo-release /etc/php/apache2-php5.6/ext-active/ /etc/php/cgi-php5.6/ext-active/ /etc/php/cli-php5.6/ext-active/ /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"
CXXFLAGS="-O2 -pipe -march=armv7-a -mcpu=cortex-a9 -mfpu=neon -mfloat-abi=hard"
DISTDIR="/usr/portage/distfiles"
FEATURES="assume-digests binpkg-logs config-protect-if-modified distlocks ebuild-locks fixlafiles merge-sync news parallel-fetch preserve-libs protect-owned sandbox sfperms strict unknown-features-warn unmerge-logs unmerge-orphans userfetch userpriv usersandbox usersync xattr"
GENTOO_MIRRORS="http://mirror.bytemark.co.uk/gentoo/ http://mirror.qubenet.net/mirror/gentoo/ http://www.mirrorservice.org/sites/distfiles.gentoo.org/"
PKGDIR="/usr/portage/packages"
PORTAGE_TMPDIR="/var/tmp"
USE="1stclassmsg X a52 aac aalib acl acpi aio alsa apache2 apng archive arm armv5te armv6 armv6t2 armvfp authdaemond authlib autoipd autotrace avahi awt bash-completion bazaar berkdb bindist bitcoin_policy_cltv bitcoin_policy_dcmp bitcoin_policy_rbf bitcoin_policy_spamfilter bittorrent bluetooth bogofilter bookmarks branding btrfs bugzilla bzip2 c++0x cairo calendar cdda cdr cgi chappa chatzilla chm cli clucene cmake color colordiff context cracklib crypt cryptsetup cups curl custom-optimization cvs cxx d daemon dbus deblob declarative deflate designer device-mapper dhcpd dirac djvu dlz dot dovecot-sasl downloadorder dri drm dts dvd dvdr dvi dvi2tty dvipdfm dynamic eap-sim ebook edit egl eigen emacs embedded emboss enchant encode evdev exif extensions extra extra-algorithms extraengine fakevim fam farstream fat ffmpeg fftw firefox flac fontconfig fontforge foomaticdb fortran fortran2003 fortran95 fpm fpx freetds g3dvl gallium games gbm gcj gd gdbm gdm geoip geoloc geolocation gif git glamor gles gles1 gles2 glew glsl gme gmp gnuplot gnutls go gold google gpg gpm gptfdisk gpu graphics graphicsmagick graphite graphviz gsl gsm gstreamer gtk gtk3 gtkspell gudev gzip harden hdf5 hdri highlight history hscolour http2 hunspell hwdb icedtea7 iconv icu id3tag imagemagick imaging imap imlib imlib2 intl introspection iodbc ipc ipv6 jabber jadetex javascript jbig jbootstrap jingle jit jpeg jpeg2k json kate kde kdepim kerberos keymap kipi kontact kpathsea kscreen ktp lame lapack lastfm latex latexmk lcms ldap lensfun less libass libcaca libkms libnotify libproxy libssh2 libtiger lightning ljr llvm lto lua luatex lvm lyrics lzma lzo mad magic magnetgenerator maildir managesieve marble math mathml matplotlib matroska md5sum mdnsresponder-compat mediaplayer mediawiki melt mercurial metalink mhash mikmod minizip mjpeg mng mod modemmanager modplug modules monolithic monolithic-build monotone mount mp3 mp4 mpeg mpg123 mplayer mpx multitarget music musicbrainz mysql mysqli nat native native-exceptions ncurses nethack network networkmanager new-login nfs nls nntp nptl nsplugin nss ntfs ntfsprogs ntp numpy oauth objc objc++ objc-gc ogg ogg123 ogm okteta okular omega opengl opengtl openid openldap openmp openstreetmap optimization opus otr p2p pam pango parted pcap pcmcia pcntl pcre pcre16 pdf pdftk pdo perl phonon php pkcs11 plasma player plymouth png pnm policykit postgres postproc postscript ppds prediction preview-latex prison privacy privacylists privatestorage projectm psf pstricks pth publishers pulseaudio pyqt4 python qalculate qml qt3support qt4 qt5 quicktime quota quvi qwt r600-llvm-compiler radio radius readline realtime redeyes resolvconf rss rtsp ruby sandbox sasl science script sdk sdl search seccomp secure-delete semantic-desktop sensord server session sftp sha512 shapefile shared-dricore shared-glapi sieve skins small-scale smartcard smime smtp sndfile soap sockets socks solver soprano sound soundtouch sparse speech speex spell sql sqlite sqlite3 srt srtp ssh ssl stars startup-notification strong-optimization stun subversion supernodal svg symlink syslog system-boost system-cairo system-ffmpeg system-icu system-jpeg system-libs system-libvncserver system-libyaml system-mpmath system-mupdf system-renpy system-sqlite system-wine systemd sysv-utils taglib tcl tcpd telepathy terminal tex4ht texteffect themedesigner themes theora thesaurus threads thumbnail thumbnails tidy tiff tls tor tordns translator truetype tty-helpers udev udisks udisks2 umfpack unicode unzip upnp-av usb v4l v8 vamp video videoslideshow vim vlc vlm vnc vorbis wav wavpack wayland wayland-compositor webcam webdav webkit webkit2 webm webp wifi wma wmf word-perfect wps wxwidgets x265 xa xattr xbase xcb xcomposite xetex xface xft xinerama xkb xml xmlrpc xmlwriter xmp xorg xpm xrandr xrender xv xvfb xvid xvmc xwayland xz youtube zeroconf zip zlib" 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" CURL_SSL="nss" 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="keyboard mouse evdev" KERNEL="linux" LCD_DEVICES="bayrad cfontz cfontz633 glk hd44780 lb216 lcdm001 mtxorb ncurses text" LIBREOFFICE_EXTENSIONS="presenter-console presenter-minimizer" LINGUAS="lt en en_GB" OFFICE_IMPLEMENTATION="libreoffice" PHP_TARGETS="php5-6" PYTHON_SINGLE_TARGET="python2_7" PYTHON_TARGETS="python2_7 python3_4" RUBY_TARGETS="ruby20 ruby21" USERLAND="GNU" VIDEO_CARDS="exynos fbdev omap omapfb dummy v4l" 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:  EMERGE_DEFAULT_OPTS, PORTAGE_BUNZIP2_COMMAND
Comment 1 Andrius Štikonas 2015-12-11 01:34:40 UTC
Actually, it gets stuck every other time, not every time.

I've also noticed that if dev-lang/go is reemerged than it's executable is used. So the bug seems to appear because gcc-config somehow creates a profile where go binary from gcc is used together with go environment from dev-lang/go.

Once dev-lang/go is reemerged changes by gcc-config are overwritten and everything works again. I don't know why only ARM version stucks with 100% CPU usage but it looks like other arches are affected by this collision between gcc-config and dev-lang/go too.
Comment 2 SpanKY gentoo-dev 2015-12-13 02:40:17 UTC
we'll just delete the go/gofmt programs from gcc for now
Comment 3 SpanKY gentoo-dev 2015-12-13 04:46:40 UTC
gcc-5+ will now delete `go` and `gofmt` from BINPATH when installing gcc:
http://gitweb.gentoo.org/repo/gentoo.git/commit/?id=837dc289f66ec6830a5175f28311b73f20250e07
Comment 4 Zac Medico gentoo-dev 2016-03-18 07:47:41 UTC
(In reply to SpanKY from comment #2)
> we'll just delete the go/gofmt programs from gcc for now

Maybe add a -5 suffix to them. That will be consistent with the go-5 binary mentioned in the golang bootstrap instructions here:

    https://golang.org/doc/install/source

This will solve the chicken/egg problem for bootstrap of dev-lang/go.
Comment 5 Zac Medico gentoo-dev 2016-03-18 09:22:06 UTC
Created attachment 428488 [details, diff]
toolchain.eclass: install go and gofmt as go-5 and gofmt-5

With this patch, I've successfully bootstrapped go-1.6-r2 with sys-devel/gcc-5.3.0[go] (see bug 576290).
Comment 6 Zac Medico gentoo-dev 2016-03-19 07:54:57 UTC
@toolchain: Are there any objections to installing them with a -5 suffix? Note that go-5 is the name used in the golang bootstrap instructions.

diff --git a/eclass/toolchain.eclass b/eclass/toolchain.eclass
index 7dade5c..0a5a0c5 100644
--- a/eclass/toolchain.eclass
+++ b/eclass/toolchain.eclass
@@ -1684,10 +1684,12 @@ toolchain_src_install() {
 			ln -sf ${CTARGET}-${x} ${CTARGET}-${x}-${GCC_CONFIG_VER}
 		fi
 	done
-	# Clear out the main go binaries as we don't want to clobber dev-lang/go
+	# Rename the main go binaries as we don't want to clobber dev-lang/go
 	# when gcc-config runs. #567806
 	if tc_version_is_at_least 5 && is_go ; then
-		rm -f go gofmt
+		for x in go gofmt; do
+			mv ${x} ${x}-5 || die
+		done
 	fi
 
 	# Now do the fun stripping stuff
Comment 7 Zac Medico gentoo-dev 2016-03-19 21:03:21 UTC
Maybe it makes more sense to name it go-${PV%%.*} so that it will only be named go-5 if the major version is 5 (not sure if gcc-4.x has the go/gofmt binaries).
Comment 8 Zac Medico gentoo-dev 2016-03-20 00:19:12 UTC
(In reply to Zac Medico from comment #7)
> Maybe it makes more sense to name it go-${PV%%.*} so that it will only be
> named go-5 if the major version is 5 (not sure if gcc-4.x has the go/gofmt
> binaries).

Committed, using ${GCCMAJOR} instead of ${PV%%.*}:

https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=3f171e23da269c77dfa9cb3097737e33db853c8d