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.

Reply via email to