diff --git a/0001-Enable-go-plugin-support-for-riscv64.patch b/0001-Enable-go-plugin-support-for-riscv64.patch new file mode 100644 index 0000000000000000000000000000000000000000..38912e9ae99feb1240ffca270ebf2b456aab0ef3 --- /dev/null +++ b/0001-Enable-go-plugin-support-for-riscv64.patch @@ -0,0 +1,40 @@ +From 019ec52ee5e7dec0c3a7937025948a742822a052 Mon Sep 17 00:00:00 2001 +From: misaka00251 +Date: Mon, 27 Mar 2023 10:27:38 +0800 +Subject: [PATCH] Enable go plugin support for riscv64 (based on work by + yangjinghua) + +--- + src/cmd/internal/sys/supported.go | 2 +- + src/cmd/link/internal/ld/config.go | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/src/cmd/internal/sys/supported.go b/src/cmd/internal/sys/supported.go +index 1d74f6b..4fa8ed6 100644 +--- a/src/cmd/internal/sys/supported.go ++++ b/src/cmd/internal/sys/supported.go +@@ -142,7 +142,7 @@ func BuildModeSupported(compiler, buildmode, goos, goarch string) bool { + + case "plugin": + switch platform { +- case "linux/amd64", "linux/arm", "linux/arm64", "linux/386", "linux/s390x", "linux/ppc64le", ++ case "linux/amd64", "linux/arm", "linux/arm64", "linux/riscv64", "linux/386", "linux/s390x", "linux/ppc64le", + "android/amd64", "android/arm", "android/arm64", "android/386", + "darwin/amd64", "darwin/arm64", + "freebsd/amd64": +diff --git a/src/cmd/link/internal/ld/config.go b/src/cmd/link/internal/ld/config.go +index 4dd43a1..af5d8c5 100644 +--- a/src/cmd/link/internal/ld/config.go ++++ b/src/cmd/link/internal/ld/config.go +@@ -95,7 +95,7 @@ func (mode *BuildMode) Set(s string) error { + switch buildcfg.GOOS { + case "linux": + switch buildcfg.GOARCH { +- case "386", "amd64", "arm", "arm64", "s390x", "ppc64le": ++ case "386", "amd64", "arm", "arm64", "riscv64", "s390x", "ppc64le": + default: + return badmode() + } +-- +2.37.1 (Apple Git-137.1) + diff --git a/0002-runtime-support-riscv64-SV57-mode.patch b/0002-runtime-support-riscv64-SV57-mode.patch new file mode 100644 index 0000000000000000000000000000000000000000..445761efe7592edb4a006792050d07b233bbfe47 --- /dev/null +++ b/0002-runtime-support-riscv64-SV57-mode.patch @@ -0,0 +1,61 @@ +From 1e3c19f3fee12e5e2b7802a54908a4d4d03960da Mon Sep 17 00:00:00 2001 +From: Dmitry Vyukov +Date: Fri, 27 May 2022 18:55:35 +0200 +Subject: [PATCH] runtime: support riscv64 SV57 mode + +riscv64 has SV57 mode when user-space VA is 56 bits. +Linux kernel recently got support for this mode and Go binaries started crashing as: + +runtime: lfstack.push invalid packing: node=0xffffff5908a940 cnt=0x1 +packed=0xffff5908a9400001 -> node=0xffff5908a940 + +Adjust lfstack code to use only 8 top bits of pointers on riscv64. + +For context see: +https://groups.google.com/g/syzkaller-bugs/c/lU0GQTZoNQQ/m/O_c3vmE3AAAJ + +Update #54104 + +Change-Id: Ib5d3d6a79c0c6eddf11618d73fcc8bc1832a9c25 +Reviewed-on: https://go-review.googlesource.com/c/go/+/409055 +Reviewed-by: Joel Sing +Reviewed-by: Meng Zhuo +Reviewed-by: Michael Knyszek +Reviewed-by: Cherry Mui +--- + +diff --git a/src/runtime/lfstack_64bit.go b/src/runtime/lfstack_64bit.go +index 154130c..88cbd3b 100644 +--- a/src/runtime/lfstack_64bit.go ++++ b/src/runtime/lfstack_64bit.go +@@ -36,12 +36,21 @@ + // We use one bit to distinguish between the two ranges. + aixAddrBits = 57 + aixCntBits = 64 - aixAddrBits + 3 ++ ++ // riscv64 SV57 mode gives 56 bits of userspace VA. ++ // lfstack code supports it, but broader support for SV57 mode is incomplete, ++ // and there may be other issues (see #54104). ++ riscv64AddrBits = 56 ++ riscv64CntBits = 64 - riscv64AddrBits + 3 + ) + + func lfstackPack(node *lfnode, cnt uintptr) uint64 { + if GOARCH == "ppc64" && GOOS == "aix" { + return uint64(uintptr(unsafe.Pointer(node)))<<(64-aixAddrBits) | uint64(cnt&(1<> aixCntBits << 3) | 0xa<<56))) + } ++ if GOARCH == "riscv64" { ++ return (*lfnode)(unsafe.Pointer(uintptr(val >> riscv64CntBits << 3))) ++ } + return (*lfnode)(unsafe.Pointer(uintptr(val >> cntBits << 3))) + } diff --git a/golang.spec b/golang.spec index 5e8e36eb32c4e309caaabb9fd9d8c4226e8ab274..3b65f2f0a613de8afa05d10a0d3a9263855ac7ae 100644 --- a/golang.spec +++ b/golang.spec @@ -62,11 +62,13 @@ Name: golang Version: 1.19.4 -Release: 1 +Release: 2 Summary: The Go Programming Language License: BSD and Public Domain URL: https://golang.org/ Source0: https://dl.google.com/go/go1.19.4.src.tar.gz +Patch0: 0001-Enable-go-plugin-support-for-riscv64.patch +Patch1: 0002-runtime-support-riscv64-SV57-mode.patch %if !%{golang_bootstrap} BuildRequires: gcc-go >= 5 @@ -387,6 +389,9 @@ fi %files devel -f go-tests.list -f go-misc.list -f go-src.list %changelog +* Mon Apr 03 2023 misaka00251 - 1.19.4-2 +- Enable go plugin support for riscv64 (based on work by yangjinghua) +- Backport upstream sv57 enablement for riscv64 * Tue Jan 10 2023 hanchao - 1.19.4-1 - upgrade to 1.19.4