aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/link/internal/ld
diff options
context:
space:
mode:
authorqmuntal <quimmuntal@gmail.com>2025-09-16 18:00:10 +0200
committerQuim Muntal <quimmuntal@gmail.com>2025-10-27 22:57:10 -0700
commit9e25c2f6dee50f9ce0fcfe1807befad9e54dfe4b (patch)
treeede452f8948510084cdfa307759580399ba6df00 /src/cmd/link/internal/ld
parentff2ebf69c4f099adf90d6c6284f2b3fd2ff789f0 (diff)
downloadgo-9e25c2f6dee50f9ce0fcfe1807befad9e54dfe4b.tar.xz
cmd/link: internal linking support for windows/arm64
The internal linker was missing some pieces to support windows/arm64. Closes #75485 Cq-Include-Trybots: luci.golang.try:gotip-windows-arm64 Change-Id: I5c18a47e63e09b8ae22c9b24832249b54f544b7e Reviewed-on: https://go-review.googlesource.com/c/go/+/704295 Reviewed-by: Cherry Mui <cherryyz@google.com> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: Michael Knyszek <mknyszek@google.com>
Diffstat (limited to 'src/cmd/link/internal/ld')
-rw-r--r--src/cmd/link/internal/ld/data.go17
1 files changed, 17 insertions, 0 deletions
diff --git a/src/cmd/link/internal/ld/data.go b/src/cmd/link/internal/ld/data.go
index dfb1d7bafb..b70d050c99 100644
--- a/src/cmd/link/internal/ld/data.go
+++ b/src/cmd/link/internal/ld/data.go
@@ -913,6 +913,23 @@ func windynrelocsym(ctxt *Link, rel *loader.SymbolBuilder, s loader.Sym) error {
rel.AddPCRelPlus(ctxt.Arch, targ, 0)
rel.AddUint8(0x90)
rel.AddUint8(0x90)
+ case sys.ARM64:
+ // adrp x16, addr
+ rel.AddUint32(ctxt.Arch, 0x90000010)
+ r, _ := rel.AddRel(objabi.R_ARM64_PCREL)
+ r.SetOff(int32(rel.Size() - 4))
+ r.SetSiz(4)
+ r.SetSym(targ)
+
+ // ldr x17, [x16, <offset>]
+ rel.AddUint32(ctxt.Arch, 0xf9400211)
+ r, _ = rel.AddRel(objabi.R_ARM64_PCREL)
+ r.SetOff(int32(rel.Size() - 4))
+ r.SetSiz(4)
+ r.SetSym(targ)
+
+ // br x17
+ rel.AddUint32(ctxt.Arch, 0xd61f0220)
}
} else if tplt >= 0 {
if su == nil {