]> Cypherpunks repositories - gostls13.git/commit
cmd/go,cmd/link: support buildmode c-shared on ppc64le
authorLynn Boger <laboger@linux.vnet.ibm.com>
Tue, 8 Aug 2017 17:45:41 +0000 (13:45 -0400)
committerLynn Boger <laboger@linux.vnet.ibm.com>
Wed, 9 Aug 2017 17:11:38 +0000 (17:11 +0000)
commit3e7abf82e3e0614f7d8163053d944dc59d8b9247
treed4e0f1af4a2d46b863c2d734e13e0fbc72c95a54
parent53f2d534504f2804ae7ccea45b5a8d6f1e693147
cmd/go,cmd/link: support buildmode c-shared on ppc64le

This change enables buildmode c-shared on ppc64le.

A bug was fixed in runtime/rt0_linux_ppc64le.s that was necessary to
make this work.  In _rt0_ppc64le_linux_lib, there is code to store
the value of r2 onto the caller's stack.  However, if this file
is compiled using a build mode that maintains the TOC address in
r2, then instructions will be inserted at the beginning of this
function to generate the r2 value for the callee, not the caller.
That means the r2 value for the callee is stored onto the caller's
stack.  If caller and callee don't have the same r2 values, then
the caller will restore the wrong r2 value after it returns.  This
situation can happen when using dlopen since the caller of this
function will be in ld64.so and will definitely have a different
TOC.

Updates #20756

Change-Id: I6e165e0d0716e73721bbbcc520e8302e4856e3ba
Reviewed-on: https://go-review.googlesource.com/53890
Reviewed-by: Ian Lance Taylor <iant@golang.org>
src/cmd/dist/test.go
src/cmd/go/internal/work/build.go
src/cmd/link/internal/ld/config.go
src/runtime/rt0_linux_ppc64le.s