Skip to content

Crosscompiling LXD for ppc64 (big endian) #16640

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
cordong2956 opened this issue Aug 8, 2016 · 2 comments
Closed

Crosscompiling LXD for ppc64 (big endian) #16640

cordong2956 opened this issue Aug 8, 2016 · 2 comments

Comments

@cordong2956
Copy link

  1. What version of Go are you using (go version)?

go version go1.6.3 linux/amd64

  1. What operating system and processor architecture are you using (go env)?

Ubuntu 14.04 with the following kernel:

Linux ubuntu 3.13.0-91-generic #138-Ubuntu SMP Fri Jun 24 17:00:34 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

  1. What did you do?

My goal is to crosscompile lxd for a ppc64 Embedded target.

Set the following Environment variables:
GOARCH="ppc64"
GOOS="linux"
GOPATH="/home/gcordon/Downloads/GIT/XL/lxd/.gopath"
CGO_ENABLED="1"
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/loca/go/bin:/usr/local/go/bin"

  1. What did you expect to see?
    I expect to see similar results as when I set the GOARCH="amd64".
    Result:

Must a few times due to go get race

go get -t -v -d ./...
go get -t -v -d ./...
go get -t -v -d ./...
go install -v ./...

go build -v ./...

LXD built successfully

  1. What did you see instead?

With GOARCH="ppc64"
Issuing a "Make" and I get the following errors:

