From: Keith Randall Date: Mon, 27 Feb 2023 16:53:34 +0000 (-0800) Subject: cmd/asm: preserve 3rd arg when GOT-rewriting assembly instructions X-Git-Tag: go1.21rc1~1451 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=1e0c32cccbe73be45414967612800be76d933870;p=gostls13.git 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 --- 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