From 1e0c32cccbe73be45414967612800be76d933870 Mon Sep 17 00:00:00 2001 From: Keith Randall Date: Mon, 27 Feb 2023 08:53:34 -0800 Subject: [PATCH] cmd/asm: preserve 3rd arg when GOT-rewriting assembly instructions Fixes #58735 Change-Id: I7cc1c34ed8454553328d44b2ea72e4c0255b6ec1 Reviewed-on: https://go-review.googlesource.com/c/go/+/471675 Run-TryBot: Keith Randall Reviewed-by: Keith Randall Reviewed-by: Cherry Mui Auto-Submit: Keith Randall TryBot-Result: Gopher Robot --- src/cmd/asm/internal/asm/testdata/amd64dynlinkerror.s | 6 ++++++ src/cmd/internal/obj/x86/obj6.go | 3 +++ 2 files changed, 9 insertions(+) diff --git a/src/cmd/asm/internal/asm/testdata/amd64dynlinkerror.s b/src/cmd/asm/internal/asm/testdata/amd64dynlinkerror.s index 1eee1a17db..e110ee8118 100644 --- a/src/cmd/asm/internal/asm/testdata/amd64dynlinkerror.s +++ b/src/cmd/asm/internal/asm/testdata/amd64dynlinkerror.s @@ -66,3 +66,9 @@ two: one: MOVL $0, R15 JMP two + +// Ensure 3-arg instructions get GOT-rewritten without errors. +// See issue 58735. +TEXT ·a13(SB), 0, $0-0 + MULXQ runtime·writeBarrier(SB), AX, CX + RET diff --git a/src/cmd/internal/obj/x86/obj6.go b/src/cmd/internal/obj/x86/obj6.go index 5c7fb5c763..21126adfda 100644 --- a/src/cmd/internal/obj/x86/obj6.go +++ b/src/cmd/internal/obj/x86/obj6.go @@ -497,6 +497,9 @@ func rewriteToUseGot(ctxt *obj.Link, p *obj.Prog, newprog obj.ProgAlloc) { p2.As = p.As p2.From = p.From p2.To = p.To + if from3 := p.GetFrom3(); from3 != nil { + p2.SetFrom3(*from3) + } if p.From.Name == obj.NAME_EXTERN { p2.From.Reg = reg p2.From.Name = obj.NAME_NONE -- 2.50.0