diff options
| author | Guoqi Chen <chenguoqi@loongson.cn> | 2023-10-10 20:16:36 +0800 |
|---|---|---|
| committer | David Chase <drchase@google.com> | 2023-11-21 17:49:21 +0000 |
| commit | 346e06c46dd1791e924ce4fffc879747bdabedf5 (patch) | |
| tree | 8088a40fc6284fc2e43cc75d2e3ee6376f603539 /src/cmd/link | |
| parent | f43581131e96f0a4a7745250218ace6c4ea2e557 (diff) | |
| download | go-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.go | 19 |
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, |
