diff --git a/go.mod b/go.mod index d19ce4cf9d..51e75a1e15 100644 --- a/go.mod +++ b/go.mod @@ -11,7 +11,7 @@ require ( github.com/mattn/go-tty v0.0.8 github.com/qiniu/x v1.18.0 github.com/xgo-dev/llvm v0.9.5 - github.com/xgo-dev/plan9asm v0.3.0 + github.com/xgo-dev/plan9asm v0.3.2 go.bug.st/serial v1.6.4 go.yaml.in/yaml/v3 v3.0.4 golang.org/x/mod v0.29.0 diff --git a/go.sum b/go.sum index 1636090da5..21b81497ff 100644 --- a/go.sum +++ b/go.sum @@ -26,6 +26,8 @@ github.com/xgo-dev/llvm v0.9.5 h1:RijI/6vGu7DGw5ldlaqvpK2uFcg9OXY9OXB/RmywtEk= github.com/xgo-dev/llvm v0.9.5/go.mod h1:42vav2/cI5BAIcL543DZSMO9do8/aCK2z7JERH+AE+M= github.com/xgo-dev/plan9asm v0.3.0 h1:8JcpsNa7/B6YUNJPbIezOhpoURvH8VNDbBh8eQwHnnc= github.com/xgo-dev/plan9asm v0.3.0/go.mod h1:0yM4CCIp2PyT8h+Ro3Ukro3lHL8ji9mzHEv5yfhOckc= +github.com/xgo-dev/plan9asm v0.3.2 h1:RLRCADKuSoBeqE3NP0inXN0p9nGSC/hODZguqlG1VAY= +github.com/xgo-dev/plan9asm v0.3.2/go.mod h1:0yM4CCIp2PyT8h+Ro3Ukro3lHL8ji9mzHEv5yfhOckc= go.bug.st/serial v1.6.4 h1:7FmqNPgVp3pu2Jz5PoPtbZ9jJO5gnEnZIvnI1lzve8A= go.bug.st/serial v1.6.4/go.mod h1:nofMJxTeNVny/m6+KaafC6vJGj3miwQZ6vW4BZUGJPI= go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc= diff --git a/internal/plan9asm/translate.go b/internal/plan9asm/translate.go index 6adf37955b..f0ed1a06e8 100644 --- a/internal/plan9asm/translate.go +++ b/internal/plan9asm/translate.go @@ -192,7 +192,13 @@ func StripABISuffix(sym string) string { } func extraAsmSigsAndDeclMap(pkgPath string, goarch string) map[string]extplan9asm.FuncSig { - manual := map[string]extplan9asm.FuncSig{} + manual := map[string]extplan9asm.FuncSig{ + "runtime.memmove": { + Name: "memmove", + Args: []extplan9asm.LLVMType{extplan9asm.Ptr, extplan9asm.Ptr, extplan9asm.I64}, + Ret: extplan9asm.Ptr, + }, + } if pkgPath == "internal/bytealg" { switch goarch { case "arm": diff --git a/internal/plan9asm/translate_helpers_test.go b/internal/plan9asm/translate_helpers_test.go index 465fc4e14a..1da011d5c2 100644 --- a/internal/plan9asm/translate_helpers_test.go +++ b/internal/plan9asm/translate_helpers_test.go @@ -189,12 +189,16 @@ func TestTranslateHelperFunctions(t *testing.T) { } func TestExtraAsmSigsAndDeclMap(t *testing.T) { - if got := extraAsmSigsAndDeclMap("other/pkg", "amd64"); len(got) != 0 { - t.Fatalf("unexpected manual sigs for other/pkg: %#v", got) + generic := extraAsmSigsAndDeclMap("other/pkg", "amd64") + if got, want := len(generic), 1; got != want { + t.Fatalf("generic manual sig count = %d, want %d: %#v", got, want, generic) } - - if got := extraAsmSigsAndDeclMap("internal/runtime/gc/scan", "arm64"); len(got) != 0 { - t.Fatalf("unexpected manual sigs for scan/arm64: %#v", got) + memmove, ok := generic["runtime.memmove"] + if !ok { + t.Fatal("missing generic memmove signature") + } + if memmove.Name != "memmove" { + t.Fatalf("runtime.memmove declaration = %q, want memmove", memmove.Name) } arm := extraAsmSigsAndDeclMap("internal/bytealg", "arm") @@ -236,7 +240,7 @@ func TestExtraAsmSigsAndDeclMap(t *testing.T) { } scan := extraAsmSigsAndDeclMap("internal/runtime/gc/scan", "amd64") - if got, want := len(scan), 26; got != want { + if got, want := len(scan), 27; got != want { t.Fatalf("scan manual sig count = %d, want %d", got, want) } for _, name := range []string{