From 61bf26a9eef5e0c1a5c319f60dfe1e3c51766474 Mon Sep 17 00:00:00 2001 From: qmuntal Date: Mon, 15 Sep 2025 14:23:44 +0200 Subject: [PATCH] cmd/link: fix Macho-O X86_64_RELOC_SUBTRACTOR in internal linking X86_64_RELOC_SUBTRACTOR is handled as a generic R_PCREL relocations, which gets the relocation size subtracted from the relocated value. This is not supposed to happen for this particular relocation, so compensate by adding the size to the addend. Cq-Include-Trybots: luci.golang.try:gotip-darwin-amd64-race Change-Id: I6e6889d63bb03b8076e3e409722601dfebec57e5 Reviewed-on: https://go-review.googlesource.com/c/go/+/703776 LUCI-TryBot-Result: Go LUCI Reviewed-by: Cherry Mui Reviewed-by: Junyang Shao --- src/cmd/link/internal/amd64/asm.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cmd/link/internal/amd64/asm.go b/src/cmd/link/internal/amd64/asm.go index b8127a2538..5424de800c 100644 --- a/src/cmd/link/internal/amd64/asm.go +++ b/src/cmd/link/internal/amd64/asm.go @@ -208,7 +208,7 @@ func adddynrel(target *ld.Target, ldr *loader.Loader, syms *ld.ArchSyms, s loade } // The second relocation has the target symbol we want su.SetRelocType(rIdx+1, objabi.R_PCREL) - su.SetRelocAdd(rIdx+1, r.Add()+int64(r.Off())-off) + su.SetRelocAdd(rIdx+1, r.Add()+int64(r.Off())+int64(r.Siz())-off) // Remove the other relocation su.SetRelocSiz(rIdx, 0) return true -- 2.52.0