[meta-virtualization] [PATCH] go-cross: Fix host contamination for x86_64 host to x86_64 target

Jason Wessel jason.wessel at windriver.com
Mon Sep 19 12:33:04 PDT 2016

The go-cross package is explicitly for compiling target libraries on
the host system.  When the target architecture matches the host
architecture it will actually use the host's linker and compiler
however which can result in the generation of the cgo.a library having
linker symbols which might not work properly when compiling other

A typical error looks like this when building consul-migrate:

/opt/build-intel-x86/tmp/sysroots/x86_64-linux/usr/lib/x86_64-linux/go/pkg/tool/linux_amd64/link: running x86_64-yocto-linux-gcc failed: exit status 1
/opt/build-intel-x86/tmp/sysroots/x86_64-linux/usr/libexec/x86_64-yocto-linux/gcc/x86_64-yocto-linux/5.2.0/ld: /opt/build-intel-x86/tmp/work/core2-64-yocto-linux/consul-migrate/git-r0/build-tmp/go-link-956548052/000002.o: unrecognized relocation (0x2a) in section `.text'
/opt/build-intel-x86/tmp/sysroots/x86_64-linux/usr/libexec/x86_64-yocto-linux/gcc/x86_64-yocto-linux/5.2.0/ld: final link failed: Bad value
collect2: error: ld returned 1 exit status

The fix is to use the make.bash --target-only option to properly build
the libraries with the target toolchain.

Signed-off-by: Jason Wessel <jason.wessel at windriver.com>
 recipes-devtools/go-cross/go-cross.inc | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/recipes-devtools/go-cross/go-cross.inc b/recipes-devtools/go-cross/go-cross.inc
index 613e9c7..c1577e3 100644
--- a/recipes-devtools/go-cross/go-cross.inc
+++ b/recipes-devtools/go-cross/go-cross.inc
@@ -26,6 +26,10 @@ do_compile() {
     cd src
     ./make.bash --host-only
+    if [ "${GOARCH}" = "amd64" -a "${BUILD_ARCH}" = "x86_64" ] ; then
+        # Ensure cgo.a is built with the target toolchain
+        GO_FLAGS="-a" ./make.bash --target-only
+    fi
 do_install() {

More information about the meta-virtualization mailing list