]> Cypherpunks repositories - gostls13.git/commitdiff
[dev.link] cmd/link: refer to .got instead of .got.plt on S390X
authorCherry Zhang <cherryyz@google.com>
Thu, 12 Mar 2020 02:24:01 +0000 (22:24 -0400)
committerCherry Zhang <cherryyz@google.com>
Thu, 12 Mar 2020 15:50:31 +0000 (15:50 +0000)
S390X uses .got instead of .got.plt. It is changed accidentally
in CL 222977. This CL fixes it.

Also, on S390X, we need to set the relocation "variant" of
R_PCREL relocation. In the old code AddPCRelPlus has the magic.
Here we use the equivalent R_PCRELDBL, as the loader doesn't
have variant.

Fix S390X build.

Change-Id: I388e16f02a0568d70287aa9a132fd42b442e3905
Reviewed-on: https://go-review.googlesource.com/c/go/+/223143
Run-TryBot: Cherry Zhang <cherryyz@google.com>
Reviewed-by: Than McIntosh <thanm@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>

src/cmd/link/internal/ld/elf.go
src/cmd/link/internal/s390x/asm.go

index b0710892546279daa0810faf0ce13808cb08bb8a..078b0a55db283e0d31890e9157ac4c722266ef6d 100644 (file)
@@ -1645,6 +1645,10 @@ func (ctxt *Link) doelf() {
                dynamic.SetReachable(true)
                dynamic.SetType(sym.SELFSECT) // writable
 
+               if ctxt.IsS390X() {
+                       // S390X uses .got instead of .got.plt
+                       gotplt = got
+               }
                thearch.Elfsetupplt(ctxt, plt, gotplt, dynamic.Sym())
 
                /*
@@ -1678,8 +1682,6 @@ func (ctxt *Link) doelf() {
 
                if ctxt.IsPPC64() {
                        elfwritedynentsym2(ctxt, dynamic, DT_PLTGOT, plt.Sym())
-               } else if ctxt.IsS390X() {
-                       elfwritedynentsym2(ctxt, dynamic, DT_PLTGOT, got.Sym())
                } else {
                        elfwritedynentsym2(ctxt, dynamic, DT_PLTGOT, gotplt.Sym())
                }
index c5060fa02c9eb34a90eba8042604b2c1f5b3c58a..57437f2f4e1a81058c7034b438a075f2e39c16ad 100644 (file)
@@ -346,7 +346,7 @@ func elfsetupplt(ctxt *ld.Link, plt, got *loader.SymbolBuilder, dynamic loader.S
                // larl    %r1,_GLOBAL_OFFSET_TABLE_
                plt.AddUint8(0xc0)
                plt.AddUint8(0x10)
-               plt.AddPCRelPlus(ctxt.Arch, got.Sym(), 6)
+               plt.AddSymRef(ctxt.Arch, got.Sym(), 6, objabi.R_PCRELDBL, 4)
                // mvc     48(8,%r15),8(%r1)
                plt.AddUint8(0xd2)
                plt.AddUint8(0x07)