From 2a5bf32638e1ce1fd85c722f39dff4cf842c0de1 Mon Sep 17 00:00:00 2001 From: Cherry Zhang Date: Wed, 11 Mar 2020 22:24:01 -0400 Subject: [PATCH] [dev.link] cmd/link: refer to .got instead of .got.plt on S390X 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 Reviewed-by: Than McIntosh TryBot-Result: Gobot Gobot --- src/cmd/link/internal/ld/elf.go | 6 ++++-- src/cmd/link/internal/s390x/asm.go | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/cmd/link/internal/ld/elf.go b/src/cmd/link/internal/ld/elf.go index b071089254..078b0a55db 100644 --- a/src/cmd/link/internal/ld/elf.go +++ b/src/cmd/link/internal/ld/elf.go @@ -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()) } diff --git a/src/cmd/link/internal/s390x/asm.go b/src/cmd/link/internal/s390x/asm.go index c5060fa02c..57437f2f4e 100644 --- a/src/cmd/link/internal/s390x/asm.go +++ b/src/cmd/link/internal/s390x/asm.go @@ -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)