/usr/local/go/src/runtime/cgo/gcc_ppc64x.S: Assembler messages:
/usr/local/go/src/runtime/cgo/gcc_ppc64x.S:26: Error: no such instruction: mflr %r0' /usr/local/go/src/runtime/cgo/gcc_ppc64x.S:27: Error: bad register name%r0'
/usr/local/go/src/runtime/cgo/gcc_ppc64x.S:28: Error: bad register name %r2' /usr/local/go/src/runtime/cgo/gcc_ppc64x.S:29: Error: no such instruction:bl saveregs'
/usr/local/go/src/runtime/cgo/gcc_ppc64x.S:30: Error: no such instruction: stdu %r1,-296(%r1)' /usr/local/go/src/runtime/cgo/gcc_ppc64x.S:33: Error: no such instruction:bl _cgo_reginit'
/usr/local/go/src/runtime/cgo/gcc_ppc64x.S:37: Error: no such instruction: mr %r30,%r4' /usr/local/go/src/runtime/cgo/gcc_ppc64x.S:40: Error: no such instruction:mr %r12,%r3'
/usr/local/go/src/runtime/cgo/gcc_ppc64x.S:41: Error: no such instruction: mtctr %r3' /usr/local/go/src/runtime/cgo/gcc_ppc64x.S:42: Error: no such instruction:bctrl'
/usr/local/go/src/runtime/cgo/gcc_ppc64x.S:44: Error: no such instruction: addi %r1,%r1,296' /usr/local/go/src/runtime/cgo/gcc_ppc64x.S:45: Error: no such instruction:bl restoreregs'
/usr/local/go/src/runtime/cgo/gcc_ppc64x.S:46: Error: no such instruction: ld %r2,24(%r1)' /usr/local/go/src/runtime/cgo/gcc_ppc64x.S:47: Error: no such instruction:ld %r0,16(%r1)'
/usr/local/go/src/runtime/cgo/gcc_ppc64x.S:48: Error: no such instruction: mtlr %r0' /usr/local/go/src/runtime/cgo/gcc_ppc64x.S:49: Error: no such instruction:blr'
/usr/local/go/src/runtime/cgo/gcc_ppc64x.S:54: Error: bad register name %r1)' /usr/local/go/src/runtime/cgo/gcc_ppc64x.S:55: Error: bad register name%r1)'
/usr/local/go/src/runtime/cgo/gcc_ppc64x.S:56: Error: bad register name %r16' /usr/local/go/src/runtime/cgo/gcc_ppc64x.S:57: Error: bad register name%r17'
/usr/local/go/src/runtime/cgo/gcc_ppc64x.S:58: Error: bad register name %r18' /usr/local/go/src/runtime/cgo/gcc_ppc64x.S:59: Error: bad register name%r19'
/usr/local/go/src/runtime/cgo/gcc_ppc64x.S:60: Error: bad register name %r20' /usr/local/go/src/runtime/cgo/gcc_ppc64x.S:61: Error: bad register name%r21'
/usr/local/go/src/runtime/cgo/gcc_ppc64x.S:62: Error: bad register name %r22' /usr/local/go/src/runtime/cgo/gcc_ppc64x.S:63: Error: bad register name%r23'
/usr/local/go/src/runtime/cgo/gcc_ppc64x.S:64: Error: bad register name %r24' /usr/local/go/src/runtime/cgo/gcc_ppc64x.S:65: Error: bad register name%r25'
/usr/local/go/src/runtime/cgo/gcc_ppc64x.S:66: Error: bad register name %r26' /usr/local/go/src/runtime/cgo/gcc_ppc64x.S:67: Error: bad register name%r27'
/usr/local/go/src/runtime/cgo/gcc_ppc64x.S:68: Error: bad register name %r28' /usr/local/go/src/runtime/cgo/gcc_ppc64x.S:69: Error: bad register name%r29'
/usr/local/go/src/runtime/cgo/gcc_ppc64x.S:70: Error: bad register name %r30' /usr/local/go/src/runtime/cgo/gcc_ppc64x.S:71: Error: bad register name%r31'
/usr/local/go/src/runtime/cgo/gcc_ppc64x.S:72: Error: no such instruction: stfd %f14,-144(%r1)' /usr/local/go/src/runtime/cgo/gcc_ppc64x.S:73: Error: no such instruction:stfd %f15,-136(%r1)'
/usr/local/go/src/runtime/cgo/gcc_ppc64x.S:74: Error: no such instruction: stfd %f16,-128(%r1)' /usr/local/go/src/runtime/cgo/gcc_ppc64x.S:75: Error: no such instruction:stfd %f17,-120(%r1)'
/usr/local/go/src/runtime/cgo/gcc_ppc64x.S:76: Error: no such instruction: stfd %f18,-112(%r1)' /usr/local/go/src/runtime/cgo/gcc_ppc64x.S:77: Error: no such instruction:stfd %f19,-104(%r1)'
/usr/local/go/src/runtime/cgo/gcc_ppc64x.S:78: Error: no such instruction: stfd %f20,-96(%r1)' /usr/local/go/src/runtime/cgo/gcc_ppc64x.S:79: Error: no such instruction:stfd %f21,-88(%r1)'
/usr/local/go/src/runtime/cgo/gcc_ppc64x.S:80: Error: no such instruction: stfd %f22,-80(%r1)' /usr/local/go/src/runtime/cgo/gcc_ppc64x.S:81: Error: no such instruction:stfd %f23,-72(%r1)'
/usr/local/go/src/runtime/cgo/gcc_ppc64x.S:82: Error: no such instruction: stfd %f24,-64(%r1)' /usr/local/go/src/runtime/cgo/gcc_ppc64x.S:83: Error: no such instruction:stfd %f25,-56(%r1)'
/usr/local/go/src/runtime/cgo/gcc_ppc64x.S:84: Error: no such instruction: stfd %f26,-48(%r1)' /usr/local/go/src/runtime/cgo/gcc_ppc64x.S:85: Error: no such instruction:stfd %f27,-40(%r1)'
/usr/local/go/src/runtime/cgo/gcc_ppc64x.S:86: Error: no such instruction: stfd %f28,-32(%r1)' /usr/local/go/src/runtime/cgo/gcc_ppc64x.S:87: Error: no such instruction:stfd %f29,-24(%r1)'
/usr/local/go/src/runtime/cgo/gcc_ppc64x.S:88: Error: no such instruction: stfd %f30,-16(%r1)' /usr/local/go/src/runtime/cgo/gcc_ppc64x.S:89: Error: no such instruction:stfd %f31,-8(%r1)'
/usr/local/go/src/runtime/cgo/gcc_ppc64x.S:91: Error: no such instruction: `blr'

NOTE this issue is similar to another post: cmd/link: ppc64 (big endian) cgo errors
#13192

@mwhudson
Copy link
Contributor

mwhudson commented Aug 8, 2016

You need to set CC to a cross compiler.

We don't use the issue tracker for asking questions. Please see https://golang.org/wiki/Questions. Thanks.

@mwhudson mwhudson closed this as completed Aug 8, 2016
@cordong2956
Copy link
Author

After I added the cross compiler I ran into another issue:

I have the following setup:

CC="/opt/fsl-qoriq/2.0/sysroots/x86_64-fslsdk-linux/usr/bin/powerpc64-fsl-linux/powerpc64-fsl-linux-gcc"
CGO_CFLAGS="-I/opt/fsl-qoriq/2.0/sysroots/ppc64e6500-fsl-linux/usr/include"
CGO_ENABLED="1"
CGO_LDFLAGS=" --static -L/opt/fsl-qoriq/2.0/sysroots/ppc64e6500-fsl-linux/usr/lib64 --sysroot=/opt/fsl-qoriq/2.0/sysroots/ppc64e6500-fsl-linux"
GOARCH="ppc64"
GOOS="linux"
GOPATH="/home/gcordon/Downloads/GIT/XL/lxd/.gopath"
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/loca/go/bin:/usr/local/go/bin:/opt/fsl-qoriq/2.0/sysroots/ppc64e6500-fsl-linux/usr/include/linux:/opt/fsl-qoriq/2.0/sysroots/ppc64e6500-fsl-linux/usr/include/asm:/opt/fsl-qoriq/2.0/sysroots/ppc64e6500-fsl-linux/usr/lib64"

Issue I am seeing:

Must a few times due to go get race

go get -t -v -d ./...
go get -t -v -d ./...
go get -t -v -d ./...
go install -v ./...
runtime/cgo

runtime/cgo

cannot load imported symbols from ELF file $WORK/runtime/cgo/_obj/cgo.o: no symbol section
make: *** [default] Error 2

Expecting this to pass!

@golang golang locked and limited conversation to collaborators Aug 10, 2017
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

No branches or pull requests

3 participants