Enable go plugin support & upstream sv57 enablement for riscv64
This commit is contained in:
parent
c6bde1dba7
commit
044dd36e7d
40
0001-Enable-go-plugin-support-for-riscv64.patch
Normal file
40
0001-Enable-go-plugin-support-for-riscv64.patch
Normal file
@ -0,0 +1,40 @@
|
||||
From 019ec52ee5e7dec0c3a7937025948a742822a052 Mon Sep 17 00:00:00 2001
|
||||
From: misaka00251 <liuxin@iscas.ac.cn>
|
||||
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)
|
||||
|
||||
61
0002-runtime-support-riscv64-SV57-mode.patch
Normal file
61
0002-runtime-support-riscv64-SV57-mode.patch
Normal file
@ -0,0 +1,61 @@
|
||||
From 1e3c19f3fee12e5e2b7802a54908a4d4d03960da Mon Sep 17 00:00:00 2001
|
||||
From: Dmitry Vyukov <dvyukov@google.com>
|
||||
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 <joel@sing.id.au>
|
||||
Reviewed-by: Meng Zhuo <mzh@golangcn.org>
|
||||
Reviewed-by: Michael Knyszek <mknyszek@google.com>
|
||||
Reviewed-by: Cherry Mui <cherryyz@google.com>
|
||||
---
|
||||
|
||||
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-1))
|
||||
}
|
||||
+ if GOARCH == "riscv64" {
|
||||
+ return uint64(uintptr(unsafe.Pointer(node)))<<(64-riscv64AddrBits) | uint64(cnt&(1<<riscv64CntBits-1))
|
||||
+ }
|
||||
return uint64(uintptr(unsafe.Pointer(node)))<<(64-addrBits) | uint64(cnt&(1<<cntBits-1))
|
||||
}
|
||||
|
||||
@@ -54,5 +63,8 @@
|
||||
if GOARCH == "ppc64" && GOOS == "aix" {
|
||||
return (*lfnode)(unsafe.Pointer(uintptr((val >> aixCntBits << 3) | 0xa<<56)))
|
||||
}
|
||||
+ if GOARCH == "riscv64" {
|
||||
+ return (*lfnode)(unsafe.Pointer(uintptr(val >> riscv64CntBits << 3)))
|
||||
+ }
|
||||
return (*lfnode)(unsafe.Pointer(uintptr(val >> cntBits << 3)))
|
||||
}
|
||||
@ -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 <liuxin@iscas.ac.cn> - 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 <hanchao47@huawei.com> - 1.19.4-1
|
||||
- upgrade to 1.19.4
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user