Hi, On Friday, April 28, 2017 at 5:11:19 PM UTC+3, Ian Lance Taylor wrote: > > On Thu, Apr 27, 2017 at 10:57 PM, <timo....@gmail.com <javascript:>> > wrote: > > For Go 1.7 we just used the following patch: > > > https://git.alpinelinux.org/cgit/aports/plain/community/go/default-buildmode-pie.patch > > > and it seems to work. > > > > We are in progress to upgrade to Go 1.8.1, but the same patch no longer > > works. During the bootstrap build it fails with: > >> > >> ##### Building go_bootstrap for host, linux/amd64. > >> ... > >> go/parser > >> go/doc > >> go/build > >> cmd/go > >> 2017/04/28 05:52:33 cannot handle R_TLS_IE (sym > >> sync/atomic.(*Value).Store) when linking internally > >> go tool dist: FAILED: > >> /home/tteras/aports/community/go/src/go/pkg/tool/linux_amd64/link -o > >> > /home/tteras/aports/community/go/src/go/pkg/tool/linux_amd64/go_bootstrap > >> /tmp/go-tool-dist-538310359/cmd/go/_go_.a: exit status 1 > > > > > > This seems to be related to using the internal linker. Apparently it is > > tried regardless of PIE mode. Any suggestions how to fix this (other > than > > the obvious use regular exe build mode)? > > It sounds like you are running into some version of > https://golang.org/issue/18968. But to be honest I don't understand > what is forcing internal link mode. The linker defaults to using > external link mode with PIE. Using -linkmode=internal will override > that, but I don't see where any explicit -linkmode=internal would come > from. > > And come to think of it the error seems to be happening at the wrong > time. The go_bootstrap build is built with the existing toolchain, > not the new one. I'm not sure what is happening. >
The error message indicates that the internal linker of the new go being built is used. But as a reference, the bootstrap-go in question is Alpine build of Go 1.7.4 which is patched to default to buildmode=pie. > > I also tried the following patch, but it did not help: > No, I wouldn't expect that to help, because the code that calls > mustLinkExternal already has an override to force external linking > mode for PIE. Something is passing -linkmode=internal but I'm not > sure what. > > I assume you are not setting GO_EXTLINK_ENABLED in the environment. > Correct. GO_EXTLINK_ENABLED is unset. Setting it to '1' (for the bootstrap-go) did not help. Setting it to '1' for Go 1.8.x results in different errors: First the following: > ##### Building go_bootstrap for host, linux/amd64. > ... > cmd/go > runtime (darwin/386) > (it's being built on linux host... but is it misdetecting it as Darwin?) Later it fails at: > ##### Building packages and commands for darwin/386. > ... > cmd/vet > # cmd/pack > warning: unable to find runtime/cgo.a > /home/tteras/aports/community/go/src/go/pkg/tool/linux_amd64/link: running > gcc failed: exit status 1 > /usr/lib/gcc/x86_64-alpine-linux-musl/6.3.0/../../../../x86_64-alpine-linux-musl/bin/ld: > > unrecognized option '-pagezero_size' > /usr/lib/gcc/x86_64-alpine-linux-musl/6.3.0/../../../../x86_64-alpine-linux-musl/bin/ld: > > use the --help option for usage information > collect2: error: ld returned 1 exit status > Seems to be passing darwin options to host's GNU ld. > > I am wondering how the default buildmode could be changed to PIE > natively. > > Perhaps a build time configuration (environment) option for the default > > build mode could be added? > > Yes, perhaps. > That would be lovely. Should I file a github issue about this? Thanks, Timo -- 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.