aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/internal/obj/objfile.go
diff options
context:
space:
mode:
authorIan Lance Taylor <iant@golang.org>2017-05-09 14:34:16 -0700
committerIan Lance Taylor <iant@golang.org>2017-05-09 23:36:51 +0000
commit5331e7e9df017374a05a66497fd367e165b8aaf5 (patch)
tree4db5424e6ccafca41f1e200ac8289e594f40564e /src/cmd/internal/obj/objfile.go
parent08dca4c649ba7f90f209376ba342bd46ef14ebe5 (diff)
downloadgo-5331e7e9df017374a05a66497fd367e165b8aaf5.tar.xz
cmd/internal/obj, cmd/link: fix st_other field on PPC64
In PPC64 ELF files, the st_other field indicates the number of prologue instructions between the global and local entry points. We add the instructions in the compiler and assembler if -shared is used. We were assuming that the instructions were present when building a c-archive or PIE or doing dynamic linking, on the assumption that those are the cases where the go tool would be building with -shared. That assumption fails when using some other tool, such as Bazel, that does not necessarily use -shared in exactly the same way. This CL records in the object file whether a symbol was compiled with -shared (this will be the same for all symbols in a given compilation) and uses that information when setting the st_other field. Fixes #20290. Change-Id: Ib2b77e16aef38824871102e3c244fcf04a86c6ea Reviewed-on: https://go-review.googlesource.com/43051 Run-TryBot: Ian Lance Taylor <iant@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Michael Hudson-Doyle <michael.hudson@canonical.com> Reviewed-by: Matthew Dempsky <mdempsky@google.com>
Diffstat (limited to 'src/cmd/internal/obj/objfile.go')
-rw-r--r--src/cmd/internal/obj/objfile.go3
1 files changed, 3 insertions, 0 deletions
diff --git a/src/cmd/internal/obj/objfile.go b/src/cmd/internal/obj/objfile.go
index c550d43f26..dc22eacdf4 100644
--- a/src/cmd/internal/obj/objfile.go
+++ b/src/cmd/internal/obj/objfile.go
@@ -338,6 +338,9 @@ func (w *objWriter) writeSym(s *LSym) {
if s.ReflectMethod() {
flags |= 1 << 2
}
+ if ctxt.Flag_shared {
+ flags |= 1 << 3
+ }
w.writeInt(flags)
w.writeInt(int64(len(s.Func.Autom)))
for _, a := range s.Func.Autom {