aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/link
diff options
context:
space:
mode:
authorGuoqi Chen <chenguoqi@loongson.cn>2023-10-10 20:16:36 +0800
committerDavid Chase <drchase@google.com>2023-11-21 17:49:21 +0000
commit346e06c46dd1791e924ce4fffc879747bdabedf5 (patch)
tree8088a40fc6284fc2e43cc75d2e3ee6376f603539 /src/cmd/link
parentf43581131e96f0a4a7745250218ace6c4ea2e557 (diff)
downloadgo-346e06c46dd1791e924ce4fffc879747bdabedf5.tar.xz
cmd/internal/obj,cmd/link: access global data via GOT in -dynlink mode on loong64
Updates #58784 Change-Id: Ic98d10a512fea0c3ca321ab52693d9f6775126a6 Reviewed-on: https://go-review.googlesource.com/c/go/+/480875 Reviewed-by: David Chase <drchase@google.com> Reviewed-by: Cherry Mui <cherryyz@google.com> Reviewed-by: Meidan Li <limeidan@loongson.cn> TryBot-Result: Gopher Robot <gobot@golang.org> Run-TryBot: WANG Xuerui <git@xen0n.name> Reviewed-by: WANG Xuerui <git@xen0n.name>
Diffstat (limited to 'src/cmd/link')
-rw-r--r--src/cmd/link/internal/loong64/asm.go19
1 files changed, 17 insertions, 2 deletions
diff --git a/src/cmd/link/internal/loong64/asm.go b/src/cmd/link/internal/loong64/asm.go
index 3c58c27d82..fc7bad9039 100644
--- a/src/cmd/link/internal/loong64/asm.go
+++ b/src/cmd/link/internal/loong64/asm.go
@@ -78,6 +78,16 @@ func elfreloc1(ctxt *ld.Link, out *ld.OutBuf, ldr *loader.Loader, s loader.Sym,
out.Write64(uint64(sectoff))
out.Write64(uint64(elf.R_LARCH_PCALA_HI20) | uint64(elfsym)<<32)
out.Write64(uint64(r.Xadd))
+
+ case objabi.R_LOONG64_GOT_HI:
+ out.Write64(uint64(sectoff))
+ out.Write64(uint64(elf.R_LARCH_GOT_PC_HI20) | uint64(elfsym)<<32)
+ out.Write64(uint64(0x0))
+
+ case objabi.R_LOONG64_GOT_LO:
+ out.Write64(uint64(sectoff))
+ out.Write64(uint64(elf.R_LARCH_GOT_PC_LO12) | uint64(elfsym)<<32)
+ out.Write64(uint64(0x0))
}
return true
@@ -111,7 +121,9 @@ func archreloc(target *ld.Target, ldr *loader.Loader, syms *ld.ArchSyms, r loade
objabi.R_CALLLOONG64,
objabi.R_JMPLOONG64,
objabi.R_LOONG64_TLS_IE_PCREL_HI,
- objabi.R_LOONG64_TLS_IE_LO:
+ objabi.R_LOONG64_TLS_IE_LO,
+ objabi.R_LOONG64_GOT_HI,
+ objabi.R_LOONG64_GOT_LO:
return val, 1, true
}
}
@@ -156,7 +168,10 @@ func archrelocvariant(*ld.Target, *loader.Loader, loader.Reloc, sym.RelocVariant
func extreloc(target *ld.Target, ldr *loader.Loader, r loader.Reloc, s loader.Sym) (loader.ExtReloc, bool) {
switch r.Type() {
case objabi.R_ADDRLOONG64,
- objabi.R_ADDRLOONG64U:
+ objabi.R_ADDRLOONG64U,
+ objabi.R_LOONG64_GOT_HI,
+ objabi.R_LOONG64_GOT_LO:
+
return ld.ExtrelocViaOuterSym(ldr, r, s), true
case objabi.R_ADDRLOONG64TLS,