Hi Ian, Setting GCCGO env variable helped. I basically compiled, helloworld.go with the following options and it compiled a 64 bit exectable:
CC=/home/amandeep/workspace/mygcc.sh GCCGO=/home/amandeep/workspace/mygccgo.sh CGO_CFLAGS='-m64' CGO_LDFLAGS='-m64' GOARCH=sparc64 CGO_ENABLED=1 go build -gccgoflags=-m64 helloworld.go amandeep@s113ldom1:~/workspace$ file helloworld helloworld: ELF 64-bit MSB executable SPARCV9 Version 1, dynamically linked, not stripped However, I still can't run the executable: amandeep@s113ldom1:~/workspace$ ./helloworld ld.so.1: helloworld: fatal: /usr/gnu/lib/libgo.so.13: wrong ELF class: ELFCLASS32 Killed Does it mean that I need to compile gcc from source again with 64-bit hack i.e. by running gcc configure with CC=/path/to/mygcc and recompile it? When I said "a 32 bit archive" I meant the .a on which output of file command looks like the following: amandeep@s113ldom1:~/workspace$ file /opt/go_pkgs/pkg/gccgo_solaris_sparc64/github.com/golang/libglog.a /opt/go_pkgs/pkg/gccgo_solaris_sparc64/github.com/golang/libglog.a: current ar archive, 32-bit symbol table I assumed that the error wrong ELF class: ELFCLASS32 was related to the archive created with incorrect compiler options. Regards, Aman On Friday, September 28, 2018 at 4:02:50 PM UTC-7, Ian Lance Taylor wrote: > On Fri, Sep 28, 2018 at 4:00 PM, <aman...@cohesity.com <javascript:>> > wrote: > > Actually, I now understand what you meant. And even that does not work: > > > > amandeep@s113ldom1:/opt/go_pkgs/src/github.com/golang/glog$ sudo > > GOPATH=/opt/go_pkgs CC='/home/amandeep/workspace/mygcc.sh' > CGO_CFLAGS='-m64' > > CGO_LDFLAGS='-m64' GOARCH=sparc64 CGO_ENABLED=1 go install -x > > -gccgoflags=-m64 > > WORK=/tmp/go-build445938530 > > mkdir -p $WORK/b001/ > > cd $WORK > > /usr/gnu/bin/gccgo -fgo-importcfg=/dev/null -c -x c - || true > > cd /opt/go_pkgs/src/github.com/golang/glog > > /usr/gnu/bin/gccgo -c -g -fdebug-prefix-map=$WORK=/tmp/go-build > > -gno-record-gcc-switches -fgo-pkgpath=github.com/golang/glog -o > > $WORK/b001/_go_.o -I $WORK/b001/_importcfgroot_ -m64 ./glog.go > > ./glog_file.go > > echo ' .section .go.buildid,"e"' >> $WORK/b001/_buildid.s > > echo ' .byte 0x79,0x71,0x58,0x37,0x74,0x64,0x76,0x6c' >> > > $WORK/b001/_buildid.s > > echo ' .byte 0x7a,0x59,0x53,0x39,0x41,0x6a,0x30,0x58' >> > > $WORK/b001/_buildid.s > > echo ' .byte 0x34,0x53,0x78,0x39,0x2f,0x79,0x71,0x58' >> > > $WORK/b001/_buildid.s > > echo ' .byte 0x37,0x74,0x64,0x76,0x6c,0x7a,0x59,0x53' >> > > $WORK/b001/_buildid.s > > echo ' .byte 0x39,0x41,0x6a,0x30,0x58,0x34,0x53,0x78' >> > > $WORK/b001/_buildid.s > > echo ' .byte 0x39' >> $WORK/b001/_buildid.s > > echo '' >> $WORK/b001/_buildid.s > > /usr/gnu/bin/gccgo -xassembler-with-cpp -I $WORK/b001/ -c -o > > $WORK/b001/_buildid.o -D GOOS_solaris -D GOARCH_sparc64 -D > > GOPKGPATH=github_com_golang_glog $WORK/b001/_buildid.s > > ar rcD $WORK/b001/_pkg_.a $WORK/b001/_go_.o $WORK/b001/_buildid.o > > /usr/gnu/libexec/gcc/sparc-sun-solaris2.11/8.2.1/buildid -w > > $WORK/b001/_pkg_.a # internal > > cp $WORK/b001/_pkg_.a > > > /root/.cache/go-build/a4/a47820a6bcb6e72c26a3be36129e80b12a0f0193dd5959e2c7304a3b169d9af8-d > > > > # internal > > mkdir -p /opt/go_pkgs/pkg/gccgo_solaris_sparc64/github.com/golang/ > > cp $WORK/b001/_pkg_.a > > /opt/go_pkgs/pkg/gccgo_solaris_sparc64/github.com/golang/libglog.a > > rm -r $WORK/b001/ > > amandeep@s113ldom1:/opt/go_pkgs/src/github.com/golang/glog$ ls -al > > /opt/go_pkgs/pkg/gccgo_solaris_sparc64/github.com/golang/libglog.a > > -rw-r--r-- 1 root root 611582 Sep 28 08:52 > > /opt/go_pkgs/pkg/gccgo_solaris_sparc64/github.com/golang/libglog.a > > amandeep@s113ldom1:/opt/go_pkgs/src/github.com/golang/glog$ file > > /opt/go_pkgs/pkg/gccgo_solaris_sparc64/github.com/golang/libglog.a > > /opt/go_pkgs/pkg/gccgo_solaris_sparc64/github.com/golang/libglog.a: > > current ar archive, 32-bit symbol table > > > > The CC flag is not even honoured it would seem as I do not see any > > invocation related to mygcc.sh. Please advice. > > Do the same thing for gccgo and set the GCCGO environment variable to > that shell script. > > I'm not sure what you mean by "a 32-bit archive". Is that an archive > that contains 32-bit object files? The same hack should fix that, I > hope. > > Ian > > > > On Friday, September 28, 2018 at 3:23:43 PM UTC-7, aman...@cohesity.com > > wrote: > >> > >> hmm...filed a bug here: https://github.com/golang/go/issues/27929 > >> > >> Could you explain the workaround for this again? I did not understand > the > >> fallback option. > >> > >> Apart from that, I tried to run each command manually to force m64 > option > >> whenever possible. I was able to get a 64 bit executable for _buildid.o > but > >> even after that running ar rcD $WORK/b001/_pkg_.a $WORK/b001/_go_.o > >> $WORK/b001/_buildid.o produces a 32-bit archive. Also, running buildid > gives > >> some error about 32 byte hash. Please see: > >> > >> amandeep@s113ldom1:~/workspace$ > >> /usr/gnu/libexec/gcc/sparc-sun-solaris2.11/8.2.1/buildid -w > >> $WORK/b001/_pkg_.a > >> buildid: /tmp/go-build365019570/b001/_pkg_.a: cannot find 32-byte hash > in > >> id yqX7tdvlzYS9Aj0X4Sx9/yqX7tdvlzYS9Aj0X4Sx9 > >> > >> Let me know if any of this needs to be reported in the bug or if it > >> provides more clarity on my situation here. > >> > >> On Friday, September 28, 2018 at 1:02:06 PM UTC-7, Ian Lance Taylor > wrote: > >>> > >>> On Fri, Sep 28, 2018 at 10:14 AM, <aman...@cohesity.com> wrote: > >>> > nopes...doesn't work either. I tried both variations...with and > without > >>> > GOARCH=sparc64 flag. Following is the output with sparc64 flag: > >>> > > >>> > amandeep@s113ldom1:/opt/go_pkgs/src/github.com/golang/glog$ sudo > >>> > GOPATH=/opt/go_pkgs CC='gcc -m64' CGO_CFLAGS='-m64' > CGO_LDFLAGS='-m64' > >>> > GOARCH=sparc64 CGO_ENABLED=1 go install -x -gccgoflags=-m64 > >>> > WORK=/tmp/go-build365019570 > >>> > mkdir -p $WORK/b001/ > >>> > cd $WORK > >>> > /usr/gnu/bin/gccgo -fgo-importcfg=/dev/null -c -x c - || true > >>> > cd /opt/go_pkgs/src/github.com/golang/glog > >>> > /usr/gnu/bin/gccgo -c -g -fdebug-prefix-map=$WORK=/tmp/go-build > >>> > -gno-record-gcc-switches -fgo-pkgpath=github.com/golang/glog -o > >>> > $WORK/b001/_go_.o -I $WORK/b001/_importcfgroot_ -m64 ./glog.go > >>> > ./glog_file.go > >>> > echo ' .section .go.buildid,"e"' >> $WORK/b001/_buildid.s > >>> > echo ' .byte 0x79,0x71,0x58,0x37,0x74,0x64,0x76,0x6c' >> > >>> > $WORK/b001/_buildid.s > >>> > echo ' .byte 0x7a,0x59,0x53,0x39,0x41,0x6a,0x30,0x58' >> > >>> > $WORK/b001/_buildid.s > >>> > echo ' .byte 0x34,0x53,0x78,0x39,0x2f,0x79,0x71,0x58' >> > >>> > $WORK/b001/_buildid.s > >>> > echo ' .byte 0x37,0x74,0x64,0x76,0x6c,0x7a,0x59,0x53' >> > >>> > $WORK/b001/_buildid.s > >>> > echo ' .byte 0x39,0x41,0x6a,0x30,0x58,0x34,0x53,0x78' >> > >>> > $WORK/b001/_buildid.s > >>> > echo ' .byte 0x39' >> $WORK/b001/_buildid.s > >>> > echo '' >> $WORK/b001/_buildid.s > >>> > /usr/gnu/bin/gccgo -xassembler-with-cpp -I $WORK/b001/ -c -o > >>> > $WORK/b001/_buildid.o -D GOOS_solaris -D GOARCH_sparc64 -D > >>> > GOPKGPATH=github_com_golang_glog $WORK/b001/_buildid.s > >>> > ar rcD $WORK/b001/_pkg_.a $WORK/b001/_go_.o $WORK/b001/_buildid.o > >>> > /usr/gnu/libexec/gcc/sparc-sun-solaris2.11/8.2.1/buildid -w > >>> > $WORK/b001/_pkg_.a # internal > >>> > cp $WORK/b001/_pkg_.a > >>> > > >>> > > /root/.cache/go-build/a4/a47820a6bcb6e72c26a3be36129e80b12a0f0193dd5959e2c7304a3b169d9af8-d > > > >>> > # internal > >>> > mkdir -p /opt/go_pkgs/pkg/gccgo_solaris_sparc64/github.com/golang/ > >>> > cp $WORK/b001/_pkg_.a > >>> > /opt/go_pkgs/pkg/gccgo_solaris_sparc64/github.com/golang/libglog.a > >>> > rm -r $WORK/b001/ > >>> > amandeep@s113ldom1:/opt/go_pkgs/src/github.com/golang/glog$ file > >>> > /opt/go_pkgs/pkg/gccgo_solaris_sparc64/github.com/golang/libglog.a > >>> > /opt/go_pkgs/pkg/gccgo_solaris_sparc64/github.com/golang/libglog.a: > >>> > current ar archive, 32-bit symbol table > >>> > > >>> > > >>> > I think the problem is with the text in red. It gets the sparc64 > flag, > >>> > but > >>> > the executable is still having 32-bit MSB relocatable SPARC > >>> > Let me know if you have any other suggestions. > >>> > >>> This sounds like a bug. I encourage you to file it at > >>> https://golang.org/issue/new . > >>> > >>> There is always the fallback of using a shell script mygcc > >>> > >>> #!/bin/sh > >>> exec gcc -m64 $* > >>> > >>> and setting CC=/path/to/mygcc > >>> > >>> Ian > > > > -- > > You received this message because you are subscribed to the Google > Groups > > "golang-nuts" group. > > To unsubscribe from this group and stop receiving emails from it, send > an > > email to golang-nuts...@googlegroups.com <javascript:>. > > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.